/***********************************************************************
 * This file was generated by /build/libuhd/src/uhd/host/lib/ic_reg_maps/gen_zbx_cpld_regs.py on Thu Aug 13 13:47:33 2026
 **********************************************************************/

#ifndef INCLUDED_ZBX_CPLD_REGS_HPP
#define INCLUDED_ZBX_CPLD_REGS_HPP

#include <uhd/config.hpp>
#include <uhd/exception.hpp>
#include <set>
#include <vector>
#include <stdint.h>

class zbx_cpld_regs_t{
public:
    uint16_t BOARD_ID;
    uint32_t REVISION;
    uint32_t OLDEST_COMPAT_REVISION;
    uint32_t SCRATCH;
    uint32_t GIT_HASH;
    enum ENABLE_TX_POS_7V0_t{
        ENABLE_TX_POS_7V0_DISABLE = 0,
        ENABLE_TX_POS_7V0_ENABLE = 1
    };
    ENABLE_TX_POS_7V0_t ENABLE_TX_POS_7V0;
    enum ENABLE_RX_POS_7V0_t{
        ENABLE_RX_POS_7V0_DISABLE = 0,
        ENABLE_RX_POS_7V0_ENABLE = 1
    };
    ENABLE_RX_POS_7V0_t ENABLE_RX_POS_7V0;
    enum ENABLE_POS_3V3_t{
        ENABLE_POS_3V3_DISABLE = 0,
        ENABLE_POS_3V3_ENABLE = 1
    };
    ENABLE_POS_3V3_t ENABLE_POS_3V3;
    uint8_t P7V_B_STATUS;
    uint8_t P7V_A_STATUS;
    enum PLL_REF_CLOCK_ENABLE_t{
        PLL_REF_CLOCK_ENABLE_DISABLE = 0,
        PLL_REF_CLOCK_ENABLE_ENABLE = 1
    };
    PLL_REF_CLOCK_ENABLE_t PLL_REF_CLOCK_ENABLE;
    uint8_t CURRENT_RF0_CONFIG;
    uint8_t CURRENT_RF1_CONFIG;
    uint8_t CURRENT_RF0_DSA_CONFIG;
    uint8_t CURRENT_RF1_DSA_CONFIG;
    enum RF0_OPTION_t{
        RF0_OPTION_SW_DEFINED = 0,
        RF0_OPTION_CLASSIC_ATR = 1,
        RF0_OPTION_FPGA_STATE = 2
    };
    RF0_OPTION_t RF0_OPTION;
    enum RF1_OPTION_t{
        RF1_OPTION_SW_DEFINED = 0,
        RF1_OPTION_CLASSIC_ATR = 1,
        RF1_OPTION_FPGA_STATE = 2
    };
    RF1_OPTION_t RF1_OPTION;
    enum RF0_DSA_OPTION_t{
        RF0_DSA_OPTION_SW_DEFINED = 0,
        RF0_DSA_OPTION_CLASSIC_ATR = 1,
        RF0_DSA_OPTION_FPGA_STATE = 2
    };
    RF0_DSA_OPTION_t RF0_DSA_OPTION;
    enum RF1_DSA_OPTION_t{
        RF1_DSA_OPTION_SW_DEFINED = 0,
        RF1_DSA_OPTION_CLASSIC_ATR = 1,
        RF1_DSA_OPTION_FPGA_STATE = 2
    };
    RF1_DSA_OPTION_t RF1_DSA_OPTION;
    uint8_t SW_RF0_CONFIG;
    uint8_t SW_RF1_CONFIG;
    uint8_t SW_RF0_DSA_CONFIG;
    uint8_t SW_RF1_DSA_CONFIG;
    uint16_t DATA;
    uint8_t ADDRESS;
    enum READ_FLAG_t{
        READ_FLAG_WRITE = 0,
        READ_FLAG_READ = 1
    };
    READ_FLAG_t READ_FLAG;
    enum LO_SELECT_t{
        LO_SELECT_TX0_LO1 = 0,
        LO_SELECT_TX0_LO2 = 1,
        LO_SELECT_TX1_LO1 = 2,
        LO_SELECT_TX1_LO2 = 3,
        LO_SELECT_RX0_LO1 = 4,
        LO_SELECT_RX0_LO2 = 5,
        LO_SELECT_RX1_LO1 = 6,
        LO_SELECT_RX1_LO2 = 7
    };
    LO_SELECT_t LO_SELECT;
    enum START_TRANSACTION_t{
        START_TRANSACTION_DISABLE = 0,
        START_TRANSACTION_ENABLE = 1
    };
    START_TRANSACTION_t START_TRANSACTION;
    uint8_t SPI_READY;
    uint8_t DATA_VALID;
    uint8_t PULSE_TX0_LO1_SYNC;
    uint8_t PULSE_TX0_LO2_SYNC;
    uint8_t PULSE_TX1_LO1_SYNC;
    uint8_t PULSE_TX1_LO2_SYNC;
    uint8_t PULSE_RX0_LO1_SYNC;
    uint8_t PULSE_RX0_LO2_SYNC;
    uint8_t PULSE_RX1_LO1_SYNC;
    uint8_t PULSE_RX1_LO2_SYNC;
    enum BYPASS_SYNC_REGISTER_t{
        BYPASS_SYNC_REGISTER_DISABLE = 0,
        BYPASS_SYNC_REGISTER_ENABLE = 1
    };
    BYPASS_SYNC_REGISTER_t BYPASS_SYNC_REGISTER;
    enum RX0_RX_LED_t{
        RX0_RX_LED_DISABLE = 0,
        RX0_RX_LED_ENABLE = 1
    };
    std::vector<RX0_RX_LED_t> RX0_RX_LED;
    enum RX0_TRX_LED_t{
        RX0_TRX_LED_DISABLE = 0,
        RX0_TRX_LED_ENABLE = 1
    };
    std::vector<RX0_TRX_LED_t> RX0_TRX_LED;
    enum TX0_TRX_LED_t{
        TX0_TRX_LED_DISABLE = 0,
        TX0_TRX_LED_ENABLE = 1
    };
    std::vector<TX0_TRX_LED_t> TX0_TRX_LED;
    enum RX1_RX_LED_t{
        RX1_RX_LED_DISABLE = 0,
        RX1_RX_LED_ENABLE = 1
    };
    std::vector<RX1_RX_LED_t> RX1_RX_LED;
    enum RX1_TRX_LED_t{
        RX1_TRX_LED_DISABLE = 0,
        RX1_TRX_LED_ENABLE = 1
    };
    std::vector<RX1_TRX_LED_t> RX1_TRX_LED;
    enum TX1_TRX_LED_t{
        TX1_TRX_LED_DISABLE = 0,
        TX1_TRX_LED_ENABLE = 1
    };
    std::vector<TX1_TRX_LED_t> TX1_TRX_LED;
    enum TX0_IF2_1_2_t{
        TX0_IF2_1_2_FILTER_2 = 0,
        TX0_IF2_1_2_FILTER_1 = 1
    };
    std::vector<TX0_IF2_1_2_t> TX0_IF2_1_2;
    enum TX0_IF1_3_t{
        TX0_IF1_3_FILTER_0_3 = 0,
        TX0_IF1_3_FILTER_4 = 1,
        TX0_IF1_3_FILTER_6 = 2,
        TX0_IF1_3_FILTER_5 = 3
    };
    std::vector<TX0_IF1_3_t> TX0_IF1_3;
    enum TX0_IF1_4_t{
        TX0_IF1_4_TERMINATION = 0,
        TX0_IF1_4_FILTER_1 = 1,
        TX0_IF1_4_FILTER_2 = 2,
        TX0_IF1_4_FILTER_3 = 3
    };
    std::vector<TX0_IF1_4_t> TX0_IF1_4;
    enum TX0_IF1_5_t{
        TX0_IF1_5_FILTER_3 = 0,
        TX0_IF1_5_FILTER_2 = 1,
        TX0_IF1_5_FILTER_1 = 2,
        TX0_IF1_5_TERMINATION = 3
    };
    std::vector<TX0_IF1_5_t> TX0_IF1_5;
    enum TX0_IF1_6_t{
        TX0_IF1_6_FILTER_5 = 0,
        TX0_IF1_6_FILTER_6 = 1,
        TX0_IF1_6_FILTER_4 = 2,
        TX0_IF1_6_FILTER_0_3 = 3
    };
    std::vector<TX0_IF1_6_t> TX0_IF1_6;
    enum TX0_7_t{
        TX0_7_TERMINATION = 0,
        TX0_7_NO_CONNECT = 1,
        TX0_7_HIGHBAND = 2,
        TX0_7_LOWBAND = 3
    };
    std::vector<TX0_7_t> TX0_7;
    enum TX0_RF_8_t{
        TX0_RF_8_INVALID_0 = 0,
        TX0_RF_8_RF_3 = 1,
        TX0_RF_8_RF_1 = 2,
        TX0_RF_8_INVALID_1 = 3,
        TX0_RF_8_RF_2 = 4
    };
    std::vector<TX0_RF_8_t> TX0_RF_8;
    enum TX0_RF_9_t{
        TX0_RF_9_RF_3 = 0,
        TX0_RF_9_RF_1 = 1,
        TX0_RF_9_RF_2 = 2,
        TX0_RF_9_HIGHBAND = 3
    };
    std::vector<TX0_RF_9_t> TX0_RF_9;
    enum TX0_ANT_10_t{
        TX0_ANT_10_BYPASS_AMP = 0,
        TX0_ANT_10_CAL_LOOPBACK = 1,
        TX0_ANT_10_LOWBAND_AMP = 2,
        TX0_ANT_10_HIGHBAND_AMP = 3
    };
    std::vector<TX0_ANT_10_t> TX0_ANT_10;
    enum TX0_ANT_11_t{
        TX0_ANT_11_TX_RX = 0,
        TX0_ANT_11_HIGHBAND_AMP = 1,
        TX0_ANT_11_LOWBAND_AMP = 2,
        TX0_ANT_11_BYPASS_AMP = 3
    };
    std::vector<TX0_ANT_11_t> TX0_ANT_11;
    enum TX0_LO_13_t{
        TX0_LO_13_INTERNAL = 0,
        TX0_LO_13_EXTERNAL = 1
    };
    std::vector<TX0_LO_13_t> TX0_LO_13;
    enum TX0_LO_14_t{
        TX0_LO_14_EXTERNAL = 0,
        TX0_LO_14_INTERNAL = 1
    };
    std::vector<TX0_LO_14_t> TX0_LO_14;
    enum TX1_IF2_1_2_t{
        TX1_IF2_1_2_FILTER_1 = 0,
        TX1_IF2_1_2_FILTER_2 = 1
    };
    std::vector<TX1_IF2_1_2_t> TX1_IF2_1_2;
    enum TX1_IF1_3_t{
        TX1_IF1_3_FILTER_5 = 0,
        TX1_IF1_3_FILTER_6 = 1,
        TX1_IF1_3_FILTER_4 = 2,
        TX1_IF1_3_FILTER_0_3 = 3
    };
    std::vector<TX1_IF1_3_t> TX1_IF1_3;
    enum TX1_IF1_4_t{
        TX1_IF1_4_FILTER_3 = 0,
        TX1_IF1_4_FILTER_2 = 1,
        TX1_IF1_4_FILTER_1 = 2,
        TX1_IF1_4_TERMINATION = 3
    };
    std::vector<TX1_IF1_4_t> TX1_IF1_4;
    enum TX1_IF1_5_t{
        TX1_IF1_5_TERMINATION = 0,
        TX1_IF1_5_FILTER_1 = 1,
        TX1_IF1_5_FILTER_2 = 2,
        TX1_IF1_5_FILTER_3 = 3
    };
    std::vector<TX1_IF1_5_t> TX1_IF1_5;
    enum TX1_IF1_6_t{
        TX1_IF1_6_FILTER_0_3 = 0,
        TX1_IF1_6_FILTER_4 = 1,
        TX1_IF1_6_FILTER_6 = 2,
        TX1_IF1_6_FILTER_5 = 3
    };
    std::vector<TX1_IF1_6_t> TX1_IF1_6;
    enum TX1_7_t{
        TX1_7_LOWBAND = 0,
        TX1_7_HIGHBAND = 1,
        TX1_7_NO_CONNECT = 2,
        TX1_7_TERMINATION = 3
    };
    std::vector<TX1_7_t> TX1_7;
    enum TX1_RF_8_t{
        TX1_RF_8_INVALID_0 = 0,
        TX1_RF_8_RF_2 = 1,
        TX1_RF_8_RF_1 = 2,
        TX1_RF_8_INVALID_1 = 3,
        TX1_RF_8_RF_3 = 4
    };
    std::vector<TX1_RF_8_t> TX1_RF_8;
    enum TX1_RF_9_t{
        TX1_RF_9_HIGHBAND = 0,
        TX1_RF_9_RF_2 = 1,
        TX1_RF_9_RF_1 = 2,
        TX1_RF_9_RF_3 = 3
    };
    std::vector<TX1_RF_9_t> TX1_RF_9;
    enum TX1_ANT_10_t{
        TX1_ANT_10_HIGHBAND_AMP = 0,
        TX1_ANT_10_LOWBAND_AMP = 1,
        TX1_ANT_10_BYPASS_AMP = 2,
        TX1_ANT_10_CAL_LOOPBACK = 3
    };
    std::vector<TX1_ANT_10_t> TX1_ANT_10;
    enum TX1_ANT_11_t{
        TX1_ANT_11_TX_RX = 0,
        TX1_ANT_11_BYPASS_AMP = 1,
        TX1_ANT_11_LOWBAND_AMP = 2,
        TX1_ANT_11_HIGHBAND_AMP = 3
    };
    std::vector<TX1_ANT_11_t> TX1_ANT_11;
    enum TX1_LO_13_t{
        TX1_LO_13_EXTERNAL = 0,
        TX1_LO_13_INTERNAL = 1
    };
    std::vector<TX1_LO_13_t> TX1_LO_13;
    enum TX1_LO_14_t{
        TX1_LO_14_INTERNAL = 0,
        TX1_LO_14_EXTERNAL = 1
    };
    std::vector<TX1_LO_14_t> TX1_LO_14;
    enum RX0_ANT_1_t{
        RX0_ANT_1_CAL_LOOPBACK = 0,
        RX0_ANT_1_TERMINATION = 1,
        RX0_ANT_1_TX_RX = 2,
        RX0_ANT_1_RX2 = 3
    };
    std::vector<RX0_ANT_1_t> RX0_ANT_1;
    enum RX0_2_t{
        RX0_2_HIGHBAND = 0,
        RX0_2_LOWBAND = 1
    };
    std::vector<RX0_2_t> RX0_2;
    enum RX0_RF_3_t{
        RX0_RF_3_INVALID_0 = 0,
        RX0_RF_3_RF_2 = 1,
        RX0_RF_3_RF_1 = 2,
        RX0_RF_3_INVALID_1 = 3,
        RX0_RF_3_RF_3 = 4
    };
    std::vector<RX0_RF_3_t> RX0_RF_3;
    enum RX0_4_t{
        RX0_4_LOWBAND = 0,
        RX0_4_HIGHBAND = 1
    };
    std::vector<RX0_4_t> RX0_4;
    enum RX0_IF1_5_t{
        RX0_IF1_5_FILTER_4 = 0,
        RX0_IF1_5_FILTER_3 = 1,
        RX0_IF1_5_FILTER_2 = 2,
        RX0_IF1_5_FILTER_1 = 3
    };
    std::vector<RX0_IF1_5_t> RX0_IF1_5;
    enum RX0_IF1_6_t{
        RX0_IF1_6_FILTER_1 = 0,
        RX0_IF1_6_FILTER_2 = 1,
        RX0_IF1_6_FILTER_3 = 2,
        RX0_IF1_6_FILTER_4 = 3
    };
    std::vector<RX0_IF1_6_t> RX0_IF1_6;
    enum RX0_IF2_7_8_t{
        RX0_IF2_7_8_FILTER_2 = 0,
        RX0_IF2_7_8_FILTER_1 = 1
    };
    std::vector<RX0_IF2_7_8_t> RX0_IF2_7_8;
    enum RX0_LO_9_t{
        RX0_LO_9_INTERNAL = 0,
        RX0_LO_9_EXTERNAL = 1
    };
    std::vector<RX0_LO_9_t> RX0_LO_9;
    enum RX0_LO_10_t{
        RX0_LO_10_INTERNAL = 0,
        RX0_LO_10_EXTERNAL = 1
    };
    std::vector<RX0_LO_10_t> RX0_LO_10;
    enum RX0_RF_11_t{
        RX0_RF_11_INVALID_0 = 0,
        RX0_RF_11_RF_3 = 1,
        RX0_RF_11_RF_1 = 2,
        RX0_RF_11_INVALID_1 = 3,
        RX0_RF_11_RF_2 = 4,
        RX0_RF_11_INVALID_2 = 5,
        RX0_RF_11_INVALID_3 = 6,
        RX0_RF_11_INVALID_4 = 7
    };
    std::vector<RX0_RF_11_t> RX0_RF_11;
    enum RX1_ANT_1_t{
        RX1_ANT_1_CAL_LOOPBACK = 0,
        RX1_ANT_1_TX_RX = 1,
        RX1_ANT_1_RX2 = 2,
        RX1_ANT_1_TERMINATION = 3
    };
    std::vector<RX1_ANT_1_t> RX1_ANT_1;
    enum RX1_2_t{
        RX1_2_LOWBAND = 0,
        RX1_2_HIGHBAND = 1
    };
    std::vector<RX1_2_t> RX1_2;
    enum RX1_RF_3_t{
        RX1_RF_3_INVALID_0 = 0,
        RX1_RF_3_RF_3 = 1,
        RX1_RF_3_RF_1 = 2,
        RX1_RF_3_INVALID_1 = 3,
        RX1_RF_3_RF_2 = 4
    };
    std::vector<RX1_RF_3_t> RX1_RF_3;
    enum RX1_4_t{
        RX1_4_HIGHBAND = 0,
        RX1_4_LOWBAND = 1
    };
    std::vector<RX1_4_t> RX1_4;
    enum RX1_IF1_5_t{
        RX1_IF1_5_FILTER_1 = 0,
        RX1_IF1_5_FILTER_2 = 1,
        RX1_IF1_5_FILTER_3 = 2,
        RX1_IF1_5_FILTER_4 = 3
    };
    std::vector<RX1_IF1_5_t> RX1_IF1_5;
    enum RX1_IF1_6_t{
        RX1_IF1_6_FILTER_4 = 0,
        RX1_IF1_6_FILTER_3 = 1,
        RX1_IF1_6_FILTER_2 = 2,
        RX1_IF1_6_FILTER_1 = 3
    };
    std::vector<RX1_IF1_6_t> RX1_IF1_6;
    enum RX1_IF2_7_8_t{
        RX1_IF2_7_8_FILTER_1 = 0,
        RX1_IF2_7_8_FILTER_2 = 1
    };
    std::vector<RX1_IF2_7_8_t> RX1_IF2_7_8;
    enum RX1_LO_9_t{
        RX1_LO_9_EXTERNAL = 0,
        RX1_LO_9_INTERNAL = 1
    };
    std::vector<RX1_LO_9_t> RX1_LO_9;
    enum RX1_LO_10_t{
        RX1_LO_10_EXTERNAL = 0,
        RX1_LO_10_INTERNAL = 1
    };
    std::vector<RX1_LO_10_t> RX1_LO_10;
    enum RX1_RF_11_t{
        RX1_RF_11_INVALID_0 = 0,
        RX1_RF_11_RF_2 = 1,
        RX1_RF_11_RF_1 = 2,
        RX1_RF_11_INVALID_1 = 3,
        RX1_RF_11_RF_3 = 4,
        RX1_RF_11_INVALID_2 = 5,
        RX1_RF_11_INVALID_3 = 6,
        RX1_RF_11_INVALID_4 = 7
    };
    std::vector<RX1_RF_11_t> RX1_RF_11;
    std::vector<uint8_t> TX0_DSA1;
    std::vector<uint8_t> TX0_DSA2;
    std::vector<uint8_t> TX1_DSA1;
    std::vector<uint8_t> TX1_DSA2;
    std::vector<uint8_t> RX0_DSA1;
    std::vector<uint8_t> RX0_DSA2;
    std::vector<uint8_t> RX0_DSA3_A;
    std::vector<uint8_t> RX0_DSA3_B;
    std::vector<uint8_t> RX1_DSA1;
    std::vector<uint8_t> RX1_DSA2;
    std::vector<uint8_t> RX1_DSA3_A;
    std::vector<uint8_t> RX1_DSA3_B;
    std::vector<uint8_t> TX0_TABLE_SELECT;
    std::vector<uint8_t> TX1_TABLE_SELECT;
    std::vector<uint8_t> RX0_TABLE_SELECT;
    std::vector<uint8_t> RX1_TABLE_SELECT;
    std::vector<uint8_t> TX0_TABLE_DSA1;
    std::vector<uint8_t> TX0_TABLE_DSA2;
    std::vector<uint8_t> TX1_TABLE_DSA1;
    std::vector<uint8_t> TX1_TABLE_DSA2;
    std::vector<uint8_t> RX0_TABLE_DSA1;
    std::vector<uint8_t> RX0_TABLE_DSA2;
    std::vector<uint8_t> RX0_TABLE_DSA3_A;
    std::vector<uint8_t> RX0_TABLE_DSA3_B;
    std::vector<uint8_t> RX1_TABLE_DSA1;
    std::vector<uint8_t> RX1_TABLE_DSA2;
    std::vector<uint8_t> RX1_TABLE_DSA3_A;
    std::vector<uint8_t> RX1_TABLE_DSA3_B;

    zbx_cpld_regs_t(void){
        _state = NULL;
        BOARD_ID = 0;
        REVISION = 0;
        OLDEST_COMPAT_REVISION = 0;
        SCRATCH = 0;
        GIT_HASH = 0;
        ENABLE_TX_POS_7V0 = ENABLE_TX_POS_7V0_DISABLE;
        ENABLE_RX_POS_7V0 = ENABLE_RX_POS_7V0_DISABLE;
        ENABLE_POS_3V3 = ENABLE_POS_3V3_DISABLE;
        P7V_B_STATUS = 0;
        P7V_A_STATUS = 0;
        PLL_REF_CLOCK_ENABLE = PLL_REF_CLOCK_ENABLE_DISABLE;
        CURRENT_RF0_CONFIG = 0;
        CURRENT_RF1_CONFIG = 0;
        CURRENT_RF0_DSA_CONFIG = 0;
        CURRENT_RF1_DSA_CONFIG = 0;
        RF0_OPTION = RF0_OPTION_SW_DEFINED;
        RF1_OPTION = RF1_OPTION_SW_DEFINED;
        RF0_DSA_OPTION = RF0_DSA_OPTION_SW_DEFINED;
        RF1_DSA_OPTION = RF1_DSA_OPTION_SW_DEFINED;
        SW_RF0_CONFIG = 0;
        SW_RF1_CONFIG = 0;
        SW_RF0_DSA_CONFIG = 0;
        SW_RF1_DSA_CONFIG = 0;
        DATA = 0;
        ADDRESS = 0;
        READ_FLAG = READ_FLAG_READ;
        LO_SELECT = LO_SELECT_TX0_LO1;
        START_TRANSACTION = START_TRANSACTION_DISABLE;
        SPI_READY = 0;
        DATA_VALID = 0;
        PULSE_TX0_LO1_SYNC = 0;
        PULSE_TX0_LO2_SYNC = 0;
        PULSE_TX1_LO1_SYNC = 0;
        PULSE_TX1_LO2_SYNC = 0;
        PULSE_RX0_LO1_SYNC = 0;
        PULSE_RX0_LO2_SYNC = 0;
        PULSE_RX1_LO1_SYNC = 0;
        PULSE_RX1_LO2_SYNC = 0;
        BYPASS_SYNC_REGISTER = BYPASS_SYNC_REGISTER_DISABLE;
        RX0_RX_LED.resize(256, RX0_RX_LED_DISABLE);
        RX0_TRX_LED.resize(256, RX0_TRX_LED_DISABLE);
        TX0_TRX_LED.resize(256, TX0_TRX_LED_DISABLE);
        RX1_RX_LED.resize(256, RX1_RX_LED_DISABLE);
        RX1_TRX_LED.resize(256, RX1_TRX_LED_DISABLE);
        TX1_TRX_LED.resize(256, TX1_TRX_LED_DISABLE);
        TX0_IF2_1_2.resize(256, TX0_IF2_1_2_FILTER_2);
        TX0_IF1_3.resize(256, TX0_IF1_3_FILTER_0_3);
        TX0_IF1_4.resize(256, TX0_IF1_4_TERMINATION);
        TX0_IF1_5.resize(256, TX0_IF1_5_FILTER_3);
        TX0_IF1_6.resize(256, TX0_IF1_6_FILTER_5);
        TX0_7.resize(256, TX0_7_TERMINATION);
        TX0_RF_8.resize(256, TX0_RF_8_INVALID_0);
        TX0_RF_9.resize(256, TX0_RF_9_RF_3);
        TX0_ANT_10.resize(256, TX0_ANT_10_BYPASS_AMP);
        TX0_ANT_11.resize(256, TX0_ANT_11_TX_RX);
        TX0_LO_13.resize(256, TX0_LO_13_INTERNAL);
        TX0_LO_14.resize(256, TX0_LO_14_EXTERNAL);
        TX1_IF2_1_2.resize(256, TX1_IF2_1_2_FILTER_1);
        TX1_IF1_3.resize(256, TX1_IF1_3_FILTER_5);
        TX1_IF1_4.resize(256, TX1_IF1_4_FILTER_3);
        TX1_IF1_5.resize(256, TX1_IF1_5_TERMINATION);
        TX1_IF1_6.resize(256, TX1_IF1_6_FILTER_0_3);
        TX1_7.resize(256, TX1_7_LOWBAND);
        TX1_RF_8.resize(256, TX1_RF_8_INVALID_0);
        TX1_RF_9.resize(256, TX1_RF_9_HIGHBAND);
        TX1_ANT_10.resize(256, TX1_ANT_10_HIGHBAND_AMP);
        TX1_ANT_11.resize(256, TX1_ANT_11_TX_RX);
        TX1_LO_13.resize(256, TX1_LO_13_EXTERNAL);
        TX1_LO_14.resize(256, TX1_LO_14_INTERNAL);
        RX0_ANT_1.resize(256, RX0_ANT_1_CAL_LOOPBACK);
        RX0_2.resize(256, RX0_2_HIGHBAND);
        RX0_RF_3.resize(256, RX0_RF_3_INVALID_0);
        RX0_4.resize(256, RX0_4_LOWBAND);
        RX0_IF1_5.resize(256, RX0_IF1_5_FILTER_4);
        RX0_IF1_6.resize(256, RX0_IF1_6_FILTER_1);
        RX0_IF2_7_8.resize(256, RX0_IF2_7_8_FILTER_2);
        RX0_LO_9.resize(256, RX0_LO_9_INTERNAL);
        RX0_LO_10.resize(256, RX0_LO_10_INTERNAL);
        RX0_RF_11.resize(256, RX0_RF_11_INVALID_0);
        RX1_ANT_1.resize(256, RX1_ANT_1_CAL_LOOPBACK);
        RX1_2.resize(256, RX1_2_LOWBAND);
        RX1_RF_3.resize(256, RX1_RF_3_INVALID_0);
        RX1_4.resize(256, RX1_4_HIGHBAND);
        RX1_IF1_5.resize(256, RX1_IF1_5_FILTER_1);
        RX1_IF1_6.resize(256, RX1_IF1_6_FILTER_4);
        RX1_IF2_7_8.resize(256, RX1_IF2_7_8_FILTER_1);
        RX1_LO_9.resize(256, RX1_LO_9_EXTERNAL);
        RX1_LO_10.resize(256, RX1_LO_10_EXTERNAL);
        RX1_RF_11.resize(256, RX1_RF_11_INVALID_0);
        TX0_DSA1.resize(256, 31);
        TX0_DSA2.resize(256, 31);
        TX1_DSA1.resize(256, 31);
        TX1_DSA2.resize(256, 31);
        RX0_DSA1.resize(256, 15);
        RX0_DSA2.resize(256, 15);
        RX0_DSA3_A.resize(256, 15);
        RX0_DSA3_B.resize(256, 15);
        RX1_DSA1.resize(256, 15);
        RX1_DSA2.resize(256, 15);
        RX1_DSA3_A.resize(256, 15);
        RX1_DSA3_B.resize(256, 15);
        TX0_TABLE_SELECT.resize(256, 0);
        TX1_TABLE_SELECT.resize(256, 0);
        RX0_TABLE_SELECT.resize(256, 0);
        RX1_TABLE_SELECT.resize(256, 0);
        TX0_TABLE_DSA1.resize(256, 31);
        TX0_TABLE_DSA2.resize(256, 31);
        TX1_TABLE_DSA1.resize(256, 31);
        TX1_TABLE_DSA2.resize(256, 31);
        RX0_TABLE_DSA1.resize(256, 15);
        RX0_TABLE_DSA2.resize(256, 15);
        RX0_TABLE_DSA3_A.resize(256, 15);
        RX0_TABLE_DSA3_B.resize(256, 15);
        RX1_TABLE_DSA1.resize(256, 15);
        RX1_TABLE_DSA2.resize(256, 15);
        RX1_TABLE_DSA3_A.resize(256, 15);
        RX1_TABLE_DSA3_B.resize(256, 15);
    }

    ~zbx_cpld_regs_t(void){
        delete _state;
    }

    enum class zbx_cpld_field_t {
        BOARD_ID,
        REVISION,
        OLDEST_COMPAT_REVISION,
        SCRATCH,
        GIT_HASH,
        ENABLE_TX_POS_7V0,
        ENABLE_RX_POS_7V0,
        ENABLE_POS_3V3,
        P7V_B_STATUS,
        P7V_A_STATUS,
        PLL_REF_CLOCK_ENABLE,
        CURRENT_RF0_CONFIG,
        CURRENT_RF1_CONFIG,
        CURRENT_RF0_DSA_CONFIG,
        CURRENT_RF1_DSA_CONFIG,
        RF0_OPTION,
        RF1_OPTION,
        RF0_DSA_OPTION,
        RF1_DSA_OPTION,
        SW_RF0_CONFIG,
        SW_RF1_CONFIG,
        SW_RF0_DSA_CONFIG,
        SW_RF1_DSA_CONFIG,
        DATA,
        ADDRESS,
        READ_FLAG,
        LO_SELECT,
        START_TRANSACTION,
        SPI_READY,
        DATA_VALID,
        PULSE_TX0_LO1_SYNC,
        PULSE_TX0_LO2_SYNC,
        PULSE_TX1_LO1_SYNC,
        PULSE_TX1_LO2_SYNC,
        PULSE_RX0_LO1_SYNC,
        PULSE_RX0_LO2_SYNC,
        PULSE_RX1_LO1_SYNC,
        PULSE_RX1_LO2_SYNC,
        BYPASS_SYNC_REGISTER,
        RX0_RX_LED,
        RX0_TRX_LED,
        TX0_TRX_LED,
        RX1_RX_LED,
        RX1_TRX_LED,
        TX1_TRX_LED,
        TX0_IF2_1_2,
        TX0_IF1_3,
        TX0_IF1_4,
        TX0_IF1_5,
        TX0_IF1_6,
        TX0_7,
        TX0_RF_8,
        TX0_RF_9,
        TX0_ANT_10,
        TX0_ANT_11,
        TX0_LO_13,
        TX0_LO_14,
        TX1_IF2_1_2,
        TX1_IF1_3,
        TX1_IF1_4,
        TX1_IF1_5,
        TX1_IF1_6,
        TX1_7,
        TX1_RF_8,
        TX1_RF_9,
        TX1_ANT_10,
        TX1_ANT_11,
        TX1_LO_13,
        TX1_LO_14,
        RX0_ANT_1,
        RX0_2,
        RX0_RF_3,
        RX0_4,
        RX0_IF1_5,
        RX0_IF1_6,
        RX0_IF2_7_8,
        RX0_LO_9,
        RX0_LO_10,
        RX0_RF_11,
        RX1_ANT_1,
        RX1_2,
        RX1_RF_3,
        RX1_4,
        RX1_IF1_5,
        RX1_IF1_6,
        RX1_IF2_7_8,
        RX1_LO_9,
        RX1_LO_10,
        RX1_RF_11,
        TX0_DSA1,
        TX0_DSA2,
        TX1_DSA1,
        TX1_DSA2,
        RX0_DSA1,
        RX0_DSA2,
        RX0_DSA3_A,
        RX0_DSA3_B,
        RX1_DSA1,
        RX1_DSA2,
        RX1_DSA3_A,
        RX1_DSA3_B,
        TX0_TABLE_SELECT,
        TX1_TABLE_SELECT,
        RX0_TABLE_SELECT,
        RX1_TABLE_SELECT,
        TX0_TABLE_DSA1,
        TX0_TABLE_DSA2,
        TX1_TABLE_DSA1,
        TX1_TABLE_DSA2,
        RX0_TABLE_DSA1,
        RX0_TABLE_DSA2,
        RX0_TABLE_DSA3_A,
        RX0_TABLE_DSA3_B,
        RX1_TABLE_DSA1,
        RX1_TABLE_DSA2,
        RX1_TABLE_DSA3_A,
        RX1_TABLE_DSA3_B,
    };
    
    zbx_cpld_field_t get_field_type(const std::string& field_name) {
        if (field_name == "BOARD_ID") {
            return zbx_cpld_field_t::BOARD_ID;
        } else
        if (field_name == "REVISION") {
            return zbx_cpld_field_t::REVISION;
        } else
        if (field_name == "OLDEST_COMPAT_REVISION") {
            return zbx_cpld_field_t::OLDEST_COMPAT_REVISION;
        } else
        if (field_name == "SCRATCH") {
            return zbx_cpld_field_t::SCRATCH;
        } else
        if (field_name == "GIT_HASH") {
            return zbx_cpld_field_t::GIT_HASH;
        } else
        if (field_name == "ENABLE_TX_POS_7V0") {
            return zbx_cpld_field_t::ENABLE_TX_POS_7V0;
        } else
        if (field_name == "ENABLE_RX_POS_7V0") {
            return zbx_cpld_field_t::ENABLE_RX_POS_7V0;
        } else
        if (field_name == "ENABLE_POS_3V3") {
            return zbx_cpld_field_t::ENABLE_POS_3V3;
        } else
        if (field_name == "P7V_B_STATUS") {
            return zbx_cpld_field_t::P7V_B_STATUS;
        } else
        if (field_name == "P7V_A_STATUS") {
            return zbx_cpld_field_t::P7V_A_STATUS;
        } else
        if (field_name == "PLL_REF_CLOCK_ENABLE") {
            return zbx_cpld_field_t::PLL_REF_CLOCK_ENABLE;
        } else
        if (field_name == "CURRENT_RF0_CONFIG") {
            return zbx_cpld_field_t::CURRENT_RF0_CONFIG;
        } else
        if (field_name == "CURRENT_RF1_CONFIG") {
            return zbx_cpld_field_t::CURRENT_RF1_CONFIG;
        } else
        if (field_name == "CURRENT_RF0_DSA_CONFIG") {
            return zbx_cpld_field_t::CURRENT_RF0_DSA_CONFIG;
        } else
        if (field_name == "CURRENT_RF1_DSA_CONFIG") {
            return zbx_cpld_field_t::CURRENT_RF1_DSA_CONFIG;
        } else
        if (field_name == "RF0_OPTION") {
            return zbx_cpld_field_t::RF0_OPTION;
        } else
        if (field_name == "RF1_OPTION") {
            return zbx_cpld_field_t::RF1_OPTION;
        } else
        if (field_name == "RF0_DSA_OPTION") {
            return zbx_cpld_field_t::RF0_DSA_OPTION;
        } else
        if (field_name == "RF1_DSA_OPTION") {
            return zbx_cpld_field_t::RF1_DSA_OPTION;
        } else
        if (field_name == "SW_RF0_CONFIG") {
            return zbx_cpld_field_t::SW_RF0_CONFIG;
        } else
        if (field_name == "SW_RF1_CONFIG") {
            return zbx_cpld_field_t::SW_RF1_CONFIG;
        } else
        if (field_name == "SW_RF0_DSA_CONFIG") {
            return zbx_cpld_field_t::SW_RF0_DSA_CONFIG;
        } else
        if (field_name == "SW_RF1_DSA_CONFIG") {
            return zbx_cpld_field_t::SW_RF1_DSA_CONFIG;
        } else
        if (field_name == "DATA") {
            return zbx_cpld_field_t::DATA;
        } else
        if (field_name == "ADDRESS") {
            return zbx_cpld_field_t::ADDRESS;
        } else
        if (field_name == "READ_FLAG") {
            return zbx_cpld_field_t::READ_FLAG;
        } else
        if (field_name == "LO_SELECT") {
            return zbx_cpld_field_t::LO_SELECT;
        } else
        if (field_name == "START_TRANSACTION") {
            return zbx_cpld_field_t::START_TRANSACTION;
        } else
        if (field_name == "SPI_READY") {
            return zbx_cpld_field_t::SPI_READY;
        } else
        if (field_name == "DATA_VALID") {
            return zbx_cpld_field_t::DATA_VALID;
        } else
        if (field_name == "PULSE_TX0_LO1_SYNC") {
            return zbx_cpld_field_t::PULSE_TX0_LO1_SYNC;
        } else
        if (field_name == "PULSE_TX0_LO2_SYNC") {
            return zbx_cpld_field_t::PULSE_TX0_LO2_SYNC;
        } else
        if (field_name == "PULSE_TX1_LO1_SYNC") {
            return zbx_cpld_field_t::PULSE_TX1_LO1_SYNC;
        } else
        if (field_name == "PULSE_TX1_LO2_SYNC") {
            return zbx_cpld_field_t::PULSE_TX1_LO2_SYNC;
        } else
        if (field_name == "PULSE_RX0_LO1_SYNC") {
            return zbx_cpld_field_t::PULSE_RX0_LO1_SYNC;
        } else
        if (field_name == "PULSE_RX0_LO2_SYNC") {
            return zbx_cpld_field_t::PULSE_RX0_LO2_SYNC;
        } else
        if (field_name == "PULSE_RX1_LO1_SYNC") {
            return zbx_cpld_field_t::PULSE_RX1_LO1_SYNC;
        } else
        if (field_name == "PULSE_RX1_LO2_SYNC") {
            return zbx_cpld_field_t::PULSE_RX1_LO2_SYNC;
        } else
        if (field_name == "BYPASS_SYNC_REGISTER") {
            return zbx_cpld_field_t::BYPASS_SYNC_REGISTER;
        } else
        if (field_name == "RX0_RX_LED") {
            return zbx_cpld_field_t::RX0_RX_LED;
        } else
        if (field_name == "RX0_TRX_LED") {
            return zbx_cpld_field_t::RX0_TRX_LED;
        } else
        if (field_name == "TX0_TRX_LED") {
            return zbx_cpld_field_t::TX0_TRX_LED;
        } else
        if (field_name == "RX1_RX_LED") {
            return zbx_cpld_field_t::RX1_RX_LED;
        } else
        if (field_name == "RX1_TRX_LED") {
            return zbx_cpld_field_t::RX1_TRX_LED;
        } else
        if (field_name == "TX1_TRX_LED") {
            return zbx_cpld_field_t::TX1_TRX_LED;
        } else
        if (field_name == "TX0_IF2_1_2") {
            return zbx_cpld_field_t::TX0_IF2_1_2;
        } else
        if (field_name == "TX0_IF1_3") {
            return zbx_cpld_field_t::TX0_IF1_3;
        } else
        if (field_name == "TX0_IF1_4") {
            return zbx_cpld_field_t::TX0_IF1_4;
        } else
        if (field_name == "TX0_IF1_5") {
            return zbx_cpld_field_t::TX0_IF1_5;
        } else
        if (field_name == "TX0_IF1_6") {
            return zbx_cpld_field_t::TX0_IF1_6;
        } else
        if (field_name == "TX0_7") {
            return zbx_cpld_field_t::TX0_7;
        } else
        if (field_name == "TX0_RF_8") {
            return zbx_cpld_field_t::TX0_RF_8;
        } else
        if (field_name == "TX0_RF_9") {
            return zbx_cpld_field_t::TX0_RF_9;
        } else
        if (field_name == "TX0_ANT_10") {
            return zbx_cpld_field_t::TX0_ANT_10;
        } else
        if (field_name == "TX0_ANT_11") {
            return zbx_cpld_field_t::TX0_ANT_11;
        } else
        if (field_name == "TX0_LO_13") {
            return zbx_cpld_field_t::TX0_LO_13;
        } else
        if (field_name == "TX0_LO_14") {
            return zbx_cpld_field_t::TX0_LO_14;
        } else
        if (field_name == "TX1_IF2_1_2") {
            return zbx_cpld_field_t::TX1_IF2_1_2;
        } else
        if (field_name == "TX1_IF1_3") {
            return zbx_cpld_field_t::TX1_IF1_3;
        } else
        if (field_name == "TX1_IF1_4") {
            return zbx_cpld_field_t::TX1_IF1_4;
        } else
        if (field_name == "TX1_IF1_5") {
            return zbx_cpld_field_t::TX1_IF1_5;
        } else
        if (field_name == "TX1_IF1_6") {
            return zbx_cpld_field_t::TX1_IF1_6;
        } else
        if (field_name == "TX1_7") {
            return zbx_cpld_field_t::TX1_7;
        } else
        if (field_name == "TX1_RF_8") {
            return zbx_cpld_field_t::TX1_RF_8;
        } else
        if (field_name == "TX1_RF_9") {
            return zbx_cpld_field_t::TX1_RF_9;
        } else
        if (field_name == "TX1_ANT_10") {
            return zbx_cpld_field_t::TX1_ANT_10;
        } else
        if (field_name == "TX1_ANT_11") {
            return zbx_cpld_field_t::TX1_ANT_11;
        } else
        if (field_name == "TX1_LO_13") {
            return zbx_cpld_field_t::TX1_LO_13;
        } else
        if (field_name == "TX1_LO_14") {
            return zbx_cpld_field_t::TX1_LO_14;
        } else
        if (field_name == "RX0_ANT_1") {
            return zbx_cpld_field_t::RX0_ANT_1;
        } else
        if (field_name == "RX0_2") {
            return zbx_cpld_field_t::RX0_2;
        } else
        if (field_name == "RX0_RF_3") {
            return zbx_cpld_field_t::RX0_RF_3;
        } else
        if (field_name == "RX0_4") {
            return zbx_cpld_field_t::RX0_4;
        } else
        if (field_name == "RX0_IF1_5") {
            return zbx_cpld_field_t::RX0_IF1_5;
        } else
        if (field_name == "RX0_IF1_6") {
            return zbx_cpld_field_t::RX0_IF1_6;
        } else
        if (field_name == "RX0_IF2_7_8") {
            return zbx_cpld_field_t::RX0_IF2_7_8;
        } else
        if (field_name == "RX0_LO_9") {
            return zbx_cpld_field_t::RX0_LO_9;
        } else
        if (field_name == "RX0_LO_10") {
            return zbx_cpld_field_t::RX0_LO_10;
        } else
        if (field_name == "RX0_RF_11") {
            return zbx_cpld_field_t::RX0_RF_11;
        } else
        if (field_name == "RX1_ANT_1") {
            return zbx_cpld_field_t::RX1_ANT_1;
        } else
        if (field_name == "RX1_2") {
            return zbx_cpld_field_t::RX1_2;
        } else
        if (field_name == "RX1_RF_3") {
            return zbx_cpld_field_t::RX1_RF_3;
        } else
        if (field_name == "RX1_4") {
            return zbx_cpld_field_t::RX1_4;
        } else
        if (field_name == "RX1_IF1_5") {
            return zbx_cpld_field_t::RX1_IF1_5;
        } else
        if (field_name == "RX1_IF1_6") {
            return zbx_cpld_field_t::RX1_IF1_6;
        } else
        if (field_name == "RX1_IF2_7_8") {
            return zbx_cpld_field_t::RX1_IF2_7_8;
        } else
        if (field_name == "RX1_LO_9") {
            return zbx_cpld_field_t::RX1_LO_9;
        } else
        if (field_name == "RX1_LO_10") {
            return zbx_cpld_field_t::RX1_LO_10;
        } else
        if (field_name == "RX1_RF_11") {
            return zbx_cpld_field_t::RX1_RF_11;
        } else
        if (field_name == "TX0_DSA1") {
            return zbx_cpld_field_t::TX0_DSA1;
        } else
        if (field_name == "TX0_DSA2") {
            return zbx_cpld_field_t::TX0_DSA2;
        } else
        if (field_name == "TX1_DSA1") {
            return zbx_cpld_field_t::TX1_DSA1;
        } else
        if (field_name == "TX1_DSA2") {
            return zbx_cpld_field_t::TX1_DSA2;
        } else
        if (field_name == "RX0_DSA1") {
            return zbx_cpld_field_t::RX0_DSA1;
        } else
        if (field_name == "RX0_DSA2") {
            return zbx_cpld_field_t::RX0_DSA2;
        } else
        if (field_name == "RX0_DSA3_A") {
            return zbx_cpld_field_t::RX0_DSA3_A;
        } else
        if (field_name == "RX0_DSA3_B") {
            return zbx_cpld_field_t::RX0_DSA3_B;
        } else
        if (field_name == "RX1_DSA1") {
            return zbx_cpld_field_t::RX1_DSA1;
        } else
        if (field_name == "RX1_DSA2") {
            return zbx_cpld_field_t::RX1_DSA2;
        } else
        if (field_name == "RX1_DSA3_A") {
            return zbx_cpld_field_t::RX1_DSA3_A;
        } else
        if (field_name == "RX1_DSA3_B") {
            return zbx_cpld_field_t::RX1_DSA3_B;
        } else
        if (field_name == "TX0_TABLE_SELECT") {
            return zbx_cpld_field_t::TX0_TABLE_SELECT;
        } else
        if (field_name == "TX1_TABLE_SELECT") {
            return zbx_cpld_field_t::TX1_TABLE_SELECT;
        } else
        if (field_name == "RX0_TABLE_SELECT") {
            return zbx_cpld_field_t::RX0_TABLE_SELECT;
        } else
        if (field_name == "RX1_TABLE_SELECT") {
            return zbx_cpld_field_t::RX1_TABLE_SELECT;
        } else
        if (field_name == "TX0_TABLE_DSA1") {
            return zbx_cpld_field_t::TX0_TABLE_DSA1;
        } else
        if (field_name == "TX0_TABLE_DSA2") {
            return zbx_cpld_field_t::TX0_TABLE_DSA2;
        } else
        if (field_name == "TX1_TABLE_DSA1") {
            return zbx_cpld_field_t::TX1_TABLE_DSA1;
        } else
        if (field_name == "TX1_TABLE_DSA2") {
            return zbx_cpld_field_t::TX1_TABLE_DSA2;
        } else
        if (field_name == "RX0_TABLE_DSA1") {
            return zbx_cpld_field_t::RX0_TABLE_DSA1;
        } else
        if (field_name == "RX0_TABLE_DSA2") {
            return zbx_cpld_field_t::RX0_TABLE_DSA2;
        } else
        if (field_name == "RX0_TABLE_DSA3_A") {
            return zbx_cpld_field_t::RX0_TABLE_DSA3_A;
        } else
        if (field_name == "RX0_TABLE_DSA3_B") {
            return zbx_cpld_field_t::RX0_TABLE_DSA3_B;
        } else
        if (field_name == "RX1_TABLE_DSA1") {
            return zbx_cpld_field_t::RX1_TABLE_DSA1;
        } else
        if (field_name == "RX1_TABLE_DSA2") {
            return zbx_cpld_field_t::RX1_TABLE_DSA2;
        } else
        if (field_name == "RX1_TABLE_DSA3_A") {
            return zbx_cpld_field_t::RX1_TABLE_DSA3_A;
        } else
        if (field_name == "RX1_TABLE_DSA3_B") {
            return zbx_cpld_field_t::RX1_TABLE_DSA3_B;
        } else
        {
            UHD_ASSERT_THROW(false);
        }
    }
    
    uint32_t get_array_size(zbx_cpld_field_t field) {
        switch(field) {
        case zbx_cpld_field_t::RX0_RX_LED:
            return uint32_t(RX0_RX_LED.size());
        case zbx_cpld_field_t::RX0_TRX_LED:
            return uint32_t(RX0_TRX_LED.size());
        case zbx_cpld_field_t::TX0_TRX_LED:
            return uint32_t(TX0_TRX_LED.size());
        case zbx_cpld_field_t::RX1_RX_LED:
            return uint32_t(RX1_RX_LED.size());
        case zbx_cpld_field_t::RX1_TRX_LED:
            return uint32_t(RX1_TRX_LED.size());
        case zbx_cpld_field_t::TX1_TRX_LED:
            return uint32_t(TX1_TRX_LED.size());
        case zbx_cpld_field_t::TX0_IF2_1_2:
            return uint32_t(TX0_IF2_1_2.size());
        case zbx_cpld_field_t::TX0_IF1_3:
            return uint32_t(TX0_IF1_3.size());
        case zbx_cpld_field_t::TX0_IF1_4:
            return uint32_t(TX0_IF1_4.size());
        case zbx_cpld_field_t::TX0_IF1_5:
            return uint32_t(TX0_IF1_5.size());
        case zbx_cpld_field_t::TX0_IF1_6:
            return uint32_t(TX0_IF1_6.size());
        case zbx_cpld_field_t::TX0_7:
            return uint32_t(TX0_7.size());
        case zbx_cpld_field_t::TX0_RF_8:
            return uint32_t(TX0_RF_8.size());
        case zbx_cpld_field_t::TX0_RF_9:
            return uint32_t(TX0_RF_9.size());
        case zbx_cpld_field_t::TX0_ANT_10:
            return uint32_t(TX0_ANT_10.size());
        case zbx_cpld_field_t::TX0_ANT_11:
            return uint32_t(TX0_ANT_11.size());
        case zbx_cpld_field_t::TX0_LO_13:
            return uint32_t(TX0_LO_13.size());
        case zbx_cpld_field_t::TX0_LO_14:
            return uint32_t(TX0_LO_14.size());
        case zbx_cpld_field_t::TX1_IF2_1_2:
            return uint32_t(TX1_IF2_1_2.size());
        case zbx_cpld_field_t::TX1_IF1_3:
            return uint32_t(TX1_IF1_3.size());
        case zbx_cpld_field_t::TX1_IF1_4:
            return uint32_t(TX1_IF1_4.size());
        case zbx_cpld_field_t::TX1_IF1_5:
            return uint32_t(TX1_IF1_5.size());
        case zbx_cpld_field_t::TX1_IF1_6:
            return uint32_t(TX1_IF1_6.size());
        case zbx_cpld_field_t::TX1_7:
            return uint32_t(TX1_7.size());
        case zbx_cpld_field_t::TX1_RF_8:
            return uint32_t(TX1_RF_8.size());
        case zbx_cpld_field_t::TX1_RF_9:
            return uint32_t(TX1_RF_9.size());
        case zbx_cpld_field_t::TX1_ANT_10:
            return uint32_t(TX1_ANT_10.size());
        case zbx_cpld_field_t::TX1_ANT_11:
            return uint32_t(TX1_ANT_11.size());
        case zbx_cpld_field_t::TX1_LO_13:
            return uint32_t(TX1_LO_13.size());
        case zbx_cpld_field_t::TX1_LO_14:
            return uint32_t(TX1_LO_14.size());
        case zbx_cpld_field_t::RX0_ANT_1:
            return uint32_t(RX0_ANT_1.size());
        case zbx_cpld_field_t::RX0_2:
            return uint32_t(RX0_2.size());
        case zbx_cpld_field_t::RX0_RF_3:
            return uint32_t(RX0_RF_3.size());
        case zbx_cpld_field_t::RX0_4:
            return uint32_t(RX0_4.size());
        case zbx_cpld_field_t::RX0_IF1_5:
            return uint32_t(RX0_IF1_5.size());
        case zbx_cpld_field_t::RX0_IF1_6:
            return uint32_t(RX0_IF1_6.size());
        case zbx_cpld_field_t::RX0_IF2_7_8:
            return uint32_t(RX0_IF2_7_8.size());
        case zbx_cpld_field_t::RX0_LO_9:
            return uint32_t(RX0_LO_9.size());
        case zbx_cpld_field_t::RX0_LO_10:
            return uint32_t(RX0_LO_10.size());
        case zbx_cpld_field_t::RX0_RF_11:
            return uint32_t(RX0_RF_11.size());
        case zbx_cpld_field_t::RX1_ANT_1:
            return uint32_t(RX1_ANT_1.size());
        case zbx_cpld_field_t::RX1_2:
            return uint32_t(RX1_2.size());
        case zbx_cpld_field_t::RX1_RF_3:
            return uint32_t(RX1_RF_3.size());
        case zbx_cpld_field_t::RX1_4:
            return uint32_t(RX1_4.size());
        case zbx_cpld_field_t::RX1_IF1_5:
            return uint32_t(RX1_IF1_5.size());
        case zbx_cpld_field_t::RX1_IF1_6:
            return uint32_t(RX1_IF1_6.size());
        case zbx_cpld_field_t::RX1_IF2_7_8:
            return uint32_t(RX1_IF2_7_8.size());
        case zbx_cpld_field_t::RX1_LO_9:
            return uint32_t(RX1_LO_9.size());
        case zbx_cpld_field_t::RX1_LO_10:
            return uint32_t(RX1_LO_10.size());
        case zbx_cpld_field_t::RX1_RF_11:
            return uint32_t(RX1_RF_11.size());
        case zbx_cpld_field_t::TX0_DSA1:
            return uint32_t(TX0_DSA1.size());
        case zbx_cpld_field_t::TX0_DSA2:
            return uint32_t(TX0_DSA2.size());
        case zbx_cpld_field_t::TX1_DSA1:
            return uint32_t(TX1_DSA1.size());
        case zbx_cpld_field_t::TX1_DSA2:
            return uint32_t(TX1_DSA2.size());
        case zbx_cpld_field_t::RX0_DSA1:
            return uint32_t(RX0_DSA1.size());
        case zbx_cpld_field_t::RX0_DSA2:
            return uint32_t(RX0_DSA2.size());
        case zbx_cpld_field_t::RX0_DSA3_A:
            return uint32_t(RX0_DSA3_A.size());
        case zbx_cpld_field_t::RX0_DSA3_B:
            return uint32_t(RX0_DSA3_B.size());
        case zbx_cpld_field_t::RX1_DSA1:
            return uint32_t(RX1_DSA1.size());
        case zbx_cpld_field_t::RX1_DSA2:
            return uint32_t(RX1_DSA2.size());
        case zbx_cpld_field_t::RX1_DSA3_A:
            return uint32_t(RX1_DSA3_A.size());
        case zbx_cpld_field_t::RX1_DSA3_B:
            return uint32_t(RX1_DSA3_B.size());
        case zbx_cpld_field_t::TX0_TABLE_SELECT:
            return uint32_t(TX0_TABLE_SELECT.size());
        case zbx_cpld_field_t::TX1_TABLE_SELECT:
            return uint32_t(TX1_TABLE_SELECT.size());
        case zbx_cpld_field_t::RX0_TABLE_SELECT:
            return uint32_t(RX0_TABLE_SELECT.size());
        case zbx_cpld_field_t::RX1_TABLE_SELECT:
            return uint32_t(RX1_TABLE_SELECT.size());
        case zbx_cpld_field_t::TX0_TABLE_DSA1:
            return uint32_t(TX0_TABLE_DSA1.size());
        case zbx_cpld_field_t::TX0_TABLE_DSA2:
            return uint32_t(TX0_TABLE_DSA2.size());
        case zbx_cpld_field_t::TX1_TABLE_DSA1:
            return uint32_t(TX1_TABLE_DSA1.size());
        case zbx_cpld_field_t::TX1_TABLE_DSA2:
            return uint32_t(TX1_TABLE_DSA2.size());
        case zbx_cpld_field_t::RX0_TABLE_DSA1:
            return uint32_t(RX0_TABLE_DSA1.size());
        case zbx_cpld_field_t::RX0_TABLE_DSA2:
            return uint32_t(RX0_TABLE_DSA2.size());
        case zbx_cpld_field_t::RX0_TABLE_DSA3_A:
            return uint32_t(RX0_TABLE_DSA3_A.size());
        case zbx_cpld_field_t::RX0_TABLE_DSA3_B:
            return uint32_t(RX0_TABLE_DSA3_B.size());
        case zbx_cpld_field_t::RX1_TABLE_DSA1:
            return uint32_t(RX1_TABLE_DSA1.size());
        case zbx_cpld_field_t::RX1_TABLE_DSA2:
            return uint32_t(RX1_TABLE_DSA2.size());
        case zbx_cpld_field_t::RX1_TABLE_DSA3_A:
            return uint32_t(RX1_TABLE_DSA3_A.size());
        case zbx_cpld_field_t::RX1_TABLE_DSA3_B:
            return uint32_t(RX1_TABLE_DSA3_B.size());
        default:
            UHD_ASSERT_THROW(false);
            return 0;
        }
    }
    
    uint32_t get_field(zbx_cpld_field_t field) {
        switch(field) {
        case zbx_cpld_field_t::BOARD_ID:
            return uint32_t(BOARD_ID);
        case zbx_cpld_field_t::REVISION:
            return uint32_t(REVISION);
        case zbx_cpld_field_t::OLDEST_COMPAT_REVISION:
            return uint32_t(OLDEST_COMPAT_REVISION);
        case zbx_cpld_field_t::SCRATCH:
            return uint32_t(SCRATCH);
        case zbx_cpld_field_t::GIT_HASH:
            return uint32_t(GIT_HASH);
        case zbx_cpld_field_t::ENABLE_TX_POS_7V0:
            return uint32_t(ENABLE_TX_POS_7V0);
        case zbx_cpld_field_t::ENABLE_RX_POS_7V0:
            return uint32_t(ENABLE_RX_POS_7V0);
        case zbx_cpld_field_t::ENABLE_POS_3V3:
            return uint32_t(ENABLE_POS_3V3);
        case zbx_cpld_field_t::P7V_B_STATUS:
            return uint32_t(P7V_B_STATUS);
        case zbx_cpld_field_t::P7V_A_STATUS:
            return uint32_t(P7V_A_STATUS);
        case zbx_cpld_field_t::PLL_REF_CLOCK_ENABLE:
            return uint32_t(PLL_REF_CLOCK_ENABLE);
        case zbx_cpld_field_t::CURRENT_RF0_CONFIG:
            return uint32_t(CURRENT_RF0_CONFIG);
        case zbx_cpld_field_t::CURRENT_RF1_CONFIG:
            return uint32_t(CURRENT_RF1_CONFIG);
        case zbx_cpld_field_t::CURRENT_RF0_DSA_CONFIG:
            return uint32_t(CURRENT_RF0_DSA_CONFIG);
        case zbx_cpld_field_t::CURRENT_RF1_DSA_CONFIG:
            return uint32_t(CURRENT_RF1_DSA_CONFIG);
        case zbx_cpld_field_t::RF0_OPTION:
            return uint32_t(RF0_OPTION);
        case zbx_cpld_field_t::RF1_OPTION:
            return uint32_t(RF1_OPTION);
        case zbx_cpld_field_t::RF0_DSA_OPTION:
            return uint32_t(RF0_DSA_OPTION);
        case zbx_cpld_field_t::RF1_DSA_OPTION:
            return uint32_t(RF1_DSA_OPTION);
        case zbx_cpld_field_t::SW_RF0_CONFIG:
            return uint32_t(SW_RF0_CONFIG);
        case zbx_cpld_field_t::SW_RF1_CONFIG:
            return uint32_t(SW_RF1_CONFIG);
        case zbx_cpld_field_t::SW_RF0_DSA_CONFIG:
            return uint32_t(SW_RF0_DSA_CONFIG);
        case zbx_cpld_field_t::SW_RF1_DSA_CONFIG:
            return uint32_t(SW_RF1_DSA_CONFIG);
        case zbx_cpld_field_t::DATA:
            return uint32_t(DATA);
        case zbx_cpld_field_t::ADDRESS:
            return uint32_t(ADDRESS);
        case zbx_cpld_field_t::READ_FLAG:
            return uint32_t(READ_FLAG);
        case zbx_cpld_field_t::LO_SELECT:
            return uint32_t(LO_SELECT);
        case zbx_cpld_field_t::START_TRANSACTION:
            return uint32_t(START_TRANSACTION);
        case zbx_cpld_field_t::SPI_READY:
            return uint32_t(SPI_READY);
        case zbx_cpld_field_t::DATA_VALID:
            return uint32_t(DATA_VALID);
        case zbx_cpld_field_t::PULSE_TX0_LO1_SYNC:
            return uint32_t(PULSE_TX0_LO1_SYNC);
        case zbx_cpld_field_t::PULSE_TX0_LO2_SYNC:
            return uint32_t(PULSE_TX0_LO2_SYNC);
        case zbx_cpld_field_t::PULSE_TX1_LO1_SYNC:
            return uint32_t(PULSE_TX1_LO1_SYNC);
        case zbx_cpld_field_t::PULSE_TX1_LO2_SYNC:
            return uint32_t(PULSE_TX1_LO2_SYNC);
        case zbx_cpld_field_t::PULSE_RX0_LO1_SYNC:
            return uint32_t(PULSE_RX0_LO1_SYNC);
        case zbx_cpld_field_t::PULSE_RX0_LO2_SYNC:
            return uint32_t(PULSE_RX0_LO2_SYNC);
        case zbx_cpld_field_t::PULSE_RX1_LO1_SYNC:
            return uint32_t(PULSE_RX1_LO1_SYNC);
        case zbx_cpld_field_t::PULSE_RX1_LO2_SYNC:
            return uint32_t(PULSE_RX1_LO2_SYNC);
        case zbx_cpld_field_t::BYPASS_SYNC_REGISTER:
            return uint32_t(BYPASS_SYNC_REGISTER);
        default:
            UHD_ASSERT_THROW(false);
            return 0;
        }
    }
    
    uint32_t get_field(zbx_cpld_field_t field, const size_t idx) {
        switch(field) {
        case zbx_cpld_field_t::RX0_RX_LED:
            return uint32_t(RX0_RX_LED[idx]);
        case zbx_cpld_field_t::RX0_TRX_LED:
            return uint32_t(RX0_TRX_LED[idx]);
        case zbx_cpld_field_t::TX0_TRX_LED:
            return uint32_t(TX0_TRX_LED[idx]);
        case zbx_cpld_field_t::RX1_RX_LED:
            return uint32_t(RX1_RX_LED[idx]);
        case zbx_cpld_field_t::RX1_TRX_LED:
            return uint32_t(RX1_TRX_LED[idx]);
        case zbx_cpld_field_t::TX1_TRX_LED:
            return uint32_t(TX1_TRX_LED[idx]);
        case zbx_cpld_field_t::TX0_IF2_1_2:
            return uint32_t(TX0_IF2_1_2[idx]);
        case zbx_cpld_field_t::TX0_IF1_3:
            return uint32_t(TX0_IF1_3[idx]);
        case zbx_cpld_field_t::TX0_IF1_4:
            return uint32_t(TX0_IF1_4[idx]);
        case zbx_cpld_field_t::TX0_IF1_5:
            return uint32_t(TX0_IF1_5[idx]);
        case zbx_cpld_field_t::TX0_IF1_6:
            return uint32_t(TX0_IF1_6[idx]);
        case zbx_cpld_field_t::TX0_7:
            return uint32_t(TX0_7[idx]);
        case zbx_cpld_field_t::TX0_RF_8:
            return uint32_t(TX0_RF_8[idx]);
        case zbx_cpld_field_t::TX0_RF_9:
            return uint32_t(TX0_RF_9[idx]);
        case zbx_cpld_field_t::TX0_ANT_10:
            return uint32_t(TX0_ANT_10[idx]);
        case zbx_cpld_field_t::TX0_ANT_11:
            return uint32_t(TX0_ANT_11[idx]);
        case zbx_cpld_field_t::TX0_LO_13:
            return uint32_t(TX0_LO_13[idx]);
        case zbx_cpld_field_t::TX0_LO_14:
            return uint32_t(TX0_LO_14[idx]);
        case zbx_cpld_field_t::TX1_IF2_1_2:
            return uint32_t(TX1_IF2_1_2[idx]);
        case zbx_cpld_field_t::TX1_IF1_3:
            return uint32_t(TX1_IF1_3[idx]);
        case zbx_cpld_field_t::TX1_IF1_4:
            return uint32_t(TX1_IF1_4[idx]);
        case zbx_cpld_field_t::TX1_IF1_5:
            return uint32_t(TX1_IF1_5[idx]);
        case zbx_cpld_field_t::TX1_IF1_6:
            return uint32_t(TX1_IF1_6[idx]);
        case zbx_cpld_field_t::TX1_7:
            return uint32_t(TX1_7[idx]);
        case zbx_cpld_field_t::TX1_RF_8:
            return uint32_t(TX1_RF_8[idx]);
        case zbx_cpld_field_t::TX1_RF_9:
            return uint32_t(TX1_RF_9[idx]);
        case zbx_cpld_field_t::TX1_ANT_10:
            return uint32_t(TX1_ANT_10[idx]);
        case zbx_cpld_field_t::TX1_ANT_11:
            return uint32_t(TX1_ANT_11[idx]);
        case zbx_cpld_field_t::TX1_LO_13:
            return uint32_t(TX1_LO_13[idx]);
        case zbx_cpld_field_t::TX1_LO_14:
            return uint32_t(TX1_LO_14[idx]);
        case zbx_cpld_field_t::RX0_ANT_1:
            return uint32_t(RX0_ANT_1[idx]);
        case zbx_cpld_field_t::RX0_2:
            return uint32_t(RX0_2[idx]);
        case zbx_cpld_field_t::RX0_RF_3:
            return uint32_t(RX0_RF_3[idx]);
        case zbx_cpld_field_t::RX0_4:
            return uint32_t(RX0_4[idx]);
        case zbx_cpld_field_t::RX0_IF1_5:
            return uint32_t(RX0_IF1_5[idx]);
        case zbx_cpld_field_t::RX0_IF1_6:
            return uint32_t(RX0_IF1_6[idx]);
        case zbx_cpld_field_t::RX0_IF2_7_8:
            return uint32_t(RX0_IF2_7_8[idx]);
        case zbx_cpld_field_t::RX0_LO_9:
            return uint32_t(RX0_LO_9[idx]);
        case zbx_cpld_field_t::RX0_LO_10:
            return uint32_t(RX0_LO_10[idx]);
        case zbx_cpld_field_t::RX0_RF_11:
            return uint32_t(RX0_RF_11[idx]);
        case zbx_cpld_field_t::RX1_ANT_1:
            return uint32_t(RX1_ANT_1[idx]);
        case zbx_cpld_field_t::RX1_2:
            return uint32_t(RX1_2[idx]);
        case zbx_cpld_field_t::RX1_RF_3:
            return uint32_t(RX1_RF_3[idx]);
        case zbx_cpld_field_t::RX1_4:
            return uint32_t(RX1_4[idx]);
        case zbx_cpld_field_t::RX1_IF1_5:
            return uint32_t(RX1_IF1_5[idx]);
        case zbx_cpld_field_t::RX1_IF1_6:
            return uint32_t(RX1_IF1_6[idx]);
        case zbx_cpld_field_t::RX1_IF2_7_8:
            return uint32_t(RX1_IF2_7_8[idx]);
        case zbx_cpld_field_t::RX1_LO_9:
            return uint32_t(RX1_LO_9[idx]);
        case zbx_cpld_field_t::RX1_LO_10:
            return uint32_t(RX1_LO_10[idx]);
        case zbx_cpld_field_t::RX1_RF_11:
            return uint32_t(RX1_RF_11[idx]);
        case zbx_cpld_field_t::TX0_DSA1:
            return uint32_t(TX0_DSA1[idx]);
        case zbx_cpld_field_t::TX0_DSA2:
            return uint32_t(TX0_DSA2[idx]);
        case zbx_cpld_field_t::TX1_DSA1:
            return uint32_t(TX1_DSA1[idx]);
        case zbx_cpld_field_t::TX1_DSA2:
            return uint32_t(TX1_DSA2[idx]);
        case zbx_cpld_field_t::RX0_DSA1:
            return uint32_t(RX0_DSA1[idx]);
        case zbx_cpld_field_t::RX0_DSA2:
            return uint32_t(RX0_DSA2[idx]);
        case zbx_cpld_field_t::RX0_DSA3_A:
            return uint32_t(RX0_DSA3_A[idx]);
        case zbx_cpld_field_t::RX0_DSA3_B:
            return uint32_t(RX0_DSA3_B[idx]);
        case zbx_cpld_field_t::RX1_DSA1:
            return uint32_t(RX1_DSA1[idx]);
        case zbx_cpld_field_t::RX1_DSA2:
            return uint32_t(RX1_DSA2[idx]);
        case zbx_cpld_field_t::RX1_DSA3_A:
            return uint32_t(RX1_DSA3_A[idx]);
        case zbx_cpld_field_t::RX1_DSA3_B:
            return uint32_t(RX1_DSA3_B[idx]);
        case zbx_cpld_field_t::TX0_TABLE_SELECT:
            return uint32_t(TX0_TABLE_SELECT[idx]);
        case zbx_cpld_field_t::TX1_TABLE_SELECT:
            return uint32_t(TX1_TABLE_SELECT[idx]);
        case zbx_cpld_field_t::RX0_TABLE_SELECT:
            return uint32_t(RX0_TABLE_SELECT[idx]);
        case zbx_cpld_field_t::RX1_TABLE_SELECT:
            return uint32_t(RX1_TABLE_SELECT[idx]);
        case zbx_cpld_field_t::TX0_TABLE_DSA1:
            return uint32_t(TX0_TABLE_DSA1[idx]);
        case zbx_cpld_field_t::TX0_TABLE_DSA2:
            return uint32_t(TX0_TABLE_DSA2[idx]);
        case zbx_cpld_field_t::TX1_TABLE_DSA1:
            return uint32_t(TX1_TABLE_DSA1[idx]);
        case zbx_cpld_field_t::TX1_TABLE_DSA2:
            return uint32_t(TX1_TABLE_DSA2[idx]);
        case zbx_cpld_field_t::RX0_TABLE_DSA1:
            return uint32_t(RX0_TABLE_DSA1[idx]);
        case zbx_cpld_field_t::RX0_TABLE_DSA2:
            return uint32_t(RX0_TABLE_DSA2[idx]);
        case zbx_cpld_field_t::RX0_TABLE_DSA3_A:
            return uint32_t(RX0_TABLE_DSA3_A[idx]);
        case zbx_cpld_field_t::RX0_TABLE_DSA3_B:
            return uint32_t(RX0_TABLE_DSA3_B[idx]);
        case zbx_cpld_field_t::RX1_TABLE_DSA1:
            return uint32_t(RX1_TABLE_DSA1[idx]);
        case zbx_cpld_field_t::RX1_TABLE_DSA2:
            return uint32_t(RX1_TABLE_DSA2[idx]);
        case zbx_cpld_field_t::RX1_TABLE_DSA3_A:
            return uint32_t(RX1_TABLE_DSA3_A[idx]);
        case zbx_cpld_field_t::RX1_TABLE_DSA3_B:
            return uint32_t(RX1_TABLE_DSA3_B[idx]);
        default:
            UHD_ASSERT_THROW(false);
            return 0;
        }
    }
    
    void set_field(zbx_cpld_field_t field, uint32_t value) {
        switch(field) {
        case zbx_cpld_field_t::SCRATCH:
            SCRATCH = static_cast<uint32_t>(value);
            break;
        case zbx_cpld_field_t::ENABLE_TX_POS_7V0:
            ENABLE_TX_POS_7V0 = static_cast<ENABLE_TX_POS_7V0_t>(value);
            break;
        case zbx_cpld_field_t::ENABLE_RX_POS_7V0:
            ENABLE_RX_POS_7V0 = static_cast<ENABLE_RX_POS_7V0_t>(value);
            break;
        case zbx_cpld_field_t::ENABLE_POS_3V3:
            ENABLE_POS_3V3 = static_cast<ENABLE_POS_3V3_t>(value);
            break;
        case zbx_cpld_field_t::PLL_REF_CLOCK_ENABLE:
            PLL_REF_CLOCK_ENABLE = static_cast<PLL_REF_CLOCK_ENABLE_t>(value);
            break;
        case zbx_cpld_field_t::RF0_OPTION:
            RF0_OPTION = static_cast<RF0_OPTION_t>(value);
            break;
        case zbx_cpld_field_t::RF1_OPTION:
            RF1_OPTION = static_cast<RF1_OPTION_t>(value);
            break;
        case zbx_cpld_field_t::RF0_DSA_OPTION:
            RF0_DSA_OPTION = static_cast<RF0_DSA_OPTION_t>(value);
            break;
        case zbx_cpld_field_t::RF1_DSA_OPTION:
            RF1_DSA_OPTION = static_cast<RF1_DSA_OPTION_t>(value);
            break;
        case zbx_cpld_field_t::SW_RF0_CONFIG:
            SW_RF0_CONFIG = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::SW_RF1_CONFIG:
            SW_RF1_CONFIG = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::SW_RF0_DSA_CONFIG:
            SW_RF0_DSA_CONFIG = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::SW_RF1_DSA_CONFIG:
            SW_RF1_DSA_CONFIG = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::DATA:
            DATA = static_cast<uint16_t>(value);
            break;
        case zbx_cpld_field_t::ADDRESS:
            ADDRESS = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::READ_FLAG:
            READ_FLAG = static_cast<READ_FLAG_t>(value);
            break;
        case zbx_cpld_field_t::LO_SELECT:
            LO_SELECT = static_cast<LO_SELECT_t>(value);
            break;
        case zbx_cpld_field_t::START_TRANSACTION:
            START_TRANSACTION = static_cast<START_TRANSACTION_t>(value);
            break;
        case zbx_cpld_field_t::PULSE_TX0_LO1_SYNC:
            PULSE_TX0_LO1_SYNC = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::PULSE_TX0_LO2_SYNC:
            PULSE_TX0_LO2_SYNC = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::PULSE_TX1_LO1_SYNC:
            PULSE_TX1_LO1_SYNC = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::PULSE_TX1_LO2_SYNC:
            PULSE_TX1_LO2_SYNC = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::PULSE_RX0_LO1_SYNC:
            PULSE_RX0_LO1_SYNC = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::PULSE_RX0_LO2_SYNC:
            PULSE_RX0_LO2_SYNC = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::PULSE_RX1_LO1_SYNC:
            PULSE_RX1_LO1_SYNC = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::PULSE_RX1_LO2_SYNC:
            PULSE_RX1_LO2_SYNC = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::BYPASS_SYNC_REGISTER:
            BYPASS_SYNC_REGISTER = static_cast<BYPASS_SYNC_REGISTER_t>(value);
            break;
        default:
            UHD_ASSERT_THROW(false);
        }
    }
    
    void set_field(zbx_cpld_field_t field, uint32_t value, const size_t idx)
    {
        switch(field) {
        case zbx_cpld_field_t::RX0_RX_LED:
            RX0_RX_LED[idx] = static_cast<RX0_RX_LED_t>(value);
            break;
        case zbx_cpld_field_t::RX0_TRX_LED:
            RX0_TRX_LED[idx] = static_cast<RX0_TRX_LED_t>(value);
            break;
        case zbx_cpld_field_t::TX0_TRX_LED:
            TX0_TRX_LED[idx] = static_cast<TX0_TRX_LED_t>(value);
            break;
        case zbx_cpld_field_t::RX1_RX_LED:
            RX1_RX_LED[idx] = static_cast<RX1_RX_LED_t>(value);
            break;
        case zbx_cpld_field_t::RX1_TRX_LED:
            RX1_TRX_LED[idx] = static_cast<RX1_TRX_LED_t>(value);
            break;
        case zbx_cpld_field_t::TX1_TRX_LED:
            TX1_TRX_LED[idx] = static_cast<TX1_TRX_LED_t>(value);
            break;
        case zbx_cpld_field_t::TX0_IF2_1_2:
            TX0_IF2_1_2[idx] = static_cast<TX0_IF2_1_2_t>(value);
            break;
        case zbx_cpld_field_t::TX0_IF1_3:
            TX0_IF1_3[idx] = static_cast<TX0_IF1_3_t>(value);
            break;
        case zbx_cpld_field_t::TX0_IF1_4:
            TX0_IF1_4[idx] = static_cast<TX0_IF1_4_t>(value);
            break;
        case zbx_cpld_field_t::TX0_IF1_5:
            TX0_IF1_5[idx] = static_cast<TX0_IF1_5_t>(value);
            break;
        case zbx_cpld_field_t::TX0_IF1_6:
            TX0_IF1_6[idx] = static_cast<TX0_IF1_6_t>(value);
            break;
        case zbx_cpld_field_t::TX0_7:
            TX0_7[idx] = static_cast<TX0_7_t>(value);
            break;
        case zbx_cpld_field_t::TX0_RF_8:
            TX0_RF_8[idx] = static_cast<TX0_RF_8_t>(value);
            break;
        case zbx_cpld_field_t::TX0_RF_9:
            TX0_RF_9[idx] = static_cast<TX0_RF_9_t>(value);
            break;
        case zbx_cpld_field_t::TX0_ANT_10:
            TX0_ANT_10[idx] = static_cast<TX0_ANT_10_t>(value);
            break;
        case zbx_cpld_field_t::TX0_ANT_11:
            TX0_ANT_11[idx] = static_cast<TX0_ANT_11_t>(value);
            break;
        case zbx_cpld_field_t::TX0_LO_13:
            TX0_LO_13[idx] = static_cast<TX0_LO_13_t>(value);
            break;
        case zbx_cpld_field_t::TX0_LO_14:
            TX0_LO_14[idx] = static_cast<TX0_LO_14_t>(value);
            break;
        case zbx_cpld_field_t::TX1_IF2_1_2:
            TX1_IF2_1_2[idx] = static_cast<TX1_IF2_1_2_t>(value);
            break;
        case zbx_cpld_field_t::TX1_IF1_3:
            TX1_IF1_3[idx] = static_cast<TX1_IF1_3_t>(value);
            break;
        case zbx_cpld_field_t::TX1_IF1_4:
            TX1_IF1_4[idx] = static_cast<TX1_IF1_4_t>(value);
            break;
        case zbx_cpld_field_t::TX1_IF1_5:
            TX1_IF1_5[idx] = static_cast<TX1_IF1_5_t>(value);
            break;
        case zbx_cpld_field_t::TX1_IF1_6:
            TX1_IF1_6[idx] = static_cast<TX1_IF1_6_t>(value);
            break;
        case zbx_cpld_field_t::TX1_7:
            TX1_7[idx] = static_cast<TX1_7_t>(value);
            break;
        case zbx_cpld_field_t::TX1_RF_8:
            TX1_RF_8[idx] = static_cast<TX1_RF_8_t>(value);
            break;
        case zbx_cpld_field_t::TX1_RF_9:
            TX1_RF_9[idx] = static_cast<TX1_RF_9_t>(value);
            break;
        case zbx_cpld_field_t::TX1_ANT_10:
            TX1_ANT_10[idx] = static_cast<TX1_ANT_10_t>(value);
            break;
        case zbx_cpld_field_t::TX1_ANT_11:
            TX1_ANT_11[idx] = static_cast<TX1_ANT_11_t>(value);
            break;
        case zbx_cpld_field_t::TX1_LO_13:
            TX1_LO_13[idx] = static_cast<TX1_LO_13_t>(value);
            break;
        case zbx_cpld_field_t::TX1_LO_14:
            TX1_LO_14[idx] = static_cast<TX1_LO_14_t>(value);
            break;
        case zbx_cpld_field_t::RX0_ANT_1:
            RX0_ANT_1[idx] = static_cast<RX0_ANT_1_t>(value);
            break;
        case zbx_cpld_field_t::RX0_2:
            RX0_2[idx] = static_cast<RX0_2_t>(value);
            break;
        case zbx_cpld_field_t::RX0_RF_3:
            RX0_RF_3[idx] = static_cast<RX0_RF_3_t>(value);
            break;
        case zbx_cpld_field_t::RX0_4:
            RX0_4[idx] = static_cast<RX0_4_t>(value);
            break;
        case zbx_cpld_field_t::RX0_IF1_5:
            RX0_IF1_5[idx] = static_cast<RX0_IF1_5_t>(value);
            break;
        case zbx_cpld_field_t::RX0_IF1_6:
            RX0_IF1_6[idx] = static_cast<RX0_IF1_6_t>(value);
            break;
        case zbx_cpld_field_t::RX0_IF2_7_8:
            RX0_IF2_7_8[idx] = static_cast<RX0_IF2_7_8_t>(value);
            break;
        case zbx_cpld_field_t::RX0_LO_9:
            RX0_LO_9[idx] = static_cast<RX0_LO_9_t>(value);
            break;
        case zbx_cpld_field_t::RX0_LO_10:
            RX0_LO_10[idx] = static_cast<RX0_LO_10_t>(value);
            break;
        case zbx_cpld_field_t::RX0_RF_11:
            RX0_RF_11[idx] = static_cast<RX0_RF_11_t>(value);
            break;
        case zbx_cpld_field_t::RX1_ANT_1:
            RX1_ANT_1[idx] = static_cast<RX1_ANT_1_t>(value);
            break;
        case zbx_cpld_field_t::RX1_2:
            RX1_2[idx] = static_cast<RX1_2_t>(value);
            break;
        case zbx_cpld_field_t::RX1_RF_3:
            RX1_RF_3[idx] = static_cast<RX1_RF_3_t>(value);
            break;
        case zbx_cpld_field_t::RX1_4:
            RX1_4[idx] = static_cast<RX1_4_t>(value);
            break;
        case zbx_cpld_field_t::RX1_IF1_5:
            RX1_IF1_5[idx] = static_cast<RX1_IF1_5_t>(value);
            break;
        case zbx_cpld_field_t::RX1_IF1_6:
            RX1_IF1_6[idx] = static_cast<RX1_IF1_6_t>(value);
            break;
        case zbx_cpld_field_t::RX1_IF2_7_8:
            RX1_IF2_7_8[idx] = static_cast<RX1_IF2_7_8_t>(value);
            break;
        case zbx_cpld_field_t::RX1_LO_9:
            RX1_LO_9[idx] = static_cast<RX1_LO_9_t>(value);
            break;
        case zbx_cpld_field_t::RX1_LO_10:
            RX1_LO_10[idx] = static_cast<RX1_LO_10_t>(value);
            break;
        case zbx_cpld_field_t::RX1_RF_11:
            RX1_RF_11[idx] = static_cast<RX1_RF_11_t>(value);
            break;
        case zbx_cpld_field_t::TX0_DSA1:
            TX0_DSA1[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::TX0_DSA2:
            TX0_DSA2[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::TX1_DSA1:
            TX1_DSA1[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::TX1_DSA2:
            TX1_DSA2[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::RX0_DSA1:
            RX0_DSA1[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::RX0_DSA2:
            RX0_DSA2[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::RX0_DSA3_A:
            RX0_DSA3_A[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::RX0_DSA3_B:
            RX0_DSA3_B[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::RX1_DSA1:
            RX1_DSA1[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::RX1_DSA2:
            RX1_DSA2[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::RX1_DSA3_A:
            RX1_DSA3_A[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::RX1_DSA3_B:
            RX1_DSA3_B[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::TX0_TABLE_SELECT:
            TX0_TABLE_SELECT[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::TX1_TABLE_SELECT:
            TX1_TABLE_SELECT[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::RX0_TABLE_SELECT:
            RX0_TABLE_SELECT[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::RX1_TABLE_SELECT:
            RX1_TABLE_SELECT[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::TX0_TABLE_DSA1:
            TX0_TABLE_DSA1[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::TX0_TABLE_DSA2:
            TX0_TABLE_DSA2[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::TX1_TABLE_DSA1:
            TX1_TABLE_DSA1[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::TX1_TABLE_DSA2:
            TX1_TABLE_DSA2[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::RX0_TABLE_DSA1:
            RX0_TABLE_DSA1[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::RX0_TABLE_DSA2:
            RX0_TABLE_DSA2[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::RX0_TABLE_DSA3_A:
            RX0_TABLE_DSA3_A[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::RX0_TABLE_DSA3_B:
            RX0_TABLE_DSA3_B[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::RX1_TABLE_DSA1:
            RX1_TABLE_DSA1[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::RX1_TABLE_DSA2:
            RX1_TABLE_DSA2[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::RX1_TABLE_DSA3_A:
            RX1_TABLE_DSA3_A[idx] = static_cast<uint8_t>(value);
            break;
        case zbx_cpld_field_t::RX1_TABLE_DSA3_B:
            RX1_TABLE_DSA3_B[idx] = static_cast<uint8_t>(value);
            break;
        default:
            UHD_ASSERT_THROW(false);
        }
    }
    
    uint32_t get_reg(uint16_t addr)
    {
        uint32_t reg = 0;
        // First the regular registers
        switch(addr) {
        case 0:
            reg |= (uint32_t(BOARD_ID) & 0xffff) << 0;
            break;
        case 4:
            reg |= (uint32_t(REVISION) & 0xffffffff) << 0;
            break;
        case 8:
            reg |= (uint32_t(OLDEST_COMPAT_REVISION) & 0xffffffff) << 0;
            break;
        case 12:
            reg |= (uint32_t(SCRATCH) & 0xffffffff) << 0;
            break;
        case 16:
            reg |= (uint32_t(GIT_HASH) & 0xffffffff) << 0;
            break;
        case 64:
            reg |= (uint32_t(ENABLE_TX_POS_7V0) & 0x1) << 0;
            reg |= (uint32_t(ENABLE_RX_POS_7V0) & 0x1) << 1;
            reg |= (uint32_t(ENABLE_POS_3V3) & 0x1) << 2;
            break;
        case 68:
            reg |= (uint32_t(P7V_B_STATUS) & 0x1) << 0;
            reg |= (uint32_t(P7V_A_STATUS) & 0x1) << 1;
            break;
        case 72:
            reg |= (uint32_t(PLL_REF_CLOCK_ENABLE) & 0x1) << 0;
            break;
        case 4096:
            reg |= (uint32_t(CURRENT_RF0_CONFIG) & 0xff) << 0;
            reg |= (uint32_t(CURRENT_RF1_CONFIG) & 0xff) << 8;
            reg |= (uint32_t(CURRENT_RF0_DSA_CONFIG) & 0xff) << 16;
            reg |= (uint32_t(CURRENT_RF1_DSA_CONFIG) & 0xff) << 24;
            break;
        case 4100:
            reg |= (uint32_t(RF0_OPTION) & 0x3) << 0;
            reg |= (uint32_t(RF1_OPTION) & 0x3) << 8;
            reg |= (uint32_t(RF0_DSA_OPTION) & 0x3) << 16;
            reg |= (uint32_t(RF1_DSA_OPTION) & 0x3) << 24;
            break;
        case 4104:
            reg |= (uint32_t(SW_RF0_CONFIG) & 0xff) << 0;
            reg |= (uint32_t(SW_RF1_CONFIG) & 0xff) << 8;
            reg |= (uint32_t(SW_RF0_DSA_CONFIG) & 0xff) << 16;
            reg |= (uint32_t(SW_RF1_DSA_CONFIG) & 0xff) << 24;
            break;
        case 4128:
            reg |= (uint32_t(DATA) & 0xffff) << 0;
            reg |= (uint32_t(ADDRESS) & 0x7f) << 16;
            reg |= (uint32_t(READ_FLAG) & 0x1) << 23;
            reg |= (uint32_t(LO_SELECT) & 0x7) << 24;
            reg |= (uint32_t(START_TRANSACTION) & 0x1) << 28;
            reg |= (uint32_t(SPI_READY) & 0x1) << 30;
            reg |= (uint32_t(DATA_VALID) & 0x1) << 31;
            break;
        case 4132:
            reg |= (uint32_t(PULSE_TX0_LO1_SYNC) & 0x1) << 0;
            reg |= (uint32_t(PULSE_TX0_LO2_SYNC) & 0x1) << 1;
            reg |= (uint32_t(PULSE_TX1_LO1_SYNC) & 0x1) << 2;
            reg |= (uint32_t(PULSE_TX1_LO2_SYNC) & 0x1) << 3;
            reg |= (uint32_t(PULSE_RX0_LO1_SYNC) & 0x1) << 4;
            reg |= (uint32_t(PULSE_RX0_LO2_SYNC) & 0x1) << 5;
            reg |= (uint32_t(PULSE_RX1_LO1_SYNC) & 0x1) << 6;
            reg |= (uint32_t(PULSE_RX1_LO2_SYNC) & 0x1) << 7;
            reg |= (uint32_t(BYPASS_SYNC_REGISTER) & 0x1) << 8;
            break;
        default:
            break;
        }
        // Now the arrays
        // We can do this because all arrays have a base address that is a multiple
        // of 256 (0x100). In other words, this is a hack that only works if you
        // know exactly what you're doing, which is OK in this case, because it's in
        // this same file as the register map.
        const uint16_t array_offset = addr % 256;
        const uint16_t base_addr = addr - array_offset;
        const size_t index = array_offset / 4;
        switch(base_addr) {
        case 5120:
            
            
            reg |= (uint32_t(RX0_RX_LED[index]) & 0x1) << 0;
            
            
            reg |= (uint32_t(RX0_TRX_LED[index]) & 0x1) << 1;
            
            
            reg |= (uint32_t(TX0_TRX_LED[index]) & 0x1) << 2;
            
            
            reg |= (uint32_t(RX1_RX_LED[index]) & 0x1) << 16;
            
            
            reg |= (uint32_t(RX1_TRX_LED[index]) & 0x1) << 17;
            
            
            reg |= (uint32_t(TX1_TRX_LED[index]) & 0x1) << 18;
            break;
        case 8192:
            
            
            reg |= (uint32_t(TX0_IF2_1_2[index]) & 0x1) << 0;
            
            
            reg |= (uint32_t(TX0_IF1_3[index]) & 0x3) << 2;
            
            
            reg |= (uint32_t(TX0_IF1_4[index]) & 0x3) << 4;
            
            
            reg |= (uint32_t(TX0_IF1_5[index]) & 0x3) << 6;
            
            
            reg |= (uint32_t(TX0_IF1_6[index]) & 0x3) << 8;
            
            
            reg |= (uint32_t(TX0_7[index]) & 0x3) << 10;
            
            
            reg |= (uint32_t(TX0_RF_8[index]) & 0x7) << 12;
            
            
            reg |= (uint32_t(TX0_RF_9[index]) & 0x3) << 16;
            
            
            reg |= (uint32_t(TX0_ANT_10[index]) & 0x3) << 18;
            
            
            reg |= (uint32_t(TX0_ANT_11[index]) & 0x3) << 20;
            
            
            reg |= (uint32_t(TX0_LO_13[index]) & 0x1) << 24;
            
            
            reg |= (uint32_t(TX0_LO_14[index]) & 0x1) << 26;
            break;
        case 9216:
            
            
            reg |= (uint32_t(TX1_IF2_1_2[index]) & 0x1) << 0;
            
            
            reg |= (uint32_t(TX1_IF1_3[index]) & 0x3) << 2;
            
            
            reg |= (uint32_t(TX1_IF1_4[index]) & 0x3) << 4;
            
            
            reg |= (uint32_t(TX1_IF1_5[index]) & 0x3) << 6;
            
            
            reg |= (uint32_t(TX1_IF1_6[index]) & 0x3) << 8;
            
            
            reg |= (uint32_t(TX1_7[index]) & 0x3) << 10;
            
            
            reg |= (uint32_t(TX1_RF_8[index]) & 0x7) << 12;
            
            
            reg |= (uint32_t(TX1_RF_9[index]) & 0x3) << 16;
            
            
            reg |= (uint32_t(TX1_ANT_10[index]) & 0x3) << 18;
            
            
            reg |= (uint32_t(TX1_ANT_11[index]) & 0x3) << 20;
            
            
            reg |= (uint32_t(TX1_LO_13[index]) & 0x1) << 24;
            
            
            reg |= (uint32_t(TX1_LO_14[index]) & 0x1) << 26;
            break;
        case 10240:
            
            
            reg |= (uint32_t(RX0_ANT_1[index]) & 0x3) << 0;
            
            
            reg |= (uint32_t(RX0_2[index]) & 0x1) << 2;
            
            
            reg |= (uint32_t(RX0_RF_3[index]) & 0x7) << 4;
            
            
            reg |= (uint32_t(RX0_4[index]) & 0x1) << 8;
            
            
            reg |= (uint32_t(RX0_IF1_5[index]) & 0x3) << 10;
            
            
            reg |= (uint32_t(RX0_IF1_6[index]) & 0x3) << 12;
            
            
            reg |= (uint32_t(RX0_IF2_7_8[index]) & 0x1) << 14;
            
            
            reg |= (uint32_t(RX0_LO_9[index]) & 0x1) << 16;
            
            
            reg |= (uint32_t(RX0_LO_10[index]) & 0x1) << 18;
            
            
            reg |= (uint32_t(RX0_RF_11[index]) & 0x7) << 20;
            break;
        case 11264:
            
            
            reg |= (uint32_t(RX1_ANT_1[index]) & 0x3) << 0;
            
            
            reg |= (uint32_t(RX1_2[index]) & 0x1) << 2;
            
            
            reg |= (uint32_t(RX1_RF_3[index]) & 0x7) << 4;
            
            
            reg |= (uint32_t(RX1_4[index]) & 0x1) << 8;
            
            
            reg |= (uint32_t(RX1_IF1_5[index]) & 0x3) << 10;
            
            
            reg |= (uint32_t(RX1_IF1_6[index]) & 0x3) << 12;
            
            
            reg |= (uint32_t(RX1_IF2_7_8[index]) & 0x1) << 14;
            
            
            reg |= (uint32_t(RX1_LO_9[index]) & 0x1) << 16;
            
            
            reg |= (uint32_t(RX1_LO_10[index]) & 0x1) << 18;
            
            
            reg |= (uint32_t(RX1_RF_11[index]) & 0x7) << 20;
            break;
        case 12288:
            
            
            reg |= (uint32_t(TX0_DSA1[index]) & 0x1f) << 0;
            
            
            reg |= (uint32_t(TX0_DSA2[index]) & 0x1f) << 8;
            break;
        case 13312:
            
            
            reg |= (uint32_t(TX1_DSA1[index]) & 0x1f) << 0;
            
            
            reg |= (uint32_t(TX1_DSA2[index]) & 0x1f) << 8;
            break;
        case 14336:
            
            
            reg |= (uint32_t(RX0_DSA1[index]) & 0xf) << 0;
            
            
            reg |= (uint32_t(RX0_DSA2[index]) & 0xf) << 4;
            
            
            reg |= (uint32_t(RX0_DSA3_A[index]) & 0xf) << 8;
            
            
            reg |= (uint32_t(RX0_DSA3_B[index]) & 0xf) << 12;
            break;
        case 15360:
            
            
            reg |= (uint32_t(RX1_DSA1[index]) & 0xf) << 0;
            
            
            reg |= (uint32_t(RX1_DSA2[index]) & 0xf) << 4;
            
            
            reg |= (uint32_t(RX1_DSA3_A[index]) & 0xf) << 8;
            
            
            reg |= (uint32_t(RX1_DSA3_B[index]) & 0xf) << 12;
            break;
        case 16384:
            
            
            reg |= (uint32_t(TX0_TABLE_SELECT[index]) & 0xff) << 0;
            break;
        case 17408:
            
            
            reg |= (uint32_t(TX1_TABLE_SELECT[index]) & 0xff) << 0;
            break;
        case 18432:
            
            
            reg |= (uint32_t(RX0_TABLE_SELECT[index]) & 0xff) << 0;
            break;
        case 19456:
            
            
            reg |= (uint32_t(RX1_TABLE_SELECT[index]) & 0xff) << 0;
            break;
        case 20480:
            
            
            reg |= (uint32_t(TX0_TABLE_DSA1[index]) & 0x1f) << 0;
            
            
            reg |= (uint32_t(TX0_TABLE_DSA2[index]) & 0x1f) << 8;
            break;
        case 21504:
            
            
            reg |= (uint32_t(TX1_TABLE_DSA1[index]) & 0x1f) << 0;
            
            
            reg |= (uint32_t(TX1_TABLE_DSA2[index]) & 0x1f) << 8;
            break;
        case 22528:
            
            
            reg |= (uint32_t(RX0_TABLE_DSA1[index]) & 0xf) << 0;
            
            
            reg |= (uint32_t(RX0_TABLE_DSA2[index]) & 0xf) << 4;
            
            
            reg |= (uint32_t(RX0_TABLE_DSA3_A[index]) & 0xf) << 8;
            
            
            reg |= (uint32_t(RX0_TABLE_DSA3_B[index]) & 0xf) << 12;
            break;
        case 23552:
            
            
            reg |= (uint32_t(RX1_TABLE_DSA1[index]) & 0xf) << 0;
            
            
            reg |= (uint32_t(RX1_TABLE_DSA2[index]) & 0xf) << 4;
            
            
            reg |= (uint32_t(RX1_TABLE_DSA3_A[index]) & 0xf) << 8;
            
            
            reg |= (uint32_t(RX1_TABLE_DSA3_B[index]) & 0xf) << 12;
            break;
        default:
            break;
        }
        return reg;
    }
    
    void set_reg(uint16_t addr, uint32_t val)
    {
        switch(addr) {
        case 0:
                BOARD_ID = static_cast<uint16_t>((val & (0xffff << 0)) >> 0);
            break;
        case 4:
                REVISION = static_cast<uint32_t>((val & (0xffffffff << 0)) >> 0);
            break;
        case 8:
                OLDEST_COMPAT_REVISION = static_cast<uint32_t>((val & (0xffffffff << 0)) >> 0);
            break;
        case 12:
                SCRATCH = static_cast<uint32_t>((val & (0xffffffff << 0)) >> 0);
            break;
        case 16:
                GIT_HASH = static_cast<uint32_t>((val & (0xffffffff << 0)) >> 0);
            break;
        case 64:
                ENABLE_TX_POS_7V0 = static_cast<ENABLE_TX_POS_7V0_t>((val & (0x1 << 0)) >> 0);
                ENABLE_RX_POS_7V0 = static_cast<ENABLE_RX_POS_7V0_t>((val & (0x1 << 1)) >> 1);
                ENABLE_POS_3V3 = static_cast<ENABLE_POS_3V3_t>((val & (0x1 << 2)) >> 2);
            break;
        case 68:
                P7V_B_STATUS = static_cast<uint8_t>((val & (0x1 << 0)) >> 0);
                P7V_A_STATUS = static_cast<uint8_t>((val & (0x1 << 1)) >> 1);
            break;
        case 72:
                PLL_REF_CLOCK_ENABLE = static_cast<PLL_REF_CLOCK_ENABLE_t>((val & (0x1 << 0)) >> 0);
            break;
        case 4096:
                CURRENT_RF0_CONFIG = static_cast<uint8_t>((val & (0xff << 0)) >> 0);
                CURRENT_RF1_CONFIG = static_cast<uint8_t>((val & (0xff << 8)) >> 8);
                CURRENT_RF0_DSA_CONFIG = static_cast<uint8_t>((val & (0xff << 16)) >> 16);
                CURRENT_RF1_DSA_CONFIG = static_cast<uint8_t>((val & (0xff << 24)) >> 24);
            break;
        case 4100:
                RF0_OPTION = static_cast<RF0_OPTION_t>((val & (0x3 << 0)) >> 0);
                RF1_OPTION = static_cast<RF1_OPTION_t>((val & (0x3 << 8)) >> 8);
                RF0_DSA_OPTION = static_cast<RF0_DSA_OPTION_t>((val & (0x3 << 16)) >> 16);
                RF1_DSA_OPTION = static_cast<RF1_DSA_OPTION_t>((val & (0x3 << 24)) >> 24);
            break;
        case 4104:
                SW_RF0_CONFIG = static_cast<uint8_t>((val & (0xff << 0)) >> 0);
                SW_RF1_CONFIG = static_cast<uint8_t>((val & (0xff << 8)) >> 8);
                SW_RF0_DSA_CONFIG = static_cast<uint8_t>((val & (0xff << 16)) >> 16);
                SW_RF1_DSA_CONFIG = static_cast<uint8_t>((val & (0xff << 24)) >> 24);
            break;
        case 4128:
                DATA = static_cast<uint16_t>((val & (0xffff << 0)) >> 0);
                ADDRESS = static_cast<uint8_t>((val & (0x7f << 16)) >> 16);
                READ_FLAG = static_cast<READ_FLAG_t>((val & (0x1 << 23)) >> 23);
                LO_SELECT = static_cast<LO_SELECT_t>((val & (0x7 << 24)) >> 24);
                START_TRANSACTION = static_cast<START_TRANSACTION_t>((val & (0x1 << 28)) >> 28);
                SPI_READY = static_cast<uint8_t>((val & (0x1 << 30)) >> 30);
                DATA_VALID = static_cast<uint8_t>((val & (0x1 << 31)) >> 31);
            break;
        case 4132:
                PULSE_TX0_LO1_SYNC = static_cast<uint8_t>((val & (0x1 << 0)) >> 0);
                PULSE_TX0_LO2_SYNC = static_cast<uint8_t>((val & (0x1 << 1)) >> 1);
                PULSE_TX1_LO1_SYNC = static_cast<uint8_t>((val & (0x1 << 2)) >> 2);
                PULSE_TX1_LO2_SYNC = static_cast<uint8_t>((val & (0x1 << 3)) >> 3);
                PULSE_RX0_LO1_SYNC = static_cast<uint8_t>((val & (0x1 << 4)) >> 4);
                PULSE_RX0_LO2_SYNC = static_cast<uint8_t>((val & (0x1 << 5)) >> 5);
                PULSE_RX1_LO1_SYNC = static_cast<uint8_t>((val & (0x1 << 6)) >> 6);
                PULSE_RX1_LO2_SYNC = static_cast<uint8_t>((val & (0x1 << 7)) >> 7);
                BYPASS_SYNC_REGISTER = static_cast<BYPASS_SYNC_REGISTER_t>((val & (0x1 << 8)) >> 8);
            break;
        default:
            break;
        }
        // Now the arrays
        // We can do this because all arrays have a base address that is a multiple
        // of 256 (0x100). In other words, this is a hack that only works if you
        // know exactly what you're doing, which is OK in this case, because it's in
        // this same file as the register map.
        const uint16_t array_offset = addr % 256;
        const uint16_t base_addr = addr - array_offset;
        const size_t index = array_offset / 4;
        switch(base_addr) {
            case 5120:
                RX0_RX_LED[index] = static_cast<RX0_RX_LED_t>((val & (0x1 << 0)) >> 0);
                RX0_TRX_LED[index] = static_cast<RX0_TRX_LED_t>((val & (0x1 << 1)) >> 1);
                TX0_TRX_LED[index] = static_cast<TX0_TRX_LED_t>((val & (0x1 << 2)) >> 2);
                RX1_RX_LED[index] = static_cast<RX1_RX_LED_t>((val & (0x1 << 16)) >> 16);
                RX1_TRX_LED[index] = static_cast<RX1_TRX_LED_t>((val & (0x1 << 17)) >> 17);
                TX1_TRX_LED[index] = static_cast<TX1_TRX_LED_t>((val & (0x1 << 18)) >> 18);
            break;
            case 8192:
                TX0_IF2_1_2[index] = static_cast<TX0_IF2_1_2_t>((val & (0x1 << 0)) >> 0);
                TX0_IF1_3[index] = static_cast<TX0_IF1_3_t>((val & (0x3 << 2)) >> 2);
                TX0_IF1_4[index] = static_cast<TX0_IF1_4_t>((val & (0x3 << 4)) >> 4);
                TX0_IF1_5[index] = static_cast<TX0_IF1_5_t>((val & (0x3 << 6)) >> 6);
                TX0_IF1_6[index] = static_cast<TX0_IF1_6_t>((val & (0x3 << 8)) >> 8);
                TX0_7[index] = static_cast<TX0_7_t>((val & (0x3 << 10)) >> 10);
                TX0_RF_8[index] = static_cast<TX0_RF_8_t>((val & (0x7 << 12)) >> 12);
                TX0_RF_9[index] = static_cast<TX0_RF_9_t>((val & (0x3 << 16)) >> 16);
                TX0_ANT_10[index] = static_cast<TX0_ANT_10_t>((val & (0x3 << 18)) >> 18);
                TX0_ANT_11[index] = static_cast<TX0_ANT_11_t>((val & (0x3 << 20)) >> 20);
                TX0_LO_13[index] = static_cast<TX0_LO_13_t>((val & (0x1 << 24)) >> 24);
                TX0_LO_14[index] = static_cast<TX0_LO_14_t>((val & (0x1 << 26)) >> 26);
            break;
            case 9216:
                TX1_IF2_1_2[index] = static_cast<TX1_IF2_1_2_t>((val & (0x1 << 0)) >> 0);
                TX1_IF1_3[index] = static_cast<TX1_IF1_3_t>((val & (0x3 << 2)) >> 2);
                TX1_IF1_4[index] = static_cast<TX1_IF1_4_t>((val & (0x3 << 4)) >> 4);
                TX1_IF1_5[index] = static_cast<TX1_IF1_5_t>((val & (0x3 << 6)) >> 6);
                TX1_IF1_6[index] = static_cast<TX1_IF1_6_t>((val & (0x3 << 8)) >> 8);
                TX1_7[index] = static_cast<TX1_7_t>((val & (0x3 << 10)) >> 10);
                TX1_RF_8[index] = static_cast<TX1_RF_8_t>((val & (0x7 << 12)) >> 12);
                TX1_RF_9[index] = static_cast<TX1_RF_9_t>((val & (0x3 << 16)) >> 16);
                TX1_ANT_10[index] = static_cast<TX1_ANT_10_t>((val & (0x3 << 18)) >> 18);
                TX1_ANT_11[index] = static_cast<TX1_ANT_11_t>((val & (0x3 << 20)) >> 20);
                TX1_LO_13[index] = static_cast<TX1_LO_13_t>((val & (0x1 << 24)) >> 24);
                TX1_LO_14[index] = static_cast<TX1_LO_14_t>((val & (0x1 << 26)) >> 26);
            break;
            case 10240:
                RX0_ANT_1[index] = static_cast<RX0_ANT_1_t>((val & (0x3 << 0)) >> 0);
                RX0_2[index] = static_cast<RX0_2_t>((val & (0x1 << 2)) >> 2);
                RX0_RF_3[index] = static_cast<RX0_RF_3_t>((val & (0x7 << 4)) >> 4);
                RX0_4[index] = static_cast<RX0_4_t>((val & (0x1 << 8)) >> 8);
                RX0_IF1_5[index] = static_cast<RX0_IF1_5_t>((val & (0x3 << 10)) >> 10);
                RX0_IF1_6[index] = static_cast<RX0_IF1_6_t>((val & (0x3 << 12)) >> 12);
                RX0_IF2_7_8[index] = static_cast<RX0_IF2_7_8_t>((val & (0x1 << 14)) >> 14);
                RX0_LO_9[index] = static_cast<RX0_LO_9_t>((val & (0x1 << 16)) >> 16);
                RX0_LO_10[index] = static_cast<RX0_LO_10_t>((val & (0x1 << 18)) >> 18);
                RX0_RF_11[index] = static_cast<RX0_RF_11_t>((val & (0x7 << 20)) >> 20);
            break;
            case 11264:
                RX1_ANT_1[index] = static_cast<RX1_ANT_1_t>((val & (0x3 << 0)) >> 0);
                RX1_2[index] = static_cast<RX1_2_t>((val & (0x1 << 2)) >> 2);
                RX1_RF_3[index] = static_cast<RX1_RF_3_t>((val & (0x7 << 4)) >> 4);
                RX1_4[index] = static_cast<RX1_4_t>((val & (0x1 << 8)) >> 8);
                RX1_IF1_5[index] = static_cast<RX1_IF1_5_t>((val & (0x3 << 10)) >> 10);
                RX1_IF1_6[index] = static_cast<RX1_IF1_6_t>((val & (0x3 << 12)) >> 12);
                RX1_IF2_7_8[index] = static_cast<RX1_IF2_7_8_t>((val & (0x1 << 14)) >> 14);
                RX1_LO_9[index] = static_cast<RX1_LO_9_t>((val & (0x1 << 16)) >> 16);
                RX1_LO_10[index] = static_cast<RX1_LO_10_t>((val & (0x1 << 18)) >> 18);
                RX1_RF_11[index] = static_cast<RX1_RF_11_t>((val & (0x7 << 20)) >> 20);
            break;
            case 12288:
                TX0_DSA1[index] = static_cast<uint8_t>((val & (0x1f << 0)) >> 0);
                TX0_DSA2[index] = static_cast<uint8_t>((val & (0x1f << 8)) >> 8);
            break;
            case 13312:
                TX1_DSA1[index] = static_cast<uint8_t>((val & (0x1f << 0)) >> 0);
                TX1_DSA2[index] = static_cast<uint8_t>((val & (0x1f << 8)) >> 8);
            break;
            case 14336:
                RX0_DSA1[index] = static_cast<uint8_t>((val & (0xf << 0)) >> 0);
                RX0_DSA2[index] = static_cast<uint8_t>((val & (0xf << 4)) >> 4);
                RX0_DSA3_A[index] = static_cast<uint8_t>((val & (0xf << 8)) >> 8);
                RX0_DSA3_B[index] = static_cast<uint8_t>((val & (0xf << 12)) >> 12);
            break;
            case 15360:
                RX1_DSA1[index] = static_cast<uint8_t>((val & (0xf << 0)) >> 0);
                RX1_DSA2[index] = static_cast<uint8_t>((val & (0xf << 4)) >> 4);
                RX1_DSA3_A[index] = static_cast<uint8_t>((val & (0xf << 8)) >> 8);
                RX1_DSA3_B[index] = static_cast<uint8_t>((val & (0xf << 12)) >> 12);
            break;
            case 16384:
                TX0_TABLE_SELECT[index] = static_cast<uint8_t>((val & (0xff << 0)) >> 0);
            break;
            case 17408:
                TX1_TABLE_SELECT[index] = static_cast<uint8_t>((val & (0xff << 0)) >> 0);
            break;
            case 18432:
                RX0_TABLE_SELECT[index] = static_cast<uint8_t>((val & (0xff << 0)) >> 0);
            break;
            case 19456:
                RX1_TABLE_SELECT[index] = static_cast<uint8_t>((val & (0xff << 0)) >> 0);
            break;
            case 20480:
                TX0_TABLE_DSA1[index] = static_cast<uint8_t>((val & (0x1f << 0)) >> 0);
                TX0_TABLE_DSA2[index] = static_cast<uint8_t>((val & (0x1f << 8)) >> 8);
            break;
            case 21504:
                TX1_TABLE_DSA1[index] = static_cast<uint8_t>((val & (0x1f << 0)) >> 0);
                TX1_TABLE_DSA2[index] = static_cast<uint8_t>((val & (0x1f << 8)) >> 8);
            break;
            case 22528:
                RX0_TABLE_DSA1[index] = static_cast<uint8_t>((val & (0xf << 0)) >> 0);
                RX0_TABLE_DSA2[index] = static_cast<uint8_t>((val & (0xf << 4)) >> 4);
                RX0_TABLE_DSA3_A[index] = static_cast<uint8_t>((val & (0xf << 8)) >> 8);
                RX0_TABLE_DSA3_B[index] = static_cast<uint8_t>((val & (0xf << 12)) >> 12);
            break;
            case 23552:
                RX1_TABLE_DSA1[index] = static_cast<uint8_t>((val & (0xf << 0)) >> 0);
                RX1_TABLE_DSA2[index] = static_cast<uint8_t>((val & (0xf << 4)) >> 4);
                RX1_TABLE_DSA3_A[index] = static_cast<uint8_t>((val & (0xf << 8)) >> 8);
                RX1_TABLE_DSA3_B[index] = static_cast<uint8_t>((val & (0xf << 12)) >> 12);
            break;
            default: break;
        }
    }
    
    
    
    template<typename T> std::set<T> get_all_addrs(bool include_ro = false)
    {
        std::set<T> addrs;
        if (include_ro) {
            addrs.insert(0);
            addrs.insert(4);
            addrs.insert(8);
            addrs.insert(16);
            addrs.insert(4096);
            addrs.insert(4128);
        }
        addrs.insert(12);
        addrs.insert(4100);
        addrs.insert(4104);
        addrs.insert(4128);
        addrs.insert(4132);
        addrs.insert(5120);
        addrs.insert(5124);
        addrs.insert(5128);
        addrs.insert(5132);
        addrs.insert(5136);
        addrs.insert(5140);
        addrs.insert(5144);
        addrs.insert(5148);
        addrs.insert(5152);
        addrs.insert(5156);
        addrs.insert(5160);
        addrs.insert(5164);
        addrs.insert(5168);
        addrs.insert(5172);
        addrs.insert(5176);
        addrs.insert(5180);
        addrs.insert(5184);
        addrs.insert(5188);
        addrs.insert(5192);
        addrs.insert(5196);
        addrs.insert(5200);
        addrs.insert(5204);
        addrs.insert(5208);
        addrs.insert(5212);
        addrs.insert(5216);
        addrs.insert(5220);
        addrs.insert(5224);
        addrs.insert(5228);
        addrs.insert(5232);
        addrs.insert(5236);
        addrs.insert(5240);
        addrs.insert(5244);
        addrs.insert(5248);
        addrs.insert(5252);
        addrs.insert(5256);
        addrs.insert(5260);
        addrs.insert(5264);
        addrs.insert(5268);
        addrs.insert(5272);
        addrs.insert(5276);
        addrs.insert(5280);
        addrs.insert(5284);
        addrs.insert(5288);
        addrs.insert(5292);
        addrs.insert(5296);
        addrs.insert(5300);
        addrs.insert(5304);
        addrs.insert(5308);
        addrs.insert(5312);
        addrs.insert(5316);
        addrs.insert(5320);
        addrs.insert(5324);
        addrs.insert(5328);
        addrs.insert(5332);
        addrs.insert(5336);
        addrs.insert(5340);
        addrs.insert(5344);
        addrs.insert(5348);
        addrs.insert(5352);
        addrs.insert(5356);
        addrs.insert(5360);
        addrs.insert(5364);
        addrs.insert(5368);
        addrs.insert(5372);
        addrs.insert(5376);
        addrs.insert(5380);
        addrs.insert(5384);
        addrs.insert(5388);
        addrs.insert(5392);
        addrs.insert(5396);
        addrs.insert(5400);
        addrs.insert(5404);
        addrs.insert(5408);
        addrs.insert(5412);
        addrs.insert(5416);
        addrs.insert(5420);
        addrs.insert(5424);
        addrs.insert(5428);
        addrs.insert(5432);
        addrs.insert(5436);
        addrs.insert(5440);
        addrs.insert(5444);
        addrs.insert(5448);
        addrs.insert(5452);
        addrs.insert(5456);
        addrs.insert(5460);
        addrs.insert(5464);
        addrs.insert(5468);
        addrs.insert(5472);
        addrs.insert(5476);
        addrs.insert(5480);
        addrs.insert(5484);
        addrs.insert(5488);
        addrs.insert(5492);
        addrs.insert(5496);
        addrs.insert(5500);
        addrs.insert(5504);
        addrs.insert(5508);
        addrs.insert(5512);
        addrs.insert(5516);
        addrs.insert(5520);
        addrs.insert(5524);
        addrs.insert(5528);
        addrs.insert(5532);
        addrs.insert(5536);
        addrs.insert(5540);
        addrs.insert(5544);
        addrs.insert(5548);
        addrs.insert(5552);
        addrs.insert(5556);
        addrs.insert(5560);
        addrs.insert(5564);
        addrs.insert(5568);
        addrs.insert(5572);
        addrs.insert(5576);
        addrs.insert(5580);
        addrs.insert(5584);
        addrs.insert(5588);
        addrs.insert(5592);
        addrs.insert(5596);
        addrs.insert(5600);
        addrs.insert(5604);
        addrs.insert(5608);
        addrs.insert(5612);
        addrs.insert(5616);
        addrs.insert(5620);
        addrs.insert(5624);
        addrs.insert(5628);
        addrs.insert(5632);
        addrs.insert(5636);
        addrs.insert(5640);
        addrs.insert(5644);
        addrs.insert(5648);
        addrs.insert(5652);
        addrs.insert(5656);
        addrs.insert(5660);
        addrs.insert(5664);
        addrs.insert(5668);
        addrs.insert(5672);
        addrs.insert(5676);
        addrs.insert(5680);
        addrs.insert(5684);
        addrs.insert(5688);
        addrs.insert(5692);
        addrs.insert(5696);
        addrs.insert(5700);
        addrs.insert(5704);
        addrs.insert(5708);
        addrs.insert(5712);
        addrs.insert(5716);
        addrs.insert(5720);
        addrs.insert(5724);
        addrs.insert(5728);
        addrs.insert(5732);
        addrs.insert(5736);
        addrs.insert(5740);
        addrs.insert(5744);
        addrs.insert(5748);
        addrs.insert(5752);
        addrs.insert(5756);
        addrs.insert(5760);
        addrs.insert(5764);
        addrs.insert(5768);
        addrs.insert(5772);
        addrs.insert(5776);
        addrs.insert(5780);
        addrs.insert(5784);
        addrs.insert(5788);
        addrs.insert(5792);
        addrs.insert(5796);
        addrs.insert(5800);
        addrs.insert(5804);
        addrs.insert(5808);
        addrs.insert(5812);
        addrs.insert(5816);
        addrs.insert(5820);
        addrs.insert(5824);
        addrs.insert(5828);
        addrs.insert(5832);
        addrs.insert(5836);
        addrs.insert(5840);
        addrs.insert(5844);
        addrs.insert(5848);
        addrs.insert(5852);
        addrs.insert(5856);
        addrs.insert(5860);
        addrs.insert(5864);
        addrs.insert(5868);
        addrs.insert(5872);
        addrs.insert(5876);
        addrs.insert(5880);
        addrs.insert(5884);
        addrs.insert(5888);
        addrs.insert(5892);
        addrs.insert(5896);
        addrs.insert(5900);
        addrs.insert(5904);
        addrs.insert(5908);
        addrs.insert(5912);
        addrs.insert(5916);
        addrs.insert(5920);
        addrs.insert(5924);
        addrs.insert(5928);
        addrs.insert(5932);
        addrs.insert(5936);
        addrs.insert(5940);
        addrs.insert(5944);
        addrs.insert(5948);
        addrs.insert(5952);
        addrs.insert(5956);
        addrs.insert(5960);
        addrs.insert(5964);
        addrs.insert(5968);
        addrs.insert(5972);
        addrs.insert(5976);
        addrs.insert(5980);
        addrs.insert(5984);
        addrs.insert(5988);
        addrs.insert(5992);
        addrs.insert(5996);
        addrs.insert(6000);
        addrs.insert(6004);
        addrs.insert(6008);
        addrs.insert(6012);
        addrs.insert(6016);
        addrs.insert(6020);
        addrs.insert(6024);
        addrs.insert(6028);
        addrs.insert(6032);
        addrs.insert(6036);
        addrs.insert(6040);
        addrs.insert(6044);
        addrs.insert(6048);
        addrs.insert(6052);
        addrs.insert(6056);
        addrs.insert(6060);
        addrs.insert(6064);
        addrs.insert(6068);
        addrs.insert(6072);
        addrs.insert(6076);
        addrs.insert(6080);
        addrs.insert(6084);
        addrs.insert(6088);
        addrs.insert(6092);
        addrs.insert(6096);
        addrs.insert(6100);
        addrs.insert(6104);
        addrs.insert(6108);
        addrs.insert(6112);
        addrs.insert(6116);
        addrs.insert(6120);
        addrs.insert(6124);
        addrs.insert(6128);
        addrs.insert(6132);
        addrs.insert(6136);
        addrs.insert(6140);
        addrs.insert(8192);
        addrs.insert(8196);
        addrs.insert(8200);
        addrs.insert(8204);
        addrs.insert(8208);
        addrs.insert(8212);
        addrs.insert(8216);
        addrs.insert(8220);
        addrs.insert(8224);
        addrs.insert(8228);
        addrs.insert(8232);
        addrs.insert(8236);
        addrs.insert(8240);
        addrs.insert(8244);
        addrs.insert(8248);
        addrs.insert(8252);
        addrs.insert(8256);
        addrs.insert(8260);
        addrs.insert(8264);
        addrs.insert(8268);
        addrs.insert(8272);
        addrs.insert(8276);
        addrs.insert(8280);
        addrs.insert(8284);
        addrs.insert(8288);
        addrs.insert(8292);
        addrs.insert(8296);
        addrs.insert(8300);
        addrs.insert(8304);
        addrs.insert(8308);
        addrs.insert(8312);
        addrs.insert(8316);
        addrs.insert(8320);
        addrs.insert(8324);
        addrs.insert(8328);
        addrs.insert(8332);
        addrs.insert(8336);
        addrs.insert(8340);
        addrs.insert(8344);
        addrs.insert(8348);
        addrs.insert(8352);
        addrs.insert(8356);
        addrs.insert(8360);
        addrs.insert(8364);
        addrs.insert(8368);
        addrs.insert(8372);
        addrs.insert(8376);
        addrs.insert(8380);
        addrs.insert(8384);
        addrs.insert(8388);
        addrs.insert(8392);
        addrs.insert(8396);
        addrs.insert(8400);
        addrs.insert(8404);
        addrs.insert(8408);
        addrs.insert(8412);
        addrs.insert(8416);
        addrs.insert(8420);
        addrs.insert(8424);
        addrs.insert(8428);
        addrs.insert(8432);
        addrs.insert(8436);
        addrs.insert(8440);
        addrs.insert(8444);
        addrs.insert(8448);
        addrs.insert(8452);
        addrs.insert(8456);
        addrs.insert(8460);
        addrs.insert(8464);
        addrs.insert(8468);
        addrs.insert(8472);
        addrs.insert(8476);
        addrs.insert(8480);
        addrs.insert(8484);
        addrs.insert(8488);
        addrs.insert(8492);
        addrs.insert(8496);
        addrs.insert(8500);
        addrs.insert(8504);
        addrs.insert(8508);
        addrs.insert(8512);
        addrs.insert(8516);
        addrs.insert(8520);
        addrs.insert(8524);
        addrs.insert(8528);
        addrs.insert(8532);
        addrs.insert(8536);
        addrs.insert(8540);
        addrs.insert(8544);
        addrs.insert(8548);
        addrs.insert(8552);
        addrs.insert(8556);
        addrs.insert(8560);
        addrs.insert(8564);
        addrs.insert(8568);
        addrs.insert(8572);
        addrs.insert(8576);
        addrs.insert(8580);
        addrs.insert(8584);
        addrs.insert(8588);
        addrs.insert(8592);
        addrs.insert(8596);
        addrs.insert(8600);
        addrs.insert(8604);
        addrs.insert(8608);
        addrs.insert(8612);
        addrs.insert(8616);
        addrs.insert(8620);
        addrs.insert(8624);
        addrs.insert(8628);
        addrs.insert(8632);
        addrs.insert(8636);
        addrs.insert(8640);
        addrs.insert(8644);
        addrs.insert(8648);
        addrs.insert(8652);
        addrs.insert(8656);
        addrs.insert(8660);
        addrs.insert(8664);
        addrs.insert(8668);
        addrs.insert(8672);
        addrs.insert(8676);
        addrs.insert(8680);
        addrs.insert(8684);
        addrs.insert(8688);
        addrs.insert(8692);
        addrs.insert(8696);
        addrs.insert(8700);
        addrs.insert(8704);
        addrs.insert(8708);
        addrs.insert(8712);
        addrs.insert(8716);
        addrs.insert(8720);
        addrs.insert(8724);
        addrs.insert(8728);
        addrs.insert(8732);
        addrs.insert(8736);
        addrs.insert(8740);
        addrs.insert(8744);
        addrs.insert(8748);
        addrs.insert(8752);
        addrs.insert(8756);
        addrs.insert(8760);
        addrs.insert(8764);
        addrs.insert(8768);
        addrs.insert(8772);
        addrs.insert(8776);
        addrs.insert(8780);
        addrs.insert(8784);
        addrs.insert(8788);
        addrs.insert(8792);
        addrs.insert(8796);
        addrs.insert(8800);
        addrs.insert(8804);
        addrs.insert(8808);
        addrs.insert(8812);
        addrs.insert(8816);
        addrs.insert(8820);
        addrs.insert(8824);
        addrs.insert(8828);
        addrs.insert(8832);
        addrs.insert(8836);
        addrs.insert(8840);
        addrs.insert(8844);
        addrs.insert(8848);
        addrs.insert(8852);
        addrs.insert(8856);
        addrs.insert(8860);
        addrs.insert(8864);
        addrs.insert(8868);
        addrs.insert(8872);
        addrs.insert(8876);
        addrs.insert(8880);
        addrs.insert(8884);
        addrs.insert(8888);
        addrs.insert(8892);
        addrs.insert(8896);
        addrs.insert(8900);
        addrs.insert(8904);
        addrs.insert(8908);
        addrs.insert(8912);
        addrs.insert(8916);
        addrs.insert(8920);
        addrs.insert(8924);
        addrs.insert(8928);
        addrs.insert(8932);
        addrs.insert(8936);
        addrs.insert(8940);
        addrs.insert(8944);
        addrs.insert(8948);
        addrs.insert(8952);
        addrs.insert(8956);
        addrs.insert(8960);
        addrs.insert(8964);
        addrs.insert(8968);
        addrs.insert(8972);
        addrs.insert(8976);
        addrs.insert(8980);
        addrs.insert(8984);
        addrs.insert(8988);
        addrs.insert(8992);
        addrs.insert(8996);
        addrs.insert(9000);
        addrs.insert(9004);
        addrs.insert(9008);
        addrs.insert(9012);
        addrs.insert(9016);
        addrs.insert(9020);
        addrs.insert(9024);
        addrs.insert(9028);
        addrs.insert(9032);
        addrs.insert(9036);
        addrs.insert(9040);
        addrs.insert(9044);
        addrs.insert(9048);
        addrs.insert(9052);
        addrs.insert(9056);
        addrs.insert(9060);
        addrs.insert(9064);
        addrs.insert(9068);
        addrs.insert(9072);
        addrs.insert(9076);
        addrs.insert(9080);
        addrs.insert(9084);
        addrs.insert(9088);
        addrs.insert(9092);
        addrs.insert(9096);
        addrs.insert(9100);
        addrs.insert(9104);
        addrs.insert(9108);
        addrs.insert(9112);
        addrs.insert(9116);
        addrs.insert(9120);
        addrs.insert(9124);
        addrs.insert(9128);
        addrs.insert(9132);
        addrs.insert(9136);
        addrs.insert(9140);
        addrs.insert(9144);
        addrs.insert(9148);
        addrs.insert(9152);
        addrs.insert(9156);
        addrs.insert(9160);
        addrs.insert(9164);
        addrs.insert(9168);
        addrs.insert(9172);
        addrs.insert(9176);
        addrs.insert(9180);
        addrs.insert(9184);
        addrs.insert(9188);
        addrs.insert(9192);
        addrs.insert(9196);
        addrs.insert(9200);
        addrs.insert(9204);
        addrs.insert(9208);
        addrs.insert(9212);
        addrs.insert(9216);
        addrs.insert(9220);
        addrs.insert(9224);
        addrs.insert(9228);
        addrs.insert(9232);
        addrs.insert(9236);
        addrs.insert(9240);
        addrs.insert(9244);
        addrs.insert(9248);
        addrs.insert(9252);
        addrs.insert(9256);
        addrs.insert(9260);
        addrs.insert(9264);
        addrs.insert(9268);
        addrs.insert(9272);
        addrs.insert(9276);
        addrs.insert(9280);
        addrs.insert(9284);
        addrs.insert(9288);
        addrs.insert(9292);
        addrs.insert(9296);
        addrs.insert(9300);
        addrs.insert(9304);
        addrs.insert(9308);
        addrs.insert(9312);
        addrs.insert(9316);
        addrs.insert(9320);
        addrs.insert(9324);
        addrs.insert(9328);
        addrs.insert(9332);
        addrs.insert(9336);
        addrs.insert(9340);
        addrs.insert(9344);
        addrs.insert(9348);
        addrs.insert(9352);
        addrs.insert(9356);
        addrs.insert(9360);
        addrs.insert(9364);
        addrs.insert(9368);
        addrs.insert(9372);
        addrs.insert(9376);
        addrs.insert(9380);
        addrs.insert(9384);
        addrs.insert(9388);
        addrs.insert(9392);
        addrs.insert(9396);
        addrs.insert(9400);
        addrs.insert(9404);
        addrs.insert(9408);
        addrs.insert(9412);
        addrs.insert(9416);
        addrs.insert(9420);
        addrs.insert(9424);
        addrs.insert(9428);
        addrs.insert(9432);
        addrs.insert(9436);
        addrs.insert(9440);
        addrs.insert(9444);
        addrs.insert(9448);
        addrs.insert(9452);
        addrs.insert(9456);
        addrs.insert(9460);
        addrs.insert(9464);
        addrs.insert(9468);
        addrs.insert(9472);
        addrs.insert(9476);
        addrs.insert(9480);
        addrs.insert(9484);
        addrs.insert(9488);
        addrs.insert(9492);
        addrs.insert(9496);
        addrs.insert(9500);
        addrs.insert(9504);
        addrs.insert(9508);
        addrs.insert(9512);
        addrs.insert(9516);
        addrs.insert(9520);
        addrs.insert(9524);
        addrs.insert(9528);
        addrs.insert(9532);
        addrs.insert(9536);
        addrs.insert(9540);
        addrs.insert(9544);
        addrs.insert(9548);
        addrs.insert(9552);
        addrs.insert(9556);
        addrs.insert(9560);
        addrs.insert(9564);
        addrs.insert(9568);
        addrs.insert(9572);
        addrs.insert(9576);
        addrs.insert(9580);
        addrs.insert(9584);
        addrs.insert(9588);
        addrs.insert(9592);
        addrs.insert(9596);
        addrs.insert(9600);
        addrs.insert(9604);
        addrs.insert(9608);
        addrs.insert(9612);
        addrs.insert(9616);
        addrs.insert(9620);
        addrs.insert(9624);
        addrs.insert(9628);
        addrs.insert(9632);
        addrs.insert(9636);
        addrs.insert(9640);
        addrs.insert(9644);
        addrs.insert(9648);
        addrs.insert(9652);
        addrs.insert(9656);
        addrs.insert(9660);
        addrs.insert(9664);
        addrs.insert(9668);
        addrs.insert(9672);
        addrs.insert(9676);
        addrs.insert(9680);
        addrs.insert(9684);
        addrs.insert(9688);
        addrs.insert(9692);
        addrs.insert(9696);
        addrs.insert(9700);
        addrs.insert(9704);
        addrs.insert(9708);
        addrs.insert(9712);
        addrs.insert(9716);
        addrs.insert(9720);
        addrs.insert(9724);
        addrs.insert(9728);
        addrs.insert(9732);
        addrs.insert(9736);
        addrs.insert(9740);
        addrs.insert(9744);
        addrs.insert(9748);
        addrs.insert(9752);
        addrs.insert(9756);
        addrs.insert(9760);
        addrs.insert(9764);
        addrs.insert(9768);
        addrs.insert(9772);
        addrs.insert(9776);
        addrs.insert(9780);
        addrs.insert(9784);
        addrs.insert(9788);
        addrs.insert(9792);
        addrs.insert(9796);
        addrs.insert(9800);
        addrs.insert(9804);
        addrs.insert(9808);
        addrs.insert(9812);
        addrs.insert(9816);
        addrs.insert(9820);
        addrs.insert(9824);
        addrs.insert(9828);
        addrs.insert(9832);
        addrs.insert(9836);
        addrs.insert(9840);
        addrs.insert(9844);
        addrs.insert(9848);
        addrs.insert(9852);
        addrs.insert(9856);
        addrs.insert(9860);
        addrs.insert(9864);
        addrs.insert(9868);
        addrs.insert(9872);
        addrs.insert(9876);
        addrs.insert(9880);
        addrs.insert(9884);
        addrs.insert(9888);
        addrs.insert(9892);
        addrs.insert(9896);
        addrs.insert(9900);
        addrs.insert(9904);
        addrs.insert(9908);
        addrs.insert(9912);
        addrs.insert(9916);
        addrs.insert(9920);
        addrs.insert(9924);
        addrs.insert(9928);
        addrs.insert(9932);
        addrs.insert(9936);
        addrs.insert(9940);
        addrs.insert(9944);
        addrs.insert(9948);
        addrs.insert(9952);
        addrs.insert(9956);
        addrs.insert(9960);
        addrs.insert(9964);
        addrs.insert(9968);
        addrs.insert(9972);
        addrs.insert(9976);
        addrs.insert(9980);
        addrs.insert(9984);
        addrs.insert(9988);
        addrs.insert(9992);
        addrs.insert(9996);
        addrs.insert(10000);
        addrs.insert(10004);
        addrs.insert(10008);
        addrs.insert(10012);
        addrs.insert(10016);
        addrs.insert(10020);
        addrs.insert(10024);
        addrs.insert(10028);
        addrs.insert(10032);
        addrs.insert(10036);
        addrs.insert(10040);
        addrs.insert(10044);
        addrs.insert(10048);
        addrs.insert(10052);
        addrs.insert(10056);
        addrs.insert(10060);
        addrs.insert(10064);
        addrs.insert(10068);
        addrs.insert(10072);
        addrs.insert(10076);
        addrs.insert(10080);
        addrs.insert(10084);
        addrs.insert(10088);
        addrs.insert(10092);
        addrs.insert(10096);
        addrs.insert(10100);
        addrs.insert(10104);
        addrs.insert(10108);
        addrs.insert(10112);
        addrs.insert(10116);
        addrs.insert(10120);
        addrs.insert(10124);
        addrs.insert(10128);
        addrs.insert(10132);
        addrs.insert(10136);
        addrs.insert(10140);
        addrs.insert(10144);
        addrs.insert(10148);
        addrs.insert(10152);
        addrs.insert(10156);
        addrs.insert(10160);
        addrs.insert(10164);
        addrs.insert(10168);
        addrs.insert(10172);
        addrs.insert(10176);
        addrs.insert(10180);
        addrs.insert(10184);
        addrs.insert(10188);
        addrs.insert(10192);
        addrs.insert(10196);
        addrs.insert(10200);
        addrs.insert(10204);
        addrs.insert(10208);
        addrs.insert(10212);
        addrs.insert(10216);
        addrs.insert(10220);
        addrs.insert(10224);
        addrs.insert(10228);
        addrs.insert(10232);
        addrs.insert(10236);
        addrs.insert(10240);
        addrs.insert(10244);
        addrs.insert(10248);
        addrs.insert(10252);
        addrs.insert(10256);
        addrs.insert(10260);
        addrs.insert(10264);
        addrs.insert(10268);
        addrs.insert(10272);
        addrs.insert(10276);
        addrs.insert(10280);
        addrs.insert(10284);
        addrs.insert(10288);
        addrs.insert(10292);
        addrs.insert(10296);
        addrs.insert(10300);
        addrs.insert(10304);
        addrs.insert(10308);
        addrs.insert(10312);
        addrs.insert(10316);
        addrs.insert(10320);
        addrs.insert(10324);
        addrs.insert(10328);
        addrs.insert(10332);
        addrs.insert(10336);
        addrs.insert(10340);
        addrs.insert(10344);
        addrs.insert(10348);
        addrs.insert(10352);
        addrs.insert(10356);
        addrs.insert(10360);
        addrs.insert(10364);
        addrs.insert(10368);
        addrs.insert(10372);
        addrs.insert(10376);
        addrs.insert(10380);
        addrs.insert(10384);
        addrs.insert(10388);
        addrs.insert(10392);
        addrs.insert(10396);
        addrs.insert(10400);
        addrs.insert(10404);
        addrs.insert(10408);
        addrs.insert(10412);
        addrs.insert(10416);
        addrs.insert(10420);
        addrs.insert(10424);
        addrs.insert(10428);
        addrs.insert(10432);
        addrs.insert(10436);
        addrs.insert(10440);
        addrs.insert(10444);
        addrs.insert(10448);
        addrs.insert(10452);
        addrs.insert(10456);
        addrs.insert(10460);
        addrs.insert(10464);
        addrs.insert(10468);
        addrs.insert(10472);
        addrs.insert(10476);
        addrs.insert(10480);
        addrs.insert(10484);
        addrs.insert(10488);
        addrs.insert(10492);
        addrs.insert(10496);
        addrs.insert(10500);
        addrs.insert(10504);
        addrs.insert(10508);
        addrs.insert(10512);
        addrs.insert(10516);
        addrs.insert(10520);
        addrs.insert(10524);
        addrs.insert(10528);
        addrs.insert(10532);
        addrs.insert(10536);
        addrs.insert(10540);
        addrs.insert(10544);
        addrs.insert(10548);
        addrs.insert(10552);
        addrs.insert(10556);
        addrs.insert(10560);
        addrs.insert(10564);
        addrs.insert(10568);
        addrs.insert(10572);
        addrs.insert(10576);
        addrs.insert(10580);
        addrs.insert(10584);
        addrs.insert(10588);
        addrs.insert(10592);
        addrs.insert(10596);
        addrs.insert(10600);
        addrs.insert(10604);
        addrs.insert(10608);
        addrs.insert(10612);
        addrs.insert(10616);
        addrs.insert(10620);
        addrs.insert(10624);
        addrs.insert(10628);
        addrs.insert(10632);
        addrs.insert(10636);
        addrs.insert(10640);
        addrs.insert(10644);
        addrs.insert(10648);
        addrs.insert(10652);
        addrs.insert(10656);
        addrs.insert(10660);
        addrs.insert(10664);
        addrs.insert(10668);
        addrs.insert(10672);
        addrs.insert(10676);
        addrs.insert(10680);
        addrs.insert(10684);
        addrs.insert(10688);
        addrs.insert(10692);
        addrs.insert(10696);
        addrs.insert(10700);
        addrs.insert(10704);
        addrs.insert(10708);
        addrs.insert(10712);
        addrs.insert(10716);
        addrs.insert(10720);
        addrs.insert(10724);
        addrs.insert(10728);
        addrs.insert(10732);
        addrs.insert(10736);
        addrs.insert(10740);
        addrs.insert(10744);
        addrs.insert(10748);
        addrs.insert(10752);
        addrs.insert(10756);
        addrs.insert(10760);
        addrs.insert(10764);
        addrs.insert(10768);
        addrs.insert(10772);
        addrs.insert(10776);
        addrs.insert(10780);
        addrs.insert(10784);
        addrs.insert(10788);
        addrs.insert(10792);
        addrs.insert(10796);
        addrs.insert(10800);
        addrs.insert(10804);
        addrs.insert(10808);
        addrs.insert(10812);
        addrs.insert(10816);
        addrs.insert(10820);
        addrs.insert(10824);
        addrs.insert(10828);
        addrs.insert(10832);
        addrs.insert(10836);
        addrs.insert(10840);
        addrs.insert(10844);
        addrs.insert(10848);
        addrs.insert(10852);
        addrs.insert(10856);
        addrs.insert(10860);
        addrs.insert(10864);
        addrs.insert(10868);
        addrs.insert(10872);
        addrs.insert(10876);
        addrs.insert(10880);
        addrs.insert(10884);
        addrs.insert(10888);
        addrs.insert(10892);
        addrs.insert(10896);
        addrs.insert(10900);
        addrs.insert(10904);
        addrs.insert(10908);
        addrs.insert(10912);
        addrs.insert(10916);
        addrs.insert(10920);
        addrs.insert(10924);
        addrs.insert(10928);
        addrs.insert(10932);
        addrs.insert(10936);
        addrs.insert(10940);
        addrs.insert(10944);
        addrs.insert(10948);
        addrs.insert(10952);
        addrs.insert(10956);
        addrs.insert(10960);
        addrs.insert(10964);
        addrs.insert(10968);
        addrs.insert(10972);
        addrs.insert(10976);
        addrs.insert(10980);
        addrs.insert(10984);
        addrs.insert(10988);
        addrs.insert(10992);
        addrs.insert(10996);
        addrs.insert(11000);
        addrs.insert(11004);
        addrs.insert(11008);
        addrs.insert(11012);
        addrs.insert(11016);
        addrs.insert(11020);
        addrs.insert(11024);
        addrs.insert(11028);
        addrs.insert(11032);
        addrs.insert(11036);
        addrs.insert(11040);
        addrs.insert(11044);
        addrs.insert(11048);
        addrs.insert(11052);
        addrs.insert(11056);
        addrs.insert(11060);
        addrs.insert(11064);
        addrs.insert(11068);
        addrs.insert(11072);
        addrs.insert(11076);
        addrs.insert(11080);
        addrs.insert(11084);
        addrs.insert(11088);
        addrs.insert(11092);
        addrs.insert(11096);
        addrs.insert(11100);
        addrs.insert(11104);
        addrs.insert(11108);
        addrs.insert(11112);
        addrs.insert(11116);
        addrs.insert(11120);
        addrs.insert(11124);
        addrs.insert(11128);
        addrs.insert(11132);
        addrs.insert(11136);
        addrs.insert(11140);
        addrs.insert(11144);
        addrs.insert(11148);
        addrs.insert(11152);
        addrs.insert(11156);
        addrs.insert(11160);
        addrs.insert(11164);
        addrs.insert(11168);
        addrs.insert(11172);
        addrs.insert(11176);
        addrs.insert(11180);
        addrs.insert(11184);
        addrs.insert(11188);
        addrs.insert(11192);
        addrs.insert(11196);
        addrs.insert(11200);
        addrs.insert(11204);
        addrs.insert(11208);
        addrs.insert(11212);
        addrs.insert(11216);
        addrs.insert(11220);
        addrs.insert(11224);
        addrs.insert(11228);
        addrs.insert(11232);
        addrs.insert(11236);
        addrs.insert(11240);
        addrs.insert(11244);
        addrs.insert(11248);
        addrs.insert(11252);
        addrs.insert(11256);
        addrs.insert(11260);
        addrs.insert(11264);
        addrs.insert(11268);
        addrs.insert(11272);
        addrs.insert(11276);
        addrs.insert(11280);
        addrs.insert(11284);
        addrs.insert(11288);
        addrs.insert(11292);
        addrs.insert(11296);
        addrs.insert(11300);
        addrs.insert(11304);
        addrs.insert(11308);
        addrs.insert(11312);
        addrs.insert(11316);
        addrs.insert(11320);
        addrs.insert(11324);
        addrs.insert(11328);
        addrs.insert(11332);
        addrs.insert(11336);
        addrs.insert(11340);
        addrs.insert(11344);
        addrs.insert(11348);
        addrs.insert(11352);
        addrs.insert(11356);
        addrs.insert(11360);
        addrs.insert(11364);
        addrs.insert(11368);
        addrs.insert(11372);
        addrs.insert(11376);
        addrs.insert(11380);
        addrs.insert(11384);
        addrs.insert(11388);
        addrs.insert(11392);
        addrs.insert(11396);
        addrs.insert(11400);
        addrs.insert(11404);
        addrs.insert(11408);
        addrs.insert(11412);
        addrs.insert(11416);
        addrs.insert(11420);
        addrs.insert(11424);
        addrs.insert(11428);
        addrs.insert(11432);
        addrs.insert(11436);
        addrs.insert(11440);
        addrs.insert(11444);
        addrs.insert(11448);
        addrs.insert(11452);
        addrs.insert(11456);
        addrs.insert(11460);
        addrs.insert(11464);
        addrs.insert(11468);
        addrs.insert(11472);
        addrs.insert(11476);
        addrs.insert(11480);
        addrs.insert(11484);
        addrs.insert(11488);
        addrs.insert(11492);
        addrs.insert(11496);
        addrs.insert(11500);
        addrs.insert(11504);
        addrs.insert(11508);
        addrs.insert(11512);
        addrs.insert(11516);
        addrs.insert(11520);
        addrs.insert(11524);
        addrs.insert(11528);
        addrs.insert(11532);
        addrs.insert(11536);
        addrs.insert(11540);
        addrs.insert(11544);
        addrs.insert(11548);
        addrs.insert(11552);
        addrs.insert(11556);
        addrs.insert(11560);
        addrs.insert(11564);
        addrs.insert(11568);
        addrs.insert(11572);
        addrs.insert(11576);
        addrs.insert(11580);
        addrs.insert(11584);
        addrs.insert(11588);
        addrs.insert(11592);
        addrs.insert(11596);
        addrs.insert(11600);
        addrs.insert(11604);
        addrs.insert(11608);
        addrs.insert(11612);
        addrs.insert(11616);
        addrs.insert(11620);
        addrs.insert(11624);
        addrs.insert(11628);
        addrs.insert(11632);
        addrs.insert(11636);
        addrs.insert(11640);
        addrs.insert(11644);
        addrs.insert(11648);
        addrs.insert(11652);
        addrs.insert(11656);
        addrs.insert(11660);
        addrs.insert(11664);
        addrs.insert(11668);
        addrs.insert(11672);
        addrs.insert(11676);
        addrs.insert(11680);
        addrs.insert(11684);
        addrs.insert(11688);
        addrs.insert(11692);
        addrs.insert(11696);
        addrs.insert(11700);
        addrs.insert(11704);
        addrs.insert(11708);
        addrs.insert(11712);
        addrs.insert(11716);
        addrs.insert(11720);
        addrs.insert(11724);
        addrs.insert(11728);
        addrs.insert(11732);
        addrs.insert(11736);
        addrs.insert(11740);
        addrs.insert(11744);
        addrs.insert(11748);
        addrs.insert(11752);
        addrs.insert(11756);
        addrs.insert(11760);
        addrs.insert(11764);
        addrs.insert(11768);
        addrs.insert(11772);
        addrs.insert(11776);
        addrs.insert(11780);
        addrs.insert(11784);
        addrs.insert(11788);
        addrs.insert(11792);
        addrs.insert(11796);
        addrs.insert(11800);
        addrs.insert(11804);
        addrs.insert(11808);
        addrs.insert(11812);
        addrs.insert(11816);
        addrs.insert(11820);
        addrs.insert(11824);
        addrs.insert(11828);
        addrs.insert(11832);
        addrs.insert(11836);
        addrs.insert(11840);
        addrs.insert(11844);
        addrs.insert(11848);
        addrs.insert(11852);
        addrs.insert(11856);
        addrs.insert(11860);
        addrs.insert(11864);
        addrs.insert(11868);
        addrs.insert(11872);
        addrs.insert(11876);
        addrs.insert(11880);
        addrs.insert(11884);
        addrs.insert(11888);
        addrs.insert(11892);
        addrs.insert(11896);
        addrs.insert(11900);
        addrs.insert(11904);
        addrs.insert(11908);
        addrs.insert(11912);
        addrs.insert(11916);
        addrs.insert(11920);
        addrs.insert(11924);
        addrs.insert(11928);
        addrs.insert(11932);
        addrs.insert(11936);
        addrs.insert(11940);
        addrs.insert(11944);
        addrs.insert(11948);
        addrs.insert(11952);
        addrs.insert(11956);
        addrs.insert(11960);
        addrs.insert(11964);
        addrs.insert(11968);
        addrs.insert(11972);
        addrs.insert(11976);
        addrs.insert(11980);
        addrs.insert(11984);
        addrs.insert(11988);
        addrs.insert(11992);
        addrs.insert(11996);
        addrs.insert(12000);
        addrs.insert(12004);
        addrs.insert(12008);
        addrs.insert(12012);
        addrs.insert(12016);
        addrs.insert(12020);
        addrs.insert(12024);
        addrs.insert(12028);
        addrs.insert(12032);
        addrs.insert(12036);
        addrs.insert(12040);
        addrs.insert(12044);
        addrs.insert(12048);
        addrs.insert(12052);
        addrs.insert(12056);
        addrs.insert(12060);
        addrs.insert(12064);
        addrs.insert(12068);
        addrs.insert(12072);
        addrs.insert(12076);
        addrs.insert(12080);
        addrs.insert(12084);
        addrs.insert(12088);
        addrs.insert(12092);
        addrs.insert(12096);
        addrs.insert(12100);
        addrs.insert(12104);
        addrs.insert(12108);
        addrs.insert(12112);
        addrs.insert(12116);
        addrs.insert(12120);
        addrs.insert(12124);
        addrs.insert(12128);
        addrs.insert(12132);
        addrs.insert(12136);
        addrs.insert(12140);
        addrs.insert(12144);
        addrs.insert(12148);
        addrs.insert(12152);
        addrs.insert(12156);
        addrs.insert(12160);
        addrs.insert(12164);
        addrs.insert(12168);
        addrs.insert(12172);
        addrs.insert(12176);
        addrs.insert(12180);
        addrs.insert(12184);
        addrs.insert(12188);
        addrs.insert(12192);
        addrs.insert(12196);
        addrs.insert(12200);
        addrs.insert(12204);
        addrs.insert(12208);
        addrs.insert(12212);
        addrs.insert(12216);
        addrs.insert(12220);
        addrs.insert(12224);
        addrs.insert(12228);
        addrs.insert(12232);
        addrs.insert(12236);
        addrs.insert(12240);
        addrs.insert(12244);
        addrs.insert(12248);
        addrs.insert(12252);
        addrs.insert(12256);
        addrs.insert(12260);
        addrs.insert(12264);
        addrs.insert(12268);
        addrs.insert(12272);
        addrs.insert(12276);
        addrs.insert(12280);
        addrs.insert(12284);
        addrs.insert(12288);
        addrs.insert(12292);
        addrs.insert(12296);
        addrs.insert(12300);
        addrs.insert(12304);
        addrs.insert(12308);
        addrs.insert(12312);
        addrs.insert(12316);
        addrs.insert(12320);
        addrs.insert(12324);
        addrs.insert(12328);
        addrs.insert(12332);
        addrs.insert(12336);
        addrs.insert(12340);
        addrs.insert(12344);
        addrs.insert(12348);
        addrs.insert(12352);
        addrs.insert(12356);
        addrs.insert(12360);
        addrs.insert(12364);
        addrs.insert(12368);
        addrs.insert(12372);
        addrs.insert(12376);
        addrs.insert(12380);
        addrs.insert(12384);
        addrs.insert(12388);
        addrs.insert(12392);
        addrs.insert(12396);
        addrs.insert(12400);
        addrs.insert(12404);
        addrs.insert(12408);
        addrs.insert(12412);
        addrs.insert(12416);
        addrs.insert(12420);
        addrs.insert(12424);
        addrs.insert(12428);
        addrs.insert(12432);
        addrs.insert(12436);
        addrs.insert(12440);
        addrs.insert(12444);
        addrs.insert(12448);
        addrs.insert(12452);
        addrs.insert(12456);
        addrs.insert(12460);
        addrs.insert(12464);
        addrs.insert(12468);
        addrs.insert(12472);
        addrs.insert(12476);
        addrs.insert(12480);
        addrs.insert(12484);
        addrs.insert(12488);
        addrs.insert(12492);
        addrs.insert(12496);
        addrs.insert(12500);
        addrs.insert(12504);
        addrs.insert(12508);
        addrs.insert(12512);
        addrs.insert(12516);
        addrs.insert(12520);
        addrs.insert(12524);
        addrs.insert(12528);
        addrs.insert(12532);
        addrs.insert(12536);
        addrs.insert(12540);
        addrs.insert(12544);
        addrs.insert(12548);
        addrs.insert(12552);
        addrs.insert(12556);
        addrs.insert(12560);
        addrs.insert(12564);
        addrs.insert(12568);
        addrs.insert(12572);
        addrs.insert(12576);
        addrs.insert(12580);
        addrs.insert(12584);
        addrs.insert(12588);
        addrs.insert(12592);
        addrs.insert(12596);
        addrs.insert(12600);
        addrs.insert(12604);
        addrs.insert(12608);
        addrs.insert(12612);
        addrs.insert(12616);
        addrs.insert(12620);
        addrs.insert(12624);
        addrs.insert(12628);
        addrs.insert(12632);
        addrs.insert(12636);
        addrs.insert(12640);
        addrs.insert(12644);
        addrs.insert(12648);
        addrs.insert(12652);
        addrs.insert(12656);
        addrs.insert(12660);
        addrs.insert(12664);
        addrs.insert(12668);
        addrs.insert(12672);
        addrs.insert(12676);
        addrs.insert(12680);
        addrs.insert(12684);
        addrs.insert(12688);
        addrs.insert(12692);
        addrs.insert(12696);
        addrs.insert(12700);
        addrs.insert(12704);
        addrs.insert(12708);
        addrs.insert(12712);
        addrs.insert(12716);
        addrs.insert(12720);
        addrs.insert(12724);
        addrs.insert(12728);
        addrs.insert(12732);
        addrs.insert(12736);
        addrs.insert(12740);
        addrs.insert(12744);
        addrs.insert(12748);
        addrs.insert(12752);
        addrs.insert(12756);
        addrs.insert(12760);
        addrs.insert(12764);
        addrs.insert(12768);
        addrs.insert(12772);
        addrs.insert(12776);
        addrs.insert(12780);
        addrs.insert(12784);
        addrs.insert(12788);
        addrs.insert(12792);
        addrs.insert(12796);
        addrs.insert(12800);
        addrs.insert(12804);
        addrs.insert(12808);
        addrs.insert(12812);
        addrs.insert(12816);
        addrs.insert(12820);
        addrs.insert(12824);
        addrs.insert(12828);
        addrs.insert(12832);
        addrs.insert(12836);
        addrs.insert(12840);
        addrs.insert(12844);
        addrs.insert(12848);
        addrs.insert(12852);
        addrs.insert(12856);
        addrs.insert(12860);
        addrs.insert(12864);
        addrs.insert(12868);
        addrs.insert(12872);
        addrs.insert(12876);
        addrs.insert(12880);
        addrs.insert(12884);
        addrs.insert(12888);
        addrs.insert(12892);
        addrs.insert(12896);
        addrs.insert(12900);
        addrs.insert(12904);
        addrs.insert(12908);
        addrs.insert(12912);
        addrs.insert(12916);
        addrs.insert(12920);
        addrs.insert(12924);
        addrs.insert(12928);
        addrs.insert(12932);
        addrs.insert(12936);
        addrs.insert(12940);
        addrs.insert(12944);
        addrs.insert(12948);
        addrs.insert(12952);
        addrs.insert(12956);
        addrs.insert(12960);
        addrs.insert(12964);
        addrs.insert(12968);
        addrs.insert(12972);
        addrs.insert(12976);
        addrs.insert(12980);
        addrs.insert(12984);
        addrs.insert(12988);
        addrs.insert(12992);
        addrs.insert(12996);
        addrs.insert(13000);
        addrs.insert(13004);
        addrs.insert(13008);
        addrs.insert(13012);
        addrs.insert(13016);
        addrs.insert(13020);
        addrs.insert(13024);
        addrs.insert(13028);
        addrs.insert(13032);
        addrs.insert(13036);
        addrs.insert(13040);
        addrs.insert(13044);
        addrs.insert(13048);
        addrs.insert(13052);
        addrs.insert(13056);
        addrs.insert(13060);
        addrs.insert(13064);
        addrs.insert(13068);
        addrs.insert(13072);
        addrs.insert(13076);
        addrs.insert(13080);
        addrs.insert(13084);
        addrs.insert(13088);
        addrs.insert(13092);
        addrs.insert(13096);
        addrs.insert(13100);
        addrs.insert(13104);
        addrs.insert(13108);
        addrs.insert(13112);
        addrs.insert(13116);
        addrs.insert(13120);
        addrs.insert(13124);
        addrs.insert(13128);
        addrs.insert(13132);
        addrs.insert(13136);
        addrs.insert(13140);
        addrs.insert(13144);
        addrs.insert(13148);
        addrs.insert(13152);
        addrs.insert(13156);
        addrs.insert(13160);
        addrs.insert(13164);
        addrs.insert(13168);
        addrs.insert(13172);
        addrs.insert(13176);
        addrs.insert(13180);
        addrs.insert(13184);
        addrs.insert(13188);
        addrs.insert(13192);
        addrs.insert(13196);
        addrs.insert(13200);
        addrs.insert(13204);
        addrs.insert(13208);
        addrs.insert(13212);
        addrs.insert(13216);
        addrs.insert(13220);
        addrs.insert(13224);
        addrs.insert(13228);
        addrs.insert(13232);
        addrs.insert(13236);
        addrs.insert(13240);
        addrs.insert(13244);
        addrs.insert(13248);
        addrs.insert(13252);
        addrs.insert(13256);
        addrs.insert(13260);
        addrs.insert(13264);
        addrs.insert(13268);
        addrs.insert(13272);
        addrs.insert(13276);
        addrs.insert(13280);
        addrs.insert(13284);
        addrs.insert(13288);
        addrs.insert(13292);
        addrs.insert(13296);
        addrs.insert(13300);
        addrs.insert(13304);
        addrs.insert(13308);
        addrs.insert(13312);
        addrs.insert(13316);
        addrs.insert(13320);
        addrs.insert(13324);
        addrs.insert(13328);
        addrs.insert(13332);
        addrs.insert(13336);
        addrs.insert(13340);
        addrs.insert(13344);
        addrs.insert(13348);
        addrs.insert(13352);
        addrs.insert(13356);
        addrs.insert(13360);
        addrs.insert(13364);
        addrs.insert(13368);
        addrs.insert(13372);
        addrs.insert(13376);
        addrs.insert(13380);
        addrs.insert(13384);
        addrs.insert(13388);
        addrs.insert(13392);
        addrs.insert(13396);
        addrs.insert(13400);
        addrs.insert(13404);
        addrs.insert(13408);
        addrs.insert(13412);
        addrs.insert(13416);
        addrs.insert(13420);
        addrs.insert(13424);
        addrs.insert(13428);
        addrs.insert(13432);
        addrs.insert(13436);
        addrs.insert(13440);
        addrs.insert(13444);
        addrs.insert(13448);
        addrs.insert(13452);
        addrs.insert(13456);
        addrs.insert(13460);
        addrs.insert(13464);
        addrs.insert(13468);
        addrs.insert(13472);
        addrs.insert(13476);
        addrs.insert(13480);
        addrs.insert(13484);
        addrs.insert(13488);
        addrs.insert(13492);
        addrs.insert(13496);
        addrs.insert(13500);
        addrs.insert(13504);
        addrs.insert(13508);
        addrs.insert(13512);
        addrs.insert(13516);
        addrs.insert(13520);
        addrs.insert(13524);
        addrs.insert(13528);
        addrs.insert(13532);
        addrs.insert(13536);
        addrs.insert(13540);
        addrs.insert(13544);
        addrs.insert(13548);
        addrs.insert(13552);
        addrs.insert(13556);
        addrs.insert(13560);
        addrs.insert(13564);
        addrs.insert(13568);
        addrs.insert(13572);
        addrs.insert(13576);
        addrs.insert(13580);
        addrs.insert(13584);
        addrs.insert(13588);
        addrs.insert(13592);
        addrs.insert(13596);
        addrs.insert(13600);
        addrs.insert(13604);
        addrs.insert(13608);
        addrs.insert(13612);
        addrs.insert(13616);
        addrs.insert(13620);
        addrs.insert(13624);
        addrs.insert(13628);
        addrs.insert(13632);
        addrs.insert(13636);
        addrs.insert(13640);
        addrs.insert(13644);
        addrs.insert(13648);
        addrs.insert(13652);
        addrs.insert(13656);
        addrs.insert(13660);
        addrs.insert(13664);
        addrs.insert(13668);
        addrs.insert(13672);
        addrs.insert(13676);
        addrs.insert(13680);
        addrs.insert(13684);
        addrs.insert(13688);
        addrs.insert(13692);
        addrs.insert(13696);
        addrs.insert(13700);
        addrs.insert(13704);
        addrs.insert(13708);
        addrs.insert(13712);
        addrs.insert(13716);
        addrs.insert(13720);
        addrs.insert(13724);
        addrs.insert(13728);
        addrs.insert(13732);
        addrs.insert(13736);
        addrs.insert(13740);
        addrs.insert(13744);
        addrs.insert(13748);
        addrs.insert(13752);
        addrs.insert(13756);
        addrs.insert(13760);
        addrs.insert(13764);
        addrs.insert(13768);
        addrs.insert(13772);
        addrs.insert(13776);
        addrs.insert(13780);
        addrs.insert(13784);
        addrs.insert(13788);
        addrs.insert(13792);
        addrs.insert(13796);
        addrs.insert(13800);
        addrs.insert(13804);
        addrs.insert(13808);
        addrs.insert(13812);
        addrs.insert(13816);
        addrs.insert(13820);
        addrs.insert(13824);
        addrs.insert(13828);
        addrs.insert(13832);
        addrs.insert(13836);
        addrs.insert(13840);
        addrs.insert(13844);
        addrs.insert(13848);
        addrs.insert(13852);
        addrs.insert(13856);
        addrs.insert(13860);
        addrs.insert(13864);
        addrs.insert(13868);
        addrs.insert(13872);
        addrs.insert(13876);
        addrs.insert(13880);
        addrs.insert(13884);
        addrs.insert(13888);
        addrs.insert(13892);
        addrs.insert(13896);
        addrs.insert(13900);
        addrs.insert(13904);
        addrs.insert(13908);
        addrs.insert(13912);
        addrs.insert(13916);
        addrs.insert(13920);
        addrs.insert(13924);
        addrs.insert(13928);
        addrs.insert(13932);
        addrs.insert(13936);
        addrs.insert(13940);
        addrs.insert(13944);
        addrs.insert(13948);
        addrs.insert(13952);
        addrs.insert(13956);
        addrs.insert(13960);
        addrs.insert(13964);
        addrs.insert(13968);
        addrs.insert(13972);
        addrs.insert(13976);
        addrs.insert(13980);
        addrs.insert(13984);
        addrs.insert(13988);
        addrs.insert(13992);
        addrs.insert(13996);
        addrs.insert(14000);
        addrs.insert(14004);
        addrs.insert(14008);
        addrs.insert(14012);
        addrs.insert(14016);
        addrs.insert(14020);
        addrs.insert(14024);
        addrs.insert(14028);
        addrs.insert(14032);
        addrs.insert(14036);
        addrs.insert(14040);
        addrs.insert(14044);
        addrs.insert(14048);
        addrs.insert(14052);
        addrs.insert(14056);
        addrs.insert(14060);
        addrs.insert(14064);
        addrs.insert(14068);
        addrs.insert(14072);
        addrs.insert(14076);
        addrs.insert(14080);
        addrs.insert(14084);
        addrs.insert(14088);
        addrs.insert(14092);
        addrs.insert(14096);
        addrs.insert(14100);
        addrs.insert(14104);
        addrs.insert(14108);
        addrs.insert(14112);
        addrs.insert(14116);
        addrs.insert(14120);
        addrs.insert(14124);
        addrs.insert(14128);
        addrs.insert(14132);
        addrs.insert(14136);
        addrs.insert(14140);
        addrs.insert(14144);
        addrs.insert(14148);
        addrs.insert(14152);
        addrs.insert(14156);
        addrs.insert(14160);
        addrs.insert(14164);
        addrs.insert(14168);
        addrs.insert(14172);
        addrs.insert(14176);
        addrs.insert(14180);
        addrs.insert(14184);
        addrs.insert(14188);
        addrs.insert(14192);
        addrs.insert(14196);
        addrs.insert(14200);
        addrs.insert(14204);
        addrs.insert(14208);
        addrs.insert(14212);
        addrs.insert(14216);
        addrs.insert(14220);
        addrs.insert(14224);
        addrs.insert(14228);
        addrs.insert(14232);
        addrs.insert(14236);
        addrs.insert(14240);
        addrs.insert(14244);
        addrs.insert(14248);
        addrs.insert(14252);
        addrs.insert(14256);
        addrs.insert(14260);
        addrs.insert(14264);
        addrs.insert(14268);
        addrs.insert(14272);
        addrs.insert(14276);
        addrs.insert(14280);
        addrs.insert(14284);
        addrs.insert(14288);
        addrs.insert(14292);
        addrs.insert(14296);
        addrs.insert(14300);
        addrs.insert(14304);
        addrs.insert(14308);
        addrs.insert(14312);
        addrs.insert(14316);
        addrs.insert(14320);
        addrs.insert(14324);
        addrs.insert(14328);
        addrs.insert(14332);
        addrs.insert(14336);
        addrs.insert(14340);
        addrs.insert(14344);
        addrs.insert(14348);
        addrs.insert(14352);
        addrs.insert(14356);
        addrs.insert(14360);
        addrs.insert(14364);
        addrs.insert(14368);
        addrs.insert(14372);
        addrs.insert(14376);
        addrs.insert(14380);
        addrs.insert(14384);
        addrs.insert(14388);
        addrs.insert(14392);
        addrs.insert(14396);
        addrs.insert(14400);
        addrs.insert(14404);
        addrs.insert(14408);
        addrs.insert(14412);
        addrs.insert(14416);
        addrs.insert(14420);
        addrs.insert(14424);
        addrs.insert(14428);
        addrs.insert(14432);
        addrs.insert(14436);
        addrs.insert(14440);
        addrs.insert(14444);
        addrs.insert(14448);
        addrs.insert(14452);
        addrs.insert(14456);
        addrs.insert(14460);
        addrs.insert(14464);
        addrs.insert(14468);
        addrs.insert(14472);
        addrs.insert(14476);
        addrs.insert(14480);
        addrs.insert(14484);
        addrs.insert(14488);
        addrs.insert(14492);
        addrs.insert(14496);
        addrs.insert(14500);
        addrs.insert(14504);
        addrs.insert(14508);
        addrs.insert(14512);
        addrs.insert(14516);
        addrs.insert(14520);
        addrs.insert(14524);
        addrs.insert(14528);
        addrs.insert(14532);
        addrs.insert(14536);
        addrs.insert(14540);
        addrs.insert(14544);
        addrs.insert(14548);
        addrs.insert(14552);
        addrs.insert(14556);
        addrs.insert(14560);
        addrs.insert(14564);
        addrs.insert(14568);
        addrs.insert(14572);
        addrs.insert(14576);
        addrs.insert(14580);
        addrs.insert(14584);
        addrs.insert(14588);
        addrs.insert(14592);
        addrs.insert(14596);
        addrs.insert(14600);
        addrs.insert(14604);
        addrs.insert(14608);
        addrs.insert(14612);
        addrs.insert(14616);
        addrs.insert(14620);
        addrs.insert(14624);
        addrs.insert(14628);
        addrs.insert(14632);
        addrs.insert(14636);
        addrs.insert(14640);
        addrs.insert(14644);
        addrs.insert(14648);
        addrs.insert(14652);
        addrs.insert(14656);
        addrs.insert(14660);
        addrs.insert(14664);
        addrs.insert(14668);
        addrs.insert(14672);
        addrs.insert(14676);
        addrs.insert(14680);
        addrs.insert(14684);
        addrs.insert(14688);
        addrs.insert(14692);
        addrs.insert(14696);
        addrs.insert(14700);
        addrs.insert(14704);
        addrs.insert(14708);
        addrs.insert(14712);
        addrs.insert(14716);
        addrs.insert(14720);
        addrs.insert(14724);
        addrs.insert(14728);
        addrs.insert(14732);
        addrs.insert(14736);
        addrs.insert(14740);
        addrs.insert(14744);
        addrs.insert(14748);
        addrs.insert(14752);
        addrs.insert(14756);
        addrs.insert(14760);
        addrs.insert(14764);
        addrs.insert(14768);
        addrs.insert(14772);
        addrs.insert(14776);
        addrs.insert(14780);
        addrs.insert(14784);
        addrs.insert(14788);
        addrs.insert(14792);
        addrs.insert(14796);
        addrs.insert(14800);
        addrs.insert(14804);
        addrs.insert(14808);
        addrs.insert(14812);
        addrs.insert(14816);
        addrs.insert(14820);
        addrs.insert(14824);
        addrs.insert(14828);
        addrs.insert(14832);
        addrs.insert(14836);
        addrs.insert(14840);
        addrs.insert(14844);
        addrs.insert(14848);
        addrs.insert(14852);
        addrs.insert(14856);
        addrs.insert(14860);
        addrs.insert(14864);
        addrs.insert(14868);
        addrs.insert(14872);
        addrs.insert(14876);
        addrs.insert(14880);
        addrs.insert(14884);
        addrs.insert(14888);
        addrs.insert(14892);
        addrs.insert(14896);
        addrs.insert(14900);
        addrs.insert(14904);
        addrs.insert(14908);
        addrs.insert(14912);
        addrs.insert(14916);
        addrs.insert(14920);
        addrs.insert(14924);
        addrs.insert(14928);
        addrs.insert(14932);
        addrs.insert(14936);
        addrs.insert(14940);
        addrs.insert(14944);
        addrs.insert(14948);
        addrs.insert(14952);
        addrs.insert(14956);
        addrs.insert(14960);
        addrs.insert(14964);
        addrs.insert(14968);
        addrs.insert(14972);
        addrs.insert(14976);
        addrs.insert(14980);
        addrs.insert(14984);
        addrs.insert(14988);
        addrs.insert(14992);
        addrs.insert(14996);
        addrs.insert(15000);
        addrs.insert(15004);
        addrs.insert(15008);
        addrs.insert(15012);
        addrs.insert(15016);
        addrs.insert(15020);
        addrs.insert(15024);
        addrs.insert(15028);
        addrs.insert(15032);
        addrs.insert(15036);
        addrs.insert(15040);
        addrs.insert(15044);
        addrs.insert(15048);
        addrs.insert(15052);
        addrs.insert(15056);
        addrs.insert(15060);
        addrs.insert(15064);
        addrs.insert(15068);
        addrs.insert(15072);
        addrs.insert(15076);
        addrs.insert(15080);
        addrs.insert(15084);
        addrs.insert(15088);
        addrs.insert(15092);
        addrs.insert(15096);
        addrs.insert(15100);
        addrs.insert(15104);
        addrs.insert(15108);
        addrs.insert(15112);
        addrs.insert(15116);
        addrs.insert(15120);
        addrs.insert(15124);
        addrs.insert(15128);
        addrs.insert(15132);
        addrs.insert(15136);
        addrs.insert(15140);
        addrs.insert(15144);
        addrs.insert(15148);
        addrs.insert(15152);
        addrs.insert(15156);
        addrs.insert(15160);
        addrs.insert(15164);
        addrs.insert(15168);
        addrs.insert(15172);
        addrs.insert(15176);
        addrs.insert(15180);
        addrs.insert(15184);
        addrs.insert(15188);
        addrs.insert(15192);
        addrs.insert(15196);
        addrs.insert(15200);
        addrs.insert(15204);
        addrs.insert(15208);
        addrs.insert(15212);
        addrs.insert(15216);
        addrs.insert(15220);
        addrs.insert(15224);
        addrs.insert(15228);
        addrs.insert(15232);
        addrs.insert(15236);
        addrs.insert(15240);
        addrs.insert(15244);
        addrs.insert(15248);
        addrs.insert(15252);
        addrs.insert(15256);
        addrs.insert(15260);
        addrs.insert(15264);
        addrs.insert(15268);
        addrs.insert(15272);
        addrs.insert(15276);
        addrs.insert(15280);
        addrs.insert(15284);
        addrs.insert(15288);
        addrs.insert(15292);
        addrs.insert(15296);
        addrs.insert(15300);
        addrs.insert(15304);
        addrs.insert(15308);
        addrs.insert(15312);
        addrs.insert(15316);
        addrs.insert(15320);
        addrs.insert(15324);
        addrs.insert(15328);
        addrs.insert(15332);
        addrs.insert(15336);
        addrs.insert(15340);
        addrs.insert(15344);
        addrs.insert(15348);
        addrs.insert(15352);
        addrs.insert(15356);
        addrs.insert(15360);
        addrs.insert(15364);
        addrs.insert(15368);
        addrs.insert(15372);
        addrs.insert(15376);
        addrs.insert(15380);
        addrs.insert(15384);
        addrs.insert(15388);
        addrs.insert(15392);
        addrs.insert(15396);
        addrs.insert(15400);
        addrs.insert(15404);
        addrs.insert(15408);
        addrs.insert(15412);
        addrs.insert(15416);
        addrs.insert(15420);
        addrs.insert(15424);
        addrs.insert(15428);
        addrs.insert(15432);
        addrs.insert(15436);
        addrs.insert(15440);
        addrs.insert(15444);
        addrs.insert(15448);
        addrs.insert(15452);
        addrs.insert(15456);
        addrs.insert(15460);
        addrs.insert(15464);
        addrs.insert(15468);
        addrs.insert(15472);
        addrs.insert(15476);
        addrs.insert(15480);
        addrs.insert(15484);
        addrs.insert(15488);
        addrs.insert(15492);
        addrs.insert(15496);
        addrs.insert(15500);
        addrs.insert(15504);
        addrs.insert(15508);
        addrs.insert(15512);
        addrs.insert(15516);
        addrs.insert(15520);
        addrs.insert(15524);
        addrs.insert(15528);
        addrs.insert(15532);
        addrs.insert(15536);
        addrs.insert(15540);
        addrs.insert(15544);
        addrs.insert(15548);
        addrs.insert(15552);
        addrs.insert(15556);
        addrs.insert(15560);
        addrs.insert(15564);
        addrs.insert(15568);
        addrs.insert(15572);
        addrs.insert(15576);
        addrs.insert(15580);
        addrs.insert(15584);
        addrs.insert(15588);
        addrs.insert(15592);
        addrs.insert(15596);
        addrs.insert(15600);
        addrs.insert(15604);
        addrs.insert(15608);
        addrs.insert(15612);
        addrs.insert(15616);
        addrs.insert(15620);
        addrs.insert(15624);
        addrs.insert(15628);
        addrs.insert(15632);
        addrs.insert(15636);
        addrs.insert(15640);
        addrs.insert(15644);
        addrs.insert(15648);
        addrs.insert(15652);
        addrs.insert(15656);
        addrs.insert(15660);
        addrs.insert(15664);
        addrs.insert(15668);
        addrs.insert(15672);
        addrs.insert(15676);
        addrs.insert(15680);
        addrs.insert(15684);
        addrs.insert(15688);
        addrs.insert(15692);
        addrs.insert(15696);
        addrs.insert(15700);
        addrs.insert(15704);
        addrs.insert(15708);
        addrs.insert(15712);
        addrs.insert(15716);
        addrs.insert(15720);
        addrs.insert(15724);
        addrs.insert(15728);
        addrs.insert(15732);
        addrs.insert(15736);
        addrs.insert(15740);
        addrs.insert(15744);
        addrs.insert(15748);
        addrs.insert(15752);
        addrs.insert(15756);
        addrs.insert(15760);
        addrs.insert(15764);
        addrs.insert(15768);
        addrs.insert(15772);
        addrs.insert(15776);
        addrs.insert(15780);
        addrs.insert(15784);
        addrs.insert(15788);
        addrs.insert(15792);
        addrs.insert(15796);
        addrs.insert(15800);
        addrs.insert(15804);
        addrs.insert(15808);
        addrs.insert(15812);
        addrs.insert(15816);
        addrs.insert(15820);
        addrs.insert(15824);
        addrs.insert(15828);
        addrs.insert(15832);
        addrs.insert(15836);
        addrs.insert(15840);
        addrs.insert(15844);
        addrs.insert(15848);
        addrs.insert(15852);
        addrs.insert(15856);
        addrs.insert(15860);
        addrs.insert(15864);
        addrs.insert(15868);
        addrs.insert(15872);
        addrs.insert(15876);
        addrs.insert(15880);
        addrs.insert(15884);
        addrs.insert(15888);
        addrs.insert(15892);
        addrs.insert(15896);
        addrs.insert(15900);
        addrs.insert(15904);
        addrs.insert(15908);
        addrs.insert(15912);
        addrs.insert(15916);
        addrs.insert(15920);
        addrs.insert(15924);
        addrs.insert(15928);
        addrs.insert(15932);
        addrs.insert(15936);
        addrs.insert(15940);
        addrs.insert(15944);
        addrs.insert(15948);
        addrs.insert(15952);
        addrs.insert(15956);
        addrs.insert(15960);
        addrs.insert(15964);
        addrs.insert(15968);
        addrs.insert(15972);
        addrs.insert(15976);
        addrs.insert(15980);
        addrs.insert(15984);
        addrs.insert(15988);
        addrs.insert(15992);
        addrs.insert(15996);
        addrs.insert(16000);
        addrs.insert(16004);
        addrs.insert(16008);
        addrs.insert(16012);
        addrs.insert(16016);
        addrs.insert(16020);
        addrs.insert(16024);
        addrs.insert(16028);
        addrs.insert(16032);
        addrs.insert(16036);
        addrs.insert(16040);
        addrs.insert(16044);
        addrs.insert(16048);
        addrs.insert(16052);
        addrs.insert(16056);
        addrs.insert(16060);
        addrs.insert(16064);
        addrs.insert(16068);
        addrs.insert(16072);
        addrs.insert(16076);
        addrs.insert(16080);
        addrs.insert(16084);
        addrs.insert(16088);
        addrs.insert(16092);
        addrs.insert(16096);
        addrs.insert(16100);
        addrs.insert(16104);
        addrs.insert(16108);
        addrs.insert(16112);
        addrs.insert(16116);
        addrs.insert(16120);
        addrs.insert(16124);
        addrs.insert(16128);
        addrs.insert(16132);
        addrs.insert(16136);
        addrs.insert(16140);
        addrs.insert(16144);
        addrs.insert(16148);
        addrs.insert(16152);
        addrs.insert(16156);
        addrs.insert(16160);
        addrs.insert(16164);
        addrs.insert(16168);
        addrs.insert(16172);
        addrs.insert(16176);
        addrs.insert(16180);
        addrs.insert(16184);
        addrs.insert(16188);
        addrs.insert(16192);
        addrs.insert(16196);
        addrs.insert(16200);
        addrs.insert(16204);
        addrs.insert(16208);
        addrs.insert(16212);
        addrs.insert(16216);
        addrs.insert(16220);
        addrs.insert(16224);
        addrs.insert(16228);
        addrs.insert(16232);
        addrs.insert(16236);
        addrs.insert(16240);
        addrs.insert(16244);
        addrs.insert(16248);
        addrs.insert(16252);
        addrs.insert(16256);
        addrs.insert(16260);
        addrs.insert(16264);
        addrs.insert(16268);
        addrs.insert(16272);
        addrs.insert(16276);
        addrs.insert(16280);
        addrs.insert(16284);
        addrs.insert(16288);
        addrs.insert(16292);
        addrs.insert(16296);
        addrs.insert(16300);
        addrs.insert(16304);
        addrs.insert(16308);
        addrs.insert(16312);
        addrs.insert(16316);
        addrs.insert(16320);
        addrs.insert(16324);
        addrs.insert(16328);
        addrs.insert(16332);
        addrs.insert(16336);
        addrs.insert(16340);
        addrs.insert(16344);
        addrs.insert(16348);
        addrs.insert(16352);
        addrs.insert(16356);
        addrs.insert(16360);
        addrs.insert(16364);
        addrs.insert(16368);
        addrs.insert(16372);
        addrs.insert(16376);
        addrs.insert(16380);
        addrs.insert(16384);
        addrs.insert(16388);
        addrs.insert(16392);
        addrs.insert(16396);
        addrs.insert(16400);
        addrs.insert(16404);
        addrs.insert(16408);
        addrs.insert(16412);
        addrs.insert(16416);
        addrs.insert(16420);
        addrs.insert(16424);
        addrs.insert(16428);
        addrs.insert(16432);
        addrs.insert(16436);
        addrs.insert(16440);
        addrs.insert(16444);
        addrs.insert(16448);
        addrs.insert(16452);
        addrs.insert(16456);
        addrs.insert(16460);
        addrs.insert(16464);
        addrs.insert(16468);
        addrs.insert(16472);
        addrs.insert(16476);
        addrs.insert(16480);
        addrs.insert(16484);
        addrs.insert(16488);
        addrs.insert(16492);
        addrs.insert(16496);
        addrs.insert(16500);
        addrs.insert(16504);
        addrs.insert(16508);
        addrs.insert(16512);
        addrs.insert(16516);
        addrs.insert(16520);
        addrs.insert(16524);
        addrs.insert(16528);
        addrs.insert(16532);
        addrs.insert(16536);
        addrs.insert(16540);
        addrs.insert(16544);
        addrs.insert(16548);
        addrs.insert(16552);
        addrs.insert(16556);
        addrs.insert(16560);
        addrs.insert(16564);
        addrs.insert(16568);
        addrs.insert(16572);
        addrs.insert(16576);
        addrs.insert(16580);
        addrs.insert(16584);
        addrs.insert(16588);
        addrs.insert(16592);
        addrs.insert(16596);
        addrs.insert(16600);
        addrs.insert(16604);
        addrs.insert(16608);
        addrs.insert(16612);
        addrs.insert(16616);
        addrs.insert(16620);
        addrs.insert(16624);
        addrs.insert(16628);
        addrs.insert(16632);
        addrs.insert(16636);
        addrs.insert(16640);
        addrs.insert(16644);
        addrs.insert(16648);
        addrs.insert(16652);
        addrs.insert(16656);
        addrs.insert(16660);
        addrs.insert(16664);
        addrs.insert(16668);
        addrs.insert(16672);
        addrs.insert(16676);
        addrs.insert(16680);
        addrs.insert(16684);
        addrs.insert(16688);
        addrs.insert(16692);
        addrs.insert(16696);
        addrs.insert(16700);
        addrs.insert(16704);
        addrs.insert(16708);
        addrs.insert(16712);
        addrs.insert(16716);
        addrs.insert(16720);
        addrs.insert(16724);
        addrs.insert(16728);
        addrs.insert(16732);
        addrs.insert(16736);
        addrs.insert(16740);
        addrs.insert(16744);
        addrs.insert(16748);
        addrs.insert(16752);
        addrs.insert(16756);
        addrs.insert(16760);
        addrs.insert(16764);
        addrs.insert(16768);
        addrs.insert(16772);
        addrs.insert(16776);
        addrs.insert(16780);
        addrs.insert(16784);
        addrs.insert(16788);
        addrs.insert(16792);
        addrs.insert(16796);
        addrs.insert(16800);
        addrs.insert(16804);
        addrs.insert(16808);
        addrs.insert(16812);
        addrs.insert(16816);
        addrs.insert(16820);
        addrs.insert(16824);
        addrs.insert(16828);
        addrs.insert(16832);
        addrs.insert(16836);
        addrs.insert(16840);
        addrs.insert(16844);
        addrs.insert(16848);
        addrs.insert(16852);
        addrs.insert(16856);
        addrs.insert(16860);
        addrs.insert(16864);
        addrs.insert(16868);
        addrs.insert(16872);
        addrs.insert(16876);
        addrs.insert(16880);
        addrs.insert(16884);
        addrs.insert(16888);
        addrs.insert(16892);
        addrs.insert(16896);
        addrs.insert(16900);
        addrs.insert(16904);
        addrs.insert(16908);
        addrs.insert(16912);
        addrs.insert(16916);
        addrs.insert(16920);
        addrs.insert(16924);
        addrs.insert(16928);
        addrs.insert(16932);
        addrs.insert(16936);
        addrs.insert(16940);
        addrs.insert(16944);
        addrs.insert(16948);
        addrs.insert(16952);
        addrs.insert(16956);
        addrs.insert(16960);
        addrs.insert(16964);
        addrs.insert(16968);
        addrs.insert(16972);
        addrs.insert(16976);
        addrs.insert(16980);
        addrs.insert(16984);
        addrs.insert(16988);
        addrs.insert(16992);
        addrs.insert(16996);
        addrs.insert(17000);
        addrs.insert(17004);
        addrs.insert(17008);
        addrs.insert(17012);
        addrs.insert(17016);
        addrs.insert(17020);
        addrs.insert(17024);
        addrs.insert(17028);
        addrs.insert(17032);
        addrs.insert(17036);
        addrs.insert(17040);
        addrs.insert(17044);
        addrs.insert(17048);
        addrs.insert(17052);
        addrs.insert(17056);
        addrs.insert(17060);
        addrs.insert(17064);
        addrs.insert(17068);
        addrs.insert(17072);
        addrs.insert(17076);
        addrs.insert(17080);
        addrs.insert(17084);
        addrs.insert(17088);
        addrs.insert(17092);
        addrs.insert(17096);
        addrs.insert(17100);
        addrs.insert(17104);
        addrs.insert(17108);
        addrs.insert(17112);
        addrs.insert(17116);
        addrs.insert(17120);
        addrs.insert(17124);
        addrs.insert(17128);
        addrs.insert(17132);
        addrs.insert(17136);
        addrs.insert(17140);
        addrs.insert(17144);
        addrs.insert(17148);
        addrs.insert(17152);
        addrs.insert(17156);
        addrs.insert(17160);
        addrs.insert(17164);
        addrs.insert(17168);
        addrs.insert(17172);
        addrs.insert(17176);
        addrs.insert(17180);
        addrs.insert(17184);
        addrs.insert(17188);
        addrs.insert(17192);
        addrs.insert(17196);
        addrs.insert(17200);
        addrs.insert(17204);
        addrs.insert(17208);
        addrs.insert(17212);
        addrs.insert(17216);
        addrs.insert(17220);
        addrs.insert(17224);
        addrs.insert(17228);
        addrs.insert(17232);
        addrs.insert(17236);
        addrs.insert(17240);
        addrs.insert(17244);
        addrs.insert(17248);
        addrs.insert(17252);
        addrs.insert(17256);
        addrs.insert(17260);
        addrs.insert(17264);
        addrs.insert(17268);
        addrs.insert(17272);
        addrs.insert(17276);
        addrs.insert(17280);
        addrs.insert(17284);
        addrs.insert(17288);
        addrs.insert(17292);
        addrs.insert(17296);
        addrs.insert(17300);
        addrs.insert(17304);
        addrs.insert(17308);
        addrs.insert(17312);
        addrs.insert(17316);
        addrs.insert(17320);
        addrs.insert(17324);
        addrs.insert(17328);
        addrs.insert(17332);
        addrs.insert(17336);
        addrs.insert(17340);
        addrs.insert(17344);
        addrs.insert(17348);
        addrs.insert(17352);
        addrs.insert(17356);
        addrs.insert(17360);
        addrs.insert(17364);
        addrs.insert(17368);
        addrs.insert(17372);
        addrs.insert(17376);
        addrs.insert(17380);
        addrs.insert(17384);
        addrs.insert(17388);
        addrs.insert(17392);
        addrs.insert(17396);
        addrs.insert(17400);
        addrs.insert(17404);
        addrs.insert(17408);
        addrs.insert(17412);
        addrs.insert(17416);
        addrs.insert(17420);
        addrs.insert(17424);
        addrs.insert(17428);
        addrs.insert(17432);
        addrs.insert(17436);
        addrs.insert(17440);
        addrs.insert(17444);
        addrs.insert(17448);
        addrs.insert(17452);
        addrs.insert(17456);
        addrs.insert(17460);
        addrs.insert(17464);
        addrs.insert(17468);
        addrs.insert(17472);
        addrs.insert(17476);
        addrs.insert(17480);
        addrs.insert(17484);
        addrs.insert(17488);
        addrs.insert(17492);
        addrs.insert(17496);
        addrs.insert(17500);
        addrs.insert(17504);
        addrs.insert(17508);
        addrs.insert(17512);
        addrs.insert(17516);
        addrs.insert(17520);
        addrs.insert(17524);
        addrs.insert(17528);
        addrs.insert(17532);
        addrs.insert(17536);
        addrs.insert(17540);
        addrs.insert(17544);
        addrs.insert(17548);
        addrs.insert(17552);
        addrs.insert(17556);
        addrs.insert(17560);
        addrs.insert(17564);
        addrs.insert(17568);
        addrs.insert(17572);
        addrs.insert(17576);
        addrs.insert(17580);
        addrs.insert(17584);
        addrs.insert(17588);
        addrs.insert(17592);
        addrs.insert(17596);
        addrs.insert(17600);
        addrs.insert(17604);
        addrs.insert(17608);
        addrs.insert(17612);
        addrs.insert(17616);
        addrs.insert(17620);
        addrs.insert(17624);
        addrs.insert(17628);
        addrs.insert(17632);
        addrs.insert(17636);
        addrs.insert(17640);
        addrs.insert(17644);
        addrs.insert(17648);
        addrs.insert(17652);
        addrs.insert(17656);
        addrs.insert(17660);
        addrs.insert(17664);
        addrs.insert(17668);
        addrs.insert(17672);
        addrs.insert(17676);
        addrs.insert(17680);
        addrs.insert(17684);
        addrs.insert(17688);
        addrs.insert(17692);
        addrs.insert(17696);
        addrs.insert(17700);
        addrs.insert(17704);
        addrs.insert(17708);
        addrs.insert(17712);
        addrs.insert(17716);
        addrs.insert(17720);
        addrs.insert(17724);
        addrs.insert(17728);
        addrs.insert(17732);
        addrs.insert(17736);
        addrs.insert(17740);
        addrs.insert(17744);
        addrs.insert(17748);
        addrs.insert(17752);
        addrs.insert(17756);
        addrs.insert(17760);
        addrs.insert(17764);
        addrs.insert(17768);
        addrs.insert(17772);
        addrs.insert(17776);
        addrs.insert(17780);
        addrs.insert(17784);
        addrs.insert(17788);
        addrs.insert(17792);
        addrs.insert(17796);
        addrs.insert(17800);
        addrs.insert(17804);
        addrs.insert(17808);
        addrs.insert(17812);
        addrs.insert(17816);
        addrs.insert(17820);
        addrs.insert(17824);
        addrs.insert(17828);
        addrs.insert(17832);
        addrs.insert(17836);
        addrs.insert(17840);
        addrs.insert(17844);
        addrs.insert(17848);
        addrs.insert(17852);
        addrs.insert(17856);
        addrs.insert(17860);
        addrs.insert(17864);
        addrs.insert(17868);
        addrs.insert(17872);
        addrs.insert(17876);
        addrs.insert(17880);
        addrs.insert(17884);
        addrs.insert(17888);
        addrs.insert(17892);
        addrs.insert(17896);
        addrs.insert(17900);
        addrs.insert(17904);
        addrs.insert(17908);
        addrs.insert(17912);
        addrs.insert(17916);
        addrs.insert(17920);
        addrs.insert(17924);
        addrs.insert(17928);
        addrs.insert(17932);
        addrs.insert(17936);
        addrs.insert(17940);
        addrs.insert(17944);
        addrs.insert(17948);
        addrs.insert(17952);
        addrs.insert(17956);
        addrs.insert(17960);
        addrs.insert(17964);
        addrs.insert(17968);
        addrs.insert(17972);
        addrs.insert(17976);
        addrs.insert(17980);
        addrs.insert(17984);
        addrs.insert(17988);
        addrs.insert(17992);
        addrs.insert(17996);
        addrs.insert(18000);
        addrs.insert(18004);
        addrs.insert(18008);
        addrs.insert(18012);
        addrs.insert(18016);
        addrs.insert(18020);
        addrs.insert(18024);
        addrs.insert(18028);
        addrs.insert(18032);
        addrs.insert(18036);
        addrs.insert(18040);
        addrs.insert(18044);
        addrs.insert(18048);
        addrs.insert(18052);
        addrs.insert(18056);
        addrs.insert(18060);
        addrs.insert(18064);
        addrs.insert(18068);
        addrs.insert(18072);
        addrs.insert(18076);
        addrs.insert(18080);
        addrs.insert(18084);
        addrs.insert(18088);
        addrs.insert(18092);
        addrs.insert(18096);
        addrs.insert(18100);
        addrs.insert(18104);
        addrs.insert(18108);
        addrs.insert(18112);
        addrs.insert(18116);
        addrs.insert(18120);
        addrs.insert(18124);
        addrs.insert(18128);
        addrs.insert(18132);
        addrs.insert(18136);
        addrs.insert(18140);
        addrs.insert(18144);
        addrs.insert(18148);
        addrs.insert(18152);
        addrs.insert(18156);
        addrs.insert(18160);
        addrs.insert(18164);
        addrs.insert(18168);
        addrs.insert(18172);
        addrs.insert(18176);
        addrs.insert(18180);
        addrs.insert(18184);
        addrs.insert(18188);
        addrs.insert(18192);
        addrs.insert(18196);
        addrs.insert(18200);
        addrs.insert(18204);
        addrs.insert(18208);
        addrs.insert(18212);
        addrs.insert(18216);
        addrs.insert(18220);
        addrs.insert(18224);
        addrs.insert(18228);
        addrs.insert(18232);
        addrs.insert(18236);
        addrs.insert(18240);
        addrs.insert(18244);
        addrs.insert(18248);
        addrs.insert(18252);
        addrs.insert(18256);
        addrs.insert(18260);
        addrs.insert(18264);
        addrs.insert(18268);
        addrs.insert(18272);
        addrs.insert(18276);
        addrs.insert(18280);
        addrs.insert(18284);
        addrs.insert(18288);
        addrs.insert(18292);
        addrs.insert(18296);
        addrs.insert(18300);
        addrs.insert(18304);
        addrs.insert(18308);
        addrs.insert(18312);
        addrs.insert(18316);
        addrs.insert(18320);
        addrs.insert(18324);
        addrs.insert(18328);
        addrs.insert(18332);
        addrs.insert(18336);
        addrs.insert(18340);
        addrs.insert(18344);
        addrs.insert(18348);
        addrs.insert(18352);
        addrs.insert(18356);
        addrs.insert(18360);
        addrs.insert(18364);
        addrs.insert(18368);
        addrs.insert(18372);
        addrs.insert(18376);
        addrs.insert(18380);
        addrs.insert(18384);
        addrs.insert(18388);
        addrs.insert(18392);
        addrs.insert(18396);
        addrs.insert(18400);
        addrs.insert(18404);
        addrs.insert(18408);
        addrs.insert(18412);
        addrs.insert(18416);
        addrs.insert(18420);
        addrs.insert(18424);
        addrs.insert(18428);
        addrs.insert(18432);
        addrs.insert(18436);
        addrs.insert(18440);
        addrs.insert(18444);
        addrs.insert(18448);
        addrs.insert(18452);
        addrs.insert(18456);
        addrs.insert(18460);
        addrs.insert(18464);
        addrs.insert(18468);
        addrs.insert(18472);
        addrs.insert(18476);
        addrs.insert(18480);
        addrs.insert(18484);
        addrs.insert(18488);
        addrs.insert(18492);
        addrs.insert(18496);
        addrs.insert(18500);
        addrs.insert(18504);
        addrs.insert(18508);
        addrs.insert(18512);
        addrs.insert(18516);
        addrs.insert(18520);
        addrs.insert(18524);
        addrs.insert(18528);
        addrs.insert(18532);
        addrs.insert(18536);
        addrs.insert(18540);
        addrs.insert(18544);
        addrs.insert(18548);
        addrs.insert(18552);
        addrs.insert(18556);
        addrs.insert(18560);
        addrs.insert(18564);
        addrs.insert(18568);
        addrs.insert(18572);
        addrs.insert(18576);
        addrs.insert(18580);
        addrs.insert(18584);
        addrs.insert(18588);
        addrs.insert(18592);
        addrs.insert(18596);
        addrs.insert(18600);
        addrs.insert(18604);
        addrs.insert(18608);
        addrs.insert(18612);
        addrs.insert(18616);
        addrs.insert(18620);
        addrs.insert(18624);
        addrs.insert(18628);
        addrs.insert(18632);
        addrs.insert(18636);
        addrs.insert(18640);
        addrs.insert(18644);
        addrs.insert(18648);
        addrs.insert(18652);
        addrs.insert(18656);
        addrs.insert(18660);
        addrs.insert(18664);
        addrs.insert(18668);
        addrs.insert(18672);
        addrs.insert(18676);
        addrs.insert(18680);
        addrs.insert(18684);
        addrs.insert(18688);
        addrs.insert(18692);
        addrs.insert(18696);
        addrs.insert(18700);
        addrs.insert(18704);
        addrs.insert(18708);
        addrs.insert(18712);
        addrs.insert(18716);
        addrs.insert(18720);
        addrs.insert(18724);
        addrs.insert(18728);
        addrs.insert(18732);
        addrs.insert(18736);
        addrs.insert(18740);
        addrs.insert(18744);
        addrs.insert(18748);
        addrs.insert(18752);
        addrs.insert(18756);
        addrs.insert(18760);
        addrs.insert(18764);
        addrs.insert(18768);
        addrs.insert(18772);
        addrs.insert(18776);
        addrs.insert(18780);
        addrs.insert(18784);
        addrs.insert(18788);
        addrs.insert(18792);
        addrs.insert(18796);
        addrs.insert(18800);
        addrs.insert(18804);
        addrs.insert(18808);
        addrs.insert(18812);
        addrs.insert(18816);
        addrs.insert(18820);
        addrs.insert(18824);
        addrs.insert(18828);
        addrs.insert(18832);
        addrs.insert(18836);
        addrs.insert(18840);
        addrs.insert(18844);
        addrs.insert(18848);
        addrs.insert(18852);
        addrs.insert(18856);
        addrs.insert(18860);
        addrs.insert(18864);
        addrs.insert(18868);
        addrs.insert(18872);
        addrs.insert(18876);
        addrs.insert(18880);
        addrs.insert(18884);
        addrs.insert(18888);
        addrs.insert(18892);
        addrs.insert(18896);
        addrs.insert(18900);
        addrs.insert(18904);
        addrs.insert(18908);
        addrs.insert(18912);
        addrs.insert(18916);
        addrs.insert(18920);
        addrs.insert(18924);
        addrs.insert(18928);
        addrs.insert(18932);
        addrs.insert(18936);
        addrs.insert(18940);
        addrs.insert(18944);
        addrs.insert(18948);
        addrs.insert(18952);
        addrs.insert(18956);
        addrs.insert(18960);
        addrs.insert(18964);
        addrs.insert(18968);
        addrs.insert(18972);
        addrs.insert(18976);
        addrs.insert(18980);
        addrs.insert(18984);
        addrs.insert(18988);
        addrs.insert(18992);
        addrs.insert(18996);
        addrs.insert(19000);
        addrs.insert(19004);
        addrs.insert(19008);
        addrs.insert(19012);
        addrs.insert(19016);
        addrs.insert(19020);
        addrs.insert(19024);
        addrs.insert(19028);
        addrs.insert(19032);
        addrs.insert(19036);
        addrs.insert(19040);
        addrs.insert(19044);
        addrs.insert(19048);
        addrs.insert(19052);
        addrs.insert(19056);
        addrs.insert(19060);
        addrs.insert(19064);
        addrs.insert(19068);
        addrs.insert(19072);
        addrs.insert(19076);
        addrs.insert(19080);
        addrs.insert(19084);
        addrs.insert(19088);
        addrs.insert(19092);
        addrs.insert(19096);
        addrs.insert(19100);
        addrs.insert(19104);
        addrs.insert(19108);
        addrs.insert(19112);
        addrs.insert(19116);
        addrs.insert(19120);
        addrs.insert(19124);
        addrs.insert(19128);
        addrs.insert(19132);
        addrs.insert(19136);
        addrs.insert(19140);
        addrs.insert(19144);
        addrs.insert(19148);
        addrs.insert(19152);
        addrs.insert(19156);
        addrs.insert(19160);
        addrs.insert(19164);
        addrs.insert(19168);
        addrs.insert(19172);
        addrs.insert(19176);
        addrs.insert(19180);
        addrs.insert(19184);
        addrs.insert(19188);
        addrs.insert(19192);
        addrs.insert(19196);
        addrs.insert(19200);
        addrs.insert(19204);
        addrs.insert(19208);
        addrs.insert(19212);
        addrs.insert(19216);
        addrs.insert(19220);
        addrs.insert(19224);
        addrs.insert(19228);
        addrs.insert(19232);
        addrs.insert(19236);
        addrs.insert(19240);
        addrs.insert(19244);
        addrs.insert(19248);
        addrs.insert(19252);
        addrs.insert(19256);
        addrs.insert(19260);
        addrs.insert(19264);
        addrs.insert(19268);
        addrs.insert(19272);
        addrs.insert(19276);
        addrs.insert(19280);
        addrs.insert(19284);
        addrs.insert(19288);
        addrs.insert(19292);
        addrs.insert(19296);
        addrs.insert(19300);
        addrs.insert(19304);
        addrs.insert(19308);
        addrs.insert(19312);
        addrs.insert(19316);
        addrs.insert(19320);
        addrs.insert(19324);
        addrs.insert(19328);
        addrs.insert(19332);
        addrs.insert(19336);
        addrs.insert(19340);
        addrs.insert(19344);
        addrs.insert(19348);
        addrs.insert(19352);
        addrs.insert(19356);
        addrs.insert(19360);
        addrs.insert(19364);
        addrs.insert(19368);
        addrs.insert(19372);
        addrs.insert(19376);
        addrs.insert(19380);
        addrs.insert(19384);
        addrs.insert(19388);
        addrs.insert(19392);
        addrs.insert(19396);
        addrs.insert(19400);
        addrs.insert(19404);
        addrs.insert(19408);
        addrs.insert(19412);
        addrs.insert(19416);
        addrs.insert(19420);
        addrs.insert(19424);
        addrs.insert(19428);
        addrs.insert(19432);
        addrs.insert(19436);
        addrs.insert(19440);
        addrs.insert(19444);
        addrs.insert(19448);
        addrs.insert(19452);
        addrs.insert(19456);
        addrs.insert(19460);
        addrs.insert(19464);
        addrs.insert(19468);
        addrs.insert(19472);
        addrs.insert(19476);
        addrs.insert(19480);
        addrs.insert(19484);
        addrs.insert(19488);
        addrs.insert(19492);
        addrs.insert(19496);
        addrs.insert(19500);
        addrs.insert(19504);
        addrs.insert(19508);
        addrs.insert(19512);
        addrs.insert(19516);
        addrs.insert(19520);
        addrs.insert(19524);
        addrs.insert(19528);
        addrs.insert(19532);
        addrs.insert(19536);
        addrs.insert(19540);
        addrs.insert(19544);
        addrs.insert(19548);
        addrs.insert(19552);
        addrs.insert(19556);
        addrs.insert(19560);
        addrs.insert(19564);
        addrs.insert(19568);
        addrs.insert(19572);
        addrs.insert(19576);
        addrs.insert(19580);
        addrs.insert(19584);
        addrs.insert(19588);
        addrs.insert(19592);
        addrs.insert(19596);
        addrs.insert(19600);
        addrs.insert(19604);
        addrs.insert(19608);
        addrs.insert(19612);
        addrs.insert(19616);
        addrs.insert(19620);
        addrs.insert(19624);
        addrs.insert(19628);
        addrs.insert(19632);
        addrs.insert(19636);
        addrs.insert(19640);
        addrs.insert(19644);
        addrs.insert(19648);
        addrs.insert(19652);
        addrs.insert(19656);
        addrs.insert(19660);
        addrs.insert(19664);
        addrs.insert(19668);
        addrs.insert(19672);
        addrs.insert(19676);
        addrs.insert(19680);
        addrs.insert(19684);
        addrs.insert(19688);
        addrs.insert(19692);
        addrs.insert(19696);
        addrs.insert(19700);
        addrs.insert(19704);
        addrs.insert(19708);
        addrs.insert(19712);
        addrs.insert(19716);
        addrs.insert(19720);
        addrs.insert(19724);
        addrs.insert(19728);
        addrs.insert(19732);
        addrs.insert(19736);
        addrs.insert(19740);
        addrs.insert(19744);
        addrs.insert(19748);
        addrs.insert(19752);
        addrs.insert(19756);
        addrs.insert(19760);
        addrs.insert(19764);
        addrs.insert(19768);
        addrs.insert(19772);
        addrs.insert(19776);
        addrs.insert(19780);
        addrs.insert(19784);
        addrs.insert(19788);
        addrs.insert(19792);
        addrs.insert(19796);
        addrs.insert(19800);
        addrs.insert(19804);
        addrs.insert(19808);
        addrs.insert(19812);
        addrs.insert(19816);
        addrs.insert(19820);
        addrs.insert(19824);
        addrs.insert(19828);
        addrs.insert(19832);
        addrs.insert(19836);
        addrs.insert(19840);
        addrs.insert(19844);
        addrs.insert(19848);
        addrs.insert(19852);
        addrs.insert(19856);
        addrs.insert(19860);
        addrs.insert(19864);
        addrs.insert(19868);
        addrs.insert(19872);
        addrs.insert(19876);
        addrs.insert(19880);
        addrs.insert(19884);
        addrs.insert(19888);
        addrs.insert(19892);
        addrs.insert(19896);
        addrs.insert(19900);
        addrs.insert(19904);
        addrs.insert(19908);
        addrs.insert(19912);
        addrs.insert(19916);
        addrs.insert(19920);
        addrs.insert(19924);
        addrs.insert(19928);
        addrs.insert(19932);
        addrs.insert(19936);
        addrs.insert(19940);
        addrs.insert(19944);
        addrs.insert(19948);
        addrs.insert(19952);
        addrs.insert(19956);
        addrs.insert(19960);
        addrs.insert(19964);
        addrs.insert(19968);
        addrs.insert(19972);
        addrs.insert(19976);
        addrs.insert(19980);
        addrs.insert(19984);
        addrs.insert(19988);
        addrs.insert(19992);
        addrs.insert(19996);
        addrs.insert(20000);
        addrs.insert(20004);
        addrs.insert(20008);
        addrs.insert(20012);
        addrs.insert(20016);
        addrs.insert(20020);
        addrs.insert(20024);
        addrs.insert(20028);
        addrs.insert(20032);
        addrs.insert(20036);
        addrs.insert(20040);
        addrs.insert(20044);
        addrs.insert(20048);
        addrs.insert(20052);
        addrs.insert(20056);
        addrs.insert(20060);
        addrs.insert(20064);
        addrs.insert(20068);
        addrs.insert(20072);
        addrs.insert(20076);
        addrs.insert(20080);
        addrs.insert(20084);
        addrs.insert(20088);
        addrs.insert(20092);
        addrs.insert(20096);
        addrs.insert(20100);
        addrs.insert(20104);
        addrs.insert(20108);
        addrs.insert(20112);
        addrs.insert(20116);
        addrs.insert(20120);
        addrs.insert(20124);
        addrs.insert(20128);
        addrs.insert(20132);
        addrs.insert(20136);
        addrs.insert(20140);
        addrs.insert(20144);
        addrs.insert(20148);
        addrs.insert(20152);
        addrs.insert(20156);
        addrs.insert(20160);
        addrs.insert(20164);
        addrs.insert(20168);
        addrs.insert(20172);
        addrs.insert(20176);
        addrs.insert(20180);
        addrs.insert(20184);
        addrs.insert(20188);
        addrs.insert(20192);
        addrs.insert(20196);
        addrs.insert(20200);
        addrs.insert(20204);
        addrs.insert(20208);
        addrs.insert(20212);
        addrs.insert(20216);
        addrs.insert(20220);
        addrs.insert(20224);
        addrs.insert(20228);
        addrs.insert(20232);
        addrs.insert(20236);
        addrs.insert(20240);
        addrs.insert(20244);
        addrs.insert(20248);
        addrs.insert(20252);
        addrs.insert(20256);
        addrs.insert(20260);
        addrs.insert(20264);
        addrs.insert(20268);
        addrs.insert(20272);
        addrs.insert(20276);
        addrs.insert(20280);
        addrs.insert(20284);
        addrs.insert(20288);
        addrs.insert(20292);
        addrs.insert(20296);
        addrs.insert(20300);
        addrs.insert(20304);
        addrs.insert(20308);
        addrs.insert(20312);
        addrs.insert(20316);
        addrs.insert(20320);
        addrs.insert(20324);
        addrs.insert(20328);
        addrs.insert(20332);
        addrs.insert(20336);
        addrs.insert(20340);
        addrs.insert(20344);
        addrs.insert(20348);
        addrs.insert(20352);
        addrs.insert(20356);
        addrs.insert(20360);
        addrs.insert(20364);
        addrs.insert(20368);
        addrs.insert(20372);
        addrs.insert(20376);
        addrs.insert(20380);
        addrs.insert(20384);
        addrs.insert(20388);
        addrs.insert(20392);
        addrs.insert(20396);
        addrs.insert(20400);
        addrs.insert(20404);
        addrs.insert(20408);
        addrs.insert(20412);
        addrs.insert(20416);
        addrs.insert(20420);
        addrs.insert(20424);
        addrs.insert(20428);
        addrs.insert(20432);
        addrs.insert(20436);
        addrs.insert(20440);
        addrs.insert(20444);
        addrs.insert(20448);
        addrs.insert(20452);
        addrs.insert(20456);
        addrs.insert(20460);
        addrs.insert(20464);
        addrs.insert(20468);
        addrs.insert(20472);
        addrs.insert(20476);
        addrs.insert(20480);
        addrs.insert(20484);
        addrs.insert(20488);
        addrs.insert(20492);
        addrs.insert(20496);
        addrs.insert(20500);
        addrs.insert(20504);
        addrs.insert(20508);
        addrs.insert(20512);
        addrs.insert(20516);
        addrs.insert(20520);
        addrs.insert(20524);
        addrs.insert(20528);
        addrs.insert(20532);
        addrs.insert(20536);
        addrs.insert(20540);
        addrs.insert(20544);
        addrs.insert(20548);
        addrs.insert(20552);
        addrs.insert(20556);
        addrs.insert(20560);
        addrs.insert(20564);
        addrs.insert(20568);
        addrs.insert(20572);
        addrs.insert(20576);
        addrs.insert(20580);
        addrs.insert(20584);
        addrs.insert(20588);
        addrs.insert(20592);
        addrs.insert(20596);
        addrs.insert(20600);
        addrs.insert(20604);
        addrs.insert(20608);
        addrs.insert(20612);
        addrs.insert(20616);
        addrs.insert(20620);
        addrs.insert(20624);
        addrs.insert(20628);
        addrs.insert(20632);
        addrs.insert(20636);
        addrs.insert(20640);
        addrs.insert(20644);
        addrs.insert(20648);
        addrs.insert(20652);
        addrs.insert(20656);
        addrs.insert(20660);
        addrs.insert(20664);
        addrs.insert(20668);
        addrs.insert(20672);
        addrs.insert(20676);
        addrs.insert(20680);
        addrs.insert(20684);
        addrs.insert(20688);
        addrs.insert(20692);
        addrs.insert(20696);
        addrs.insert(20700);
        addrs.insert(20704);
        addrs.insert(20708);
        addrs.insert(20712);
        addrs.insert(20716);
        addrs.insert(20720);
        addrs.insert(20724);
        addrs.insert(20728);
        addrs.insert(20732);
        addrs.insert(20736);
        addrs.insert(20740);
        addrs.insert(20744);
        addrs.insert(20748);
        addrs.insert(20752);
        addrs.insert(20756);
        addrs.insert(20760);
        addrs.insert(20764);
        addrs.insert(20768);
        addrs.insert(20772);
        addrs.insert(20776);
        addrs.insert(20780);
        addrs.insert(20784);
        addrs.insert(20788);
        addrs.insert(20792);
        addrs.insert(20796);
        addrs.insert(20800);
        addrs.insert(20804);
        addrs.insert(20808);
        addrs.insert(20812);
        addrs.insert(20816);
        addrs.insert(20820);
        addrs.insert(20824);
        addrs.insert(20828);
        addrs.insert(20832);
        addrs.insert(20836);
        addrs.insert(20840);
        addrs.insert(20844);
        addrs.insert(20848);
        addrs.insert(20852);
        addrs.insert(20856);
        addrs.insert(20860);
        addrs.insert(20864);
        addrs.insert(20868);
        addrs.insert(20872);
        addrs.insert(20876);
        addrs.insert(20880);
        addrs.insert(20884);
        addrs.insert(20888);
        addrs.insert(20892);
        addrs.insert(20896);
        addrs.insert(20900);
        addrs.insert(20904);
        addrs.insert(20908);
        addrs.insert(20912);
        addrs.insert(20916);
        addrs.insert(20920);
        addrs.insert(20924);
        addrs.insert(20928);
        addrs.insert(20932);
        addrs.insert(20936);
        addrs.insert(20940);
        addrs.insert(20944);
        addrs.insert(20948);
        addrs.insert(20952);
        addrs.insert(20956);
        addrs.insert(20960);
        addrs.insert(20964);
        addrs.insert(20968);
        addrs.insert(20972);
        addrs.insert(20976);
        addrs.insert(20980);
        addrs.insert(20984);
        addrs.insert(20988);
        addrs.insert(20992);
        addrs.insert(20996);
        addrs.insert(21000);
        addrs.insert(21004);
        addrs.insert(21008);
        addrs.insert(21012);
        addrs.insert(21016);
        addrs.insert(21020);
        addrs.insert(21024);
        addrs.insert(21028);
        addrs.insert(21032);
        addrs.insert(21036);
        addrs.insert(21040);
        addrs.insert(21044);
        addrs.insert(21048);
        addrs.insert(21052);
        addrs.insert(21056);
        addrs.insert(21060);
        addrs.insert(21064);
        addrs.insert(21068);
        addrs.insert(21072);
        addrs.insert(21076);
        addrs.insert(21080);
        addrs.insert(21084);
        addrs.insert(21088);
        addrs.insert(21092);
        addrs.insert(21096);
        addrs.insert(21100);
        addrs.insert(21104);
        addrs.insert(21108);
        addrs.insert(21112);
        addrs.insert(21116);
        addrs.insert(21120);
        addrs.insert(21124);
        addrs.insert(21128);
        addrs.insert(21132);
        addrs.insert(21136);
        addrs.insert(21140);
        addrs.insert(21144);
        addrs.insert(21148);
        addrs.insert(21152);
        addrs.insert(21156);
        addrs.insert(21160);
        addrs.insert(21164);
        addrs.insert(21168);
        addrs.insert(21172);
        addrs.insert(21176);
        addrs.insert(21180);
        addrs.insert(21184);
        addrs.insert(21188);
        addrs.insert(21192);
        addrs.insert(21196);
        addrs.insert(21200);
        addrs.insert(21204);
        addrs.insert(21208);
        addrs.insert(21212);
        addrs.insert(21216);
        addrs.insert(21220);
        addrs.insert(21224);
        addrs.insert(21228);
        addrs.insert(21232);
        addrs.insert(21236);
        addrs.insert(21240);
        addrs.insert(21244);
        addrs.insert(21248);
        addrs.insert(21252);
        addrs.insert(21256);
        addrs.insert(21260);
        addrs.insert(21264);
        addrs.insert(21268);
        addrs.insert(21272);
        addrs.insert(21276);
        addrs.insert(21280);
        addrs.insert(21284);
        addrs.insert(21288);
        addrs.insert(21292);
        addrs.insert(21296);
        addrs.insert(21300);
        addrs.insert(21304);
        addrs.insert(21308);
        addrs.insert(21312);
        addrs.insert(21316);
        addrs.insert(21320);
        addrs.insert(21324);
        addrs.insert(21328);
        addrs.insert(21332);
        addrs.insert(21336);
        addrs.insert(21340);
        addrs.insert(21344);
        addrs.insert(21348);
        addrs.insert(21352);
        addrs.insert(21356);
        addrs.insert(21360);
        addrs.insert(21364);
        addrs.insert(21368);
        addrs.insert(21372);
        addrs.insert(21376);
        addrs.insert(21380);
        addrs.insert(21384);
        addrs.insert(21388);
        addrs.insert(21392);
        addrs.insert(21396);
        addrs.insert(21400);
        addrs.insert(21404);
        addrs.insert(21408);
        addrs.insert(21412);
        addrs.insert(21416);
        addrs.insert(21420);
        addrs.insert(21424);
        addrs.insert(21428);
        addrs.insert(21432);
        addrs.insert(21436);
        addrs.insert(21440);
        addrs.insert(21444);
        addrs.insert(21448);
        addrs.insert(21452);
        addrs.insert(21456);
        addrs.insert(21460);
        addrs.insert(21464);
        addrs.insert(21468);
        addrs.insert(21472);
        addrs.insert(21476);
        addrs.insert(21480);
        addrs.insert(21484);
        addrs.insert(21488);
        addrs.insert(21492);
        addrs.insert(21496);
        addrs.insert(21500);
        addrs.insert(21504);
        addrs.insert(21508);
        addrs.insert(21512);
        addrs.insert(21516);
        addrs.insert(21520);
        addrs.insert(21524);
        addrs.insert(21528);
        addrs.insert(21532);
        addrs.insert(21536);
        addrs.insert(21540);
        addrs.insert(21544);
        addrs.insert(21548);
        addrs.insert(21552);
        addrs.insert(21556);
        addrs.insert(21560);
        addrs.insert(21564);
        addrs.insert(21568);
        addrs.insert(21572);
        addrs.insert(21576);
        addrs.insert(21580);
        addrs.insert(21584);
        addrs.insert(21588);
        addrs.insert(21592);
        addrs.insert(21596);
        addrs.insert(21600);
        addrs.insert(21604);
        addrs.insert(21608);
        addrs.insert(21612);
        addrs.insert(21616);
        addrs.insert(21620);
        addrs.insert(21624);
        addrs.insert(21628);
        addrs.insert(21632);
        addrs.insert(21636);
        addrs.insert(21640);
        addrs.insert(21644);
        addrs.insert(21648);
        addrs.insert(21652);
        addrs.insert(21656);
        addrs.insert(21660);
        addrs.insert(21664);
        addrs.insert(21668);
        addrs.insert(21672);
        addrs.insert(21676);
        addrs.insert(21680);
        addrs.insert(21684);
        addrs.insert(21688);
        addrs.insert(21692);
        addrs.insert(21696);
        addrs.insert(21700);
        addrs.insert(21704);
        addrs.insert(21708);
        addrs.insert(21712);
        addrs.insert(21716);
        addrs.insert(21720);
        addrs.insert(21724);
        addrs.insert(21728);
        addrs.insert(21732);
        addrs.insert(21736);
        addrs.insert(21740);
        addrs.insert(21744);
        addrs.insert(21748);
        addrs.insert(21752);
        addrs.insert(21756);
        addrs.insert(21760);
        addrs.insert(21764);
        addrs.insert(21768);
        addrs.insert(21772);
        addrs.insert(21776);
        addrs.insert(21780);
        addrs.insert(21784);
        addrs.insert(21788);
        addrs.insert(21792);
        addrs.insert(21796);
        addrs.insert(21800);
        addrs.insert(21804);
        addrs.insert(21808);
        addrs.insert(21812);
        addrs.insert(21816);
        addrs.insert(21820);
        addrs.insert(21824);
        addrs.insert(21828);
        addrs.insert(21832);
        addrs.insert(21836);
        addrs.insert(21840);
        addrs.insert(21844);
        addrs.insert(21848);
        addrs.insert(21852);
        addrs.insert(21856);
        addrs.insert(21860);
        addrs.insert(21864);
        addrs.insert(21868);
        addrs.insert(21872);
        addrs.insert(21876);
        addrs.insert(21880);
        addrs.insert(21884);
        addrs.insert(21888);
        addrs.insert(21892);
        addrs.insert(21896);
        addrs.insert(21900);
        addrs.insert(21904);
        addrs.insert(21908);
        addrs.insert(21912);
        addrs.insert(21916);
        addrs.insert(21920);
        addrs.insert(21924);
        addrs.insert(21928);
        addrs.insert(21932);
        addrs.insert(21936);
        addrs.insert(21940);
        addrs.insert(21944);
        addrs.insert(21948);
        addrs.insert(21952);
        addrs.insert(21956);
        addrs.insert(21960);
        addrs.insert(21964);
        addrs.insert(21968);
        addrs.insert(21972);
        addrs.insert(21976);
        addrs.insert(21980);
        addrs.insert(21984);
        addrs.insert(21988);
        addrs.insert(21992);
        addrs.insert(21996);
        addrs.insert(22000);
        addrs.insert(22004);
        addrs.insert(22008);
        addrs.insert(22012);
        addrs.insert(22016);
        addrs.insert(22020);
        addrs.insert(22024);
        addrs.insert(22028);
        addrs.insert(22032);
        addrs.insert(22036);
        addrs.insert(22040);
        addrs.insert(22044);
        addrs.insert(22048);
        addrs.insert(22052);
        addrs.insert(22056);
        addrs.insert(22060);
        addrs.insert(22064);
        addrs.insert(22068);
        addrs.insert(22072);
        addrs.insert(22076);
        addrs.insert(22080);
        addrs.insert(22084);
        addrs.insert(22088);
        addrs.insert(22092);
        addrs.insert(22096);
        addrs.insert(22100);
        addrs.insert(22104);
        addrs.insert(22108);
        addrs.insert(22112);
        addrs.insert(22116);
        addrs.insert(22120);
        addrs.insert(22124);
        addrs.insert(22128);
        addrs.insert(22132);
        addrs.insert(22136);
        addrs.insert(22140);
        addrs.insert(22144);
        addrs.insert(22148);
        addrs.insert(22152);
        addrs.insert(22156);
        addrs.insert(22160);
        addrs.insert(22164);
        addrs.insert(22168);
        addrs.insert(22172);
        addrs.insert(22176);
        addrs.insert(22180);
        addrs.insert(22184);
        addrs.insert(22188);
        addrs.insert(22192);
        addrs.insert(22196);
        addrs.insert(22200);
        addrs.insert(22204);
        addrs.insert(22208);
        addrs.insert(22212);
        addrs.insert(22216);
        addrs.insert(22220);
        addrs.insert(22224);
        addrs.insert(22228);
        addrs.insert(22232);
        addrs.insert(22236);
        addrs.insert(22240);
        addrs.insert(22244);
        addrs.insert(22248);
        addrs.insert(22252);
        addrs.insert(22256);
        addrs.insert(22260);
        addrs.insert(22264);
        addrs.insert(22268);
        addrs.insert(22272);
        addrs.insert(22276);
        addrs.insert(22280);
        addrs.insert(22284);
        addrs.insert(22288);
        addrs.insert(22292);
        addrs.insert(22296);
        addrs.insert(22300);
        addrs.insert(22304);
        addrs.insert(22308);
        addrs.insert(22312);
        addrs.insert(22316);
        addrs.insert(22320);
        addrs.insert(22324);
        addrs.insert(22328);
        addrs.insert(22332);
        addrs.insert(22336);
        addrs.insert(22340);
        addrs.insert(22344);
        addrs.insert(22348);
        addrs.insert(22352);
        addrs.insert(22356);
        addrs.insert(22360);
        addrs.insert(22364);
        addrs.insert(22368);
        addrs.insert(22372);
        addrs.insert(22376);
        addrs.insert(22380);
        addrs.insert(22384);
        addrs.insert(22388);
        addrs.insert(22392);
        addrs.insert(22396);
        addrs.insert(22400);
        addrs.insert(22404);
        addrs.insert(22408);
        addrs.insert(22412);
        addrs.insert(22416);
        addrs.insert(22420);
        addrs.insert(22424);
        addrs.insert(22428);
        addrs.insert(22432);
        addrs.insert(22436);
        addrs.insert(22440);
        addrs.insert(22444);
        addrs.insert(22448);
        addrs.insert(22452);
        addrs.insert(22456);
        addrs.insert(22460);
        addrs.insert(22464);
        addrs.insert(22468);
        addrs.insert(22472);
        addrs.insert(22476);
        addrs.insert(22480);
        addrs.insert(22484);
        addrs.insert(22488);
        addrs.insert(22492);
        addrs.insert(22496);
        addrs.insert(22500);
        addrs.insert(22504);
        addrs.insert(22508);
        addrs.insert(22512);
        addrs.insert(22516);
        addrs.insert(22520);
        addrs.insert(22524);
        addrs.insert(22528);
        addrs.insert(22532);
        addrs.insert(22536);
        addrs.insert(22540);
        addrs.insert(22544);
        addrs.insert(22548);
        addrs.insert(22552);
        addrs.insert(22556);
        addrs.insert(22560);
        addrs.insert(22564);
        addrs.insert(22568);
        addrs.insert(22572);
        addrs.insert(22576);
        addrs.insert(22580);
        addrs.insert(22584);
        addrs.insert(22588);
        addrs.insert(22592);
        addrs.insert(22596);
        addrs.insert(22600);
        addrs.insert(22604);
        addrs.insert(22608);
        addrs.insert(22612);
        addrs.insert(22616);
        addrs.insert(22620);
        addrs.insert(22624);
        addrs.insert(22628);
        addrs.insert(22632);
        addrs.insert(22636);
        addrs.insert(22640);
        addrs.insert(22644);
        addrs.insert(22648);
        addrs.insert(22652);
        addrs.insert(22656);
        addrs.insert(22660);
        addrs.insert(22664);
        addrs.insert(22668);
        addrs.insert(22672);
        addrs.insert(22676);
        addrs.insert(22680);
        addrs.insert(22684);
        addrs.insert(22688);
        addrs.insert(22692);
        addrs.insert(22696);
        addrs.insert(22700);
        addrs.insert(22704);
        addrs.insert(22708);
        addrs.insert(22712);
        addrs.insert(22716);
        addrs.insert(22720);
        addrs.insert(22724);
        addrs.insert(22728);
        addrs.insert(22732);
        addrs.insert(22736);
        addrs.insert(22740);
        addrs.insert(22744);
        addrs.insert(22748);
        addrs.insert(22752);
        addrs.insert(22756);
        addrs.insert(22760);
        addrs.insert(22764);
        addrs.insert(22768);
        addrs.insert(22772);
        addrs.insert(22776);
        addrs.insert(22780);
        addrs.insert(22784);
        addrs.insert(22788);
        addrs.insert(22792);
        addrs.insert(22796);
        addrs.insert(22800);
        addrs.insert(22804);
        addrs.insert(22808);
        addrs.insert(22812);
        addrs.insert(22816);
        addrs.insert(22820);
        addrs.insert(22824);
        addrs.insert(22828);
        addrs.insert(22832);
        addrs.insert(22836);
        addrs.insert(22840);
        addrs.insert(22844);
        addrs.insert(22848);
        addrs.insert(22852);
        addrs.insert(22856);
        addrs.insert(22860);
        addrs.insert(22864);
        addrs.insert(22868);
        addrs.insert(22872);
        addrs.insert(22876);
        addrs.insert(22880);
        addrs.insert(22884);
        addrs.insert(22888);
        addrs.insert(22892);
        addrs.insert(22896);
        addrs.insert(22900);
        addrs.insert(22904);
        addrs.insert(22908);
        addrs.insert(22912);
        addrs.insert(22916);
        addrs.insert(22920);
        addrs.insert(22924);
        addrs.insert(22928);
        addrs.insert(22932);
        addrs.insert(22936);
        addrs.insert(22940);
        addrs.insert(22944);
        addrs.insert(22948);
        addrs.insert(22952);
        addrs.insert(22956);
        addrs.insert(22960);
        addrs.insert(22964);
        addrs.insert(22968);
        addrs.insert(22972);
        addrs.insert(22976);
        addrs.insert(22980);
        addrs.insert(22984);
        addrs.insert(22988);
        addrs.insert(22992);
        addrs.insert(22996);
        addrs.insert(23000);
        addrs.insert(23004);
        addrs.insert(23008);
        addrs.insert(23012);
        addrs.insert(23016);
        addrs.insert(23020);
        addrs.insert(23024);
        addrs.insert(23028);
        addrs.insert(23032);
        addrs.insert(23036);
        addrs.insert(23040);
        addrs.insert(23044);
        addrs.insert(23048);
        addrs.insert(23052);
        addrs.insert(23056);
        addrs.insert(23060);
        addrs.insert(23064);
        addrs.insert(23068);
        addrs.insert(23072);
        addrs.insert(23076);
        addrs.insert(23080);
        addrs.insert(23084);
        addrs.insert(23088);
        addrs.insert(23092);
        addrs.insert(23096);
        addrs.insert(23100);
        addrs.insert(23104);
        addrs.insert(23108);
        addrs.insert(23112);
        addrs.insert(23116);
        addrs.insert(23120);
        addrs.insert(23124);
        addrs.insert(23128);
        addrs.insert(23132);
        addrs.insert(23136);
        addrs.insert(23140);
        addrs.insert(23144);
        addrs.insert(23148);
        addrs.insert(23152);
        addrs.insert(23156);
        addrs.insert(23160);
        addrs.insert(23164);
        addrs.insert(23168);
        addrs.insert(23172);
        addrs.insert(23176);
        addrs.insert(23180);
        addrs.insert(23184);
        addrs.insert(23188);
        addrs.insert(23192);
        addrs.insert(23196);
        addrs.insert(23200);
        addrs.insert(23204);
        addrs.insert(23208);
        addrs.insert(23212);
        addrs.insert(23216);
        addrs.insert(23220);
        addrs.insert(23224);
        addrs.insert(23228);
        addrs.insert(23232);
        addrs.insert(23236);
        addrs.insert(23240);
        addrs.insert(23244);
        addrs.insert(23248);
        addrs.insert(23252);
        addrs.insert(23256);
        addrs.insert(23260);
        addrs.insert(23264);
        addrs.insert(23268);
        addrs.insert(23272);
        addrs.insert(23276);
        addrs.insert(23280);
        addrs.insert(23284);
        addrs.insert(23288);
        addrs.insert(23292);
        addrs.insert(23296);
        addrs.insert(23300);
        addrs.insert(23304);
        addrs.insert(23308);
        addrs.insert(23312);
        addrs.insert(23316);
        addrs.insert(23320);
        addrs.insert(23324);
        addrs.insert(23328);
        addrs.insert(23332);
        addrs.insert(23336);
        addrs.insert(23340);
        addrs.insert(23344);
        addrs.insert(23348);
        addrs.insert(23352);
        addrs.insert(23356);
        addrs.insert(23360);
        addrs.insert(23364);
        addrs.insert(23368);
        addrs.insert(23372);
        addrs.insert(23376);
        addrs.insert(23380);
        addrs.insert(23384);
        addrs.insert(23388);
        addrs.insert(23392);
        addrs.insert(23396);
        addrs.insert(23400);
        addrs.insert(23404);
        addrs.insert(23408);
        addrs.insert(23412);
        addrs.insert(23416);
        addrs.insert(23420);
        addrs.insert(23424);
        addrs.insert(23428);
        addrs.insert(23432);
        addrs.insert(23436);
        addrs.insert(23440);
        addrs.insert(23444);
        addrs.insert(23448);
        addrs.insert(23452);
        addrs.insert(23456);
        addrs.insert(23460);
        addrs.insert(23464);
        addrs.insert(23468);
        addrs.insert(23472);
        addrs.insert(23476);
        addrs.insert(23480);
        addrs.insert(23484);
        addrs.insert(23488);
        addrs.insert(23492);
        addrs.insert(23496);
        addrs.insert(23500);
        addrs.insert(23504);
        addrs.insert(23508);
        addrs.insert(23512);
        addrs.insert(23516);
        addrs.insert(23520);
        addrs.insert(23524);
        addrs.insert(23528);
        addrs.insert(23532);
        addrs.insert(23536);
        addrs.insert(23540);
        addrs.insert(23544);
        addrs.insert(23548);
        addrs.insert(23552);
        addrs.insert(23556);
        addrs.insert(23560);
        addrs.insert(23564);
        addrs.insert(23568);
        addrs.insert(23572);
        addrs.insert(23576);
        addrs.insert(23580);
        addrs.insert(23584);
        addrs.insert(23588);
        addrs.insert(23592);
        addrs.insert(23596);
        addrs.insert(23600);
        addrs.insert(23604);
        addrs.insert(23608);
        addrs.insert(23612);
        addrs.insert(23616);
        addrs.insert(23620);
        addrs.insert(23624);
        addrs.insert(23628);
        addrs.insert(23632);
        addrs.insert(23636);
        addrs.insert(23640);
        addrs.insert(23644);
        addrs.insert(23648);
        addrs.insert(23652);
        addrs.insert(23656);
        addrs.insert(23660);
        addrs.insert(23664);
        addrs.insert(23668);
        addrs.insert(23672);
        addrs.insert(23676);
        addrs.insert(23680);
        addrs.insert(23684);
        addrs.insert(23688);
        addrs.insert(23692);
        addrs.insert(23696);
        addrs.insert(23700);
        addrs.insert(23704);
        addrs.insert(23708);
        addrs.insert(23712);
        addrs.insert(23716);
        addrs.insert(23720);
        addrs.insert(23724);
        addrs.insert(23728);
        addrs.insert(23732);
        addrs.insert(23736);
        addrs.insert(23740);
        addrs.insert(23744);
        addrs.insert(23748);
        addrs.insert(23752);
        addrs.insert(23756);
        addrs.insert(23760);
        addrs.insert(23764);
        addrs.insert(23768);
        addrs.insert(23772);
        addrs.insert(23776);
        addrs.insert(23780);
        addrs.insert(23784);
        addrs.insert(23788);
        addrs.insert(23792);
        addrs.insert(23796);
        addrs.insert(23800);
        addrs.insert(23804);
        addrs.insert(23808);
        addrs.insert(23812);
        addrs.insert(23816);
        addrs.insert(23820);
        addrs.insert(23824);
        addrs.insert(23828);
        addrs.insert(23832);
        addrs.insert(23836);
        addrs.insert(23840);
        addrs.insert(23844);
        addrs.insert(23848);
        addrs.insert(23852);
        addrs.insert(23856);
        addrs.insert(23860);
        addrs.insert(23864);
        addrs.insert(23868);
        addrs.insert(23872);
        addrs.insert(23876);
        addrs.insert(23880);
        addrs.insert(23884);
        addrs.insert(23888);
        addrs.insert(23892);
        addrs.insert(23896);
        addrs.insert(23900);
        addrs.insert(23904);
        addrs.insert(23908);
        addrs.insert(23912);
        addrs.insert(23916);
        addrs.insert(23920);
        addrs.insert(23924);
        addrs.insert(23928);
        addrs.insert(23932);
        addrs.insert(23936);
        addrs.insert(23940);
        addrs.insert(23944);
        addrs.insert(23948);
        addrs.insert(23952);
        addrs.insert(23956);
        addrs.insert(23960);
        addrs.insert(23964);
        addrs.insert(23968);
        addrs.insert(23972);
        addrs.insert(23976);
        addrs.insert(23980);
        addrs.insert(23984);
        addrs.insert(23988);
        addrs.insert(23992);
        addrs.insert(23996);
        addrs.insert(24000);
        addrs.insert(24004);
        addrs.insert(24008);
        addrs.insert(24012);
        addrs.insert(24016);
        addrs.insert(24020);
        addrs.insert(24024);
        addrs.insert(24028);
        addrs.insert(24032);
        addrs.insert(24036);
        addrs.insert(24040);
        addrs.insert(24044);
        addrs.insert(24048);
        addrs.insert(24052);
        addrs.insert(24056);
        addrs.insert(24060);
        addrs.insert(24064);
        addrs.insert(24068);
        addrs.insert(24072);
        addrs.insert(24076);
        addrs.insert(24080);
        addrs.insert(24084);
        addrs.insert(24088);
        addrs.insert(24092);
        addrs.insert(24096);
        addrs.insert(24100);
        addrs.insert(24104);
        addrs.insert(24108);
        addrs.insert(24112);
        addrs.insert(24116);
        addrs.insert(24120);
        addrs.insert(24124);
        addrs.insert(24128);
        addrs.insert(24132);
        addrs.insert(24136);
        addrs.insert(24140);
        addrs.insert(24144);
        addrs.insert(24148);
        addrs.insert(24152);
        addrs.insert(24156);
        addrs.insert(24160);
        addrs.insert(24164);
        addrs.insert(24168);
        addrs.insert(24172);
        addrs.insert(24176);
        addrs.insert(24180);
        addrs.insert(24184);
        addrs.insert(24188);
        addrs.insert(24192);
        addrs.insert(24196);
        addrs.insert(24200);
        addrs.insert(24204);
        addrs.insert(24208);
        addrs.insert(24212);
        addrs.insert(24216);
        addrs.insert(24220);
        addrs.insert(24224);
        addrs.insert(24228);
        addrs.insert(24232);
        addrs.insert(24236);
        addrs.insert(24240);
        addrs.insert(24244);
        addrs.insert(24248);
        addrs.insert(24252);
        addrs.insert(24256);
        addrs.insert(24260);
        addrs.insert(24264);
        addrs.insert(24268);
        addrs.insert(24272);
        addrs.insert(24276);
        addrs.insert(24280);
        addrs.insert(24284);
        addrs.insert(24288);
        addrs.insert(24292);
        addrs.insert(24296);
        addrs.insert(24300);
        addrs.insert(24304);
        addrs.insert(24308);
        addrs.insert(24312);
        addrs.insert(24316);
        addrs.insert(24320);
        addrs.insert(24324);
        addrs.insert(24328);
        addrs.insert(24332);
        addrs.insert(24336);
        addrs.insert(24340);
        addrs.insert(24344);
        addrs.insert(24348);
        addrs.insert(24352);
        addrs.insert(24356);
        addrs.insert(24360);
        addrs.insert(24364);
        addrs.insert(24368);
        addrs.insert(24372);
        addrs.insert(24376);
        addrs.insert(24380);
        addrs.insert(24384);
        addrs.insert(24388);
        addrs.insert(24392);
        addrs.insert(24396);
        addrs.insert(24400);
        addrs.insert(24404);
        addrs.insert(24408);
        addrs.insert(24412);
        addrs.insert(24416);
        addrs.insert(24420);
        addrs.insert(24424);
        addrs.insert(24428);
        addrs.insert(24432);
        addrs.insert(24436);
        addrs.insert(24440);
        addrs.insert(24444);
        addrs.insert(24448);
        addrs.insert(24452);
        addrs.insert(24456);
        addrs.insert(24460);
        addrs.insert(24464);
        addrs.insert(24468);
        addrs.insert(24472);
        addrs.insert(24476);
        addrs.insert(24480);
        addrs.insert(24484);
        addrs.insert(24488);
        addrs.insert(24492);
        addrs.insert(24496);
        addrs.insert(24500);
        addrs.insert(24504);
        addrs.insert(24508);
        addrs.insert(24512);
        addrs.insert(24516);
        addrs.insert(24520);
        addrs.insert(24524);
        addrs.insert(24528);
        addrs.insert(24532);
        addrs.insert(24536);
        addrs.insert(24540);
        addrs.insert(24544);
        addrs.insert(24548);
        addrs.insert(24552);
        addrs.insert(24556);
        addrs.insert(24560);
        addrs.insert(24564);
        addrs.insert(24568);
        addrs.insert(24572);
        return addrs;
    }
    
    uint16_t get_addr(zbx_cpld_field_t field) {
        switch(field) {
        case zbx_cpld_field_t::RX0_RX_LED:
            return 5120;
        case zbx_cpld_field_t::RX0_TRX_LED:
            return 5120;
        case zbx_cpld_field_t::TX0_TRX_LED:
            return 5120;
        case zbx_cpld_field_t::RX1_RX_LED:
            return 5120;
        case zbx_cpld_field_t::RX1_TRX_LED:
            return 5120;
        case zbx_cpld_field_t::TX1_TRX_LED:
            return 5120;
        case zbx_cpld_field_t::TX0_IF2_1_2:
            return 8192;
        case zbx_cpld_field_t::TX0_IF1_3:
            return 8192;
        case zbx_cpld_field_t::TX0_IF1_4:
            return 8192;
        case zbx_cpld_field_t::TX0_IF1_5:
            return 8192;
        case zbx_cpld_field_t::TX0_IF1_6:
            return 8192;
        case zbx_cpld_field_t::TX0_7:
            return 8192;
        case zbx_cpld_field_t::TX0_RF_8:
            return 8192;
        case zbx_cpld_field_t::TX0_RF_9:
            return 8192;
        case zbx_cpld_field_t::TX0_ANT_10:
            return 8192;
        case zbx_cpld_field_t::TX0_ANT_11:
            return 8192;
        case zbx_cpld_field_t::TX0_LO_13:
            return 8192;
        case zbx_cpld_field_t::TX0_LO_14:
            return 8192;
        case zbx_cpld_field_t::TX1_IF2_1_2:
            return 9216;
        case zbx_cpld_field_t::TX1_IF1_3:
            return 9216;
        case zbx_cpld_field_t::TX1_IF1_4:
            return 9216;
        case zbx_cpld_field_t::TX1_IF1_5:
            return 9216;
        case zbx_cpld_field_t::TX1_IF1_6:
            return 9216;
        case zbx_cpld_field_t::TX1_7:
            return 9216;
        case zbx_cpld_field_t::TX1_RF_8:
            return 9216;
        case zbx_cpld_field_t::TX1_RF_9:
            return 9216;
        case zbx_cpld_field_t::TX1_ANT_10:
            return 9216;
        case zbx_cpld_field_t::TX1_ANT_11:
            return 9216;
        case zbx_cpld_field_t::TX1_LO_13:
            return 9216;
        case zbx_cpld_field_t::TX1_LO_14:
            return 9216;
        case zbx_cpld_field_t::RX0_ANT_1:
            return 10240;
        case zbx_cpld_field_t::RX0_2:
            return 10240;
        case zbx_cpld_field_t::RX0_RF_3:
            return 10240;
        case zbx_cpld_field_t::RX0_4:
            return 10240;
        case zbx_cpld_field_t::RX0_IF1_5:
            return 10240;
        case zbx_cpld_field_t::RX0_IF1_6:
            return 10240;
        case zbx_cpld_field_t::RX0_IF2_7_8:
            return 10240;
        case zbx_cpld_field_t::RX0_LO_9:
            return 10240;
        case zbx_cpld_field_t::RX0_LO_10:
            return 10240;
        case zbx_cpld_field_t::RX0_RF_11:
            return 10240;
        case zbx_cpld_field_t::RX1_ANT_1:
            return 11264;
        case zbx_cpld_field_t::RX1_2:
            return 11264;
        case zbx_cpld_field_t::RX1_RF_3:
            return 11264;
        case zbx_cpld_field_t::RX1_4:
            return 11264;
        case zbx_cpld_field_t::RX1_IF1_5:
            return 11264;
        case zbx_cpld_field_t::RX1_IF1_6:
            return 11264;
        case zbx_cpld_field_t::RX1_IF2_7_8:
            return 11264;
        case zbx_cpld_field_t::RX1_LO_9:
            return 11264;
        case zbx_cpld_field_t::RX1_LO_10:
            return 11264;
        case zbx_cpld_field_t::RX1_RF_11:
            return 11264;
        case zbx_cpld_field_t::TX0_DSA1:
            return 12288;
        case zbx_cpld_field_t::TX0_DSA2:
            return 12288;
        case zbx_cpld_field_t::TX1_DSA1:
            return 13312;
        case zbx_cpld_field_t::TX1_DSA2:
            return 13312;
        case zbx_cpld_field_t::RX0_DSA1:
            return 14336;
        case zbx_cpld_field_t::RX0_DSA2:
            return 14336;
        case zbx_cpld_field_t::RX0_DSA3_A:
            return 14336;
        case zbx_cpld_field_t::RX0_DSA3_B:
            return 14336;
        case zbx_cpld_field_t::RX1_DSA1:
            return 15360;
        case zbx_cpld_field_t::RX1_DSA2:
            return 15360;
        case zbx_cpld_field_t::RX1_DSA3_A:
            return 15360;
        case zbx_cpld_field_t::RX1_DSA3_B:
            return 15360;
        case zbx_cpld_field_t::TX0_TABLE_SELECT:
            return 16384;
        case zbx_cpld_field_t::TX1_TABLE_SELECT:
            return 17408;
        case zbx_cpld_field_t::RX0_TABLE_SELECT:
            return 18432;
        case zbx_cpld_field_t::RX1_TABLE_SELECT:
            return 19456;
        case zbx_cpld_field_t::TX0_TABLE_DSA1:
            return 20480;
        case zbx_cpld_field_t::TX0_TABLE_DSA2:
            return 20480;
        case zbx_cpld_field_t::TX1_TABLE_DSA1:
            return 21504;
        case zbx_cpld_field_t::TX1_TABLE_DSA2:
            return 21504;
        case zbx_cpld_field_t::RX0_TABLE_DSA1:
            return 22528;
        case zbx_cpld_field_t::RX0_TABLE_DSA2:
            return 22528;
        case zbx_cpld_field_t::RX0_TABLE_DSA3_A:
            return 22528;
        case zbx_cpld_field_t::RX0_TABLE_DSA3_B:
            return 22528;
        case zbx_cpld_field_t::RX1_TABLE_DSA1:
            return 23552;
        case zbx_cpld_field_t::RX1_TABLE_DSA2:
            return 23552;
        case zbx_cpld_field_t::RX1_TABLE_DSA3_A:
            return 23552;
        case zbx_cpld_field_t::RX1_TABLE_DSA3_B:
            return 23552;
        default:
            UHD_ASSERT_THROW(false);
            return 0;
        }
    }
    
    uint16_t get_addr(const std::string& reg_name)
    {
        if ("BOARD_ID" == reg_name) {
            return 0;
        }
        if ("REVISION" == reg_name) {
            return 4;
        }
        if ("OLDEST_COMPAT_REVISION" == reg_name) {
            return 8;
        }
        if ("SCRATCH" == reg_name) {
            return 12;
        }
        if ("GIT_HASH" == reg_name) {
            return 16;
        }
        if ("ENABLE_TX_POS_7V0" == reg_name) {
            return 64;
        }
        if ("ENABLE_RX_POS_7V0" == reg_name) {
            return 64;
        }
        if ("ENABLE_POS_3V3" == reg_name) {
            return 64;
        }
        if ("P7V_B_STATUS" == reg_name) {
            return 68;
        }
        if ("P7V_A_STATUS" == reg_name) {
            return 68;
        }
        if ("PLL_REF_CLOCK_ENABLE" == reg_name) {
            return 72;
        }
        if ("CURRENT_RF0_CONFIG" == reg_name) {
            return 4096;
        }
        if ("CURRENT_RF1_CONFIG" == reg_name) {
            return 4096;
        }
        if ("CURRENT_RF0_DSA_CONFIG" == reg_name) {
            return 4096;
        }
        if ("CURRENT_RF1_DSA_CONFIG" == reg_name) {
            return 4096;
        }
        if ("RF0_OPTION" == reg_name) {
            return 4100;
        }
        if ("RF1_OPTION" == reg_name) {
            return 4100;
        }
        if ("RF0_DSA_OPTION" == reg_name) {
            return 4100;
        }
        if ("RF1_DSA_OPTION" == reg_name) {
            return 4100;
        }
        if ("SW_RF0_CONFIG" == reg_name) {
            return 4104;
        }
        if ("SW_RF1_CONFIG" == reg_name) {
            return 4104;
        }
        if ("SW_RF0_DSA_CONFIG" == reg_name) {
            return 4104;
        }
        if ("SW_RF1_DSA_CONFIG" == reg_name) {
            return 4104;
        }
        if ("DATA" == reg_name) {
            return 4128;
        }
        if ("ADDRESS" == reg_name) {
            return 4128;
        }
        if ("READ_FLAG" == reg_name) {
            return 4128;
        }
        if ("LO_SELECT" == reg_name) {
            return 4128;
        }
        if ("START_TRANSACTION" == reg_name) {
            return 4128;
        }
        if ("SPI_READY" == reg_name) {
            return 4128;
        }
        if ("DATA_VALID" == reg_name) {
            return 4128;
        }
        if ("PULSE_TX0_LO1_SYNC" == reg_name) {
            return 4132;
        }
        if ("PULSE_TX0_LO2_SYNC" == reg_name) {
            return 4132;
        }
        if ("PULSE_TX1_LO1_SYNC" == reg_name) {
            return 4132;
        }
        if ("PULSE_TX1_LO2_SYNC" == reg_name) {
            return 4132;
        }
        if ("PULSE_RX0_LO1_SYNC" == reg_name) {
            return 4132;
        }
        if ("PULSE_RX0_LO2_SYNC" == reg_name) {
            return 4132;
        }
        if ("PULSE_RX1_LO1_SYNC" == reg_name) {
            return 4132;
        }
        if ("PULSE_RX1_LO2_SYNC" == reg_name) {
            return 4132;
        }
        if ("BYPASS_SYNC_REGISTER" == reg_name) {
            return 4132;
        }
        if ("RX0_RX_LED" == reg_name) {
            return 5120;
        }
        if ("RX0_TRX_LED" == reg_name) {
            return 5120;
        }
        if ("TX0_TRX_LED" == reg_name) {
            return 5120;
        }
        if ("RX1_RX_LED" == reg_name) {
            return 5120;
        }
        if ("RX1_TRX_LED" == reg_name) {
            return 5120;
        }
        if ("TX1_TRX_LED" == reg_name) {
            return 5120;
        }
        if ("TX0_IF2_1_2" == reg_name) {
            return 8192;
        }
        if ("TX0_IF1_3" == reg_name) {
            return 8192;
        }
        if ("TX0_IF1_4" == reg_name) {
            return 8192;
        }
        if ("TX0_IF1_5" == reg_name) {
            return 8192;
        }
        if ("TX0_IF1_6" == reg_name) {
            return 8192;
        }
        if ("TX0_7" == reg_name) {
            return 8192;
        }
        if ("TX0_RF_8" == reg_name) {
            return 8192;
        }
        if ("TX0_RF_9" == reg_name) {
            return 8192;
        }
        if ("TX0_ANT_10" == reg_name) {
            return 8192;
        }
        if ("TX0_ANT_11" == reg_name) {
            return 8192;
        }
        if ("TX0_LO_13" == reg_name) {
            return 8192;
        }
        if ("TX0_LO_14" == reg_name) {
            return 8192;
        }
        if ("TX1_IF2_1_2" == reg_name) {
            return 9216;
        }
        if ("TX1_IF1_3" == reg_name) {
            return 9216;
        }
        if ("TX1_IF1_4" == reg_name) {
            return 9216;
        }
        if ("TX1_IF1_5" == reg_name) {
            return 9216;
        }
        if ("TX1_IF1_6" == reg_name) {
            return 9216;
        }
        if ("TX1_7" == reg_name) {
            return 9216;
        }
        if ("TX1_RF_8" == reg_name) {
            return 9216;
        }
        if ("TX1_RF_9" == reg_name) {
            return 9216;
        }
        if ("TX1_ANT_10" == reg_name) {
            return 9216;
        }
        if ("TX1_ANT_11" == reg_name) {
            return 9216;
        }
        if ("TX1_LO_13" == reg_name) {
            return 9216;
        }
        if ("TX1_LO_14" == reg_name) {
            return 9216;
        }
        if ("RX0_ANT_1" == reg_name) {
            return 10240;
        }
        if ("RX0_2" == reg_name) {
            return 10240;
        }
        if ("RX0_RF_3" == reg_name) {
            return 10240;
        }
        if ("RX0_4" == reg_name) {
            return 10240;
        }
        if ("RX0_IF1_5" == reg_name) {
            return 10240;
        }
        if ("RX0_IF1_6" == reg_name) {
            return 10240;
        }
        if ("RX0_IF2_7_8" == reg_name) {
            return 10240;
        }
        if ("RX0_LO_9" == reg_name) {
            return 10240;
        }
        if ("RX0_LO_10" == reg_name) {
            return 10240;
        }
        if ("RX0_RF_11" == reg_name) {
            return 10240;
        }
        if ("RX1_ANT_1" == reg_name) {
            return 11264;
        }
        if ("RX1_2" == reg_name) {
            return 11264;
        }
        if ("RX1_RF_3" == reg_name) {
            return 11264;
        }
        if ("RX1_4" == reg_name) {
            return 11264;
        }
        if ("RX1_IF1_5" == reg_name) {
            return 11264;
        }
        if ("RX1_IF1_6" == reg_name) {
            return 11264;
        }
        if ("RX1_IF2_7_8" == reg_name) {
            return 11264;
        }
        if ("RX1_LO_9" == reg_name) {
            return 11264;
        }
        if ("RX1_LO_10" == reg_name) {
            return 11264;
        }
        if ("RX1_RF_11" == reg_name) {
            return 11264;
        }
        if ("TX0_DSA1" == reg_name) {
            return 12288;
        }
        if ("TX0_DSA2" == reg_name) {
            return 12288;
        }
        if ("TX1_DSA1" == reg_name) {
            return 13312;
        }
        if ("TX1_DSA2" == reg_name) {
            return 13312;
        }
        if ("RX0_DSA1" == reg_name) {
            return 14336;
        }
        if ("RX0_DSA2" == reg_name) {
            return 14336;
        }
        if ("RX0_DSA3_A" == reg_name) {
            return 14336;
        }
        if ("RX0_DSA3_B" == reg_name) {
            return 14336;
        }
        if ("RX1_DSA1" == reg_name) {
            return 15360;
        }
        if ("RX1_DSA2" == reg_name) {
            return 15360;
        }
        if ("RX1_DSA3_A" == reg_name) {
            return 15360;
        }
        if ("RX1_DSA3_B" == reg_name) {
            return 15360;
        }
        if ("TX0_TABLE_SELECT" == reg_name) {
            return 16384;
        }
        if ("TX1_TABLE_SELECT" == reg_name) {
            return 17408;
        }
        if ("RX0_TABLE_SELECT" == reg_name) {
            return 18432;
        }
        if ("RX1_TABLE_SELECT" == reg_name) {
            return 19456;
        }
        if ("TX0_TABLE_DSA1" == reg_name) {
            return 20480;
        }
        if ("TX0_TABLE_DSA2" == reg_name) {
            return 20480;
        }
        if ("TX1_TABLE_DSA1" == reg_name) {
            return 21504;
        }
        if ("TX1_TABLE_DSA2" == reg_name) {
            return 21504;
        }
        if ("RX0_TABLE_DSA1" == reg_name) {
            return 22528;
        }
        if ("RX0_TABLE_DSA2" == reg_name) {
            return 22528;
        }
        if ("RX0_TABLE_DSA3_A" == reg_name) {
            return 22528;
        }
        if ("RX0_TABLE_DSA3_B" == reg_name) {
            return 22528;
        }
        if ("RX1_TABLE_DSA1" == reg_name) {
            return 23552;
        }
        if ("RX1_TABLE_DSA2" == reg_name) {
            return 23552;
        }
        if ("RX1_TABLE_DSA3_A" == reg_name) {
            return 23552;
        }
        if ("RX1_TABLE_DSA3_B" == reg_name) {
            return 23552;
        }
        return 0;
    }

    void save_state(void){
        if (_state == NULL) _state = new zbx_cpld_regs_t();
        _state->BOARD_ID = this->BOARD_ID;
        _state->REVISION = this->REVISION;
        _state->OLDEST_COMPAT_REVISION = this->OLDEST_COMPAT_REVISION;
        _state->SCRATCH = this->SCRATCH;
        _state->GIT_HASH = this->GIT_HASH;
        _state->ENABLE_TX_POS_7V0 = this->ENABLE_TX_POS_7V0;
        _state->ENABLE_RX_POS_7V0 = this->ENABLE_RX_POS_7V0;
        _state->ENABLE_POS_3V3 = this->ENABLE_POS_3V3;
        _state->P7V_B_STATUS = this->P7V_B_STATUS;
        _state->P7V_A_STATUS = this->P7V_A_STATUS;
        _state->PLL_REF_CLOCK_ENABLE = this->PLL_REF_CLOCK_ENABLE;
        _state->CURRENT_RF0_CONFIG = this->CURRENT_RF0_CONFIG;
        _state->CURRENT_RF1_CONFIG = this->CURRENT_RF1_CONFIG;
        _state->CURRENT_RF0_DSA_CONFIG = this->CURRENT_RF0_DSA_CONFIG;
        _state->CURRENT_RF1_DSA_CONFIG = this->CURRENT_RF1_DSA_CONFIG;
        _state->RF0_OPTION = this->RF0_OPTION;
        _state->RF1_OPTION = this->RF1_OPTION;
        _state->RF0_DSA_OPTION = this->RF0_DSA_OPTION;
        _state->RF1_DSA_OPTION = this->RF1_DSA_OPTION;
        _state->SW_RF0_CONFIG = this->SW_RF0_CONFIG;
        _state->SW_RF1_CONFIG = this->SW_RF1_CONFIG;
        _state->SW_RF0_DSA_CONFIG = this->SW_RF0_DSA_CONFIG;
        _state->SW_RF1_DSA_CONFIG = this->SW_RF1_DSA_CONFIG;
        _state->DATA = this->DATA;
        _state->ADDRESS = this->ADDRESS;
        _state->READ_FLAG = this->READ_FLAG;
        _state->LO_SELECT = this->LO_SELECT;
        _state->START_TRANSACTION = this->START_TRANSACTION;
        _state->SPI_READY = this->SPI_READY;
        _state->DATA_VALID = this->DATA_VALID;
        _state->PULSE_TX0_LO1_SYNC = this->PULSE_TX0_LO1_SYNC;
        _state->PULSE_TX0_LO2_SYNC = this->PULSE_TX0_LO2_SYNC;
        _state->PULSE_TX1_LO1_SYNC = this->PULSE_TX1_LO1_SYNC;
        _state->PULSE_TX1_LO2_SYNC = this->PULSE_TX1_LO2_SYNC;
        _state->PULSE_RX0_LO1_SYNC = this->PULSE_RX0_LO1_SYNC;
        _state->PULSE_RX0_LO2_SYNC = this->PULSE_RX0_LO2_SYNC;
        _state->PULSE_RX1_LO1_SYNC = this->PULSE_RX1_LO1_SYNC;
        _state->PULSE_RX1_LO2_SYNC = this->PULSE_RX1_LO2_SYNC;
        _state->BYPASS_SYNC_REGISTER = this->BYPASS_SYNC_REGISTER;
        _state->RX0_RX_LED = this->RX0_RX_LED;
        _state->RX0_TRX_LED = this->RX0_TRX_LED;
        _state->TX0_TRX_LED = this->TX0_TRX_LED;
        _state->RX1_RX_LED = this->RX1_RX_LED;
        _state->RX1_TRX_LED = this->RX1_TRX_LED;
        _state->TX1_TRX_LED = this->TX1_TRX_LED;
        _state->TX0_IF2_1_2 = this->TX0_IF2_1_2;
        _state->TX0_IF1_3 = this->TX0_IF1_3;
        _state->TX0_IF1_4 = this->TX0_IF1_4;
        _state->TX0_IF1_5 = this->TX0_IF1_5;
        _state->TX0_IF1_6 = this->TX0_IF1_6;
        _state->TX0_7 = this->TX0_7;
        _state->TX0_RF_8 = this->TX0_RF_8;
        _state->TX0_RF_9 = this->TX0_RF_9;
        _state->TX0_ANT_10 = this->TX0_ANT_10;
        _state->TX0_ANT_11 = this->TX0_ANT_11;
        _state->TX0_LO_13 = this->TX0_LO_13;
        _state->TX0_LO_14 = this->TX0_LO_14;
        _state->TX1_IF2_1_2 = this->TX1_IF2_1_2;
        _state->TX1_IF1_3 = this->TX1_IF1_3;
        _state->TX1_IF1_4 = this->TX1_IF1_4;
        _state->TX1_IF1_5 = this->TX1_IF1_5;
        _state->TX1_IF1_6 = this->TX1_IF1_6;
        _state->TX1_7 = this->TX1_7;
        _state->TX1_RF_8 = this->TX1_RF_8;
        _state->TX1_RF_9 = this->TX1_RF_9;
        _state->TX1_ANT_10 = this->TX1_ANT_10;
        _state->TX1_ANT_11 = this->TX1_ANT_11;
        _state->TX1_LO_13 = this->TX1_LO_13;
        _state->TX1_LO_14 = this->TX1_LO_14;
        _state->RX0_ANT_1 = this->RX0_ANT_1;
        _state->RX0_2 = this->RX0_2;
        _state->RX0_RF_3 = this->RX0_RF_3;
        _state->RX0_4 = this->RX0_4;
        _state->RX0_IF1_5 = this->RX0_IF1_5;
        _state->RX0_IF1_6 = this->RX0_IF1_6;
        _state->RX0_IF2_7_8 = this->RX0_IF2_7_8;
        _state->RX0_LO_9 = this->RX0_LO_9;
        _state->RX0_LO_10 = this->RX0_LO_10;
        _state->RX0_RF_11 = this->RX0_RF_11;
        _state->RX1_ANT_1 = this->RX1_ANT_1;
        _state->RX1_2 = this->RX1_2;
        _state->RX1_RF_3 = this->RX1_RF_3;
        _state->RX1_4 = this->RX1_4;
        _state->RX1_IF1_5 = this->RX1_IF1_5;
        _state->RX1_IF1_6 = this->RX1_IF1_6;
        _state->RX1_IF2_7_8 = this->RX1_IF2_7_8;
        _state->RX1_LO_9 = this->RX1_LO_9;
        _state->RX1_LO_10 = this->RX1_LO_10;
        _state->RX1_RF_11 = this->RX1_RF_11;
        _state->TX0_DSA1 = this->TX0_DSA1;
        _state->TX0_DSA2 = this->TX0_DSA2;
        _state->TX1_DSA1 = this->TX1_DSA1;
        _state->TX1_DSA2 = this->TX1_DSA2;
        _state->RX0_DSA1 = this->RX0_DSA1;
        _state->RX0_DSA2 = this->RX0_DSA2;
        _state->RX0_DSA3_A = this->RX0_DSA3_A;
        _state->RX0_DSA3_B = this->RX0_DSA3_B;
        _state->RX1_DSA1 = this->RX1_DSA1;
        _state->RX1_DSA2 = this->RX1_DSA2;
        _state->RX1_DSA3_A = this->RX1_DSA3_A;
        _state->RX1_DSA3_B = this->RX1_DSA3_B;
        _state->TX0_TABLE_SELECT = this->TX0_TABLE_SELECT;
        _state->TX1_TABLE_SELECT = this->TX1_TABLE_SELECT;
        _state->RX0_TABLE_SELECT = this->RX0_TABLE_SELECT;
        _state->RX1_TABLE_SELECT = this->RX1_TABLE_SELECT;
        _state->TX0_TABLE_DSA1 = this->TX0_TABLE_DSA1;
        _state->TX0_TABLE_DSA2 = this->TX0_TABLE_DSA2;
        _state->TX1_TABLE_DSA1 = this->TX1_TABLE_DSA1;
        _state->TX1_TABLE_DSA2 = this->TX1_TABLE_DSA2;
        _state->RX0_TABLE_DSA1 = this->RX0_TABLE_DSA1;
        _state->RX0_TABLE_DSA2 = this->RX0_TABLE_DSA2;
        _state->RX0_TABLE_DSA3_A = this->RX0_TABLE_DSA3_A;
        _state->RX0_TABLE_DSA3_B = this->RX0_TABLE_DSA3_B;
        _state->RX1_TABLE_DSA1 = this->RX1_TABLE_DSA1;
        _state->RX1_TABLE_DSA2 = this->RX1_TABLE_DSA2;
        _state->RX1_TABLE_DSA3_A = this->RX1_TABLE_DSA3_A;
        _state->RX1_TABLE_DSA3_B = this->RX1_TABLE_DSA3_B;
    }

    uint16_t get_state_BOARD_ID(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->BOARD_ID;
    }

    uint32_t get_state_REVISION(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->REVISION;
    }

    uint32_t get_state_OLDEST_COMPAT_REVISION(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->OLDEST_COMPAT_REVISION;
    }

    uint32_t get_state_SCRATCH(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->SCRATCH;
    }

    uint32_t get_state_GIT_HASH(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->GIT_HASH;
    }

    ENABLE_TX_POS_7V0_t get_state_ENABLE_TX_POS_7V0(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->ENABLE_TX_POS_7V0;
    }

    ENABLE_RX_POS_7V0_t get_state_ENABLE_RX_POS_7V0(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->ENABLE_RX_POS_7V0;
    }

    ENABLE_POS_3V3_t get_state_ENABLE_POS_3V3(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->ENABLE_POS_3V3;
    }

    uint8_t get_state_P7V_B_STATUS(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->P7V_B_STATUS;
    }

    uint8_t get_state_P7V_A_STATUS(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->P7V_A_STATUS;
    }

    PLL_REF_CLOCK_ENABLE_t get_state_PLL_REF_CLOCK_ENABLE(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->PLL_REF_CLOCK_ENABLE;
    }

    uint8_t get_state_CURRENT_RF0_CONFIG(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->CURRENT_RF0_CONFIG;
    }

    uint8_t get_state_CURRENT_RF1_CONFIG(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->CURRENT_RF1_CONFIG;
    }

    uint8_t get_state_CURRENT_RF0_DSA_CONFIG(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->CURRENT_RF0_DSA_CONFIG;
    }

    uint8_t get_state_CURRENT_RF1_DSA_CONFIG(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->CURRENT_RF1_DSA_CONFIG;
    }

    RF0_OPTION_t get_state_RF0_OPTION(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RF0_OPTION;
    }

    RF1_OPTION_t get_state_RF1_OPTION(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RF1_OPTION;
    }

    RF0_DSA_OPTION_t get_state_RF0_DSA_OPTION(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RF0_DSA_OPTION;
    }

    RF1_DSA_OPTION_t get_state_RF1_DSA_OPTION(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RF1_DSA_OPTION;
    }

    uint8_t get_state_SW_RF0_CONFIG(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->SW_RF0_CONFIG;
    }

    uint8_t get_state_SW_RF1_CONFIG(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->SW_RF1_CONFIG;
    }

    uint8_t get_state_SW_RF0_DSA_CONFIG(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->SW_RF0_DSA_CONFIG;
    }

    uint8_t get_state_SW_RF1_DSA_CONFIG(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->SW_RF1_DSA_CONFIG;
    }

    uint16_t get_state_DATA(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->DATA;
    }

    uint8_t get_state_ADDRESS(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->ADDRESS;
    }

    READ_FLAG_t get_state_READ_FLAG(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->READ_FLAG;
    }

    LO_SELECT_t get_state_LO_SELECT(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->LO_SELECT;
    }

    START_TRANSACTION_t get_state_START_TRANSACTION(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->START_TRANSACTION;
    }

    uint8_t get_state_SPI_READY(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->SPI_READY;
    }

    uint8_t get_state_DATA_VALID(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->DATA_VALID;
    }

    uint8_t get_state_PULSE_TX0_LO1_SYNC(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->PULSE_TX0_LO1_SYNC;
    }

    uint8_t get_state_PULSE_TX0_LO2_SYNC(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->PULSE_TX0_LO2_SYNC;
    }

    uint8_t get_state_PULSE_TX1_LO1_SYNC(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->PULSE_TX1_LO1_SYNC;
    }

    uint8_t get_state_PULSE_TX1_LO2_SYNC(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->PULSE_TX1_LO2_SYNC;
    }

    uint8_t get_state_PULSE_RX0_LO1_SYNC(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->PULSE_RX0_LO1_SYNC;
    }

    uint8_t get_state_PULSE_RX0_LO2_SYNC(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->PULSE_RX0_LO2_SYNC;
    }

    uint8_t get_state_PULSE_RX1_LO1_SYNC(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->PULSE_RX1_LO1_SYNC;
    }

    uint8_t get_state_PULSE_RX1_LO2_SYNC(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->PULSE_RX1_LO2_SYNC;
    }

    BYPASS_SYNC_REGISTER_t get_state_BYPASS_SYNC_REGISTER(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->BYPASS_SYNC_REGISTER;
    }

    std::vector<RX0_RX_LED_t> get_state_RX0_RX_LED(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_RX_LED;
    }

    std::vector<RX0_TRX_LED_t> get_state_RX0_TRX_LED(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_TRX_LED;
    }

    std::vector<TX0_TRX_LED_t> get_state_TX0_TRX_LED(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX0_TRX_LED;
    }

    std::vector<RX1_RX_LED_t> get_state_RX1_RX_LED(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_RX_LED;
    }

    std::vector<RX1_TRX_LED_t> get_state_RX1_TRX_LED(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_TRX_LED;
    }

    std::vector<TX1_TRX_LED_t> get_state_TX1_TRX_LED(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX1_TRX_LED;
    }

    std::vector<TX0_IF2_1_2_t> get_state_TX0_IF2_1_2(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX0_IF2_1_2;
    }

    std::vector<TX0_IF1_3_t> get_state_TX0_IF1_3(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX0_IF1_3;
    }

    std::vector<TX0_IF1_4_t> get_state_TX0_IF1_4(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX0_IF1_4;
    }

    std::vector<TX0_IF1_5_t> get_state_TX0_IF1_5(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX0_IF1_5;
    }

    std::vector<TX0_IF1_6_t> get_state_TX0_IF1_6(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX0_IF1_6;
    }

    std::vector<TX0_7_t> get_state_TX0_7(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX0_7;
    }

    std::vector<TX0_RF_8_t> get_state_TX0_RF_8(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX0_RF_8;
    }

    std::vector<TX0_RF_9_t> get_state_TX0_RF_9(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX0_RF_9;
    }

    std::vector<TX0_ANT_10_t> get_state_TX0_ANT_10(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX0_ANT_10;
    }

    std::vector<TX0_ANT_11_t> get_state_TX0_ANT_11(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX0_ANT_11;
    }

    std::vector<TX0_LO_13_t> get_state_TX0_LO_13(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX0_LO_13;
    }

    std::vector<TX0_LO_14_t> get_state_TX0_LO_14(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX0_LO_14;
    }

    std::vector<TX1_IF2_1_2_t> get_state_TX1_IF2_1_2(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX1_IF2_1_2;
    }

    std::vector<TX1_IF1_3_t> get_state_TX1_IF1_3(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX1_IF1_3;
    }

    std::vector<TX1_IF1_4_t> get_state_TX1_IF1_4(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX1_IF1_4;
    }

    std::vector<TX1_IF1_5_t> get_state_TX1_IF1_5(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX1_IF1_5;
    }

    std::vector<TX1_IF1_6_t> get_state_TX1_IF1_6(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX1_IF1_6;
    }

    std::vector<TX1_7_t> get_state_TX1_7(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX1_7;
    }

    std::vector<TX1_RF_8_t> get_state_TX1_RF_8(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX1_RF_8;
    }

    std::vector<TX1_RF_9_t> get_state_TX1_RF_9(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX1_RF_9;
    }

    std::vector<TX1_ANT_10_t> get_state_TX1_ANT_10(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX1_ANT_10;
    }

    std::vector<TX1_ANT_11_t> get_state_TX1_ANT_11(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX1_ANT_11;
    }

    std::vector<TX1_LO_13_t> get_state_TX1_LO_13(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX1_LO_13;
    }

    std::vector<TX1_LO_14_t> get_state_TX1_LO_14(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX1_LO_14;
    }

    std::vector<RX0_ANT_1_t> get_state_RX0_ANT_1(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_ANT_1;
    }

    std::vector<RX0_2_t> get_state_RX0_2(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_2;
    }

    std::vector<RX0_RF_3_t> get_state_RX0_RF_3(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_RF_3;
    }

    std::vector<RX0_4_t> get_state_RX0_4(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_4;
    }

    std::vector<RX0_IF1_5_t> get_state_RX0_IF1_5(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_IF1_5;
    }

    std::vector<RX0_IF1_6_t> get_state_RX0_IF1_6(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_IF1_6;
    }

    std::vector<RX0_IF2_7_8_t> get_state_RX0_IF2_7_8(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_IF2_7_8;
    }

    std::vector<RX0_LO_9_t> get_state_RX0_LO_9(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_LO_9;
    }

    std::vector<RX0_LO_10_t> get_state_RX0_LO_10(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_LO_10;
    }

    std::vector<RX0_RF_11_t> get_state_RX0_RF_11(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_RF_11;
    }

    std::vector<RX1_ANT_1_t> get_state_RX1_ANT_1(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_ANT_1;
    }

    std::vector<RX1_2_t> get_state_RX1_2(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_2;
    }

    std::vector<RX1_RF_3_t> get_state_RX1_RF_3(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_RF_3;
    }

    std::vector<RX1_4_t> get_state_RX1_4(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_4;
    }

    std::vector<RX1_IF1_5_t> get_state_RX1_IF1_5(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_IF1_5;
    }

    std::vector<RX1_IF1_6_t> get_state_RX1_IF1_6(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_IF1_6;
    }

    std::vector<RX1_IF2_7_8_t> get_state_RX1_IF2_7_8(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_IF2_7_8;
    }

    std::vector<RX1_LO_9_t> get_state_RX1_LO_9(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_LO_9;
    }

    std::vector<RX1_LO_10_t> get_state_RX1_LO_10(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_LO_10;
    }

    std::vector<RX1_RF_11_t> get_state_RX1_RF_11(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_RF_11;
    }

    std::vector<uint8_t> get_state_TX0_DSA1(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX0_DSA1;
    }

    std::vector<uint8_t> get_state_TX0_DSA2(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX0_DSA2;
    }

    std::vector<uint8_t> get_state_TX1_DSA1(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX1_DSA1;
    }

    std::vector<uint8_t> get_state_TX1_DSA2(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX1_DSA2;
    }

    std::vector<uint8_t> get_state_RX0_DSA1(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_DSA1;
    }

    std::vector<uint8_t> get_state_RX0_DSA2(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_DSA2;
    }

    std::vector<uint8_t> get_state_RX0_DSA3_A(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_DSA3_A;
    }

    std::vector<uint8_t> get_state_RX0_DSA3_B(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_DSA3_B;
    }

    std::vector<uint8_t> get_state_RX1_DSA1(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_DSA1;
    }

    std::vector<uint8_t> get_state_RX1_DSA2(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_DSA2;
    }

    std::vector<uint8_t> get_state_RX1_DSA3_A(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_DSA3_A;
    }

    std::vector<uint8_t> get_state_RX1_DSA3_B(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_DSA3_B;
    }

    std::vector<uint8_t> get_state_TX0_TABLE_SELECT(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX0_TABLE_SELECT;
    }

    std::vector<uint8_t> get_state_TX1_TABLE_SELECT(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX1_TABLE_SELECT;
    }

    std::vector<uint8_t> get_state_RX0_TABLE_SELECT(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_TABLE_SELECT;
    }

    std::vector<uint8_t> get_state_RX1_TABLE_SELECT(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_TABLE_SELECT;
    }

    std::vector<uint8_t> get_state_TX0_TABLE_DSA1(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX0_TABLE_DSA1;
    }

    std::vector<uint8_t> get_state_TX0_TABLE_DSA2(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX0_TABLE_DSA2;
    }

    std::vector<uint8_t> get_state_TX1_TABLE_DSA1(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX1_TABLE_DSA1;
    }

    std::vector<uint8_t> get_state_TX1_TABLE_DSA2(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->TX1_TABLE_DSA2;
    }

    std::vector<uint8_t> get_state_RX0_TABLE_DSA1(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_TABLE_DSA1;
    }

    std::vector<uint8_t> get_state_RX0_TABLE_DSA2(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_TABLE_DSA2;
    }

    std::vector<uint8_t> get_state_RX0_TABLE_DSA3_A(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_TABLE_DSA3_A;
    }

    std::vector<uint8_t> get_state_RX0_TABLE_DSA3_B(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX0_TABLE_DSA3_B;
    }

    std::vector<uint8_t> get_state_RX1_TABLE_DSA1(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_TABLE_DSA1;
    }

    std::vector<uint8_t> get_state_RX1_TABLE_DSA2(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_TABLE_DSA2;
    }

    std::vector<uint8_t> get_state_RX1_TABLE_DSA3_A(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_TABLE_DSA3_A;
    }

    std::vector<uint8_t> get_state_RX1_TABLE_DSA3_B(void){
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        return _state->RX1_TABLE_DSA3_B;
    }


    template<typename T> std::set<T> get_changed_addrs(bool include_ro = false) {
        if (_state == NULL) throw uhd::runtime_error("no saved state");
        //check each register for changes
        std::set<T> addrs;
        if (include_ro || !true) {
            if(_state->BOARD_ID != this->BOARD_ID) {
                addrs.insert(0);
            }
        }
        if (include_ro || !true) {
            if(_state->REVISION != this->REVISION) {
                addrs.insert(4);
            }
        }
        if (include_ro || !true) {
            if(_state->OLDEST_COMPAT_REVISION != this->OLDEST_COMPAT_REVISION) {
                addrs.insert(8);
            }
        }
        if (include_ro || !false) {
            if(_state->SCRATCH != this->SCRATCH) {
                addrs.insert(12);
            }
        }
        if (include_ro || !true) {
            if(_state->GIT_HASH != this->GIT_HASH) {
                addrs.insert(16);
            }
        }
        if (include_ro || !false) {
            if(_state->ENABLE_TX_POS_7V0 != this->ENABLE_TX_POS_7V0) {
                addrs.insert(64);
            }
        }
        if (include_ro || !false) {
            if(_state->ENABLE_RX_POS_7V0 != this->ENABLE_RX_POS_7V0) {
                addrs.insert(64);
            }
        }
        if (include_ro || !false) {
            if(_state->ENABLE_POS_3V3 != this->ENABLE_POS_3V3) {
                addrs.insert(64);
            }
        }
        if (include_ro || !true) {
            if(_state->P7V_B_STATUS != this->P7V_B_STATUS) {
                addrs.insert(68);
            }
        }
        if (include_ro || !true) {
            if(_state->P7V_A_STATUS != this->P7V_A_STATUS) {
                addrs.insert(68);
            }
        }
        if (include_ro || !false) {
            if(_state->PLL_REF_CLOCK_ENABLE != this->PLL_REF_CLOCK_ENABLE) {
                addrs.insert(72);
            }
        }
        if (include_ro || !true) {
            if(_state->CURRENT_RF0_CONFIG != this->CURRENT_RF0_CONFIG) {
                addrs.insert(4096);
            }
        }
        if (include_ro || !true) {
            if(_state->CURRENT_RF1_CONFIG != this->CURRENT_RF1_CONFIG) {
                addrs.insert(4096);
            }
        }
        if (include_ro || !true) {
            if(_state->CURRENT_RF0_DSA_CONFIG != this->CURRENT_RF0_DSA_CONFIG) {
                addrs.insert(4096);
            }
        }
        if (include_ro || !true) {
            if(_state->CURRENT_RF1_DSA_CONFIG != this->CURRENT_RF1_DSA_CONFIG) {
                addrs.insert(4096);
            }
        }
        if (include_ro || !false) {
            if(_state->RF0_OPTION != this->RF0_OPTION) {
                addrs.insert(4100);
            }
        }
        if (include_ro || !false) {
            if(_state->RF1_OPTION != this->RF1_OPTION) {
                addrs.insert(4100);
            }
        }
        if (include_ro || !false) {
            if(_state->RF0_DSA_OPTION != this->RF0_DSA_OPTION) {
                addrs.insert(4100);
            }
        }
        if (include_ro || !false) {
            if(_state->RF1_DSA_OPTION != this->RF1_DSA_OPTION) {
                addrs.insert(4100);
            }
        }
        if (include_ro || !false) {
            if(_state->SW_RF0_CONFIG != this->SW_RF0_CONFIG) {
                addrs.insert(4104);
            }
        }
        if (include_ro || !false) {
            if(_state->SW_RF1_CONFIG != this->SW_RF1_CONFIG) {
                addrs.insert(4104);
            }
        }
        if (include_ro || !false) {
            if(_state->SW_RF0_DSA_CONFIG != this->SW_RF0_DSA_CONFIG) {
                addrs.insert(4104);
            }
        }
        if (include_ro || !false) {
            if(_state->SW_RF1_DSA_CONFIG != this->SW_RF1_DSA_CONFIG) {
                addrs.insert(4104);
            }
        }
        if (include_ro || !false) {
            if(_state->DATA != this->DATA) {
                addrs.insert(4128);
            }
        }
        if (include_ro || !false) {
            if(_state->ADDRESS != this->ADDRESS) {
                addrs.insert(4128);
            }
        }
        if (include_ro || !false) {
            if(_state->READ_FLAG != this->READ_FLAG) {
                addrs.insert(4128);
            }
        }
        if (include_ro || !false) {
            if(_state->LO_SELECT != this->LO_SELECT) {
                addrs.insert(4128);
            }
        }
        if (include_ro || !false) {
            if(_state->START_TRANSACTION != this->START_TRANSACTION) {
                addrs.insert(4128);
            }
        }
        if (include_ro || !true) {
            if(_state->SPI_READY != this->SPI_READY) {
                addrs.insert(4128);
            }
        }
        if (include_ro || !true) {
            if(_state->DATA_VALID != this->DATA_VALID) {
                addrs.insert(4128);
            }
        }
        if (include_ro || !false) {
            if(_state->PULSE_TX0_LO1_SYNC != this->PULSE_TX0_LO1_SYNC) {
                addrs.insert(4132);
            }
        }
        if (include_ro || !false) {
            if(_state->PULSE_TX0_LO2_SYNC != this->PULSE_TX0_LO2_SYNC) {
                addrs.insert(4132);
            }
        }
        if (include_ro || !false) {
            if(_state->PULSE_TX1_LO1_SYNC != this->PULSE_TX1_LO1_SYNC) {
                addrs.insert(4132);
            }
        }
        if (include_ro || !false) {
            if(_state->PULSE_TX1_LO2_SYNC != this->PULSE_TX1_LO2_SYNC) {
                addrs.insert(4132);
            }
        }
        if (include_ro || !false) {
            if(_state->PULSE_RX0_LO1_SYNC != this->PULSE_RX0_LO1_SYNC) {
                addrs.insert(4132);
            }
        }
        if (include_ro || !false) {
            if(_state->PULSE_RX0_LO2_SYNC != this->PULSE_RX0_LO2_SYNC) {
                addrs.insert(4132);
            }
        }
        if (include_ro || !false) {
            if(_state->PULSE_RX1_LO1_SYNC != this->PULSE_RX1_LO1_SYNC) {
                addrs.insert(4132);
            }
        }
        if (include_ro || !false) {
            if(_state->PULSE_RX1_LO2_SYNC != this->PULSE_RX1_LO2_SYNC) {
                addrs.insert(4132);
            }
        }
        if (include_ro || !false) {
            if(_state->BYPASS_SYNC_REGISTER != this->BYPASS_SYNC_REGISTER) {
                addrs.insert(4132);
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_RX_LED[i] != this->RX0_RX_LED[i]) {
                    addrs.insert(5120 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_TRX_LED[i] != this->RX0_TRX_LED[i]) {
                    addrs.insert(5120 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX0_TRX_LED[i] != this->TX0_TRX_LED[i]) {
                    addrs.insert(5120 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_RX_LED[i] != this->RX1_RX_LED[i]) {
                    addrs.insert(5120 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_TRX_LED[i] != this->RX1_TRX_LED[i]) {
                    addrs.insert(5120 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX1_TRX_LED[i] != this->TX1_TRX_LED[i]) {
                    addrs.insert(5120 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX0_IF2_1_2[i] != this->TX0_IF2_1_2[i]) {
                    addrs.insert(8192 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX0_IF1_3[i] != this->TX0_IF1_3[i]) {
                    addrs.insert(8192 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX0_IF1_4[i] != this->TX0_IF1_4[i]) {
                    addrs.insert(8192 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX0_IF1_5[i] != this->TX0_IF1_5[i]) {
                    addrs.insert(8192 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX0_IF1_6[i] != this->TX0_IF1_6[i]) {
                    addrs.insert(8192 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX0_7[i] != this->TX0_7[i]) {
                    addrs.insert(8192 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX0_RF_8[i] != this->TX0_RF_8[i]) {
                    addrs.insert(8192 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX0_RF_9[i] != this->TX0_RF_9[i]) {
                    addrs.insert(8192 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX0_ANT_10[i] != this->TX0_ANT_10[i]) {
                    addrs.insert(8192 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX0_ANT_11[i] != this->TX0_ANT_11[i]) {
                    addrs.insert(8192 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX0_LO_13[i] != this->TX0_LO_13[i]) {
                    addrs.insert(8192 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX0_LO_14[i] != this->TX0_LO_14[i]) {
                    addrs.insert(8192 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX1_IF2_1_2[i] != this->TX1_IF2_1_2[i]) {
                    addrs.insert(9216 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX1_IF1_3[i] != this->TX1_IF1_3[i]) {
                    addrs.insert(9216 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX1_IF1_4[i] != this->TX1_IF1_4[i]) {
                    addrs.insert(9216 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX1_IF1_5[i] != this->TX1_IF1_5[i]) {
                    addrs.insert(9216 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX1_IF1_6[i] != this->TX1_IF1_6[i]) {
                    addrs.insert(9216 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX1_7[i] != this->TX1_7[i]) {
                    addrs.insert(9216 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX1_RF_8[i] != this->TX1_RF_8[i]) {
                    addrs.insert(9216 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX1_RF_9[i] != this->TX1_RF_9[i]) {
                    addrs.insert(9216 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX1_ANT_10[i] != this->TX1_ANT_10[i]) {
                    addrs.insert(9216 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX1_ANT_11[i] != this->TX1_ANT_11[i]) {
                    addrs.insert(9216 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX1_LO_13[i] != this->TX1_LO_13[i]) {
                    addrs.insert(9216 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX1_LO_14[i] != this->TX1_LO_14[i]) {
                    addrs.insert(9216 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_ANT_1[i] != this->RX0_ANT_1[i]) {
                    addrs.insert(10240 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_2[i] != this->RX0_2[i]) {
                    addrs.insert(10240 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_RF_3[i] != this->RX0_RF_3[i]) {
                    addrs.insert(10240 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_4[i] != this->RX0_4[i]) {
                    addrs.insert(10240 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_IF1_5[i] != this->RX0_IF1_5[i]) {
                    addrs.insert(10240 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_IF1_6[i] != this->RX0_IF1_6[i]) {
                    addrs.insert(10240 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_IF2_7_8[i] != this->RX0_IF2_7_8[i]) {
                    addrs.insert(10240 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_LO_9[i] != this->RX0_LO_9[i]) {
                    addrs.insert(10240 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_LO_10[i] != this->RX0_LO_10[i]) {
                    addrs.insert(10240 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_RF_11[i] != this->RX0_RF_11[i]) {
                    addrs.insert(10240 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_ANT_1[i] != this->RX1_ANT_1[i]) {
                    addrs.insert(11264 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_2[i] != this->RX1_2[i]) {
                    addrs.insert(11264 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_RF_3[i] != this->RX1_RF_3[i]) {
                    addrs.insert(11264 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_4[i] != this->RX1_4[i]) {
                    addrs.insert(11264 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_IF1_5[i] != this->RX1_IF1_5[i]) {
                    addrs.insert(11264 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_IF1_6[i] != this->RX1_IF1_6[i]) {
                    addrs.insert(11264 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_IF2_7_8[i] != this->RX1_IF2_7_8[i]) {
                    addrs.insert(11264 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_LO_9[i] != this->RX1_LO_9[i]) {
                    addrs.insert(11264 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_LO_10[i] != this->RX1_LO_10[i]) {
                    addrs.insert(11264 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_RF_11[i] != this->RX1_RF_11[i]) {
                    addrs.insert(11264 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX0_DSA1[i] != this->TX0_DSA1[i]) {
                    addrs.insert(12288 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX0_DSA2[i] != this->TX0_DSA2[i]) {
                    addrs.insert(12288 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX1_DSA1[i] != this->TX1_DSA1[i]) {
                    addrs.insert(13312 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX1_DSA2[i] != this->TX1_DSA2[i]) {
                    addrs.insert(13312 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_DSA1[i] != this->RX0_DSA1[i]) {
                    addrs.insert(14336 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_DSA2[i] != this->RX0_DSA2[i]) {
                    addrs.insert(14336 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_DSA3_A[i] != this->RX0_DSA3_A[i]) {
                    addrs.insert(14336 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_DSA3_B[i] != this->RX0_DSA3_B[i]) {
                    addrs.insert(14336 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_DSA1[i] != this->RX1_DSA1[i]) {
                    addrs.insert(15360 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_DSA2[i] != this->RX1_DSA2[i]) {
                    addrs.insert(15360 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_DSA3_A[i] != this->RX1_DSA3_A[i]) {
                    addrs.insert(15360 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_DSA3_B[i] != this->RX1_DSA3_B[i]) {
                    addrs.insert(15360 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX0_TABLE_SELECT[i] != this->TX0_TABLE_SELECT[i]) {
                    addrs.insert(16384 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX1_TABLE_SELECT[i] != this->TX1_TABLE_SELECT[i]) {
                    addrs.insert(17408 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_TABLE_SELECT[i] != this->RX0_TABLE_SELECT[i]) {
                    addrs.insert(18432 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_TABLE_SELECT[i] != this->RX1_TABLE_SELECT[i]) {
                    addrs.insert(19456 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX0_TABLE_DSA1[i] != this->TX0_TABLE_DSA1[i]) {
                    addrs.insert(20480 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX0_TABLE_DSA2[i] != this->TX0_TABLE_DSA2[i]) {
                    addrs.insert(20480 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX1_TABLE_DSA1[i] != this->TX1_TABLE_DSA1[i]) {
                    addrs.insert(21504 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->TX1_TABLE_DSA2[i] != this->TX1_TABLE_DSA2[i]) {
                    addrs.insert(21504 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_TABLE_DSA1[i] != this->RX0_TABLE_DSA1[i]) {
                    addrs.insert(22528 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_TABLE_DSA2[i] != this->RX0_TABLE_DSA2[i]) {
                    addrs.insert(22528 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_TABLE_DSA3_A[i] != this->RX0_TABLE_DSA3_A[i]) {
                    addrs.insert(22528 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX0_TABLE_DSA3_B[i] != this->RX0_TABLE_DSA3_B[i]) {
                    addrs.insert(22528 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_TABLE_DSA1[i] != this->RX1_TABLE_DSA1[i]) {
                    addrs.insert(23552 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_TABLE_DSA2[i] != this->RX1_TABLE_DSA2[i]) {
                    addrs.insert(23552 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_TABLE_DSA3_A[i] != this->RX1_TABLE_DSA3_A[i]) {
                    addrs.insert(23552 + i * 4);
                }
            }
        }
        if (include_ro || !false) {
            for (size_t i = 0; i < 256; i++) {
                if(_state->RX1_TABLE_DSA3_B[i] != this->RX1_TABLE_DSA3_B[i]) {
                    addrs.insert(23552 + i * 4);
                }
            }
        }
        return addrs;
    }

private:
    zbx_cpld_regs_t *_state;
};

#endif /* INCLUDED_ZBX_CPLD_REGS_HPP */
