From bafa9d95453387814ef25e6b6256ba8db2df612f Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Thu, 23 Jan 2020 16:10:22 -0800 Subject: Merge FPGA repository back into UHD repository MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The FPGA codebase was removed from the UHD repository in 2014 to reduce the size of the repository. However, over the last half-decade, the split between the repositories has proven more burdensome than it has been helpful. By merging the FPGA code back, it will be possible to create atomic commits that touch both FPGA and UHD codebases. Continuous integration testing is also simplified by merging the repositories, because it was previously difficult to automatically derive the correct UHD branch when testing a feature branch on the FPGA repository. This commit also updates the license files and paths therein. We are therefore merging the repositories again. Future development for FPGA code will happen in the same repository as the UHD host code and MPM code. == Original Codebase and Rebasing == The original FPGA repository will be hosted for the foreseeable future at its original local location: https://github.com/EttusResearch/fpga/ It can be used for bisecting, reference, and a more detailed history. The final commit from said repository to be merged here is 05003794e2da61cabf64dd278c45685a7abad7ec. This commit is tagged as v4.0.0.0-pre-uhd-merge. If you have changes in the FPGA repository that you want to rebase onto the UHD repository, simply run the following commands: - Create a directory to store patches (this should be an empty directory): mkdir ~/patches - Now make sure that your FPGA codebase is based on the same state as the code that was merged: cd src/fpga # Or wherever your FPGA code is stored git rebase v4.0.0.0-pre-uhd-merge Note: The rebase command may look slightly different depending on what exactly you're trying to rebase. - Create a patch set for your changes versus v4.0.0.0-pre-uhd-merge: git format-patch v4.0.0.0-pre-uhd-merge -o ~/patches Note: Make sure that only patches are stored in your output directory. It should otherwise be empty. Make sure that you picked the correct range of commits, and only commits you wanted to rebase were exported as patch files. - Go to the UHD repository and apply the patches: cd src/uhd # Or wherever your UHD repository is stored git am --directory fpga ~/patches/* rm -rf ~/patches # This is for cleanup == Contributors == The following people have contributed mainly to these files (this list is not complete): Co-authored-by: Alex Williams Co-authored-by: Andrej Rode Co-authored-by: Ashish Chaudhari Co-authored-by: Ben Hilburn Co-authored-by: Ciro Nishiguchi Co-authored-by: Daniel Jepson Co-authored-by: Derek Kozel Co-authored-by: EJ Kreinar Co-authored-by: Humberto Jimenez Co-authored-by: Ian Buckley Co-authored-by: Jörg Hofrichter Co-authored-by: Jon Kiser Co-authored-by: Josh Blum Co-authored-by: Jonathon Pendlum Co-authored-by: Martin Braun Co-authored-by: Matt Ettus Co-authored-by: Michael West Co-authored-by: Moritz Fischer Co-authored-by: Nick Foster Co-authored-by: Nicolas Cuervo Co-authored-by: Paul Butler Co-authored-by: Paul David Co-authored-by: Ryan Marlow Co-authored-by: Sugandha Gupta Co-authored-by: Sylvain Munaut Co-authored-by: Trung Tran Co-authored-by: Vidush Vishwanath Co-authored-by: Wade Fife --- .../lib/white_rabbit/wr_cores_v4_2/Makefile.srcs | 176 + .../bin/sdbfs/sdbfs-empty-i2c-eeprom.bin | Bin 0 -> 320 bytes .../wr_cores_v4_2/bin/sdbfs/sdbfs-svec-flash.bin | Bin 0 -> 6291904 bytes .../wr_cores_v4_2/bin/wrpc/wrc_phy16.bram | 32768 ++++++ .../wr_cores_v4_2/bin/wrpc/wrc_phy8.bram | 32768 ++++++ .../wr_cores_v4_2/bin/wrpc/wrc_phy8.mif | 32775 ++++++ .../wr_cores_v4_2/bin/wrpc/wrc_phy8_sim.bram | 32768 ++++++ .../wr_cores_v4_2/bin/wrpc/wrc_phy8_sim.mif | 32775 ++++++ .../wr_cores_v4_2/board/common/wr_board_pkg.vhd | 359 + .../board/common/xwrc_board_common.vhd | 552 + .../wr_cores_v4_2/board/eeprom/sfp_eeprom.vhd | 161 + .../wr_cores_v4_2/board/eeprom/tb_sfp_eeprom.vhd | 96 + .../wr_cores_v4_2/board/fasec/wr_fasec_pkg.vhd | 198 + .../wr_cores_v4_2/board/fasec/wrc_board_fasec.vhd | 599 + .../wr_cores_v4_2/board/fasec/xwrc_board_fasec.vhd | 623 + .../hdl/eb_slave_core/eb_cfg_fifo.vhd | 177 + .../hdl/eb_slave_core/eb_checksum.vhd | 101 + .../hdl/eb_slave_core/eb_commit_fifo.vhd | 123 + .../etherbone-core/hdl/eb_slave_core/eb_eth_rx.vhd | 183 + .../etherbone-core/hdl/eb_slave_core/eb_eth_tx.vhd | 332 + .../hdl/eb_slave_core/eb_ethernet_slave.vhd | 164 + .../etherbone-core/hdl/eb_slave_core/eb_fifo.vhd | 112 + .../hdl/eb_slave_core/eb_hdr_pkg.vhd | 271 + .../hdl/eb_slave_core/eb_internals_pkg.vhd | 418 + .../hdl/eb_slave_core/eb_pass_fifo.vhd | 61 + .../hdl/eb_slave_core/eb_slave_fsm.vhd | 353 + .../hdl/eb_slave_core/eb_slave_top.vhd | 205 + .../hdl/eb_slave_core/eb_stream_narrow.vhd | 150 + .../hdl/eb_slave_core/eb_stream_widen.vhd | 145 + .../hdl/eb_slave_core/eb_tag_fifo.vhd | 61 + .../etherbone-core/hdl/eb_slave_core/eb_tx_mux.vhd | 170 + .../hdl/eb_slave_core/eb_wbm_fifo.vhd | 171 + .../hdl/eb_slave_core/etherbone_pkg.vhd | 168 + .../general-cores/modules/common/gc_crc_gen.vhd | 280 + .../modules/common/gc_extend_pulse.vhd | 93 + .../modules/common/gc_frequency_meter.vhd | 130 + .../modules/common/gc_pulse_synchronizer.vhd | 134 + .../modules/common/gc_pulse_synchronizer2.vhd | 132 + .../general-cores/modules/common/gc_reset.vhd | 87 + .../general-cores/modules/common/gc_sync_ffs.vhd | 125 + .../modules/common/gc_sync_register.vhd | 88 + .../general-cores/modules/common/gencores_pkg.vhd | 674 + .../genrams/common/generic_shiftreg_fifo.vhd | 168 + .../modules/genrams/common/inferred_async_fifo.vhd | 326 + .../modules/genrams/common/inferred_sync_fifo.vhd | 261 + .../modules/genrams/generic/generic_async_fifo.vhd | 162 + .../modules/genrams/generic/generic_sync_fifo.vhd | 130 + .../general-cores/modules/genrams/genram_pkg.vhd | 262 + .../modules/genrams/memory_loader_pkg.vhd | 251 + .../modules/genrams/xilinx/gc_shiftreg.vhd | 68 + .../modules/genrams/xilinx/generic_dpram.vhd | 235 + .../genrams/xilinx/generic_dpram_dualclock.vhd | 268 + .../genrams/xilinx/generic_dpram_sameclock.vhd | 304 + .../modules/genrams/xilinx/generic_dpram_split.vhd | 233 + .../genrams/xilinx/generic_simple_dpram.vhd | 100 + .../wishbone/wb_axi4lite_bridge/axi4_pkg.vhd | 253 + .../wb_axi4lite_bridge/wb_axi4lite_bridge.vhd | 131 + .../wb_axi4lite_bridge/xwb_axi4lite_bridge.vhd | 196 + .../modules/wishbone/wb_crossbar/sdb_rom.vhd | 160 + .../modules/wishbone/wb_crossbar/xwb_crossbar.vhd | 427 + .../wishbone/wb_crossbar/xwb_sdb_crossbar.vhd | 232 + .../modules/wishbone/wb_dpram/xwb_dpram.vhd | 185 + .../wishbone/wb_lm32/generated/lm32_allprofiles.v | 102181 ++++++++++++++++++ .../wishbone/wb_lm32/generated/xwb_lm32.vhd | 825 + .../wishbone/wb_lm32/platform/generic/jtag_tap.v | 20 + .../wb_lm32/platform/generic/lm32_multiplier.v | 119 + .../modules/wishbone/wb_lm32/src/jtag_cores.v | 66 + .../modules/wishbone/wb_lm32/src/lm32_adder.v | 115 + .../modules/wishbone/wb_lm32/src/lm32_addsub.v | 74 + .../modules/wishbone/wb_lm32/src/lm32_dp_ram.vhd | 46 + .../modules/wishbone/wb_lm32/src/lm32_include.v | 320 + .../modules/wishbone/wb_lm32/src/lm32_logic_op.v | 76 + .../modules/wishbone/wb_lm32/src/lm32_ram.vhd | 66 + .../modules/wishbone/wb_lm32/src/lm32_shifter.v | 138 + .../wishbone/wb_onewire_master/sockit_owm.v | 432 + .../wb_onewire_master/wb_onewire_master.vhd | 184 + .../wb_onewire_master/xwb_onewire_master.vhd | 105 + .../wishbone/wb_slave_adapter/wb_slave_adapter.vhd | 232 + .../modules/wishbone/wb_spi/spi_defines.v | 167 + .../modules/wishbone/wb_spi/timescale.v | 2 + .../modules/wishbone/wb_uart/simple_uart_pkg.vhd | 99 + .../modules/wishbone/wb_uart/simple_uart_wb.vhd | 315 + .../modules/wishbone/wb_uart/uart_async_rx.vhd | 229 + .../modules/wishbone/wb_uart/uart_async_tx.vhd | 190 + .../modules/wishbone/wb_uart/uart_baud_gen.vhd | 89 + .../modules/wishbone/wb_uart/wb_simple_uart.vhd | 323 + .../modules/wishbone/wb_uart/xwb_simple_uart.vhd | 129 + .../modules/wishbone/wbgen2/wbgen2_eic.vhd | 241 + .../modules/wishbone/wbgen2/wbgen2_fifo_sync.vhd | 144 + .../modules/wishbone/wbgen2/wbgen2_pkg.vhd | 154 + .../modules/wishbone/wishbone_pkg.vhd | 2130 + .../wr_cores_v4_2/modules/fabric/wr_fabric_pkg.vhd | 220 + .../modules/fabric/xwb_fabric_sink.vhd | 265 + .../modules/fabric/xwb_fabric_source.vhd | 229 + .../wr_cores_v4_2/modules/fabric/xwrf_mux.vhd | 307 + .../modules/timing/dmtd_phase_meas.vhd | 290 + .../modules/timing/dmtd_with_deglitcher.vhd | 353 + .../wr_cores_v4_2/modules/timing/pulse_stamper.vhd | 161 + .../modules/wr_dacs/spec_serial_dac.vhd | 209 + .../modules/wr_dacs/spec_serial_dac_arb.vhd | 187 + .../modules/wr_endpoint/endpoint_pkg.vhd | 469 + .../modules/wr_endpoint/endpoint_private_pkg.vhd | 930 + .../modules/wr_endpoint/ep_1000basex_pcs.vhd | 635 + .../modules/wr_endpoint/ep_autonegotiation.vhd | 281 + .../wr_endpoint/ep_clock_alignment_fifo.vhd | 127 + .../modules/wr_endpoint/ep_crc32_pkg.vhd | 128 + .../modules/wr_endpoint/ep_leds_controller.vhd | 129 + .../modules/wr_endpoint/ep_packet_filter.vhd | 371 + .../modules/wr_endpoint/ep_pcs_tbi_mdio_wb.vhd | 627 + .../modules/wr_endpoint/ep_registers_pkg.vhd | 261 + .../modules/wr_endpoint/ep_rtu_header_extract.vhd | 205 + .../modules/wr_endpoint/ep_rx_buffer.vhd | 321 + .../modules/wr_endpoint/ep_rx_crc_size_check.vhd | 404 + .../wr_endpoint/ep_rx_early_address_match.vhd | 271 + .../modules/wr_endpoint/ep_rx_oob_insert.vhd | 171 + .../modules/wr_endpoint/ep_rx_path.vhd | 515 + .../modules/wr_endpoint/ep_rx_pcs_16bit.vhd | 765 + .../modules/wr_endpoint/ep_rx_pcs_8bit.vhd | 858 + .../wr_endpoint/ep_rx_status_reg_insert.vhd | 153 + .../modules/wr_endpoint/ep_rx_vlan_unit.vhd | 449 + .../modules/wr_endpoint/ep_rx_wb_master.vhd | 226 + .../modules/wr_endpoint/ep_sync_detect.vhd | 280 + .../modules/wr_endpoint/ep_sync_detect_16bit.vhd | 193 + .../modules/wr_endpoint/ep_timestamping_unit.vhd | 424 + .../modules/wr_endpoint/ep_ts_counter.vhd | 152 + .../modules/wr_endpoint/ep_tx_crc_inserter.vhd | 267 + .../modules/wr_endpoint/ep_tx_header_processor.vhd | 723 + .../modules/wr_endpoint/ep_tx_inject_ctrl.vhd | 235 + .../modules/wr_endpoint/ep_tx_packet_injection.vhd | 251 + .../modules/wr_endpoint/ep_tx_path.vhd | 352 + .../modules/wr_endpoint/ep_tx_pcs_16bit.vhd | 546 + .../modules/wr_endpoint/ep_tx_pcs_8bit.vhd | 514 + .../modules/wr_endpoint/ep_tx_vlan_unit.vhd | 305 + .../modules/wr_endpoint/ep_wishbone_controller.vhd | 861 + .../modules/wr_endpoint/wr_endpoint.vhd | 1001 + .../modules/wr_endpoint/xwr_endpoint.vhd | 533 + .../modules/wr_mini_nic/minic_wb_slave.vhd | 602 + .../modules/wr_mini_nic/minic_wbgen2_pkg.vhd | 145 + .../modules/wr_mini_nic/wr_mini_nic.vhd | 817 + .../modules/wr_mini_nic/xwr_mini_nic.vhd | 186 + .../modules/wr_pps_gen/pps_gen_wb.vhd | 820 + .../modules/wr_pps_gen/wr_pps_gen.vhd | 518 + .../modules/wr_pps_gen/xwr_pps_gen.vhd | 162 + .../modules/wr_softpll_ng/softpll_pkg.vhd | 31 + .../modules/wr_softpll_ng/spll_aligner.vhd | 180 + .../modules/wr_softpll_ng/spll_wb_slave.vhd | 939 + .../modules/wr_softpll_ng/spll_wbgen2_pkg.vhd | 207 + .../modules/wr_softpll_ng/wr_softpll_ng.vhd | 809 + .../modules/wr_softpll_ng/xwr_softpll_ng.vhd | 244 + .../modules/wr_streamers/dropping_buffer.vhd | 142 + .../modules/wr_streamers/escape_detector.vhd | 106 + .../modules/wr_streamers/escape_inserter.vhd | 141 + .../modules/wr_streamers/streamers_pkg.vhd | 332 + .../modules/wr_streamers/streamers_priv_pkg.vhd | 201 + .../modules/wr_streamers/wr_streamers_wb.vhd | 706 + .../wr_streamers/wr_streamers_wbgen2_pkg.vhd | 191 + .../modules/wr_streamers/xrtx_streamers_stats.vhd | 362 + .../modules/wr_streamers/xrx_streamer.vhd | 677 + .../modules/wr_streamers/xrx_streamers_stats.vhd | 231 + .../modules/wr_streamers/xtx_streamer.vhd | 597 + .../modules/wr_streamers/xtx_streamers_stats.vhd | 125 + .../modules/wr_streamers/xwr_streamers.vhd | 467 + .../modules/wr_tbi_phy/disparity_gen_pkg.vhd | 90 + .../wr_cores_v4_2/modules/wrc_core/wr_core.vhd | 1157 + .../modules/wrc_core/wrc_diags_pkg.vhd | 134 + .../modules/wrc_core/wrc_diags_wb.vhd | 376 + .../wr_cores_v4_2/modules/wrc_core/wrc_periph.vhd | 520 + .../modules/wrc_core/wrc_syscon_pkg.vhd | 253 + .../modules/wrc_core/wrc_syscon_wb.vhd | 975 + .../wr_cores_v4_2/modules/wrc_core/wrcore_pkg.vhd | 769 + .../wr_cores_v4_2/modules/wrc_core/xwr_core.vhd | 448 + .../modules/wrc_core/xwrc_diags_wb.vhd | 132 + .../whiterabbit_gtpe2_channel_wrapper.vhd | 491 + .../whiterabbit_gtpe2_channel_wrapper_gt.vhd | 1013 + ...erabbit_gtpe2_channel_wrapper_gtrxreset_seq.vhd | 342 + .../wr_gtp_phy/family7-gtp/wr_gtp_phy_family7.vhd | 521 + .../whiterabbit_gtxe2_channel_wrapper_gt.vhd | 803 + .../wr_gtp_phy/family7-gtx/wr_gtx_phy_family7.vhd | 505 + .../platform/xilinx/wr_gtp_phy/gtp_bitslide.vhd | 230 + .../xilinx/wr_gtp_phy/spartan6/gtp_phase_align.vhd | 137 + .../whiterabbitgtp_wrapper_tile_spartan6.vhd | 712 + .../wr_gtp_phy/spartan6/wr_gtp_phy_spartan6.vhd | 816 + .../platform/xilinx/wr_xilinx_pkg.vhd | 192 + .../platform/xilinx/xwrc_platform_xilinx.vhd | 1095 + .../lib/white_rabbit/wr_cores_v4_2/source.txt | 2 + 185 files changed, 324094 insertions(+) create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/Makefile.srcs create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/sdbfs/sdbfs-empty-i2c-eeprom.bin create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/sdbfs/sdbfs-svec-flash.bin create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy16.bram create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8.bram create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8.mif create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8_sim.bram create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8_sim.mif create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/common/wr_board_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/common/xwrc_board_common.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/eeprom/sfp_eeprom.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/eeprom/tb_sfp_eeprom.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/wr_fasec_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/wrc_board_fasec.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/xwrc_board_fasec.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_cfg_fifo.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_checksum.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_commit_fifo.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_rx.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_tx.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_ethernet_slave.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_fifo.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_hdr_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_internals_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_pass_fifo.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_fsm.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_top.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_narrow.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_widen.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_tag_fifo.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_tx_mux.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_wbm_fifo.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/etherbone_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_crc_gen.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_extend_pulse.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_frequency_meter.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_pulse_synchronizer.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_pulse_synchronizer2.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_reset.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_sync_ffs.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_sync_register.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gencores_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/generic_shiftreg_fifo.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/inferred_async_fifo.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/inferred_sync_fifo.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/generic/generic_async_fifo.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/generic/generic_sync_fifo.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/genram_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/memory_loader_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/gc_shiftreg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_dualclock.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_sameclock.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_split.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_simple_dpram.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/axi4_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/wb_axi4lite_bridge.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/xwb_axi4lite_bridge.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/sdb_rom.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_crossbar.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_sdb_crossbar.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_dpram/xwb_dpram.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/generated/lm32_allprofiles.v create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/generated/xwb_lm32.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/jtag_tap.v create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/lm32_multiplier.v create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/jtag_cores.v create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_adder.v create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_addsub.v create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_dp_ram.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_include.v create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_logic_op.v create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_ram.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_shifter.v create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/sockit_owm.v create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/wb_onewire_master.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/xwb_onewire_master.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_slave_adapter/wb_slave_adapter.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_spi/spi_defines.v create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_spi/timescale.v create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_wb.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_rx.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_tx.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_baud_gen.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/wb_simple_uart.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/xwb_simple_uart.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_eic.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_fifo_sync.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wishbone_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/wr_fabric_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwb_fabric_sink.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwb_fabric_source.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwrf_mux.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/dmtd_phase_meas.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/dmtd_with_deglitcher.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/pulse_stamper.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_dacs/spec_serial_dac.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_dacs/spec_serial_dac_arb.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/endpoint_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/endpoint_private_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_1000basex_pcs.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_autonegotiation.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_clock_alignment_fifo.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_crc32_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_leds_controller.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_packet_filter.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_pcs_tbi_mdio_wb.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_registers_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rtu_header_extract.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_buffer.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_crc_size_check.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_early_address_match.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_oob_insert.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_path.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_pcs_16bit.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_pcs_8bit.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_status_reg_insert.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_vlan_unit.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_wb_master.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_sync_detect.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_sync_detect_16bit.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_timestamping_unit.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_ts_counter.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_crc_inserter.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_header_processor.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_inject_ctrl.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_packet_injection.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_path.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_pcs_16bit.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_pcs_8bit.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_vlan_unit.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_wishbone_controller.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/wr_endpoint.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/xwr_endpoint.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/minic_wb_slave.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/minic_wbgen2_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/wr_mini_nic.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/xwr_mini_nic.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/pps_gen_wb.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/wr_pps_gen.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/xwr_pps_gen.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/softpll_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_aligner.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_wb_slave.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_wbgen2_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/wr_softpll_ng.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/xwr_softpll_ng.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/dropping_buffer.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/escape_detector.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/escape_inserter.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/streamers_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/streamers_priv_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/wr_streamers_wb.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/wr_streamers_wbgen2_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrtx_streamers_stats.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrx_streamer.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrx_streamers_stats.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xtx_streamer.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xtx_streamers_stats.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xwr_streamers.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_tbi_phy/disparity_gen_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wr_core.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_diags_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_diags_wb.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_periph.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_syscon_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_syscon_wb.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrcore_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/xwr_core.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/xwrc_diags_wb.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gt.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/wr_gtp_phy_family7.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtx/whiterabbit_gtxe2_channel_wrapper_gt.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtx/wr_gtx_phy_family7.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/gtp_bitslide.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/gtp_phase_align.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/whiterabbitgtp_wrapper_tile_spartan6.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/wr_gtp_phy_spartan6.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_xilinx_pkg.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/xwrc_platform_xilinx.vhd create mode 100644 fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/source.txt (limited to 'fpga/usrp3/lib/white_rabbit') diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/Makefile.srcs b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/Makefile.srcs new file mode 100644 index 000000000..fce6adefa --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/Makefile.srcs @@ -0,0 +1,176 @@ +# +# Copyright 2018 Ettus Research LLC +# + +################################################## +# White Rabbit Sources +################################################## +WHITE_RABBIT_SRCS = $(abspath $(addprefix $(BASE_DIR)/../lib/white_rabbit/wr_cores_v4_2/, \ +platform/xilinx/wr_gtp_phy/family7-gtx/whiterabbit_gtxe2_channel_wrapper_gt.vhd \ +platform/xilinx/wr_gtp_phy/spartan6/gtp_phase_align.vhd \ +platform/xilinx/wr_gtp_phy/gtp_bitslide.vhd \ +platform/xilinx/wr_gtp_phy/spartan6/whiterabbitgtp_wrapper_tile_spartan6.vhd \ +ip_cores/general-cores/modules/common/gc_reset.vhd \ +ip_cores/general-cores/modules/genrams/genram_pkg.vhd \ +ip_cores/general-cores/modules/wishbone/wishbone_pkg.vhd \ +ip_cores/etherbone-core/hdl/eb_slave_core/eb_hdr_pkg.vhd \ +modules/fabric/wr_fabric_pkg.vhd \ +ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_rx.vhd \ +ip_cores/etherbone-core/hdl/eb_slave_core/eb_internals_pkg.vhd \ +ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_widen.vhd \ +ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_fsm.vhd \ +ip_cores/etherbone-core/hdl/eb_slave_core/eb_tx_mux.vhd \ +ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_narrow.vhd \ +ip_cores/etherbone-core/hdl/eb_slave_core/eb_checksum.vhd \ +modules/wr_streamers/escape_detector.vhd \ +modules/wr_streamers/dropping_buffer.vhd \ +modules/wr_streamers/escape_inserter.vhd \ +modules/wr_softpll_ng/softpll_pkg.vhd \ +modules/wrc_core/wrc_diags_pkg.vhd \ +modules/wrc_core/wrc_syscon_pkg.vhd \ +modules/wr_endpoint/endpoint_pkg.vhd \ +modules/wrc_core/wrcore_pkg.vhd \ +modules/wr_streamers/streamers_pkg.vhd \ +modules/wr_streamers/xrx_streamers_stats.vhd \ +modules/wr_streamers/xtx_streamers_stats.vhd \ +modules/timing/pulse_stamper.vhd \ +modules/wr_streamers/wr_streamers_wbgen2_pkg.vhd \ +modules/wr_streamers/streamers_priv_pkg.vhd \ +modules/wr_streamers/xrtx_streamers_stats.vhd \ +modules/wr_streamers/wr_streamers_wb.vhd \ +modules/wr_pps_gen/pps_gen_wb.vhd \ +ip_cores/general-cores/modules/common/gencores_pkg.vhd \ +ip_cores/general-cores/modules/common/gc_pulse_synchronizer2.vhd \ +modules/wr_softpll_ng/spll_aligner.vhd \ +modules/wr_endpoint/ep_registers_pkg.vhd \ +modules/wr_endpoint/endpoint_private_pkg.vhd \ +modules/wr_endpoint/ep_leds_controller.vhd \ +modules/wr_endpoint/ep_sync_detect.vhd \ +modules/wr_endpoint/ep_sync_detect_16bit.vhd \ +ip_cores/general-cores/modules/common/gc_extend_pulse.vhd \ +modules/wr_endpoint/ep_pcs_tbi_mdio_wb.vhd \ +modules/wr_endpoint/ep_autonegotiation.vhd \ +modules/wr_endpoint/ep_tx_packet_injection.vhd \ +modules/wr_endpoint/ep_tx_inject_ctrl.vhd \ +modules/wr_endpoint/ep_tx_header_processor.vhd \ +modules/wr_endpoint/ep_rx_vlan_unit.vhd \ +ip_cores/general-cores/modules/genrams/xilinx/gc_shiftreg.vhd \ +ip_cores/general-cores/modules/genrams/common/generic_shiftreg_fifo.vhd \ +ip_cores/general-cores/modules/common/gc_pulse_synchronizer.vhd \ +ip_cores/general-cores/modules/common/gc_sync_register.vhd \ +modules/wr_endpoint/ep_rx_oob_insert.vhd \ +ip_cores/general-cores/modules/common/gc_crc_gen.vhd \ +modules/wr_endpoint/ep_crc32_pkg.vhd \ +modules/wr_endpoint/ep_rx_crc_size_check.vhd \ +modules/wr_endpoint/ep_rtu_header_extract.vhd \ +modules/wr_endpoint/ep_rx_status_reg_insert.vhd \ +modules/wr_endpoint/ep_rx_wb_master.vhd \ +modules/wr_endpoint/ep_ts_counter.vhd \ +modules/wr_endpoint/ep_wishbone_controller.vhd \ +ip_cores/general-cores/modules/common/gc_sync_ffs.vhd \ +ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_pkg.vhd \ +ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_eic.vhd \ +modules/wr_mini_nic/minic_wbgen2_pkg.vhd \ +modules/wr_mini_nic/minic_wb_slave.vhd \ +ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_addsub.v \ +ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_logic_op.v \ +ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/lm32_multiplier.v \ +ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_shifter.v \ +ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_adder.v \ +ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/jtag_tap.v \ +ip_cores/general-cores/modules/wishbone/wb_lm32/src/jtag_cores.v \ +ip_cores/general-cores/modules/genrams/memory_loader_pkg.vhd \ +ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_split.vhd \ +ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_sameclock.vhd \ +ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_dualclock.vhd \ +ip_cores/general-cores/modules/genrams/xilinx/generic_dpram.vhd \ +ip_cores/general-cores/modules/genrams/xilinx/generic_simple_dpram.vhd \ +ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_dp_ram.vhd \ +ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_ram.vhd \ +ip_cores/general-cores/modules/wishbone/wb_lm32/generated/lm32_allprofiles.v \ +modules/wrc_core/wrc_syscon_wb.vhd \ +ip_cores/general-cores/modules/genrams/common/inferred_sync_fifo.vhd \ +ip_cores/general-cores/modules/genrams/generic/generic_sync_fifo.vhd \ +ip_cores/general-cores/modules/wishbone/wb_uart/uart_baud_gen.vhd \ +ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_tx.vhd \ +ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_rx.vhd \ +ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_pkg.vhd \ +ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_wb.vhd \ +ip_cores/general-cores/modules/wishbone/wb_onewire_master/sockit_owm.v \ +modules/wrc_core/wrc_diags_wb.vhd \ +ip_cores/general-cores/modules/wishbone/wb_slave_adapter/wb_slave_adapter.vhd \ +ip_cores/general-cores/modules/wishbone/wb_crossbar/sdb_rom.vhd \ +ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_crossbar.vhd \ +ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_sdb_crossbar.vhd \ +modules/fabric/xwrf_mux.vhd \ +ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/axi4_pkg.vhd \ +ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/xwb_axi4lite_bridge.vhd \ +ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/wb_axi4lite_bridge.vhd \ +board/eeprom/sfp_eeprom.vhd \ +platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq.vhd \ +platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gt.vhd \ +platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper.vhd \ +modules/wr_tbi_phy/disparity_gen_pkg.vhd \ +platform/xilinx/wr_gtp_phy/family7-gtp/wr_gtp_phy_family7.vhd \ +platform/xilinx/wr_gtp_phy/family7-gtx/wr_gtx_phy_family7.vhd \ +platform/xilinx/wr_gtp_phy/spartan6/wr_gtp_phy_spartan6.vhd \ +platform/xilinx/wr_xilinx_pkg.vhd \ +platform/xilinx/xwrc_platform_xilinx.vhd \ +modules/fabric/xwb_fabric_sink.vhd \ +modules/wr_streamers/xrx_streamer.vhd \ +modules/fabric/xwb_fabric_source.vhd \ +modules/wr_streamers/xtx_streamer.vhd \ +modules/wr_streamers/xwr_streamers.vhd \ +modules/wr_pps_gen/wr_pps_gen.vhd \ +modules/wr_pps_gen/xwr_pps_gen.vhd \ +ip_cores/general-cores/modules/common/gc_frequency_meter.vhd \ +ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_fifo_sync.vhd \ +modules/wr_softpll_ng/spll_wbgen2_pkg.vhd \ +modules/wr_softpll_ng/spll_wb_slave.vhd \ +modules/timing/dmtd_with_deglitcher.vhd \ +modules/timing/dmtd_phase_meas.vhd \ +modules/wr_endpoint/ep_rx_pcs_8bit.vhd \ +modules/wr_endpoint/ep_rx_pcs_16bit.vhd \ +modules/wr_endpoint/ep_tx_vlan_unit.vhd \ +modules/wr_endpoint/ep_tx_crc_inserter.vhd \ +modules/wr_endpoint/ep_tx_path.vhd \ +modules/wr_endpoint/ep_rx_buffer.vhd \ +modules/wr_endpoint/ep_packet_filter.vhd \ +modules/wr_endpoint/ep_rx_early_address_match.vhd \ +ip_cores/general-cores/modules/genrams/common/inferred_async_fifo.vhd \ +ip_cores/general-cores/modules/genrams/generic/generic_async_fifo.vhd \ +modules/wr_endpoint/ep_clock_alignment_fifo.vhd \ +modules/wr_endpoint/ep_rx_path.vhd \ +modules/wr_endpoint/ep_timestamping_unit.vhd \ +modules/wr_mini_nic/wr_mini_nic.vhd \ +modules/wr_mini_nic/xwr_mini_nic.vhd \ +ip_cores/general-cores/modules/wishbone/wb_dpram/xwb_dpram.vhd \ +ip_cores/general-cores/modules/wishbone/wb_uart/wb_simple_uart.vhd \ +ip_cores/general-cores/modules/wishbone/wb_uart/xwb_simple_uart.vhd \ +ip_cores/general-cores/modules/wishbone/wb_onewire_master/wb_onewire_master.vhd \ +ip_cores/general-cores/modules/wishbone/wb_onewire_master/xwb_onewire_master.vhd \ +modules/wrc_core/xwrc_diags_wb.vhd \ +modules/wrc_core/wrc_periph.vhd \ +ip_cores/etherbone-core/hdl/eb_slave_core/eb_fifo.vhd \ +ip_cores/etherbone-core/hdl/eb_slave_core/eb_wbm_fifo.vhd \ +ip_cores/etherbone-core/hdl/eb_slave_core/eb_commit_fifo.vhd \ +ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_tx.vhd \ +modules/wr_softpll_ng/wr_softpll_ng.vhd \ +modules/wr_softpll_ng/xwr_softpll_ng.vhd \ +modules/wr_endpoint/ep_tx_pcs_8bit.vhd \ +modules/wr_endpoint/ep_tx_pcs_16bit.vhd \ +modules/wr_endpoint/ep_1000basex_pcs.vhd \ +modules/wr_endpoint/wr_endpoint.vhd \ +modules/wr_endpoint/xwr_endpoint.vhd \ +ip_cores/etherbone-core/hdl/eb_slave_core/eb_tag_fifo.vhd \ +ip_cores/etherbone-core/hdl/eb_slave_core/eb_pass_fifo.vhd \ +ip_cores/etherbone-core/hdl/eb_slave_core/eb_cfg_fifo.vhd \ +ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_top.vhd \ +ip_cores/etherbone-core/hdl/eb_slave_core/etherbone_pkg.vhd \ +ip_cores/etherbone-core/hdl/eb_slave_core/eb_ethernet_slave.vhd \ +ip_cores/general-cores/modules/wishbone/wb_lm32/generated/xwb_lm32.vhd \ +modules/wrc_core/wr_core.vhd \ +modules/wrc_core/xwr_core.vhd \ +board/common/wr_board_pkg.vhd \ +board/common/xwrc_board_common.vhd \ +)) diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/sdbfs/sdbfs-empty-i2c-eeprom.bin b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/sdbfs/sdbfs-empty-i2c-eeprom.bin new file mode 100644 index 000000000..825733426 Binary files /dev/null and b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/sdbfs/sdbfs-empty-i2c-eeprom.bin differ diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/sdbfs/sdbfs-svec-flash.bin b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/sdbfs/sdbfs-svec-flash.bin new file mode 100644 index 000000000..0da8a2b8e Binary files /dev/null and b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/sdbfs/sdbfs-svec-flash.bin differ diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy16.bram b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy16.bram new file mode 100644 index 000000000..05fabcd35 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy16.bram @@ -0,0 +1,32768 @@ +10011000000000000000000000000000 +11010000000000000000000000000000 +11010000001000000000000000000000 +01111000000000010000000000000000 +00111000001000010000000000000000 +11010000111000010000000000000000 +11111000000000000000000000111010 +00110100000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +01010111010100100101000001000011 +00101101001011010010110100101101 +00000001001000110100010101100111 +10001001101010111100110111101111 +00000000000000011011111111001000 +00000000000000000000000000000000 +00000000000000011001100000011000 +00000000000000011010110101110100 +00000000000000000000000000000000 +00000010000101000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +01011011100111010000000000000000 +11111000000000000000000000011110 +00110100000000010000000000000010 +11111000000000000101000110011011 +11100000000000000000000000101110 +00110100000000000000000000000000 +00110100000000000000000000000000 +00110100000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +10011000000000000000000000000000 +01111000000111000000000000000001 +00111011100111001111111111111100 +01111000000000010000000000000001 +00111000001000011011000010100000 +00110100000000100000000000000000 +01111000000000110000000000000001 +00111000011000111100001010111000 +11001000011000010001100000000000 +11111000000000000101100000000111 +00110100000000010000000000000000 +00110100000000100000000000000000 +00110100000000110000000000000000 +11111000000000000000000100001001 +11100000000000000000000000000000 +00110111100111001111111111000100 +01011011100000010000000000000100 +01011011100000100000000000001000 +01011011100000110000000000001100 +01011011100001000000000000010000 +01011011100001010000000000010100 +01011011100001100000000000011000 +01011011100001110000000000011100 +01011011100010000000000000100000 +01011011100010010000000000100100 +01011011100010100000000000101000 +01011011100111100000000000110100 +01011011100111110000000000111000 +00101011100000010000000000111100 +01011011100000010000000000110000 +10111011100000000000100000000000 +00110100001000010000000000111100 +01011011100000010000000000101100 +11000011101000000000000000000000 +00101011100000010000000000000100 +00101011100000100000000000001000 +00101011100000110000000000001100 +00101011100001000000000000010000 +00101011100001010000000000010100 +00101011100001100000000000011000 +00101011100001110000000000011100 +00101011100010000000000000100000 +00101011100010010000000000100100 +00101011100010100000000000101000 +00101011100111010000000000110000 +00101011100111100000000000110100 +00101011100111110000000000111000 +00101011100111000000000000101100 +00110100000000000000000000000000 +11000011110000000000000000000000 +10010000000000000001000000000000 +00110100000000011111111111111110 +10100000010000010000100000000000 +11010000000000010000000000000000 +10010000001000000001000000000000 +00110100000000011111111111111110 +10100000010000010000100000000000 +11010000001000010000000000000000 +11000011101000000000000000000000 +10010000000000000001000000000000 +00110100000000011111111111111110 +10100000010000010000100000000000 +11010000000000010000000000000000 +10010000001000000001000000000000 +00111000010000100000000000000001 +11010000001000100000000000000000 +00111000001000010000000000000001 +11010000000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +11111000000000000011110110000011 +01111000000000100000000000000001 +01111000000000110000000000000001 +00111000011000111011000010110100 +00111000010000101011000010111000 +00101000011001000000000000000000 +00101000010001010000000000000000 +01011000011000010000000000000000 +00110100000000110000001111101000 +11001000101001000010000000000000 +10110100100000010010000000000000 +01011000010001000000000000000000 +00110100000000010000000000000000 +01010000011001000000000000001001 +01111000000000010000000000000000 +00111000001000010000000010100000 +00110100100001001111110000011000 +01011000010001000000000000000000 +00101000001000100000000000000000 +00110100010000100000000000000001 +01011000001000100000000000000000 +00110100000000010000000000000001 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +11111000000000000011110101101000 +01111000000000100000000000000001 +00111000010000101011000010110100 +01011000010000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100111010000000000000100 +11111000000000000011111011011111 +11111000000000000011100001001101 +01111000000000010000000000000001 +00111000001000010110011100010000 +11111000000000000011011101101111 +00110100000000010000000000000001 +11111000000000000011110101000111 +01111000000000010000000000000001 +00111000001000011100001001110100 +11111000000000000011110100101001 +11111000000000000100100000001000 +11111000000000000100101000101101 +01111000000000010000000000000001 +00111000001000011100000111100000 +01011000001000000000000000000000 +11111000000000000100100101010011 +11111000000000000100000001010100 +00110100000000010000000000000000 +11111000000000000011101101101100 +00110100000000010000000000000000 +00110100000000100000000001010000 +11111000000000000100010000000011 +00110111100000100000000000001000 +00110100000000010000000000000000 +11111000000000000100010011001100 +00110100000000101111111111111111 +01011100001000100000000000000110 +01111000000000010000000000000001 +00111000001000010110011100101100 +11111000000000000011011101010110 +00110100000000010000000000100010 +00110011100000010000000000001000 +01000011100001000000000000001010 +01000011100001010000000000001011 +01000011100001100000000000001100 +01000011100001110000000000001101 +01000011100000110000000000001001 +01000011100000100000000000001000 +01111000000000010000000000000001 +00111000001000010110011101010000 +11111000000000000011011101001011 +11111000000000000011110110110101 +00110111100000010000000000001000 +11111000000000000011100101010000 +00110100000000010000000011001000 +11111000000000000011110100110111 +00110100000000100000000000000001 +00110100000000010000000000000001 +11111000000000000011100010011101 +11111000000000000011101110000000 +11111000000000000100000111100011 +11111000000000000000010000101110 +01111000000000100000000000000001 +00111000010000101001011011110000 +00110100000000010000000000000010 +11111000000000000011111110111001 +11111000000000000101000110110001 +11111000000000000010101101010001 +11111000000000000010001100100010 +01111000000000110000000000000001 +00111000011000111000111010110100 +01111000000000010000000000000001 +00101000011000100000000000000000 +00111000001000011011000010100000 +01011000001000000000000000000000 +01111000000000010000000000000001 +00111000001000011111100000000000 +01011000001000100000000000000000 +00110100000000010000000000000011 +11111000000000000000010001111101 +11111000000000000000010000110000 +01111000000000100000000000000001 +00111000010000101011000010101000 +00110100000000010000000000000000 +11111000000000000100001000011010 +11111000000000000011110100010100 +01111000000000100000000000000001 +00111000010000101011000010101100 +01011000010000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00110100000000010000000000000000 +11111000000000000011100010101001 +10111000001000000101100000000000 +01111000000000010000000000000001 +00111000001000011011000010110000 +00101000001001000000000000000000 +01111101011000100000000000000000 +01100100100000110000000000000000 +10100000010000110001100000000000 +01000100011000000000000000001101 +01111000000000010000000000000001 +00111000001000011100001010011100 +00101000001000010000000000000000 +00110100000000100000000000000010 +01011000001000100000000000000100 +11111000000000000011110111011100 +11111000000000000000010000010001 +01111000000000010000000000000001 +00111000001000011100001010010100 +00110100000000100000000000000001 +01011000001000100000000000000000 +11100000000000000000000000010100 +01100101011000010000000000000000 +01111100100001000000000000000000 +10100000001001000000100000000000 +01000100001000110000000000010010 +01111000000000010000000000000001 +00111000001000011100001010011100 +00101000001000010000000000000000 +00110100000000100000000000000010 +01011000001000100000000000001000 +01111000000000010000000000000001 +00111000001000011100001010010100 +01011000001000100000000000000000 +11111000000000000000010000100101 +00110100000000010000000000000010 +00110100000000100000000000000000 +00110100000000110000000000000001 +11111000000000000101000101111001 +00110100000000010000000000000000 +11111000000000000100001000010111 +00110100000000010000000000000001 +11100000000000000000000000001000 +11111100010000010001000000000000 +01111000000000010000000000000001 +11001000000000100001000000000000 +00111000001000011100001010010100 +00100000010000100000000000000011 +01011000001000100000000000000000 +00110100000000010000000000000000 +01111000000000100000000000000001 +00111000010000101011000010110000 +01011000010010110000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011011000010100000 +00101000001000100000000000000000 +00110100000000010000000000000001 +01011100010000010000000000001111 +11111000000000000001111111111100 +10111000001000000101100000000000 +11111000000000000011011111100100 +00110100000000100000000000011011 +01000100001000100000000000000101 +01111000000000100000000000000001 +00111000010000101001011011101000 +00101000010000010000000000000000 +01011100001000000000000000001000 +11111000000000000010001010111101 +01111000000000100000000000000001 +00111000010000101011000010100000 +01011000010000000000000000000000 +11100000000000000000000000000011 +11111000000000000010001011000010 +10111000001000000101100000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111001000 +01011011100010110000000000110100 +01011011100011000000000000110000 +01011011100011010000000000101100 +01011011100011100000000000101000 +01011011100011110000000000100100 +01011011100100000000000000100000 +01011011100100010000000000011100 +01011011100100100000000000011000 +01011011100100110000000000010100 +01011011100101000000000000010000 +01011011100101010000000000001100 +01011011100101100000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +01111000000011000000000000000001 +11111000000000000101001111100110 +00111001011010111010111011011100 +00111001100011001011000010011100 +11100000000000000000000000000101 +00101001011000010000000000001000 +01000100001000000000000000000010 +11011000001000000000000000000000 +00110101011010110000000000100000 +01010101100010111111111111111100 +01111000000010110000000000000001 +01111000000000010000000000000001 +00111001011010111010111011011100 +01111000000101000000000000000001 +01111000000100000000000000000001 +00111000001000011000111010111000 +01111000000011110000000000000001 +01111000000011100000000000000001 +01111000000100100000000000000001 +01111000000100010000000000000001 +00111010100101001011000010011100 +00111010000100001011000010101000 +00101000001100110000000000000000 +00111001111011111011000010101100 +00111001110011101011000010100100 +00111010010100100110011110111000 +00111010001100010110011110000100 +10111001011000001010100000000000 +11100000000000000000000000111100 +00101001011000010000000000001100 +01011100001000000000000000000101 +00101001011000010000000000010000 +00110100001000010000000000000001 +01011001011000010000000000010000 +11100000000000000000000000001011 +00101001011000100000000000000100 +01000100010000000000000000000011 +00101000010000100000000000000000 +01000100010000000000000000000111 +11011000001000000000000000000000 +00101001011000100000000000010000 +10111001011000000110000000000000 +10110100010000010001000000000000 +01011001011000100000000000010000 +01011100001000000000000000000010 +10111010101000000110000000000000 +00110111100000100000000000111000 +00110100000000010000000000000000 +11111000000000000100000101111010 +11111000000000000011110001110100 +10111000001000001011000000000000 +00101010000000100000000000000000 +00101011100000010000000000111000 +11001000001000100001000000000000 +01001100010000000000000000000010 +10110100010100110001000000000000 +00101001100000110000000000011000 +10110100010000110001000000000000 +01011001100000100000000000011000 +01010010011000100000000000000110 +11001000010100110001000000000000 +01011001100000100000000000011000 +00101001100000100000000000010100 +00110100010000100000000000000001 +01011001100000100000000000010100 +00101001111011010000000000000000 +01011010000000010000000000000000 +11001010110011010110100000000000 +01001101101000000000000000000010 +00110101101011010000001111101000 +00101001100000110000000000011100 +01010000011011010000000000001000 +00101001110000010000000000000000 +01000100001000000000000000000101 +00101001100000100000000000000000 +10111010001000000000100000000000 +10111001101000000010000000000000 +11111000000000000011011001101100 +01011001100011010000000000011100 +00101001110000010000000000000000 +01000100001000000000000000000110 +01010000001011010000000000000101 +00101001100000100000000000000000 +10111010010000000000100000000000 +10111001101000000001100000000000 +11111000000000000011011001100100 +01011001111101100000000000000000 +00110101011010110000000000100000 +01010110100010111111111111000101 +11111000000000000101001110001101 +10111010101000000101100000000000 +11100011111111111111111111111101 +00110111100111001111111111000000 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01011011100000110000000000101100 +01111000000000110000000000000001 +00111000011000111011000010111100 +01011011100000100000000000101000 +01011011100001000000000000110000 +01011011100001010000000000110100 +01011011100001100000000000111000 +01011011100001110000000000111100 +01011011100010000000000001000000 +00101000011011010000000000000000 +10111000001000000101100000000000 +10111000010000000111000000000000 +00110100000000110000000000000000 +01000100001000000000000000000010 +00101000001000110000000000011100 +10111000011011010001100000000000 +00000000011000110000000000011100 +01000100011000000000000000011110 +01111000000011000000000000000001 +00111001100011001011000010111100 +00111001101000010000000000000001 +01011001100000010000000000000000 +00101001011000010000000000111000 +00110111100000100000000000011000 +00101000001000110000000000000000 +10111001011000000000100000000000 +11011000011000000000000000000000 +01011001100011010000000000000000 +00101011100001000000000000100000 +00101111100000110000000000100100 +00101001011010110000001111010100 +00111100100001000000000000010000 +01111000000011000000000000000001 +10111000100000110000100000000000 +01111000000000110000000000000001 +00111000011000111000111010111100 +00101000011000100000000000000000 +00111001100011000110100000000100 +11111000000000000101010100110111 +00101011100000110000000000011100 +10111000001000000010000000000000 +10111001011000000001000000000000 +10111001100000000000100000000000 +11111000000000000011011000101100 +10111001110000000000100000000000 +00110111100000100000000000101100 +11111000000000000011011000000111 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000001000000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000010000000010100000000000 +01011100011000000000000000000101 +01111000000000100000000000000001 +00111000010000100110100000100000 +10111000101000000001100000000000 +11100000000000000000000000001100 +00110100000000100000000000000001 +01011100011000100000000000000110 +01111000000000100000000000000001 +00111000010000100110100000111100 +10111000101000000001100000000000 +00101000001001000000000000001000 +11100000000000000000000000000101 +00101000001001000000000000000100 +01111000000000100000000000000001 +00111000010000100110100001010100 +10111000101000000001100000000000 +11111011111111111111111110110001 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111011100 +01011011100010110000000000100100 +01011011100011000000000000100000 +01011011100011010000000000011100 +01011011100011100000000000011000 +01011011100011110000000000010100 +01011011100100000000000000010000 +01011011100111010000000000001100 +10111000001000000101100000000000 +10111000010000000111000000000000 +10111000011000000110100000000000 +01001100000000110000000010110110 +01000000010000110000000000000000 +00101000001010000000000100001100 +00101000001010010000000100001000 +00100000011000110000000000001111 +00101000001001100000000100000100 +01011011100000110000000000000100 +00001000011000110000000000001100 +01111000000000100000000000000001 +00000001000001110000000000010000 +00111000010000101001011101011000 +00100001000010001111111111111111 +10110100010000110001000000000000 +00001001000010000000001111101000 +00101000010000100000000000000000 +00111101001010010000000000010000 +01111000000001000000000000000001 +00000001000010000000000000010000 +01011011100000100000000000001000 +00110100000000110000000000000001 +00110100000000100000000000000101 +00111000100001000110100001101100 +10111001101000000010100000000000 +10111001001001110011100000000000 +11111000000000000000000010100010 +00110100000000010000000000100001 +01001100001011010000000010011100 +01000001110000010000000000000000 +00110100000000100000000000001101 +00100000001000010000000000001111 +01001000001000100000000000010000 +00111100001000010000000000000010 +01111000000000100000000000000001 +00111000010000101000111110010000 +10110100010000010001000000000000 +00101000010000010000000000000000 +01001000001011010000000000001010 +01000001110000100000000000000001 +00110100000000010000000000000010 +00100000010000100000000000001111 +01011100010000010000000000000110 +10111001011000000000100000000000 +10111001110000000001000000000000 +10111001101000000001100000000000 +11111000000000000001011111010010 +01000100001000000000000000000011 +00110100000011010000000000000000 +00110100000011100000000000000000 +00101001011011000000000000010000 +01011001011000000000000000001100 +00101001011000010000000000000000 +01000101100000000000000000000011 +00101001100000100000000000000000 +01000100010000010000000000010011 +00110100000000100000000000000001 +01111000000011000000000000000001 +01011001011000100000000000001100 +00111001100011001001110110011000 +11100000000000000000000000000110 +01011100010000010000000000000100 +01011001011011000000000000010000 +01011101100000000000000000001011 +11100000000000000000000000000100 +00110101100011000000000000001100 +00101001100000100000000000000000 +01011100010000001111111111111010 +00101001011000100000001111010100 +01111000000000010000000000000001 +00111000001000010110100010011100 +11111000000000000011010110111010 +00110100000000010010011100010000 +11100000000000000000000001100110 +01011001011000010000000000000100 +00101001011000010000000000001100 +01011001011000000000000000001000 +01000100001000000000000000000110 +00101001100000100000000000000100 +10111001011000000000100000000000 +00110100000000110000000000000000 +10111001101000000010000000000000 +11111011111111111111111110001110 +01000101110000000000000000110011 +00101001011000010000000000110000 +01000001011001010000001110100110 +00101000001000010000000000001100 +01000000001000010000000000011110 +01000100001001010000000000001000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000110100010111100 +11111000000000000000000001011110 +11100000000000000000000000100101 +01000001011100000000001110100111 +00100010000100000000000000000001 +01000110000000000000000000000111 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000110100011011000 +11100000000000000000000000001100 +00101001011000100000001101011000 +00110101011011110000001111000000 +10111001111000000000100000000000 +00110100000000110000000000001010 +11111000000000000101010100100111 +01011100001100000000000000001000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000110100011110100 +11111000000000000000000001001000 +11100000000000000000000000001111 +01000001011000100000001110100001 +00110100000000010000000000001011 +01011100010000010000000000001110 +00101001011000100000001101011000 +10111001111000000000100000000000 +00110100000000110000000000001000 +11111000000000000101010100011000 +01011100001000000000000000001001 +00101001011000010000001101011000 +00101101011000100000001111001000 +00101100001000010000000000001000 +01010000010000010000000000000011 +00110100000000010000000000000111 +01011001011000010000000000000100 +00110100000011010000000000000000 +00110100000011100000000000000000 +00101001011000010000000000000100 +00101001011000100000000000000000 +01011100010000010000000000010011 +01011101101000000000000000000011 +00110100000000010000000000001111 +00110001011000010000001110100001 +00101001100001000000000000001000 +10111001101000000001100000000000 +10111001011000000000100000000000 +10111001110000000001000000000000 +11011000100000000000000000000000 +10111000001000000001100000000000 +01000100001000000000000000000110 +00101001011000100000001111010100 +00101001100001000000000000000100 +01111000000000010000000000000001 +00111000001000010110100100001100 +11111000000000000011010101101010 +00101001011000010000000000000100 +00101001011000100000000000000000 +01000100010000010000000000001111 +01011001011000010000000000000000 +10111001011000000000100000000000 +11111000000000000000000011100110 +01000001011000010000000000100000 +00101001011000100000000000010000 +00110100000000110000000000000010 +00100000001000010000000011111001 +00110001011000010000000000100000 +00101000010000100000000000000100 +10111001011000000000100000000000 +00110100000001000000000000000000 +11111011111111111111111100111010 +00110100000000010000000000000000 +11100000000000000000000000000111 +00101001100000100000000000000100 +10111001011000000000100000000000 +00110100000000110000000000000001 +00110100000001000000000000000000 +11111011111111111111111100110011 +00101001011000010000000000001000 +00101011100111010000000000001100 +00101011100010110000000000100100 +00101011100011000000000000100000 +00101011100011010000000000011100 +00101011100011100000000000011000 +00101011100011110000000000010100 +00101011100100000000000000010000 +00110111100111000000000000100100 +11000011101000000000000000000000 +00110100000000010000000000000000 +00110100000011010000000000000000 +00110100000011100000000000000000 +11100011111111111111111101100110 +00110111100111001111111111100100 +01011011100010110000000000001000 +01011011100111010000000000000100 +01011011100001000000000000001100 +01011011100001010000000000010000 +10111000100000000101100000000000 +01011011100001100000000000010100 +01111000000001000000000000000001 +01011011100001110000000000011000 +01011011100010000000000000011100 +00111000100001000110100100101000 +00110100000001010000000000000000 +01000100001000000000000000000011 +00101000001001000000001111010100 +00101000001001010000000000011100 +01111000000001100000000000000001 +00111000110001101011000010111100 +00101000110000010000000000000000 +00111100010000100000000000000010 +10111000101000010010100000000000 +10000000101000100010100000000000 +00100000101001010000000000001111 +01010100011001010000000000001100 +01111000000001010000000000000001 +00111000101001011000111111011000 +10110100101000100010100000000000 +01111000000001100000000000000001 +00101000101000100000000000000000 +10111000110000000000100000000000 +00111000001000010110100100110000 +11111000000000000011010100100111 +10111001011000000000100000000000 +00110111100000100000000000010000 +11111000000000000011010100000010 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00110100000000100000000000011100 +10111000001000000001100000000000 +00110100000010110000000000000000 +00110100000001011111111111111100 +00110100000001000000000000000011 +11100000000000000000000000001001 +00110100001000011111111111010000 +00100000001001100000000011111111 +01010000100001100000000000000010 +11100000000000000000000000001000 +10111100001000100000100000000000 +00110100011000110000000000000001 +10111001011000010101100000000000 +00110100010000101111111111111100 +01000000011000010000000000000000 +01000100001000000000000000000111 +01011100010001011111111111110110 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000010110100100111100 +00111000010000101000111111001000 +11111000000000000011010100000111 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00101000001001000000001101011000 +01111000000000100000000000000001 +00111000010000101001011011111000 +00010000100000110000000000001010 +00110100000001010000000000000001 +00101000001000010000000000110000 +01011000010000110000000000001000 +00110100011000110000000000001100 +10111100101000110001100000000000 +00101000001000010000000000010000 +01011000010000110000000000111000 +00010000100000110000000000001101 +00101100001000010000000000000000 +01011000010000110000000000010100 +00010000100000110000000000001011 +01000000100001000000000000001100 +00110100001000010000000000000001 +01011000010000110000000000101100 +10111100100000110010000000000000 +00001000100001000000001111101000 +01011000010001000000000000100000 +00110100000001000000001111101000 +10111100100000110001100000000000 +10001000001000110001100000000000 +01011000010000110000000001000100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000110100000000000 +00101000001000100000000000111000 +10111000011000000110000000000000 +10111000001000000101100000000000 +00101000010000110000000000011000 +10111001100000000001000000000000 +11011000011000000000000000000000 +00110101101000100000000011010110 +00111100010000100000000000000010 +00001001101011010000000000001100 +10110101011000100001000000000000 +01011000010000010000000000000100 +01111000000000010000000000000001 +00111000001000011001011011111000 +10110100001011010110100000000000 +00101001101001010000000000000000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000110 +00110100000000110000000000000011 +00111000100001000110100110101100 +10111001100000000011000000000000 +11111011111111111111111110000111 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000110000000000000 +10111000001000000110100000000000 +00001001100000010000000000001100 +01111000000000100000000000000001 +01111000000000110000000000000001 +00111000010000101001011011111000 +00111000011000111011000011000000 +10110100010000010001000000000000 +00101000011000010000000000000000 +00101000010001000000000000001000 +01011100001000000000000000000101 +00101001101000010000000000110000 +00101000001000010000000000001100 +00101000001000010000000000001000 +01011000011000010000000000000000 +01111000000000110000000000000001 +01111000000000010000000000000001 +00111000011000111011000011000000 +00111000001000011000111011000000 +00101000011000100000000000000000 +00101000001001010000000000000000 +00110100000010110000000000011001 +10001000010001010001000000000000 +00110100010000100011000000111001 +00000000010000010000000000010000 +10001000010001010001000000000000 +00100000001000010000011111111111 +00110100010000100011000000111001 +01011000011000100000000000000000 +00111100001000110000000000001010 +00000000010000010000000000010000 +00110100100000100000000000000100 +00100000001000010000001111111111 +10011000001000110000100000000000 +00001001100000110000000000001100 +10111101011000100101100000000000 +01111000000000100000000000000001 +00111000010000101001011011111000 +10110100010000110001000000000000 +00101000010000100000000000000100 +00110100000000110000000000000001 +01000100010000110000000000000101 +00110100000000110000000000000010 +01000100010000110000000000001000 +01011100010000000000000000001100 +11100000000000000000000000001010 +10111001011000000001000000000000 +00111101011010110000000000000001 +11111000000000000101001111110011 +10110100001010110101100000000000 +11100000000000000000000000000110 +00001001011000100000000000000101 +11111000000000000101001111101111 +10111000001000000101100000000000 +11100000000000000000000000000010 +10111000100000000101100000000000 +10111001101000000000100000000000 +10111001100000000001000000000000 +10111001011000000001100000000000 +11111011111111111111111110011110 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00110100000010110000000000000000 +10111000001000000110000000000000 +00110100000011010000000000001000 +10111001011000000001000000000000 +10111001100000000000100000000000 +00110101011010110000000000000001 +11111011111111111111111110101110 +01011101011011011111111111111100 +10111001100000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000010100 +11111011111111111111111110000111 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000010000000110000000000000 +00101000001000100000000000111000 +10111000001000000101100000000000 +00101000010000110000000000011000 +00110100000000100000000000000000 +11011000011000000000000000000000 +00110101100000100000000011010110 +00111100010000100000000000000010 +10110101011000100001000000000000 +00101000010000100000000000000100 +11001000001000100001000000000000 +00110100000000010000000000000000 +01001000000000100000000000001101 +00001001100011000000000000001100 +01111000000000010000000000000001 +00111000001000011001011011111000 +10110100001011000110000000000000 +00101001100001010000000000000000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000110 +00110100000000110000000000000001 +00111000100001000110100111000100 +11111011111111111111111100000111 +00110100000000010000000000000001 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000010000000110000000000000 +00101000001000100000000000111000 +10111000001000000101100000000000 +00101000010000110000000000011000 +00110100000000100000000000000000 +11011000011000000000000000000000 +00110101100000100000000011010110 +00111100010000100000000000000010 +10110101011000100101100000000000 +00101001011000100000000000000100 +11001000010000010000100000000000 +10100100001000000001000000000000 +00010100010000100000000000011111 +10100000001000100000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000110100000000000 +00101000001000100000000000111000 +10111000001000000101100000000000 +10111000011000000110000000000000 +00101000010001000000000000011000 +00110100000000100000000000000000 +11011000100000000000000000000000 +00110101101000100000000011010110 +00110101100000110000000011010110 +00111100011000110000000000000010 +00111100010000100000000000000010 +10110101011000100001000000000000 +10110101011000110101100000000000 +00101000010000100000000000000100 +00101001011000110000000000000100 +11001000010000010001000000000000 +11001000011000010000100000000000 +01001100010000010000000000000010 +10111000010000000000100000000000 +10100100001000000001000000000000 +00010100010000100000000000011111 +10100000001000100000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000111000000000000 +00101000001000100000000000111000 +10111000001000000101100000000000 +10111000011000000110100000000000 +00101000010001010000000000011000 +00110100000000100000000000000000 +10111000100000000110000000000000 +11011000101000000000000000000000 +00110101110000100000000011010110 +00110101101000110000000011010110 +00111100010000100000000000000010 +00111100011000110000000000000010 +10110101011000100001000000000000 +10110101011000110001100000000000 +00101000010001010000000000000100 +00101000011000100000000000000100 +11001000101000010010100000000000 +11001000010000010001000000000000 +01001100101000100000000000000010 +10111000101000000001000000000000 +00110101100001000000000011010110 +00111100100001000000000000000010 +10110101011001000101100000000000 +00101001011000110000000000000100 +11001000011000010000100000000000 +01001100001000100000000000000010 +10111000001000000001000000000000 +10100100010000000000100000000000 +00010100001000010000000000011111 +10100000010000010000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000110000000000000001 +00110100000000010000000000000011 +00110100000000100000000000000000 +11111000000000000100111001011110 +00110100000000010000000000000000 +00110100000000100000000000000001 +11111000000000000100111111111001 +11111000000000000011101110000010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00110100000000010000000000000000 +10111000010000000110000000000000 +11111000000000000100111100011001 +01000101100000000000000000000101 +01100100001000100000000000000000 +11001000000000100001000000000000 +00111000010000100000000000000001 +11100000000000000000000000010011 +01111000000010110000000000000001 +00111001011010111011000011000100 +01011100001011000000000000000100 +01011001011000000000000000000000 +00110100000000101111111111111111 +11100000000000000000000000001101 +00101001011011000000000000000000 +00110100000000100000000000000001 +01011101100000000000000000001010 +01111000000000100000000000000001 +00111000010000101001011011110000 +00110100000000010000000000000011 +11111000000000000011110000111001 +00110100000000100000000000000010 +01001001100000010000000000000100 +00110100000000010000000000000001 +01011001011000010000000000000000 +00110100000000100000000000000001 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000010000000000000000 +00110100000000100000000000000001 +11111000000000000100111111001001 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000001000010000001101011000 +00101000001000010000000000010000 +00101000001000110000000000001100 +01000100010000110000000000000100 +01011000001000100000000000001100 +10111000010000000000100000000000 +11111000000000000011111010111110 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +11111000000000000011111010110000 +00110100000000100000000000000001 +01011100001000000000000000000011 +11111000000000000100111110100010 +01111100001000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000010100000000000 +10111000001000100000100000000000 +10111000010000000010000000000000 +10111000011000000101100000000000 +01000100001000000000000000000101 +00110100000000010000000000000001 +10111000101000000001000000000000 +10111000100000000001100000000000 +11111000000000000011111000110101 +01000101011000000000000000000101 +00010101011000100000000000011111 +00110100000000010000000000000010 +10111001011000000001100000000000 +11111000000000000011111000110000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000001000000001000000000000 +00110100000000011111111111111111 +11111000000000000100111011001111 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111100100100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000110000000000000 +00101000001000100000001111010000 +10111000100000000111000000000000 +00110111100000010000000000011000 +10111000011000000101100000000000 +10111000101000000110100000000000 +11111000000000000001111001100101 +01000101110000000000000000000101 +01111000000000010000000000000001 +00111000001000011010011111111000 +00101000001000010000000000000000 +01011001110000010000000000000000 +01000101101000000000000000000011 +00101011100000010000000011001100 +01011001101000010000000000000000 +00101011100000100000000001101100 +00110100000000011111111111111101 +01000100010000000000000000010011 +01000101100000000000000000000111 +00101011100000100000000001100000 +00101011100000010000000001011000 +10110100010000010000100000000000 +00101011100000100000000010100000 +10110100001000100000100000000000 +01011001100000010000000000000000 +00101011100000100000000001101000 +00110100000000011111111111111101 +01000100010000000000000000001001 +00110100000000010000000000000000 +01000101011000000000000000000111 +00101011100000110000000001100100 +00101011100000100000000001011100 +10110100011000100001000000000000 +00101011100000110000000010100100 +10110100010000110001000000000000 +01011001011000100000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000011011100 +11000011101000000000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00110100000001000000000000000000 +10111000010000000110000000000000 +10111000011000000101100000000000 +00110111100000100000000000010000 +00110111100000110000000000010100 +00110100000001010000000000000000 +01011011100000000000000000010100 +01011011100000000000000000010000 +11111011111111111111111110111111 +00110100000000010000000000000001 +01011101100000010000000000000011 +00101011100000010000000000010000 +11100000000000000000000000000010 +00101011100000010000000000010100 +01011001011000010000000000000000 +00110100000000010000000000000001 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +11111000000000000011010011101011 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +11111000000000000011010011101111 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +11111000000000000011101001111100 +11111000000000000011001111101010 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000010000100110101010111100 +00111000001000010110101010001100 +11111000000000000011001100001010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011011000011001000 +00101000001000010000000000000000 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011001100000011000 +00101000001000010000000000101100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000010110101011011000 +11111000000000000011001011111000 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000010000101001111100110100 +00111000001000011001110000110000 +01111000000010110000000000000001 +11111000000000000001100111111111 +00111001011010111001100000011000 +00110100000000110000000000000000 +10111001011000000000100000000000 +00110100000000100000000000000000 +11111011111111111111110011100011 +01111000000000100000000000000001 +00111000010000101001110001110100 +01011000010000010000000000000000 +11111000000000000011100011010101 +01111000000000100000000000000001 +00111000010000101011000011010000 +01011000010000010000000000000000 +00101001011000010000001101011000 +00101000001000010000000000010000 +01011000001000000000000001101000 +10111001011000000000100000000000 +11111000000000000000101100110001 +01111000000000010000000000000001 +00111000001000011011000011001100 +00110100000000100000000000000001 +01011000001000100000000000000000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111001100000011000 +00101001011000010000001101011000 +00101000001011000000000000010000 +01111000000000010000000000000001 +00111000001000010110101011100100 +11111000000000000011001011001101 +00101001100000010000000000000000 +00110100000000100000000000000000 +00101000001000110000000000110100 +10111001011000000000100000000000 +11011000011000000000000000000000 +01111000000000010000000000000001 +00110100000000100000000000000000 +00110100000000110000001000110000 +01011001100000000000000001000000 +00110001100000000000000000110101 +00111000001000011001100101000000 +11111000000000000101001011110011 +01111000000000010000000000000001 +00111000001000011011000011001100 +01011000001000000000000000000000 +10111001011000000000100000000000 +00001101011000000000000100100000 +11111000000000000000101100001011 +01111000000000010000000000000001 +00111000001000011001110000110000 +11111000000000000001101000010000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111001100000011000 +10111000001000000110000000000000 +00101001011000010000001101011000 +00101000001011010000000000010000 +01111000000000010000000000000001 +00111000001000011011000011001000 +01011000001000000000000000000000 +11111011111111111111111111001100 +00110100000000010000000000000010 +01000101100000010000000000011111 +01001001100000010000000000000011 +00110100000000010000000000000001 +11100000000000000000000000000100 +00110100000000100000000000000011 +01000101100000100000000000101111 +00110100000000010000000000000100 +01011101100000010000000000111001 +00110100000000010000000000000001 +01111000000010110000000000000001 +00111001011010111001100000011000 +00110001101000010000000000000100 +00110100000000010000000000000001 +01011001011000010000000000100100 +01111000000000010000000000000001 +00111000001000011001111100110100 +00110100000011100000000000000110 +00110100000000100000000000000000 +00110100000000110000000000000001 +01011000001011100000000000000000 +00110100000000010000000000000001 +11111000000000000100110100001101 +00110100000000010000000000000001 +11111000000000000011110110110111 +00101001011000010000000000110000 +00101000001000010000000000001100 +01011000001011100000000000010000 +10111001011000000000100000000000 +11111000000000000001001011101101 +00111000000010111110101001100000 +11100000000000000000000000100011 +00110100000000010000000000000001 +00110001101000010000000000000100 +00110100000000010000000000000001 +01011001011000010000000000100100 +01111000000000010000000000000001 +00111000001000011001111100110100 +00110100000011100000000010111011 +00110100000000100000000000000000 +00110100000000110000000000000001 +01011000001011100000000000000000 +00110100000000010000000000000010 +11111000000000000100110011111000 +00110100000000010000000000000001 +11111000000000000011110110100010 +00101001011000010000000000110000 +00101000001000010000000000001100 +01011000001011100000000000010000 +10111001011000000000100000000000 +11111000000000000001001011011000 +00110100000010110000111110100000 +11100000000000000000000000001110 +00110001101000010000000000000100 +01011001011000010000000000100100 +01111000000000010000000000000001 +00111000001000011001111100110100 +00110100000000100000000011111111 +01011000001000100000000000000000 +00110100000000110000000000000001 +00110100000000010000000000000011 +00110100000000100000000000000000 +11111000000000000100110011100101 +00110100000000010000000000000000 +11111000000000000011110110001111 +00110100000010110000000000000000 +11111000000000000011100001001100 +01111000000000100000000000000001 +10111000001000000111000000000000 +10111000010000000000100000000000 +00111000001000010110101011110000 +11111000000000000011001001011011 +00101001101000100000000000000000 +01111000000011010000000000000001 +00111001101011010110101100001100 +00101000010000110000000000110100 +01111000000000100000000000000001 +10111000010000000000100000000000 +00111000001000011001100000011000 +00110100000000100000000000000000 +11011000011000000000000000000000 +11100000000000000000000000001110 +11111000000000000100111011001000 +00110100000000010000001111101000 +11111000000000000011100000111111 +11111000000000000011100000111001 +11001000001011100001000000000000 +01010001011000100000000000000110 +01111000000000010000000000000001 +00111000001000010110101011111100 +11111000000000000011001001001000 +00110100000010111111111110001100 +11100000000000000000000000001000 +10111001101000000000100000000000 +11111000000000000011001001000100 +00110100000000010000000000000000 +11111000000000000100110110001101 +01011100001000000000000000000010 +01011101011000011111111111110000 +00110100000010110000000000000000 +01111000000000010000000000000001 +00111000001000011000011110001000 +11111000000000000011001000111100 +01111101011000100000000000000000 +01100101100000010000000000000001 +10100000010000010000100000000000 +01000100001000000000000000000101 +01111000000000010000000000000001 +00111000001000011001111100110100 +00110100000000100000000000110100 +01011000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011011000011001000 +01011000001011000000000000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01000100001000000000000000000100 +00110100000000100000000000000001 +01011100001000100000000000000110 +11100000000000000000000000000011 +11111011111111111111111101001011 +11100000000000000000000000000110 +11111011111111111111111100100011 +11100000000000000000000000000100 +01111000000000010000000000000001 +00111000001000011011000011001100 +00101000001000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011011000011001100 +00101000001000010000000000000000 +00110100000011100000000000000000 +01000100001000000000000000100100 +01111000000010110000000000000001 +00111001011010111001100000011000 +00101001011000010000000000110100 +00101001011000100000000001001000 +01111000000001000000000000000001 +00101000001001010000000000001000 +00110100000000110000000001111100 +10111001011000000000100000000000 +00111000100001001001100100011000 +11011000101000000000000000000000 +10111000001000000001100000000000 +01001100000000010000000000000101 +00101001011000010000010000010100 +00110100001000010000000000000001 +01011001011000010000010000010100 +11100000000000000000000000001100 +01011100001000000000000000001011 +01111000000011010000000000000001 +11111000000000000011011111100111 +00111001101011011011000011010000 +00101001101000100000000000000000 +01111000000011000000000000000001 +00111001100011001001110001110100 +11001000001000100000100000000000 +00101001100000100000000000000000 +01010100010000010000000000001010 +11100000000000000000000000010001 +01111000000000010000000000000001 +00111000001000011001100000011000 +00101000001000100000000001010000 +11111011111111111111101111100101 +01111000000000100000000000000001 +00111000010000101001110001110100 +01011000010000010000000000000000 +00110100000011100000000000000001 +10111001110000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +11111000000000000011011111001110 +01011001101000010000000000000000 +00110100000000100000000000000000 +10111001011000000000100000000000 +00110100000000110000000000000000 +11111011111111111111101111010011 +01011001100000010000000000000000 +11100011111111111111111111110000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000010001010000000000001000 +00101100010001000000000000001100 +00101000010011010000000000000000 +00111100101001010000000000010000 +10111000001000000110000000000000 +00101000010010110000000000000100 +10111000101001000000100000000000 +00110100000000100000001111101000 +11111000000000000101000011010011 +00010101101000100000000000011000 +10111000001000000011000000000000 +01111000000001110000000000000001 +00100000010000100000000011000000 +00110100000000010000000010000000 +00111000111001111000000011010000 +01011100010000010000000000000011 +01111000000001110000000000000001 +00111000111001110110101100010100 +01111000000001000000000000000001 +10111000100000000000100000000000 +10111001100000000001000000000000 +10111001011000000001100000000000 +10111001011000000010000000000000 +10111001011000000010100000000000 +00111000001000010110101100100000 +11111000000000000011000110111100 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100111010000000000011000 +10111000001000000101000000000000 +01000000011000010000000000000101 +01000000011001000000000000000000 +01000000011001010000000000000001 +01000000011001100000000000000010 +01000000011001110000000000000011 +01000000011010000000000000000100 +01011011100000010000000000000100 +01000000011000010000000000000110 +10111000010000000100100000000000 +10111001010000000001000000000000 +01011011100000010000000000001000 +01000000011000010000000000000111 +01011011100000010000000000001100 +01000000011000010000000000001000 +01011011100000010000000000010000 +01000000011000010000000000001001 +10111001001000000001100000000000 +01011011100000010000000000010100 +01111000000000010000000000000001 +00111000001000010110101101000100 +11111000000000000011000110011110 +00101011100111010000000000011000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111010000 +01011011100010110000000000110000 +01011011100011000000000000101100 +01011011100011010000000000101000 +01011011100011100000000000100100 +01011011100011110000000000100000 +01011011100100000000000000011100 +01011011100100010000000000011000 +01011011100100100000000000010100 +01011011100100110000000000010000 +01011011100101000000000000001100 +01011011100101010000000000001000 +01011011100111010000000000000100 +10111000011000000011000000000000 +10111000001000001001100000000000 +10111000010000001001000000000000 +01111000000000010000000000000001 +10111000100000001010100000000000 +00111000001000010110101101111100 +10111010011000000001000000000000 +10111010010000000001100000000000 +10111000110000000010000000000000 +10111000101000001010000000000000 +01111000000100010000000000000001 +11111000000000000011000110000010 +01111000000100000000000000000001 +01111000000011110000000000000001 +01111000000011100000000000000001 +01111000000011010000000000000001 +10111000001000000101100000000000 +00110100000011000000000000000000 +00111010001100010110101110010000 +00111010000100000110101110011000 +00111001111011110111110001001000 +00111001110011101000011110001000 +00111001101011010111111100010000 +11100000000000000000000000010111 +01011100110000000000000000000110 +10111010001000000000100000000000 +10111010011000000001000000000000 +10111010010000000001100000000000 +11111000000000000011000101110001 +10110101011000010101100000000000 +10110110101011000001000000000000 +01000000010000100000000000000000 +10111010000000000000100000000000 +00110101100011000000000000000001 +11111000000000000011000101101011 +00100001100000100000000000000011 +10110100001010110101100000000000 +10111001111000000011000000000000 +01011100010000000000000000000101 +00100001100000010000000000001111 +10111001110000000011000000000000 +01000100001000100000000000000010 +10111001101000000011000000000000 +10111000110000000000100000000000 +11111000000000000011000101100001 +10110101011000010101100000000000 +00100001100001100000000000001111 +01001010100011001111111111101001 +01000100110000000000000000000101 +01111000000000010000000000000001 +00111000001000011000011110001000 +11111000000000000011000101011010 +10110100001010110101100000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000110000 +00101011100011000000000000101100 +00101011100011010000000000101000 +00101011100011100000000000100100 +00101011100011110000000000100000 +00101011100100000000000000011100 +00101011100100010000000000011000 +00101011100100100000000000010100 +00101011100100110000000000010000 +00101011100101000000000000001100 +00101011100101010000000000001000 +00110111100111000000000000110000 +11000011101000000000000000000000 +00110111100111001111111110111000 +01011011100010110000000001001000 +01011011100011000000000001000100 +01011011100011010000000001000000 +01011011100011100000000000111100 +01011011100011110000000000111000 +01011011100100000000000000110100 +01011011100100010000000000110000 +01011011100100100000000000101100 +01011011100100110000000000101000 +01011011100101000000000000100100 +01011011100101010000000000100000 +01011011100101100000000000011100 +01011011100101110000000000011000 +01011011100110000000000000010100 +01011011100111010000000000010000 +10111000011000001000000000000000 +01000000010000110000000000000001 +10111000001000000110000000000000 +00110100000000010000000000000010 +00100000011000110000000000001111 +10111000010000000110100000000000 +01000000010011100000000000000000 +01000100011000010000000000000110 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000010110101110100000 +11111000000000000011000100101110 +11100000000000000000000101010000 +01000000010001010000000000000010 +01000000010001100000000000000011 +00100001110011100000000000001111 +00111100101001010000000000001000 +01111000000000010000000000000001 +10111000110001010010100000000000 +01000001101001100000000000000100 +00110100000000110000000000000010 +10111001110000000010000000000000 +00110100010010110000000000100010 +00111000001000010110101111000000 +10111001100000000001000000000000 +11111000000000000011000100100000 +01000001101000110000000000000110 +01000001101001000000000000000111 +00101001101001010000000000001100 +00111100011000110000000000001000 +01111000000000010000000000000001 +10111000100000110001100000000000 +00101001101001000000000000001000 +10111000101000000011000000000000 +10111001100000000001000000000000 +00111000001000010110101111101100 +11111000000000000011000100010101 +01111000000000100000000000000001 +10111001100000000000100000000000 +00111000010000100110110000011100 +00110101101000110000000000010100 +11111011111111111111111101011011 +01000001101000110000000000011110 +01000001101001000000000000011111 +01000001101001010000000000100001 +00111100011000110000000000001000 +01111000000000010000000000000001 +10111000100000110001100000000000 +01000001101001000000000000100000 +00111000001000010110110000100100 +10111001100000000001000000000000 +11111000000000000011000100000110 +00110100000000010000000000001100 +01010101110000010000000011101001 +01111000000000010000000000000001 +00111101110011100000000000000010 +00111000001000011000111111111000 +10110100001011100000100000000000 +00101000001000010000000000000000 +11000000001000000000000000000000 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000010110110001010000 +11111000000000000011000011111010 +01000001011000100000000000000010 +01000001011000010000000000000011 +01000001011001000000000000000100 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100100001000000000000001000 +10111000001000100000100000000000 +10111000100000010010000000000000 +01000001011000100000000000000110 +01000001011000010000000000000111 +01000001011001010000000000001000 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100101001010000000000001000 +10111000001000100000100000000000 +10111000101000010010100000000000 +01111000000000110000000000000001 +01111000000000010000000000000001 +01000001011001110000000000000101 +01000001011001100000000000001001 +00111000001000010110110001101000 +10111001100000000001000000000000 +00111000011000110110110001111000 +11100000000000000000000000011100 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000010110110010000100 +11111000000000000011000011011110 +01000001011000100000000000000010 +01000001011000010000000000000011 +01000001011001000000000000000100 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100100001000000000000001000 +10111000001000100000100000000000 +10111000100000010010000000000000 +01000001011000100000000000000110 +01000001011000010000000000000111 +01000001011001010000000000001000 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100101001010000000000001000 +10111000001000100000100000000000 +01000001011001110000000000000101 +01000001011001100000000000001001 +10111000101000010010100000000000 +01111000000000110000000000000001 +01111000000000010000000000000001 +00111000001000010110110001101000 +10111001100000000001000000000000 +00111000011000110110110010100000 +10111000111001000010000000000000 +10111000110001010010100000000000 +11111000000000000011000011000100 +11100000000000000000000010100110 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000010110110010110000 +11111000000000000011000010111111 +01000001011000100000000000000010 +01000001011000010000000000000011 +01000001011001000000000000000100 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100100001000000000000001000 +10111000001000100000100000000000 +10111000100000010010000000000000 +01000001011000100000000000000110 +01000001011000010000000000000111 +01000001011001010000000000001000 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100101001010000000000001000 +10111000001000100000100000000000 +10111000101000010010100000000000 +01111000000000110000000000000001 +01111000000000010000000000000001 +01000001011001110000000000000101 +01000001011001100000000000001001 +00111000001000010110110001101000 +10111001100000000001000000000000 +00111000011000110110110011001100 +11100011111111111111111111100001 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000010110110011011100 +11111000000000000011000010100011 +01000001011000100000000000000010 +01000001011000010000000000000011 +01000001011001000000000000000100 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100100001000000000000001000 +10111000001000100000100000000000 +10111000100000010010000000000000 +01000001011000100000000000000110 +01000001011000010000000000000111 +01000001011001010000000000001000 +00111100010000100000000000011000 +00111100001000010000000000010000 +01000001011001110000000000000101 +01000001011001100000000000001001 +00111100101001010000000000001000 +10111000001000100000100000000000 +01111000000011100000000000000001 +00111001110011100110110011111000 +10111000101000010010100000000000 +01111000000000010000000000000001 +10111001100000000001000000000000 +10111001110000000001100000000000 +10111000111001000010000000000000 +10111000110001010010100000000000 +00111000001000010110110001101000 +11111000000000000011000010001000 +00110101011000110000000000001010 +10111001100000000000100000000000 +10111001110000000001000000000000 +11111011111111111111111011001111 +00110100000010110000000000110110 +11100000000000000000000010011000 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000010110110100001100 +11111000000000000011000001111110 +01000001011000100000000000000010 +01000001011000010000000000000011 +01000001011001000000000000000100 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100100001000000000000001000 +10111000001000100000100000000000 +10111000100000010010000000000000 +01000001011000100000000000000110 +01000001011000010000000000000111 +01000001011001010000000000001000 +00111100010000100000000000011000 +00111100001000010000000000010000 +01000001011001110000000000000101 +01000001011001100000000000001001 +00111100101001010000000000001000 +10111000001000100000100000000000 +10111000101000010010100000000000 +01111000000000110000000000000001 +01111000000000010000000000000001 +10111000111001000010000000000000 +10111000110001010010100000000000 +10111001100000000001000000000000 +00111000011000110110110100101000 +00111000001000010110110001101000 +11111000000000000011000001100100 +01000001011000100000000000001110 +01000001011000010000000000001111 +01000001011001000000000000010000 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100100001000000000000001000 +10111000001000100000100000000000 +10111000100000010010000000000000 +01000001011000100000000000010010 +01000001011000010000000000010011 +01000001011001010000000000010100 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100101001010000000000001000 +10111000001000100000100000000000 +10111000101000010010100000000000 +01000001011000100000000000010110 +01000001011000010000000000010111 +01000001011001100000000000011000 +00111100010000100000000000011000 +00111100001000010000000000010000 +01000001011010010000000000010001 +01000001011010000000000000010101 +01000001011001110000000000011001 +00111100110001100000000000001000 +10111000001000100000100000000000 +10111000110000010011000000000000 +01111000000000110000000000000001 +01111000000000010000000000000001 +10111001001001000010000000000000 +10111001000001010010100000000000 +10111000111001100011000000000000 +10111001100000000001000000000000 +00111000011000110110110101010100 +00111000001000010110110101000000 +11111000000000000011000001000000 +01000001011000110000000000001101 +01000001011001000000000000011010 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000010110110101111000 +11111000000000000011000000111010 +01000001011000010000000000100000 +01000001011001000000000000011011 +01000001011001010000000000011100 +01000001011001100000000000011101 +01000001011001110000000000011110 +01000001011010000000000000011111 +01011011100000010000000000000100 +01000001011000010000000000100001 +01111000000000110000000000000001 +10111001100000000001000000000000 +01011011100000010000000000001000 +01000001011000010000000000100010 +00111000011000110110110111010000 +00110100000010110000000001000000 +01011011100000010000000000001100 +01111000000000010000000000000001 +00111000001000010110110110100000 +11111000000000000011000000101000 +11100000000000000000000000111101 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000010110110111110000 +11111000000000000011000000100011 +01111000000000100000000000000001 +10111001100000000000100000000000 +00111000010000100110111000001100 +10111001011000000001100000000000 +11111011111111111111111001101001 +00110100000010110000000000101100 +11100000000000000000000000110010 +00110100000010110000000000100010 +11100000000000000000000000110000 +01010101111101110000000000001001 +01111000000000010000000000000001 +10111001100000000001000000000000 +10111010000000000001100000000000 +10111001011000000010000000000000 +10111001111000000010100000000000 +00111000001000010110111000101000 +11111000000000000011000000010010 +11100000000000000000000000110100 +10110101101010110111000000000000 +01000001110101100000000000000010 +01000001110000010000000000000011 +01000001110000110000000000000000 +00111110110101100000000000001000 +01000001110001000000000000000001 +10111000001101101011000000000000 +01000001110000010000000000001000 +01000001110001010000000000000100 +01000001110001100000000000000101 +01000001110001110000000000000110 +01000001110010000000000000000111 +01011011100000010000000000000100 +01000001110000010000000000001001 +00111100011000110000000000001000 +00110110110100010000000000000100 +01011011100000010000000000001000 +10111000100000110001100000000000 +10111010101000000000100000000000 +10111001100000000001000000000000 +10111010001000000010000000000000 +11111000000000000010111111111011 +01001101111100010000000000000111 +10111010010000000000100000000000 +10111001100000000001000000000000 +10111010001000000001100000000000 +10111001111000000010000000000000 +11111000000000000010111111110101 +11100000000000000000000000001000 +10111001100000000000100000000000 +10111010100000000001000000000000 +10111010011000000001100000000000 +00110101110001000000000000001010 +00110110110001011111111111111010 +11111011111111111111111001010100 +10111010001000000111100000000000 +10110101011011110101100000000000 +11100000000000000000000000001011 +01111000000101010000000000000001 +01111000000101000000000000000001 +01111000000100110000000000000001 +01111000000100100000000000000001 +00110100000110000000000000000010 +00110100000101110000000000001001 +00111010101101010110111001001100 +00111010100101000110111010111000 +00111010011100110110111011000000 +00111010010100100110111010001100 +01001101011100000000000000000011 +11001010000010110111100000000000 +01001001111110001111111111000101 +01111000000000100000000000000001 +01111000000000110000000000000001 +10111001100000000000100000000000 +00111000010000100110111011001100 +00111000011000110110111011010100 +10111001101000000010000000000000 +10111010000000000010100000000000 +11111011111111111111111000111100 +00101011100111010000000000010000 +00101011100010110000000001001000 +00101011100011000000000001000100 +00101011100011010000000001000000 +00101011100011100000000000111100 +00101011100011110000000000111000 +00101011100100000000000000110100 +00101011100100010000000000110000 +00101011100100100000000000101100 +00101011100100110000000000101000 +00101011100101000000000000100100 +00101011100101010000000000100000 +00101011100101100000000000011100 +00101011100101110000000000011000 +00101011100110000000000000010100 +00110111100111000000000001001000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +10111000010000000101100000000000 +01000100100000000000000000000101 +10111000100000000001000000000000 +01011011100000110000000000010000 +11111011111111111111110111100001 +00101011100000110000000000010000 +10111001100000000000100000000000 +10111001011000000001000000000000 +11111011111111111111111001101110 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00101000001011010000000000000000 +10111000001000000111100000000000 +00101000001011100000000000000100 +10111000010000000110000000000000 +00110100000010110000000000000000 +00110100000000010000000000000000 +00110100000001000000000000000000 +01010100010011010000000000000110 +10111001101000000000100000000000 +11111000000000000100111011110011 +10001000001011000001000000000000 +10111001011000000010000000000000 +11001001101000100110100000000000 +00110100000000110000000000000000 +00110100000000100000000000000001 +11100000000000000000000000001011 +00111101100001010000000000000001 +00111101011010110000000000000001 +11110101100001010110000000000000 +00111100011000110000000000000001 +10110101100010110101100000000000 +10111000101000000110000000000000 +00111100010001010000000000000001 +11110100010001010001000000000000 +10110100010000110001100000000000 +10111000101000000001000000000000 +00010101011001010000000000011111 +11001000101011000011000000000000 +11110100110001010011000000000000 +11001000101010110010100000000000 +11001000101001100010100000000000 +00000000101001010000000000011111 +00110100000001100000000000000001 +01010101101010110000000000000100 +01011101101010110000000000000010 +01010101110011000000000000000010 +00110100000001100000000000000000 +10100000101001100011000000000000 +01011100110000001111111111101010 +01010101011011010000000000001101 +01011101011011010000000000000010 +01010101100011100000000000001011 +11001001110011000010100000000000 +11110100101011100111000000000000 +11001001101010110110100000000000 +11001001101011100110100000000000 +10111000101000000111000000000000 +10110100100000100010100000000000 +11110100100001010010000000000000 +10110100001000110000100000000000 +10110100100000010000100000000000 +10111000101000000010000000000000 +00111100011001010000000000011111 +00000000010000100000000000000001 +00000000011000110000000000000001 +10111000101000100001000000000000 +10111000011000100010100000000000 +01000100101000000000000000000110 +00111101011001010000000000011111 +00000001100011000000000000000001 +00000001011010110000000000000001 +10111000101011000110000000000000 +11100011111111111111111111101001 +01011001111000010000000000000000 +10111001110000000000100000000000 +01011001111001000000000000000100 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +11111000000000000011010101000111 +10110100001010110000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +10111000010000000101100000000000 +01111000000001010000000000000001 +00110100000000100000000000000110 +00110100000000110000000000000001 +00111000100001000110111110000100 +00111000101001011001000000101100 +10111001011000000011000000000000 +11111011111111111111101000000101 +01000101011000000000000000000101 +00010101011000100000000000011111 +00110100000000010000000000000010 +10111001011000000001100000000000 +11111000000000000011100111111000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +10111000010000000101100000000000 +10111000011000000011000000000000 +01000100011000000000000000001000 +01111000000001000000000000000001 +01111000000001010000000000000001 +00110100000000100000000000000110 +00110100000000110000000000000001 +00111000100001000110111110010000 +00111000101001011001000001001100 +11111011111111111111100111101100 +10111001100000000000100000000000 +10111001011000000001000000000000 +11111011111111111111111111011001 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000110100000000000 +01000100010000000000000000010101 +00101000010000010000000000001000 +00101100010010110000000000001100 +00101000010011000000000000000100 +00111100001000010000000000010000 +00110100000001000000000000000011 +10111000001010110101100000000000 +00101000010000010000000000000000 +10111001011000000001100000000000 +10111001100000000001000000000000 +11111000000000000011100111101001 +01111000000001000000000000000001 +01111000000001010000000000000001 +10111001101000000000100000000000 +00110100000000100000000000000110 +00110100000000110000000000000001 +00111000100001000110111110111100 +00111000101001011001000001100000 +10111001100000000011000000000000 +10111001011000000011100000000000 +11111011111111111111100111001001 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +10111000001000000110000000000000 +00110111100000100000000000011000 +00110111100000010000000000010000 +11111000000000000011100111101111 +00101011100001110000000000011000 +00101011100000010000000000010000 +00101011100001100000000000010100 +00000000111000100000000000010000 +01011001011000010000000000000000 +01011001011000100000000000001000 +00111100111000010000000000010000 +01111000000000100000000000000001 +00111000010000101011000010111100 +01011001011000010000000000001100 +00101000010000010000000000000000 +01011001011001100000000000000100 +00100000001000010000000000000001 +01011100001000000000000000001001 +01111000000001000000000000000001 +01111000000001010000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000110 +00110100000000110000000000000010 +00111000100001000110111110111100 +00111000101001011001000001110000 +11111011111111111111100110100011 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111110110000 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +00001000100001000000000000001100 +10111000001000000101100000000000 +00110100001011010000000100010000 +01111000000000010000000000000001 +00111000001000011001011101011000 +10110100001001000000100000000000 +10111000010000000111100000000000 +01000000001000100000000000000111 +01111000000001010000000000000001 +00110111100011000000000001000000 +00001000010000100000000000000110 +00111000101001011001000010010000 +00101001011100000000000001101000 +00110100000000011000100011110111 +10110100010001010001000000000000 +10111000011000000111000000000000 +00001111100000010000000001001100 +00110100000000110000000000000110 +10111001100000000000100000000000 +11111000000000000100111001111010 +10111001100000000001000000000000 +10111010000000000000100000000000 +10111001111000000001100000000000 +10111001110000000010000000000000 +00110111100001010000000000100000 +11111000000000000010010011110000 +10111000001000000110000000000000 +01000101101000000000000000011111 +00101011100000010000000000101000 +00101011100000100000000000100100 +00101011100000110000000000100000 +00010100001001010000000000011111 +00000000001001000000000000010000 +00111100101001010000000000010000 +00111100001000010000000000010000 +10111000100001010010100000000000 +00101011100001000000000000111100 +01011001011000110000000100010000 +01011001011000100000000100010100 +01011001011001010000000100011000 +01011001011000010000000100011100 +01011100100000000000000000000100 +01111000000001001000111100000000 +10111000011001000001100000000000 +01011001011000110000000100010000 +00111100101010010000000000010000 +00000000001010000000000000010000 +00101001011001110000000100010100 +01111000000001000000000000000001 +01111000000001010000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000010 +00111000100001000110111111001100 +00111000101001011001000010000000 +10111001100000000011000000000000 +10111001001010000100000000000000 +11111011111111111111100101011011 +01111000000000010000000000000001 +00111000001000011011000011001000 +00101000001000100000000000000000 +00110100000000010000000000000100 +01011100010000010000000000001101 +00101001011001000000000100011100 +00101001011001010000000100011000 +00101001011000100000000100010100 +00000000100000110000000000010000 +00100000100001001111111111111111 +00001000100001000000001111101000 +00111100101001010000000000010000 +01111000000000010000000000000001 +00000000100001000000000000010000 +00111000001000010110111111101100 +10111000101000110001100000000000 +11111000000000000010111010001111 +01001100000011000000000000010000 +01111000000000010000000000000001 +00111000001000011011000010111100 +00101000001000100000000000000000 +00101001011000010000000000011100 +10111000010000010000100000000000 +00000000001000010000000000010100 +00110100000000100000000000000001 +00100000001000010000000000001111 +01010000010000010000000000000111 +01111000000000010000000000000001 +00111000001000010110111111111100 +10111001111000000001000000000000 +10111001110000000001100000000000 +10111001101000000010000000000000 +11111011111111111111111010111011 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000001010000 +11000011101000000000000000000000 +00110111100111001111111110010000 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +00101000001000010000000001101000 +10111000011000000010100000000000 +10111000010000000111000000000000 +10111000100000000101100000000000 +00110111100000100000000001000000 +10111000101000000010000000000000 +10111001110000000001100000000000 +00110111100001010000000000100000 +11111000000000000010010000100000 +10111000001000000110100000000000 +01001100000000010000000001100101 +01000101011000000000000000100001 +00101011100000010000000000101100 +00101011100011110000000000100100 +00101011100100000000000000100000 +00111100001000010000000000010000 +00110100000000100000001111101000 +01011001011100000000000000000000 +01011001011011110000000000000100 +11111000000000000100110101011110 +00101011100001010000000000101000 +10111000001000000010000000000000 +00010100001000100000000000011111 +00010100101000010000000000011111 +00000000101000110000000000010000 +00111100101001010000000000010000 +00111100001000010000000000010000 +10110100100001010010100000000000 +10111000011000010000100000000000 +11110100100001010010000000000000 +10110100010000010000100000000000 +10110100100000010000100000000000 +01011001011000010000000000001000 +00101011100000010000000000111100 +01011001011001010000000000001100 +01011100001000000000000000001001 +01111000000000010000000000000001 +00111000001000011011000011001000 +00101000001000100000000000000000 +00110100000000010000000000000100 +01000100010000010000000000000100 +01111000000000011000111100000000 +10111010000000011000000000000000 +01011001011100000000000000000000 +01111000000000010000000000000001 +00111000001000011011000010111100 +00101001100000100000000000011100 +00101000001000010000000000000000 +10111000001000100000100000000000 +00000000001000010000000000010100 +00110100000000100000000000000001 +00100000001000010000000000001111 +01010000010000010000000000000111 +01111000000000010000000000000001 +00111000001000010111000000000100 +10111001110000000001000000000000 +10111001101000000001100000000000 +10111001011000000010000000000000 +11111011111111111111111001101101 +01111000000000010000000000000001 +00111000001000011011000011001000 +00101000001000100000000000000000 +00110100000000010000000000000100 +01011100010000010000000000110000 +00101001011001000000000000000000 +00101001011000110000000000000100 +00101001011000100000000000001000 +00101001011000010000000000001100 +01011011100001000000000001100100 +01011011100000110000000001101000 +01011011100000100000000001101100 +01011011100000010000000001110000 +11111000000000000010111111001101 +00111100001000010000000000010000 +00110100000000100000001111101000 +01011011100000000000000001011000 +01011011100000000000000001010100 +11111000000000000100110100100100 +00010100001000100000000000011111 +00110111100010110000000001100100 +01011011100000010000000001100000 +01011011100000100000000001011100 +10111001011000000000100000000000 +00110111100000100000000001010100 +11111000000000000001001001010101 +00101011100001000000000001110000 +00101011100001010000000001101100 +00101011100000100000000001101000 +00000000100000110000000000010000 +00100000100001001111111111111111 +00001000100001000000001111101000 +00111100101001010000000000010000 +01111000000000010000000000000001 +00000000100001000000000000010000 +10111000101000110001100000000000 +00111000001000010111000000001100 +11111000000000000010111000001011 +10111001011000000000100000000000 +00110101100000100000000100010000 +11111000000000000001001001000110 +00101011100000110000000001110000 +00101011100001000000000001101100 +01111000000000010000000000000001 +00000000011000100000000000010000 +00100000011000111111111111111111 +00001000011000110000001111101000 +00111100100001000000000000010000 +00111000001000010111000000011100 +00000000011000110000000000010000 +10111000100000100001000000000000 +11111000000000000010110111111101 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000001110000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000001000010000000001101000 +11111000000000000010001101010010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111010100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000001101000 +01000100001000000000000000000010 +11111000000000000010001101000101 +10111001011000000000100000000000 +11111000000000000000110010101111 +00110111100011000000000000010100 +00110100000000011000100011110111 +01111000000000100000000000000001 +00001111100000010000000000100000 +00111000010000101000111101111000 +10111001100000000000100000000000 +00110100000000110000000000000110 +11111000000000000100110110001100 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000011001110101100100 +00110100000000110000000000000001 +00110100000001000000000000000000 +11111000000000000010001011101100 +10111000001000000110000000000000 +01000100001000000000000000001110 +00110111100011010000000000101000 +10111001101000000001000000000000 +11111000000000000010001011010110 +10111001101000000001000000000000 +00110100000000110000000000000110 +00110101011000010000000001110000 +11111000000000000100110101111101 +00110101011000010000000001011100 +01011001011011000000000001101000 +10111001101000000001000000000000 +00110100000000110000000000000110 +11111000000000000100110101111000 +01011001011011000000000001010100 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000101100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +01111000000001010000000000000001 +10111000011000000110000000000000 +00110100000000100000000000000010 +00110100000000110000000000000010 +00111000100001000111000100111000 +00111000101001011001000001000100 +10111000001000000101100000000000 +11111011111111111111100001101010 +00101001100000100000000000101100 +00101001011000010000001101011000 +00100000010000110000000000000011 +00101000001000010000000000010000 +01111100011001000000000000000000 +01011000001001000000000000111000 +00100000010001000000000000001000 +00100000010000100000000000000100 +01111100100001000000000000000000 +01111100010000100000000000000000 +00110000001000110000000000110101 +01011000001000100000000001000100 +01011000001001000000000001000000 +00101001011000010000000000110000 +00101000001000100000000000010000 +00101001011000010000001101011000 +00101100001000010000000000001000 +00001100010000010000000000101000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00101000001000100000001101011000 +01111000000001000000000000000001 +01111000000001010000000000000001 +00101000010010110000000000010000 +00110100000000110000000000000010 +00110100000000100000000000000010 +00111000100001000111000100111000 +00111000101001011001000101000100 +11111011111111111111100001000111 +00110100000000010000000000000000 +00110001011000000000000000000101 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +01111000000001010000000000000001 +10111000001000000101100000000000 +00110100000000100000000000000010 +00110100000000010000000000000000 +00110100000000110000000000000010 +00111000100001000111000100111000 +00111000101001011001000101010100 +11111011111111111111100000110101 +00101001011000010000000000100100 +01000100001000000000000000000110 +00110100000000100000000000000000 +00110100000000110000000000000001 +00110100000001000000000000000010 +00110100000001100000000000000011 +11100000000000000000000000011111 +00101001011000010000000000000000 +00101001011000100000000001000000 +01011000001000100000000000011000 +11100000000000000000000000011101 +00101001011001010000000000000000 +00001000010000010000010000011000 +10110100101000010000100000000000 +00101001011001010000000001000000 +01011000001001010000000000011000 +00101000001001010000010000001000 +01011100101000110000000000010000 +00101000001001010000000000100100 +01000100101000110000000000000100 +00101000001000010000001101011000 +01011100101001000000000000001001 +11100000000000000000000000000101 +00101000001000010000001101011000 +00101000001000010000000000010000 +00110000001000110000000000000100 +11100000000000000000000000001010 +00101000001000010000000000010000 +00110000001001000000000000000100 +11100000000000000000000000000111 +00101000001000010000000000010000 +00110000001001100000000000000100 +11100000000000000000000000000100 +00101000001000010000001101011000 +00101000001000010000000000010000 +00110000001000000000000000000100 +00110100010000100000000000000001 +00101001011000010000000000100100 +01001000001000101111111111100101 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00101000001000100000001101011000 +01111000000001000000000000000001 +01111000000001010000000000000001 +00101000010010110000000000010000 +00110100000000110000000000000010 +00110100000000100000000000000010 +00111000100001000111000100111000 +00111000101001011001000101011100 +10111000001000000110000000000000 +11111011111111111111011111111011 +01000001011000110000000000000100 +00110100000000010000000100101100 +01011001011000010000000000101000 +00110100000000100000000000000001 +00110100000000010000101110111000 +01011001011000010000000000110000 +01011001011000000000000000001000 +00110001011000000000000000110101 +01011001011000000000000001000000 +01011001011000100000000000010100 +00100000011000110000000000000011 +00101001011000010000000000000000 +01011100011000100000000000000100 +00101000001000110000000000110100 +10111001100000000000100000000000 +11100000000000000000000000000100 +00101000001000110000000000110100 +00110100000000100000000000000000 +10111001100000000000100000000000 +11011000011000000000000000000000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +01111000000001010000000000000001 +00101100001011010000000000000010 +10111000001000000101100000000000 +10111000010000000110000000000000 +00110100000000010000000000000000 +00110100000000100000000000000010 +00110100000000110000000000000010 +00111000100001000111000100111000 +00111000101001011001000010011100 +11111011111111111111011111010001 +00110100000000010000000001000000 +01001100001011010000000000000100 +10111001011000000000100000000000 +10111001100000000001000000000000 +11111000000000000000001111101101 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +01111000000001010000000000000001 +00110100000000100000000000000010 +00110100000000110000000000000010 +00111000100001000111000100111000 +00111000101001011001000010110000 +10111000001000000101100000000000 +11111011111111111111011110111011 +00101001011000010000001101011000 +00110100000000100000000001000000 +00101000001000010000000000010000 +01000000001000010000000000000100 +01000100001000000000000000000110 +00110100000000110000000000000010 +01000100001000110000000000000100 +10111001011000000000100000000000 +11111000000000000000001110010001 +00110100000000100000000001001110 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +01111000000001010000000000000001 +00110100000000110000000000000010 +10111000010000000110000000000000 +00111000100001000111000100111000 +00110100000000100000000000000010 +00111000101001011001000011011000 +10111000001000000101100000000000 +11111011111111111111011110011111 +00101001011000010000001101011000 +00110100000000110000000000000000 +00101000001000010000000000010000 +00101000001000010000000000001000 +01000100001000000000000000000110 +00110101011000110000000010101000 +10111001011000000000100000000000 +10111001100000000001000000000000 +11111000000000000000010110110001 +00110100000000110000000000000001 +10111000011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +01111000000001010000000000000001 +00110100000000100000000000000010 +00110100000000110000000000000010 +00111000100001000111000100111000 +00111000101001011001000011101100 +10111000001000000101100000000000 +11111011111111111111011110000100 +00101001011000010000001101011000 +00101000001000100000000000010000 +01000000010000010000000000000100 +00100000001000010000000000000010 +01000100001000000000000000001011 +01000000010000010000000000110101 +00100000001000010000000000000001 +01000100001000000000000000001000 +00101000010000010000000000001000 +01000100001000000000000000000011 +00101000010000010000000001000000 +01011100001000000000000000000100 +10111001011000000000100000000000 +00110100000000100000000000001001 +11111000000000000000000010100101 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +01111000000001010000000000000001 +00110100000000100000000000000010 +00110100000000110000000000000010 +00111000100001000111000100111000 +00111000101001011001000100000000 +10111000001000000101100000000000 +11111011111111111111011101100101 +10111001011000000000100000000000 +00110100000000100000000000000100 +11111011111111111111100001000000 +01000100001000000000000000000011 +10111001011000000000100000000000 +11111000000000000000010011110100 +00101001011000010000001101011000 +00101000001000100000000000010000 +00110100000000010000000000000000 +00101000010000110000000001100100 +01000100011000000000000000000100 +00110100000000010000000000000001 +01011001011000010000000000000100 +01011000010000000000000001100100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001000100000000000110000 +01111000000001000000000000000001 +01111000000001010000000000000001 +00101000010011010000000000010000 +00101000001000100000001101011000 +00110100000000110000000000000010 +00111000100001000111000100111000 +00101000010011000000000000010000 +00111000101001011001000100010100 +00110100000000100000000000000010 +10111000001000000101100000000000 +11111011111111111111011101000010 +00101001100000010000000000001000 +01011100001000000000000000011110 +00010001011000100000000010101000 +00110100000000010000000010000000 +00100000010000100000000011000000 +01000100010000010000000000000100 +00010001011000100000000010111000 +00100000010000100000000011000000 +01011100010000010000000000001000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000100 +00110100000000110000000000000001 +00111000100001000111000101000100 +11111011111111111111011100110011 +11100000000000000000000000010100 +10111001011000000000100000000000 +11111000000000000001001011011000 +00101001101000100000000000001100 +00101001101000010000000000001000 +10111000001000100000100000000000 +00101001100000100000000000000000 +01000100001000000000000000000101 +00101000010000110000000000110100 +10111001011000000000100000000000 +00110100000000100000000000000000 +11100000000000000000000000000100 +00101000010000110000000000110100 +10111001011000000000100000000000 +00110100000000100000000000000001 +11011000011000000000000000000000 +10111001011000000000100000000000 +11111000000000000000010101010011 +10111001011000000000100000000000 +11111000000000000000011010011101 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +01111000000001010000000000000001 +00110100000000100000000000000010 +00110100000000110000000000000010 +00111000100001000111000100111000 +00111000101001011001000100100100 +10111000001000000101100000000000 +11111011111111111111011100001101 +10111001011000000000100000000000 +11111000000000000000010011000101 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000110100000000000 +00110100000000100000000000001111 +10111000001000000101100000000000 +10111000100000000110000000000000 +01000100100000100000000000100101 +01111000000001000000000000000001 +01111000000001010000000000000001 +00110100000000100000000000000010 +00110100000000110000000000000010 +00111000100001000111000100111000 +00111000101001011001000100110100 +11111011111111111111011011110101 +00110100000000010000000000000001 +01000101100000010000000000000100 +00110100000000010000000000001100 +01011101100000010000000000011010 +11100000000000000000000000000110 +10111001011000000000100000000000 +00110101011000100000000100000000 +11111000000000000000111111000001 +00110100000011000000000000001111 +11100000000000000000000000010100 +00101001011000010000001101011000 +10111001101000000001000000000000 +00110111100000110000000000010100 +00101000001001000000000000010000 +10111001011000000000100000000000 +00110100000011000000000000001111 +00110100100001000000000000111100 +11111000000000000000001110011010 +00101001011000010000001101011000 +00110100000000100001000000000000 +00101000001000010000000000010000 +00101100001000110000000000111100 +01011100011000100000000000000111 +01000000001000010000000000000100 +00100000001000010000000000000001 +01000100001000000000000000000100 +10111001011000000000100000000000 +00110100000000100000000000000110 +11111000000000000000000000001000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00101000001000110000001101011000 +00110100000001000000000000000110 +00101000011000110000000000010000 +01000100010001000000000000000100 +00110100000001000000000000001001 +01011100010001000000000000001000 +11100000000000000000000000000100 +00110100000000100000000000000001 +00110000011000100000000000000101 +11100000000000000000000000000111 +00110100000000100000000000000010 +00110000011000100000000000000101 +11100000000000000000000000000110 +01000000011000110000000000000101 +00110100000000100000000000000001 +01011100011000100000000000000011 +00110100000000100000000001100110 +11100000000000000000000000000010 +00110100000000100000000001100100 +01011000001000100000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000001101011000 +01111000000001010000000000000001 +00111000101001010111000001111100 +00101000001011000000000000010000 +00110100000000010000000000000001 +01000001100000100000000000000101 +01011100010000010000000000000011 +01111000000001010000000000000001 +00111000101001010111000001011100 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000010 +00110100000000110000000000000001 +00111000100001000111000110010100 +11111011111111111111011010101000 +01000001100000100000000000000101 +00110100000000010000000000000001 +01011100010000010000000000000011 +00110100000000010000000000000110 +11100000000000000000000000000010 +00110100000000010000000000001001 +01011001011000010000000000000100 +00110001100000000000000000000101 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000001000100000001101011000 +00101000010000100000000000010000 +01000000010000110000000000101100 +01000100011000000000000000001010 +00110100011000111111111111111111 +01111000000001000000000000000001 +00110000010000110000000000101100 +00111000100001000111000110111000 +00110100000000100000000000000010 +00110100000000110000000000000001 +11111011111111111111011010001110 +00110100000000010000000000000001 +11100000000000000000000000000011 +11111011111111111111111111010000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111011100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000111000000000000 +00101000001000100000001101011000 +10111000001000000101100000000000 +00101000010011010000000000010000 +00101000001000100000000000001100 +01000100010000000000000000000100 +00110100000000010000000000000011 +00110001101000010000000000101100 +11100000000000000000000000001000 +00110100000000100000000000000110 +11111011111111111111011101010100 +00110100000011000000000000000000 +01000100001011000000000000001100 +10111001011000000000100000000000 +11111011111111111111111111011000 +01000100001000000000000000011101 +10111001011000000000100000000000 +00110100000000100000000000000110 +00110100000000110000001111101000 +11111011111111111111011011001011 +10111001011000000000100000000000 +00110100000000100001000000000000 +11111000000000000000001110010001 +10111000001000000110000000000000 +01000001011000100000001110100001 +00110100000000010000000000001100 +01011100010000010000000000001011 +10111001011000000000100000000000 +10111001110000000001000000000000 +00110111100000110000000000011000 +00110101101001000000000000111100 +11111000000000000000001100011000 +00101101101000100000000000111100 +00110100000000010001000000000001 +01011100010000010000000000000011 +00110100000000010000000001100101 +01011001011000010000000000000100 +01011101100000000000000000000011 +10111001011000000000100000000000 +11111000000000000000101010010100 +00101001011000010000001101011000 +00101000001000010000000000010000 +00101000001000010000000000101000 +01011001011000010000000000001000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000100100 +11000011101000000000000000000000 +00110111100111001111111111011100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000111000000000000 +00101000001000100000001101011000 +10111000001000000101100000000000 +00101000010011000000000000010000 +00101000001000100000000000001100 +01000100010000000000000000000100 +00110100000000010000000000000011 +00110001100000010000000000101100 +11100000000000000000000000001000 +00110100000000100000000000000110 +11111011111111111111011100011010 +00110100000011010000000000000000 +01000100001011010000000000001100 +10111001011000000000100000000000 +11111011111111111111111110011110 +01000100001000000000000000011000 +00110100000000100001000000000001 +10111001011000000000100000000000 +11111000000000000000001101011011 +10111000001000000110100000000000 +00110100000000100000000000000110 +10111001011000000000100000000000 +00110100000000110011101010011000 +11111011111111111111011010001101 +01000001011000100000001110100001 +00110100000000010000000000001100 +01011100010000010000000000001011 +10111001011000000000100000000000 +10111001110000000001000000000000 +00110111100000110000000000011000 +00110101100001000000000000111100 +11111000000000000000001011011110 +00101101100000100000000000111100 +00110100000000010001000000000010 +01011100010000010000000000000011 +00110100000000010000000001101000 +01011001011000010000000000000100 +00101001100000010000000000101000 +01011001011000010000000000001000 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000100100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001000100000001101011000 +00101000001011010000000000001100 +10111000001000000101100000000000 +00101000010011000000000000010000 +01000101101000000000000000000100 +00110100000000010000000000000011 +00110001100000010000000000101100 +11100000000000000000000000001011 +00110100000000100000000000000110 +11111011111111111111011011100111 +01000100001011010000000000010000 +00101001100000010000000000000000 +00101000001000100000000000001000 +10111001011000000000100000000000 +11011000010000000000000000000000 +10111001011000000000100000000000 +11111011111111111111111101101000 +01000100001000000000000000011100 +00101001100000010000000000000000 +00101000001000100000000000000000 +10111001011000000000100000000000 +11011000010000000000000000000000 +10111001011000000000100000000000 +00110100000000100000000000000110 +00110100000000110011101010011000 +11111011111111111111011001010111 +00101001100000010000000000101000 +00110100000000100000000000000000 +01011001011000010000000000001000 +00101001100000010000000000000000 +00101000001000110000000000000100 +10111001011000000000100000000000 +11011000011000000000000000000000 +00110100000000100000000000000001 +01011100001000100000000000001000 +00110100000000010000000001100111 +01011001011000010000000000000100 +00101001100000010000000000000000 +00101000001000100000000000001000 +10111001011000000000100000000000 +11011000010000000000000000000000 +11100000000000000000000000000100 +00110100000000100000000000000010 +01011100001000100000000000000010 +01011001011000000000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111011100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000111000000000000 +00101000001000100000001101011000 +10111000001000000101100000000000 +00101000010011000000000000010000 +00101000001000100000000000001100 +01000100010000000000000000000100 +00110100000000010000000000000011 +00110001100000010000000000101100 +11100000000000000000000000001000 +00110100000000100000000000000110 +11111011111111111111011010101100 +00110100000011010000000000000000 +01000100001011010000000000001100 +10111001011000000000100000000000 +11111011111111111111111100110000 +01000100001000000000000000011000 +00101001100000110000000000101000 +10111001011000000000100000000000 +00110100000000100000000000000110 +11111011111111111111011000100011 +10111001011000000000100000000000 +00110100000000100001000000000010 +11111000000000000000001011101001 +10111000001000000110100000000000 +01000001011000100000001110100001 +00110100000000010000000000001100 +01011100010000010000000000001011 +10111001011000000000100000000000 +10111001110000000001000000000000 +00110111100000110000000000011000 +00110101100001000000000000111100 +11111000000000000000001001110000 +00101101100000100000000000111100 +00110100000000010001000000000011 +01011100010000010000000000000011 +00110100000000010000000001101010 +01011001011000010000000000000100 +00101001100000010000000000101000 +01011001011000010000000000001000 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000100100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001000100000001101011000 +00101000001011010000000000001100 +10111000001000000110000000000000 +00101000010010110000000000010000 +01000101101000000000000000000100 +00110100000000010000000000000011 +00110001011000010000000000101100 +11100000000000000000000000000111 +00110100000000100000000000000110 +11111011111111111111011001111001 +01000100001011010000000000010001 +10111001100000000000100000000000 +11111011111111111111111011111110 +01000100001000000000000010011100 +00101001011000110000000000110000 +10111001100000000000100000000000 +00110100000000100000000000000110 +11111011111111111111010111110001 +10111001100000000000100000000000 +00110100000000100001000000000011 +11111000000000000000001010110111 +00110100000000010000000001101100 +00110001011000010000000000010000 +00101001011000010000000000010100 +01000100001000000000000000000011 +00110100000000010000000001101110 +00110001011000010000000000010000 +01000001011001100000000000010000 +01111000000001000000000000000001 +01111000000001010000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000010 +00110100000000110000000000000001 +00111000100001000111000111001100 +00111000101001011001000110001000 +00110100110001101111111110010100 +11111011111111111111010110000000 +01000001011000100000000000010000 +00110100000000010000000000001000 +00110100010000101111111110010100 +00100000010000100000000011111111 +01010100010000010000000001111110 +01111000000000010000000000000001 +00111100010000100000000000000010 +00111000001000011001000101100100 +10110100001000100000100000000000 +00101000001000010000000000000000 +11000000001000000000000000000000 +00101001011000010000000000000000 +00110100000000100000000000000000 +00110100000000110000000000000000 +00101000001001010000000000101100 +00110100000001000000000000000000 +10111001100000000000100000000000 +11011000101000000000000000000000 +01011100001000000000000001110000 +00110100000000010000000001101101 +00110001011000010000000000010000 +00101001011000010000000000000000 +00110100000000100000000000000001 +00101000001000110000000000100100 +10111001100000000000100000000000 +11011000011000000000000000000000 +01011100001000000000000001101000 +00110100000000010000000001101110 +00110001011000010000000000010000 +00101001011000010000000000000000 +00110100000000100000000000000001 +00110111100000110000000000010100 +00101000001001000000000000101000 +10111001100000000000100000000000 +11011000100000000000000000000000 +00110100000000100000000000000001 +01011100001000100000000001011110 +00101011100000010000000000010100 +01111000000001000000000000000001 +00110100000000100000000000000010 +00000000001001010000000000010000 +00111100001000010000000000010000 +01011001011001010000000000011100 +01011001011000010000000000011000 +00110100000000110000000000000001 +10111001100000000000100000000000 +00111000100001000111000111100000 +11111011111111111111010101010000 +00101001011001010000000000011000 +01111000000001000000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000010 +00110100000000110000000000000001 +00111000100001000111001000000100 +11111011111111111111010101001001 +00110100000000010000000001101111 +00110001011000010000000000010000 +00101001011000010000000000000000 +00110100000000100000000000000001 +00101000001000110000000000100000 +10111001100000000000100000000000 +11011000011000000000000000000000 +01011100001000000000000001000100 +00110100000000010000000001110000 +00110001011000010000000000010000 +00101001011000010000000000000000 +00101000001000100000000000110000 +10111001100000000000100000000000 +11011000010000000000000000000000 +01011100001000000000000000111101 +00110100000000010000000001110001 +00110001011000010000000000010000 +00101001011000010000000000000000 +00110100000000100000000000000010 +00101000001000110000000000100100 +10111001100000000000100000000000 +11011000011000000000000000000000 +01011100001000000000000000110101 +00110100000000010000000001110010 +00110001011000010000000000010000 +00101001011000010000000000000000 +00110100000000100000000000000010 +00110111100000110000000000010100 +00101000001001000000000000101000 +10111001100000000000100000000000 +11011000100000000000000000000000 +00110100000000100000000000000001 +01011100001000100000000000101011 +00101011100001010000000000010100 +01111000000001000000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000010 +00110100000000110000000000000001 +00111000100001000111001000101000 +11111011111111111111010100100001 +00101011100000010000000000010100 +01111000000001000000000000000001 +00110100000000100000000000000010 +00000000001001010000000000010000 +00111100001000010000000000010000 +01011001011001010000000000100100 +01011001011000010000000000100000 +00110100000000110000000000000001 +10111001100000000000100000000000 +00111000100001000111001001000000 +11111011111111111111010100010110 +00101001011001010000000000100000 +01111000000001000000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000010 +00110100000000110000000000000001 +00111000100001000111001001100100 +11111011111111111111010100001111 +00110100000000010000000001110011 +00110001011000010000000000010000 +00101001011000010000000000000000 +00110100000000100000000000000010 +00101000001000110000000000100000 +10111001100000000000100000000000 +11011000011000000000000000000000 +01011100001000000000000000001010 +00110100000000010000000001110100 +00110001011000010000000000010000 +10111001100000000000100000000000 +00110100000000100001000000000100 +11111000000000000000001000101001 +00110100000000010000000001101001 +01011001100000010000000000000100 +00110100000000010000000000000001 +01011001011000010000000000010100 +00101001011000010000000000101000 +01011001100000010000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000110100000000000 +00101000001000100000001101011000 +10111000001000000101100000000000 +00101000010011000000000000010000 +00101000001000100000000000001100 +01000100010000000000000000000100 +00101001100000110000000000101000 +00110100000000100000000000000110 +11111011111111111111010101000101 +10111001011000000000100000000000 +00110100000000100000000000000110 +11111011111111111111010111000010 +01000100001000000000000000000100 +10111001011000000000100000000000 +11111011111111111111111000100110 +11100000000000000000000000011010 +01000001011000100000001110100001 +00110100000000010000000000001100 +01011100010000010000000000010101 +10111001011000000000100000000000 +10111001101000000001000000000000 +00110111100000110000000000010100 +00110101100001000000000000111100 +11111000000000000000000110001111 +00101101100000010000000000111100 +00110100000000100001000000000011 +01011100001000100000000000000110 +01000001100000100000000000000101 +00110100000000010000000000000001 +01011100010000010000000000001010 +00110100000000010000000001101010 +11100000000000000000000000000111 +00110100000000100001000000000101 +01011100001000100000000000000110 +01000001100000100000000000000101 +00110100000000010000000000000010 +01011100010000010000000000000011 +00110100000000010000000001101011 +01011001011000010000000000000100 +00101001100000010000000000101000 +01011001011000010000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111011000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +10111000010000000111100000000000 +00101000001000100000001101011000 +00101000001011100000000000001100 +10111000001000000110000000000000 +00101000010010110000000000010000 +00101101011011010000000001001000 +01111101101011010000000000000000 +01000101110000000000000000000100 +00110100000000010000000000000011 +00110001011000010000000000101100 +11100000000000000000000000001100 +00110100000000100000000000000110 +11111011111111111111010110001010 +01000100001011100000000000011000 +01000101101000000000000000000101 +00101001011000010000000000000000 +00101000001000110000000000110000 +10111001100000000000100000000000 +11011000011000000000000000000000 +10111001100000000000100000000000 +11111011111111111111111000001010 +01000100001000000000000000101001 +01000101101000000000000000001000 +00101001011000010000000000000000 +00110100000000100000000000000000 +00110100000000110000000000000000 +00101000001001010000000000101100 +00110100000001000000000000000000 +10111001100000000000100000000000 +11011000101000000000000000000000 +00101001011000010000000001001100 +00110100000000100000001111101000 +11111000000000000100100100110000 +10111000001000000001100000000000 +00110100000000100000000000000110 +10111001100000000000100000000000 +11111011111111111111010011110010 +01000001100000100000001110100001 +00110100000000010000000000001100 +01011100010000010000000000010101 +10111001100000000000100000000000 +10111001111000000001000000000000 +00110111100000110000000000011100 +00110101011001000000000000111100 +11111000000000000000000101000011 +00101101011000100000000000111100 +00110100000000010001000000000100 +01011100010000010000000000001101 +01000101101000000000000000000101 +00101001011000010000000000000000 +00101000001000100000000000110000 +10111001100000000000100000000000 +11011000010000000000000000000000 +01000001011000100000000000000101 +00110100000000010000000000000001 +01011100010000010000000000000011 +00110100000000010000000001101011 +11100000000000000000000000000010 +00110100000000010000000001101000 +01011001100000010000000000000100 +00101001011000010000000000101000 +01011001100000010000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000101000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001000100000001101011000 +00110100000011010000000000000001 +10111000001000000101100000000000 +00101000010011000000000000010000 +00101001100000100000000000000000 +01011001100011010000000000001000 +00101000010000100000000000001100 +11011000010000000000000000000000 +01000001100000100000000000000101 +00110100000000010000000000000000 +01011100010011010000000000000100 +10111001011000000000100000000000 +00110100000000100001000000000101 +11111000000000000000000110000110 +00110100000000100000000000000001 +01011001100000100000000001000000 +00110100000011011111111111111111 +01011100001000000000000000011011 +01000001100000100000000000000101 +00110100000000010000000000000010 +01011100010000010000000000000011 +00110100000000010000000000001001 +11100000000000000000000000000010 +00110100000000010000000000000110 +01011001011000010000000000000100 +01111000000000010000000000000001 +00111000001000011011000011001000 +00101000001000100000000000000000 +00110100000000010000000000000100 +00110100000011010000000000000000 +01011100010000010000000000001110 +00110100000000010000000001110101 +01011001011000010000000000000100 +01111000000000010000000000000001 +00111000001000010111001010001000 +11111000000000000010100110001110 +11111000000000000010101100110111 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000010111001010111000 +11111000000000000010100110001001 +01111000000000010000000000000001 +00111000001000010111001011110100 +11111000000000000010100110000110 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00000000010000110000000000011000 +00110000001000100000000000000011 +00110000001000110000000000000000 +00000000010000110000000000010000 +00110000001000110000000000000001 +00000000010000110000000000001000 +00110000001000110000000000000010 +11000011101000000000000000000000 +01000000001000100000000000000000 +01000000001000110000000000000011 +00111100010000100000000000011000 +10111000011000100001000000000000 +01000000001000110000000000000001 +01000000001000010000000000000010 +00111100011000110000000000010000 +00111100001000010000000000001000 +10111000010000110001000000000000 +10111000010000010000100000000000 +11000011101000000000000000000000 +01000000001000100000000000000000 +01000000001000010000000000000001 +00111100010000100000000000001000 +10111000010000010000100000000000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001000110000000000110000 +00101000001000100000001101011000 +10111000001000000101100000000000 +00101000011000110000000000001100 +00101000010000100000000000010000 +00101000001011000000000001001100 +00101000011001000000000000010000 +00110100000000110000000010111010 +01001000100000110000000000010111 +00101000010000100000000000000000 +00101000010000110000000000000100 +00110100000000100000000000000001 +11011000011000000000000000000000 +01111100001000010000000000000001 +11001000000000010110100000000000 +10111001011000000000100000000000 +11111000000000000000100110111001 +00101001011000010000000000110000 +00100001101011010000000000101110 +00110101101011010000000000000110 +00101000001000010000000000001100 +00101000001000010000000000010000 +01000101101000010000000000001001 +01111000000000010000000000000001 +00111000001000010111001100101000 +10111001101000000001000000000000 +11111000000000000010100101000111 +00101001011000010000000000110000 +00101000001000010000000000001100 +01011000001011010000000000010000 +00110001100011010000000000110000 +00110100000000010000000001001110 +00001101100000010000000000000010 +00110100000000010000000000000011 +00001101100000010000000001000000 +00110100000000010000000000001010 +00001101100000010000000001000010 +00110100000000010000100000000000 +00001101100000010000000001000100 +00110100000000010011000011011110 +00001101100000010000000001000110 +00110100000000011010110100000001 +00001101100000010000000001001000 +00110100000000010010000000000000 +00001101100000010000000001001010 +00101001011000010000001101011000 +00101000001000100000000000010000 +00101000010000110000000000010100 +01000000010000010000000000000100 +01000100011000000000000000000010 +00111000001000010000000000000100 +00101000010000100000000000001000 +01000100010000000000000000000010 +00111000001000010000000000001000 +00001101100000010000000001001100 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00110100001000010000000001000000 +10111000010000000110000000000000 +11111011111111111111111110110010 +00101101011001010000000001000100 +00101101011001000000000001000110 +01111000000001110000000000000001 +00111100101001010000000000001000 +00000000100001100000000000001000 +00111000111001111000111011001000 +10111000101001100010100000000000 +00101000111001100000000000000000 +01100100001000010000000000000011 +00101101011000110000000001001000 +11100100101001100010100000000000 +00101101011000100000000001001010 +10100000001001010000100000000000 +01000100001000000000000000010000 +00111100100001000000000000001000 +00000000011000010000000000001000 +00100000100001001111111111111111 +10111000100000010010000000000000 +00100000011000110000000011111111 +00111000000000011101111010101101 +11100100100000010010000000000000 +01100100011000110000000000000001 +10100000100000110001100000000000 +01000100011000000000000000000110 +00110100000000010010000000000000 +01011100010000010000000000000100 +00110101011000010000000001001100 +11111011111111111111111110010110 +01011001100000010000000000101100 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +00101000001000010000001101011000 +00100000010011011111111111111111 +00101000001000010000000000010000 +01000000001001010000000000000101 +01000100101000000000000000000011 +00110100000000010010000000000000 +01011101101000010000000000001010 +01111000000001000000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111001101000000 +10111001101000000011000000000000 +11111011111111111111001110100010 +00110100000000010000000000000000 +11100000000000000000000001010001 +00101001100010110000000001001100 +00110100000000110000000000001000 +01000001011000010000000000000000 +00100000001000010000000011110000 +00111000001000010000000000001100 +00110001011000010000000000000000 +00110100000000010000000000000101 +00110001011000010000000000100000 +00101001100000100000000000110000 +00110101011000010000000000100010 +00101000010000100000000000010100 +11111000000000000100100010001101 +00101001100000010000000000110000 +00101000001000010000000000010100 +00101100001000010000000000001000 +00001101011011010000000000110110 +00000000001000100000000000001000 +00110001011000010000000000101011 +00110100000000010000000000000011 +00001101011000010000000000101100 +00110100000000010000100000000000 +00001101011000010000000000110000 +00110100000000010011000011011110 +00001101011000010000000000110010 +00110100000000011010110100000001 +00001101011000010000000000110100 +00110001011000100000000000101010 +00110100000000010001000000000011 +01000101101000010000000000000101 +00110100000000010001000000000100 +00110100000000100000000000001000 +01011101101000010000000000101101 +11100000000000000000000000010111 +00101001100000010000001101011000 +00110101011000100000000000111000 +00101000001000010000000000010000 +00101000001000110000000000010100 +01000100011000000000000000000101 +01000000001000010000000000110100 +00110001011000010000000000111000 +00110000010000000000000000000001 +11100000000000000000000000000111 +01000000001000010000000000110100 +00111100001000010000000000001000 +00111000001000010000000000000001 +00000000001000110000000000001000 +00110001011000110000000000111000 +00110000010000010000000000000001 +00101001100000010000001101011000 +00101000001000100000000000010000 +00110101011000010000000000111010 +00101000010000100000000000110000 +11111011111111111111111100110010 +00110100000000100000000000010100 +11100000000000000000000000010110 +00101001100000010000001101011000 +00101000001000100000000000010000 +00110101011000010000000000111000 +00101000010000100000000000011100 +11111011111111111111111100101011 +00101001100000010000001101011000 +00101000001000100000000000010000 +00110101011000010000000000111100 +00101000010000100000000000011000 +11111011111111111111111100100110 +00101001100000010000001101011000 +00101000001000100000000000010000 +00110101011000010000000001000000 +00101000010000100000000000100100 +11111011111111111111111100100001 +00101001100000010000001101011000 +00101000001000100000000000010000 +00110101011000010000000001000100 +00101000010000100000000000100000 +11111011111111111111111100011100 +00110100000000100000000000011000 +00110100010000010000000000110000 +00110001011000000000000000000010 +00110001011000010000000000000011 +00001101011000100000000000101110 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +10111000011000000111000000000000 +00110100010000100000000000100010 +10111000001000000110000000000000 +10111000011000000000100000000000 +00110100000000110000000000001000 +10111000100000000110100000000000 +11111000000000000100100000110101 +00110101011000010000000000101010 +11111011111111111111111100010100 +00001101110000010000000000001000 +00110101011000010000000000101100 +11111011111111111111111100010001 +10111000001000000010100000000000 +00110100000001000000000000000011 +00101101011000110000000000110000 +00101101011000100000000000110010 +00101101011000010000000000110100 +01000100101001000000000000000111 +01111000000001000000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111001101110100 +11100000000000000000000000100010 +00111100011001010000000000001000 +01111000000001000000000000000001 +00000000010000110000000000001000 +00111000100001001000111011001000 +10111000101000110010100000000000 +00101000100000110000000000000000 +01000100101000110000000000000111 +01111000000001000000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111001111000100 +11100000000000000000000000010101 +00111100010001010000000000001000 +00000000001000110000000000001000 +00100000101001011111111111111111 +10111000101000110010100000000000 +00111000000000101101111010101101 +01000100101000100000000000000111 +01111000000001000000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111001111111100 +11100000000000000000000000001001 +00100000001001010000000011111111 +00110100000000010000000000000001 +01000100101000010000000000001000 +01111000000001000000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111010001000000 +11111011111111111111001100001001 +11100000000000000000000000101000 +00101101011000010000000000110110 +01000101101000000000000000000010 +00001101101000010000000000000000 +00110100000000100001000000000011 +01000100001000100000000000000100 +00110100000000100001000000000100 +01011100001000100000000000100001 +11100000000000000000000000010010 +00101001100000010000001101011000 +00110101011011100000000000111000 +00101000001011010000000000010000 +10111001110000000000100000000000 +11111011111111111111111011010101 +00100000001000010000000011111111 +00001101101000010000000001001000 +10111001110000000000100000000000 +11111011111111111111111011010001 +00000000001000010000000000001000 +00110001101000010000000001010000 +00110101011000010000000000111010 +11111011111111111111111011000010 +00101001100000100000001101011000 +00101000010000100000000000010000 +01011000010000010000000001001100 +11100000000000000000000000001111 +00101001100000010000001101011000 +00101000001011000000000000010000 +00110101011000010000000000111000 +11111011111111111111111010111010 +01011001100000010000000001011000 +00110101011000010000000000111100 +11111011111111111111111010110111 +01011001100000010000000001010100 +00110101011000010000000001000000 +11111011111111111111111010110100 +01011001100000010000000001100000 +00110101011000010000000001000100 +11111011111111111111111010110001 +01011001100000010000000001011100 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00100000010000101111111111111111 +10111000001000000101100000000000 +11111011111111111111111100011111 +10111000001000000001000000000000 +00110100000000110000000000000000 +10111001011000000000100000000000 +11111000000000000000011110110101 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00100000110010001111111111111111 +00001001000010000000001111101000 +10111000010000000101000000000000 +00111000000000101000000000000000 +00111100101010110000000000010000 +00000000110001110000000000010000 +10110101000000100100000000000000 +10111000100000000100100000000000 +01011011100001000000000000010000 +00000001000010000000000000010000 +01111000000001000000000000000001 +01011011100000110000000000001100 +01011011100001010000000000010100 +01011011100001100000000000011000 +00110100000000100000000000000100 +00110100000000110000000000000010 +00111000100001000111010010000100 +10111001010000000010100000000000 +10111001001000000011000000000000 +10111001011001110011100000000000 +11111011111111111111001010110100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111011000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00010100001010110000000000011111 +10111000001000000010100000000000 +00111001011010110000000000000001 +00010101011011010000000000011111 +10111000010000000010000000000000 +10111000011000000110000000000000 +10111001101000000000100000000000 +10111000101000000001100000000000 +10111001011000000001000000000000 +11111000000000000100011010100101 +01011011100000010000000000011100 +01011011100000100000000000100000 +00110111100000010000000000011100 +00110100000000100000001111101000 +11111011111111111111100000101111 +10111000001000000111100000000000 +00101011100000010000000000011100 +01111000000000110000000000000001 +00111000011000111000111010111000 +01011011100000010000000000100100 +00101011100000010000000000100000 +00101000011000100000000000000000 +01011011100000010000000000101000 +00110111100000010000000000100100 +11111011111111111111100000100101 +10111000001000000111000000000000 +00111101111000010000000000010000 +00110100000000100000001111101000 +11111000000000000100011011010111 +00111101110000100000000000010000 +10111000001000000010000000000000 +00010100001000110000000000011111 +10110100100000100001000000000000 +00000001110000010000000000010000 +11110100100000100010000000000000 +10110100011000010000100000000000 +10110100100000010000100000000000 +10111001101000000001100000000000 +10111001011000000010000000000000 +11111000000000000100011010000111 +00101011100000110000000000100100 +00101011100001000000000000101000 +01011001100000010000000000001000 +01011001100000100000000000001100 +10111001101000000000100000000000 +10111001011000000001000000000000 +11111000000000000100011010000000 +01011001100000010000000000000000 +01011001100000100000000000000100 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000101000 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101001111100110000 +01011000010000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00101000001010110000000000011000 +10111000001000000110100000000000 +01000101011000000000000000010100 +01111000000011000000000000000001 +00111001100011001100001010011000 +00101001100000010000000000000000 +00110100000000100000000000000001 +11111000000000000001001011011011 +00110100000000100000000000000000 +00110001101000000000000000100000 +10111001011000000000100000000000 +00110100000000110000000100100000 +00101001011011110000000010010000 +00101001011011100000000010010100 +00101001011011010000000010011000 +11111000000000000100011111001100 +00101001100000010000000000000000 +01011001011011110000000010010000 +01011001011011100000000010010100 +01011001011011010000000010011000 +00110100000000100000000000000000 +11111000000000000001001011001101 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000110100000000000 +00101000001000010000001101011000 +00110100000000100000000000000001 +00101001101010110000000000011000 +00101000001011000000000000010000 +01111000000000010000000000000001 +00111000001000011100001010011000 +00101000001000010000000000000000 +11111000000000000001001010110111 +00101001100000010000000000000000 +00110100000000100000000000000000 +00110100000000110000000000000000 +00101000001001100000000000011100 +00110101011001000000000000101000 +10111001101000000000100000000000 +00110101011001010000000000101100 +11011000110000000000000000000000 +00110100000000101111111111111111 +01011100001000000000000001000011 +00101001100000010000000000000000 +00110100000000100000000000000000 +00101000001000110000000000110100 +10111001101000000000100000000000 +11011000011000000000000000000000 +00110101101000100000001111111000 +10111001011000000000100000000000 +00110100000000110000000000010000 +11111000000000000100100011001111 +00101001011000010000000001001000 +00101001011000100000000000101100 +01001100010000010000000000000011 +11111000000000000100011010011010 +01011001011000010000000001001000 +00101001100000010000000000000000 +00101000001000100000000000011000 +00101001011000010000000001001000 +11011000010000000000000000000000 +00101001100000010000000001011000 +00101101100000100000000001010100 +01011001011000000000000100011000 +00111100001000010000000000010000 +01011001011000000000000000010100 +10111000001000100000100000000000 +01011001011000010000000000011000 +00101001100000010000000001100000 +00101101100000100000000001011100 +00111100001000010000000000010000 +10111000001000100000100000000000 +01011001011000010000000000011100 +00101001100000010000000000011100 +00101101100000100000000000011000 +00111100001000010000000000010000 +10111000001000100000100000000000 +01011001011000010000000000100000 +00101001100000010000000000100100 +00101101100000100000000000100000 +00111100001000010000000000010000 +10111000001000100000100000000000 +01111000000000100000000000000001 +01011001011000010000000000100100 +00111000010000100111010010011100 +00110101011000010000000001100000 +11111000000000000100100000001100 +00101001011000010000000000010000 +00110101011000100000000010100000 +01011001011000000000000001011000 +00111000001000010000000000000001 +01011001011000010000000000010000 +00101001101000010000000000111000 +00101000001000110000000000000000 +10111001101000000000100000000000 +11011000011000000000000000000000 +01111000000000010000000000000001 +00111000001000011001111100110000 +00101000001000010000000000000000 +00110100000000100000000000000000 +01011001011000010000000001011100 +01111000000000010000000000000001 +00111000001000011011010111011000 +01011000001000000000000000000000 +01111000000000010000000000000001 +00111000001000011100001010011000 +00101000001000010000000000000000 +11111000000000000001001001101100 +00110100000000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101000010001010000000000000100 +00101000010001000000000000001000 +00101000010001100000000000000000 +00101000001000010000000000011000 +00101000010000100000000000001100 +01011000001001100000000010110000 +01011000001001010000000010110100 +01011000001001000000000010111000 +01011000001000100000000010111100 +00101000011000100000000000001000 +00101000011001010000000000000000 +00101000011001000000000000000100 +00101000011000110000000000001100 +01011000001000100000000011001000 +01011000001001010000000011000000 +01011000001001000000000011000100 +01011000001000110000000011001100 +01111000000000010000000000000001 +00111000001000011011010111011000 +00110100000000100000000000000001 +01011000001000100000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000011010000000000000001 +00111001101011011100001010011000 +00101000001011000000000000011000 +10111000001000000101100000000000 +00101001101000010000000000000000 +00110100000000100000000000000001 +11111000000000000001001001000001 +00101001011000010000000011000100 +00101001011001000000000010111000 +00101001011000110000000010111100 +00101001011000100000000011000000 +01011001100000010000000011011100 +00101001011000010000000011010100 +01011001100001000000000011010000 +01011001100000110000000011010100 +00101001011001000000000011001000 +00101001011000110000000011001100 +01011001100000100000000011011000 +00101001011000100000000011010000 +01011001100000010000000011101100 +00101001101000010000000000000000 +01011001100000100000000011101000 +01011001100001000000000011100000 +01011001100000110000000011100100 +00110100000000100000000000000000 +11111000000000000001001000101110 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111000000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +10111000001000000110000000000000 +10111000011000000110100000000000 +00101000001000010000001101011000 +00010001011000110000000010110000 +00101000001000100000000000010000 +00100000011000110000000011000000 +00110100000000010000000010000000 +01000100011000010000000000001010 +00010001011001000000000011000000 +00100000100001000000000011000000 +01000100100000010000000000000111 +00010001011001000000000011010000 +00100000100001000000000011000000 +01000100100000010000000000000100 +00010001011001000000000011100000 +00100000100001000000000011000000 +01011100100000010000000000011001 +01111000000000010000000000000001 +00111000001000011011010111011100 +00101000001000100000000000000000 +00110100000011000000000000000000 +00110100010000100000000000000001 +01011000001000100000000000000000 +00110100000000010000000000000101 +01001100001000100000000011111001 +00010001011001000000000011000000 +00010001011001010000000011010000 +00010001011001100000000011100000 +00100000100001000000000011000000 +00100000101001010000000011000000 +00100000110001100000000011000000 +01111000000000010000000000000001 +01111000000000100000000000000001 +01111100011000110000000010000000 +01111100100001000000000010000000 +01111100101001010000000010000000 +01111100110001100000000010000000 +00111000010000101001000111000100 +00111000001000010111010010101100 +11111000000000000010011010111100 +11100000000000000000000011101001 +00101000010000010000000000000000 +00101000001000110000000000111000 +01000100011000000000000000000100 +10111001011000000000100000000000 +00110100000000100000000000000000 +11011000011000000000000000000000 +01111000000000010000000000000001 +00111000001000011011010111011100 +01011000001000000000000000000000 +00101001011000010000000001011000 +00110101011000100000000010100000 +00110111100011100000000000110100 +00110100001000010000000000000001 +01011001011000010000000001011000 +00101001100000010000000000111000 +00110101011100010000000011000000 +00101000001000110000000000000000 +10111001100000000000100000000000 +11011000011000000000000000000000 +01111000000000010000000000000001 +00111000001000011011010111011000 +00101001011000100000000011101000 +01011000001000000000000000000000 +00101001011000010000000011101100 +00101001011001000000000011100000 +00101001011000110000000011100100 +01011011100000100000000000101100 +01011011100000010000000000110000 +00110101011000100000000010110000 +00110111100000010000000000100100 +01011011100001000000000000100100 +01011011100000110000000000101000 +11111000000000000000101011011000 +00101001011000100000000011011000 +00101001011000010000000011011100 +00101001011001000000000011010000 +00101001011000110000000011010100 +01011011100000100000000000111100 +01011011100000010000000001000000 +10111010001000000001000000000000 +10111001110000000000100000000000 +01011011100001000000000000110100 +01011011100000110000000000111000 +11111000000000000000101011001101 +00101011100000010000000000100100 +10111001110000000001000000000000 +01011001011000010000000000110000 +00101011100000010000000000101000 +01011001011000010000000000110100 +00101011100000010000000000101100 +01011001011000010000000000111000 +00101011100000010000000000110000 +01011001011000010000000000111100 +00110101011000010000000000110000 +11111000000000000000101011000010 +01111000000000010000000000000001 +00111000001000011011000010111100 +00101000001000010000000000000000 +00101001100000100000000000011100 +10111000001000100000100000000000 +00000000001000010000000000010000 +00100000001000010000000000001111 +01000100001000000000000000101001 +00101001011000110000000010110000 +00101001011001000000000010110100 +00101001011001010000000010111000 +00101001011001100000000010111100 +01111000000000100000000000000001 +10111001100000000000100000000000 +00111000010000100111010011011100 +11111011111111111111111001100100 +00101001011000110000000011000000 +00101001011001000000000011000100 +00101001011001010000000011001000 +00101001011001100000000011001100 +01111000000000100000000000000001 +10111001100000000000100000000000 +00111000010000100111010011101000 +11111011111111111111111001011100 +00101001011000110000000011010000 +00101001011001000000000011010100 +00101001011001010000000011011000 +00101001011001100000000011011100 +01111000000000100000000000000001 +10111001100000000000100000000000 +00111000010000100111010011110100 +11111011111111111111111001010100 +00101001011000110000000011100000 +00101001011001000000000011100100 +00101001011001010000000011101000 +00101001011001100000000011101100 +01111000000000100000000000000001 +10111001100000000000100000000000 +00111000010000100111010100000000 +11111011111111111111111001001100 +00101001011000110000000000110000 +00101001011001000000000000110100 +00101001011001010000000000111000 +00101001011001100000000000111100 +01111000000000100000000000000001 +10111001100000000000100000000000 +00111000010000100111010100100100 +11111011111111111111111001000100 +00101001011000010000000000111000 +00101001011000100000000000111100 +00110100000000110000000000000000 +00110100000001000000001111101000 +11111000000000000100010100010000 +00111000000011001000000000000000 +10110100010011000110000000000000 +11110100010011000001100000000000 +01111000000001010000000000000001 +10110100011000010000100000000000 +00111100001000100000000000010000 +00000001100011000000000000010000 +00111000101001011000111010111000 +10111000010011000110000000000000 +00101000101001000000000000000000 +00010100001011100000000000010000 +00101001011000100000000000110100 +00101001011000010000000000110000 +00110100000000110000000000000000 +11111000000000000100010100000001 +10110101100000100011000000000000 +11110101100001100110000000000000 +10110101110000010000100000000000 +00101001011001110000000000011000 +00101001011000110000000000100000 +10110101100000010110000000000000 +00101001011000010000000000011100 +00101001011001000000000000100100 +10110100111000110001100000000000 +10110100011000010001100000000000 +10110100011001000001100000000000 +00010100011001010000000000011111 +01011001011011000000000001000000 +01011001011001100000000001000100 +01001000101011000000000000000100 +01011100101011000000000000000101 +01010100011001100000000000000010 +11100000000000000000000000000011 +01011001011001010000000001000000 +01011001011000110000000001000100 +00101001011000100000000001000100 +00101001011000010000000001000000 +00010100100011110000000000011111 +11001000010000110001100000000000 +11110100011000100001000000000000 +11001000001001010000100000000000 +11001000001000100000100000000000 +10110100100001110010100000000000 +00010100111000100000000000011111 +11110100100001010010000000000000 +10110101111000100111100000000000 +00000000011011000000000000000001 +00111100001000100000000000011111 +10110100100011110111100000000000 +00101001011001000000000000101000 +10111000010011000110000000000000 +00000000001000100000000000000001 +10110100101011000110000000000000 +11110100101011000010100000000000 +10110101111000100111100000000000 +10111000011000000001000000000000 +00010100100000110000000000011111 +10110100101011110111100000000000 +11111000000000000100010011010101 +00010100001011100000000000001000 +00010100001000010000000000011111 +10110101100011100111000000000000 +11110101100011100110000000000000 +10110101111000010000100000000000 +10110101100000010111100000000000 +00101001011000100000000010111000 +00101001011000010000000010111100 +00101001011001000000000010110000 +00101001011000110000000010110100 +00110111100100000000000000110100 +01011011100000100000000000111100 +01011011100000010000000001000000 +10111010001000000001000000000000 +10111010000000000000100000000000 +01011011100001000000000000110100 +00110111100011000000000000100100 +01011011100000110000000000111000 +11111000000000000000101000111111 +10111001100000000001100000000000 +10111001111000000000100000000000 +10111001110000000001000000000000 +11111011111111111111111000001001 +10111010000000000000100000000000 +10111001100000000001000000000000 +11111000000000000000101000011110 +00101011100000010000000000111100 +00101011100100010000000000110100 +00101011100100000000000000111000 +00101011100000100000000001000000 +00110100000000110000000000000000 +01011001101100010000000000000000 +01011001101100000000000000000100 +01011001101000010000000000001000 +01011001101000100000000000001100 +00110100000001000000001111101000 +11111000000000000100010010110000 +00111000000011001000000000000000 +10110100010011000110000000000000 +11110100010011000001000000000000 +01111000000001010000000000000001 +10110100010000010001100000000000 +00111000101001011000111010111000 +00111100011000010000000000010000 +00000001100011000000000000010000 +00101000101001000000000000000000 +10111000001011000110000000000000 +00010100011011010000000000010000 +10111010001000000000100000000000 +00110100000000110000000000000000 +10111010000000000001000000000000 +11111000000000000100010010100001 +10110101100000100001000000000000 +11110101100000100110000000000000 +10110101101000010000100000000000 +01111000000000110000000000000001 +10110101100000010000100000000000 +00111000011000111001111100110000 +01011001011000010000000010001000 +00101000011000010000000000000000 +01011001011000100000000010001100 +01011001011011110000000001010000 +01011001011000010000000001011100 +01011001011011100000000001010100 +00110100000011000000000000000001 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000001000000 +11000011101000000000000000000000 +00110111100111001111111111001000 +01011011100010110000000000101000 +01011011100011000000000000100100 +01011011100011010000000000100000 +01011011100011100000000000011100 +01011011100011110000000000011000 +01011011100100000000000000010100 +01011011100100010000000000010000 +01011011100100100000000000001100 +01011011100100110000000000001000 +01011011100111010000000000000100 +10111000001000000111000000000000 +00101000001000010000001101011000 +00101001110010110000000000011000 +00101000001011010000000000010000 +01111000000000010000000000000001 +00111000001000011011010111011000 +00101000001000010000000000000000 +01000100001000000000000100111100 +01111000000000010000000000000001 +00111000001000011100001010011000 +00101000001000010000000000000000 +00110100000000100000000000000001 +11111000000000000001000011101001 +10111001110000000000100000000000 +10111001011000000001000000000000 +00110111100000110000000000101100 +00101001011100100000000001000000 +00101001011100000000000001000100 +11111011111111111111111010111101 +01000100001000000000000100100101 +00101001011000010000000000101100 +00110100000000100000001111101000 +11111000000000000100010010101100 +10111000001000001001100000000000 +00101011100000010000000000111000 +00101011100011000000000000110100 +00101011100100010000000000110000 +00100000001011111111111111111111 +00001001111011110000001111101000 +00111101100011000000000000010000 +00000000001000010000000000010000 +00010101111011110000000000010000 +10111001100000010110000000000000 +01001100000011000000000000001000 +10111001100000000000100000000000 +10111010011000000001000000000000 +11111000000000000100010011001011 +10111000001000000001100000000000 +00001000001000010000001111101000 +11001001100000110110000000000000 +10110101111000010111100000000000 +10111010001000000001100000000000 +01001101100000000000000000000110 +01111000000000100000000000000001 +00111000010000101000111010111000 +00101000010000010000000000000000 +00110110001000111111111111111111 +10110101100000010110000000000000 +01101001100000100000000000000000 +01100100011000011111111111111111 +10100000010000010000100000000000 +01000100001000000000000000000110 +01111000000000100000000000000001 +00111000010000101000111011001100 +00101000010000010000000000000000 +00110100000000110000000000000000 +10110101100000010110000000000000 +01100100011000110000000000000000 +00000001100000010000000000011111 +10100000011000010001100000000000 +01000100011000000000000000000110 +11001000000100111001100000000000 +01001010011011000000000000000100 +00001001100011000000001111101000 +10110101111011000111100000000000 +00110100000011000000000000000000 +01111000000001000000000000000001 +10111001110000000000100000000000 +00110100000000100000000000000100 +00110100000000110000000000000010 +00111000100001000111010101101000 +10111010001000000010100000000000 +10111001100000000011000000000000 +10111001111000000011100000000000 +11111011111111111111000000101101 +00101001101000010000000000000000 +00110100000000100000000000000000 +00101000001000110000000000000100 +10111001110000000000100000000000 +11011000011000000000000000000000 +00110100001000011111111111111111 +00110100000000100000000000000001 +01010000010000010000000000001100 +01111000000001000000000000000001 +10111001110000000000100000000000 +00110100000000100000000000000100 +00110100000000110000000000000001 +00111000100001000111010110001000 +11111011111111111111000000011111 +00101001101000010000000000000000 +00110100000000100000000000000000 +00101000001000110000000000110100 +10111001110000000000100000000000 +11011000011000000000000000000000 +00101001101000010000000000000000 +00101000001000010000000000010000 +11011000001000000000000000000000 +01011100001000000000000000001010 +00101001011000110000000000010000 +00110100000000101111111111111101 +10100000010000110001000000000000 +01011001011000100000000000010000 +00101011100000100000000000110000 +00101011100000110000000000101100 +10111000011000100001000000000000 +01011100010000010000000000001001 +11100000000000000000000000001010 +01111000000001000000000000000001 +10111001110000000000100000000000 +00110100000000100000000000000100 +00110100000000110000000000000001 +00111000100001000111010110101100 +11111011111111111111000000000111 +11100000000000000000000011000111 +00110100000000010000000000000010 +11100000000000000000000000000110 +00110100000000010000000000000001 +01011101100000100000000000000100 +00101001011000010000000000010100 +01011100001011000000000000000011 +00110100000000010000000000000011 +01011001011000010000000000010100 +00101001011000100000000000010100 +01111000000000010000000000000001 +00111000001000011001000110101100 +00111100010000100000000000000010 +01111000000001100000000000000001 +10110100001000100000100000000000 +00101000001001010000000000000000 +01111000000001000000000000000001 +00111000110001101000000011010000 +10111001110000000000100000000000 +00110100000000100000000000000100 +00110100000000110000000000000001 +00111000100001000111010110111000 +11111011111111111110111111110000 +00101001011000100000000000010100 +01111000000000010000000000000001 +00111000001000011001000110101100 +00111100010000100000000000000010 +10110100001000100001000000000000 +00101000010000100000000000000000 +00110101011000010000000001100000 +11111000000000000100010111110001 +00101001011000100000000000010100 +00110100000000010000000000000100 +00110100010000101111111111111111 +01010100010000010000000001101110 +01111000000000010000000000000001 +00111100010000100000000000000010 +00111000001000011001000110011000 +10110100001000100000100000000000 +00101000001000010000000000000000 +11000000001000000000000000000000 +00101001101000010000000000000000 +00101011100000100000000000110000 +00110100000000110000000000000000 +00101000001001000000000000010100 +00101011100000010000000000101100 +11100000000000000000000000000110 +00101001101000010000000000000000 +00110100000000100000000000000000 +10111001100000000001100000000000 +00101000001001000000000000010100 +00110100000000010000000000000000 +11011000100000000000000000000000 +00101001011000010000000000010000 +00111000001000010000000000000010 +01011001011000010000000000010000 +11100000000000000000000001000010 +00101001011001010000000001001000 +01111000000001000000000000000001 +10111001110000000000100000000000 +00110100000000100000000000000100 +00110100000000110000000000000010 +00111000100001000111010111010000 +10111001100000000011000000000000 +10111001111000000011100000000000 +11111011111111111110111111000101 +00101001101000100000000000000000 +00101001011000010000000001001000 +00101000010000100000000000011000 +10110101111000010000100000000000 +01011001011000010000000001001000 +11011000010000000000000000000000 +00101001011000010000000000010000 +00111000001000010000000000000010 +01011001011000010000000000010000 +00110100000000010000000000000101 +01011001011000010000000000010100 +11100000000000000000000001000011 +00010101111000010000000000011111 +00110100000000100000000000111011 +10011000001011110111100000000000 +11001001111000010000100000000000 +01001000001000100000000000001101 +00101001101000010000000000000000 +00110100000000100000000000000001 +00101000001000110000000000110100 +10111001110000000000100000000000 +11011000011000000000000000000000 +00101001011000010000000001010000 +01011001011000010000000100010000 +00101001011000010000000001010100 +01011001011000010000000100010100 +00110100000000010000000000000100 +01011001011000010000000000010100 +11100000000000000000000000000100 +00101001011000010000000100011000 +00110100001000010000000000000001 +01011001011000010000000100011000 +00101001011000100000000100011000 +00110100000000010000000000001001 +01001100001000100000000000101100 +01011001011000000000000100011000 +11100000000000000000000000010100 +00101001011000110000000001010100 +00101001011000010000000100010100 +00101001011001000000000001010000 +00101001011000100000000100010000 +11001000011000010000100000000000 +11110100001000110001100000000000 +01011001011000010000000010000100 +01111000000000010000000000000001 +00111000001000011001111100110000 +11001000100000100001000000000000 +00101000001000010000000000000000 +11001000010000110001000000000000 +01011001011000100000000010000000 +01000100001000000000000000011100 +00010101111000010000000000011111 +00110100000000110000000001111000 +10011000001011110001000000000000 +11001000010000010001000000000000 +01001100011000100000000000000011 +00110100000000010000000000000011 +11100011111111111111111111010001 +00000000001000010000000000011110 +00101001101000100000000000000000 +10110100001011110111100000000000 +00101001011000010000000001001000 +00010101111011110000000000000010 +00101000010000100000000000011000 +10110101111000010000100000000000 +01011001011000010000000001001000 +11011000010000000000000000000000 +00101001011001010000000001001000 +01111000000001000000000000000001 +10111001110000000000100000000000 +00110100000000100000000000000110 +00110100000000110000000000000001 +00111000100001000111010111101100 +11111011111111111110111101111011 +00101001011000010000000001010000 +01011001011000010000000100010000 +00101001011000010000000001010100 +01011001011000010000000100010100 +00101001011000100000000000010100 +00110100000000010000000000000100 +01000100010000010000000000000100 +00101001011000010000000010010000 +00110100001000010000000000000001 +01011001011000010000000010010000 +00101001011001000000000010001000 +00101001011000110000000010001100 +00010100100000010000000000011111 +10011000011000010001100000000000 +11001000011000010001000000000000 +10011000100000010010000000000000 +11110100010000110001100000000000 +11001000100000010000100000000000 +11001000001000110000100000000000 +01001000001000000000000000000101 +01011100001000000000000000000111 +00110100000000010000000111110100 +01010100010000010000000000000010 +11100000000000000000000000000100 +00101001011000010000000010010100 +00110100001000010000000000000001 +01011001011000010000000010010100 +00101001011001010000000001000100 +00101001011001000000000001000000 +11001010000001010001100000000000 +11110100011100000000100000000000 +11001010010001000001000000000000 +11001000010000010001000000000000 +01001000000000100000000000000111 +00110100000000010000000000000001 +01001000010000000000000000010011 +01011100010000000000000000010001 +00110100000000100000001111101000 +01010100011000100000000000010000 +11100000000000000000000000001110 +11001000000100000000100000000000 +01111100001000100000000000000000 +11001000000100100001100000000000 +11001000011000100001100000000000 +11001000001001010001000000000000 +11110100010000010000100000000000 +11001000011001000001100000000000 +11001000011000010001100000000000 +00110100000000010000000000000001 +01001000011000000000000000000101 +01011100011000000000000000000011 +00110100000000110000001111101000 +01010100010000110000000000000010 +00110100000000010000000000000000 +00100000001000010000000011111111 +01000100001000000000000000000100 +00101001011000010000000010011000 +00110100001000010000000000000001 +01011001011000010000000010011000 +01111000000000010000000000000001 +00111000001000011100001010011000 +00101000001000010000000000000000 +00110100000000100000000000000000 +11111000000000000000111110111001 +00101001101000010000000000000000 +00101000001000110000000000111000 +01000100011000000000000000000100 +10111001011000000000100000000000 +00110100000000100000000000000001 +11011000011000000000000000000000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000101000 +00101011100011000000000000100100 +00101011100011010000000000100000 +00101011100011100000000000011100 +00101011100011110000000000011000 +00101011100100000000000000010100 +00101011100100010000000000010000 +00101011100100100000000000001100 +00101011100100110000000000001000 +00110111100111000000000000111000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00101000001000110000000000111000 +10111000010000000101100000000000 +00101000011000110000000000000000 +11011000011000000000000000000000 +00101001011000100000000000001000 +00101101011000010000000000001100 +01111000000000110000000000000001 +00111100010000100000000000010000 +00111000011000111000111011010000 +10111000010000010000100000000000 +00101000011000100000000000000000 +11111000000000000100001101100100 +00110100001000010000001111101000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111011100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +00101000001011010000000000001100 +10111000001000000101100000000000 +00110111100011000000000000011000 +01000101101000000000000000001000 +10111001100000000001000000000000 +11111011111111111111111111100001 +00110100001000110000001111011110 +00110100000000100000000000000110 +10111001011000000000100000000000 +11111011111111111110111101100010 +11100000000000000000000000110010 +10111001100000000001000000000000 +11111011111111111111111111011010 +10111000001000000111000000000000 +00110100000000100000000000000110 +10111001011000000000100000000000 +11111011111111111110111111011011 +01000100001011010000000000100110 +00101011100011100000000000011100 +00101011100011010000000000011000 +00101001011000010000000000111000 +10111001100000000001000000000000 +00101000001000110000000000000000 +10111001011000000000100000000000 +11011000011000000000000000000000 +00101011100000100000000000011000 +00101011100000010000000000011100 +01011100010011010000000000000010 +01000100001011101111111111111000 +00101001011000010000000000111000 +00110111100011000000000000011000 +10111001100000000001000000000000 +00101000001000110000000000000000 +10111001011000000000100000000000 +11011000011000000000000000000000 +10111001100000000001000000000000 +10111001011000000000100000000000 +11111000000000000000011010001100 +10111000001000000001000000000000 +00110100000000110000000000000001 +10111001011000000000100000000000 +11111000000000000000001111001001 +10111001100000000001000000000000 +10111001011000000000100000000000 +11111011111111111111111110111010 +00110100001000111111111111110110 +00110100000000100000000000000110 +10111001011000000000100000000000 +11111011111111111110111100111011 +10111001011000000000100000000000 +10111001100000000001000000000000 +11111011111111111111111110110011 +00110100001000011111111111110110 +01011001011000010000000000001000 +11100000000000000000000000000110 +00110101110000101111111111110110 +11101100010000010000100000000000 +11001000000000010000100000000000 +10100000010000010001000000000000 +01011001011000100000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000100100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00110100000000100000000000000001 +10111000001000000101100000000000 +11111011111111111110111110100001 +00110100000011000000000000000000 +01000100001000000000000000010100 +10111001011000000000100000000000 +00110100000000100000000000000001 +11111011111111111110111100111110 +00101001011000110000001111100100 +00110100000000100000000000000001 +00110100000000010000000000000000 +01011100011000100000000000000010 +00101001011000010000001111100000 +00001101011000010000000010010010 +10111001011000000000100000000000 +11111000000000000000011100111001 +10111000001000000110000000000000 +01000100001000000000000000000111 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111011001000100 +11111011111111111110111010101110 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00110100000000100000000000000011 +10111000001000000101100000000000 +11111011111111111110111101111111 +00110100000011000000000000000000 +01000100001000000000000000010100 +10111001011000000000100000000000 +00110100000000100000000000000011 +11111011111111111110111100011100 +00101001011000110000001111100100 +00110100000000100000000000000001 +00110100000000010000000000000000 +01011100011000100000000000000010 +00101001011000010000001111100000 +00001101011000010000000010010010 +10111001011000000000100000000000 +11111000000000000000011010110010 +10111000001000000110000000000000 +01000100001000000000000000000111 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111011001011100 +11111011111111111110111010001100 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00110100000000100000000000000000 +10111000001000000101100000000000 +11111011111111111110111101011101 +00110100000011000000000000000000 +01000100001000000000000000011001 +00110100000000100000000000000000 +10111001011000000000100000000000 +11111011111111111110111011111010 +10111001011000000000100000000000 +11111000000000000000011100101000 +10111000001000000110000000000000 +00101001011001000000000100010000 +00101001011000010000000100011100 +00101001011000110000000100010100 +00101001011000100000000100011000 +01011001011000010000000011000100 +01011001011001000000000010111000 +01011001011000110000000010111100 +01011001011000100000000011000000 +00110100000000011111111111111111 +01011101100000010000000000001000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111011001111000 +11111011111111111110111001100111 +11100000000000000000000000000010 +00110100000011000000000000000000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +00110100000011000000000000000000 +10111000001000000101100000000000 +10111000010000000111000000000000 +00110100001011110000001110100000 +00110100001100000000001111000000 +11100000000000000000000000010010 +00001001100011010000000001110000 +10111010000000000000100000000000 +00110100000000110000000000001010 +00110101101000100000000100101000 +10110101011000100001000000000000 +11111000000000000100001100100011 +01011100001000000000000000001010 +00110101101000010000000101101000 +10111001111000000001000000000000 +10110101011000010000100000000000 +11111000000000000000001001010011 +10110101011011010001000000000000 +10111001110000000000100000000000 +00110100010000100000000100110100 +11111000000000000000011000010000 +11100000000000000000000000011111 +00110101100011000000000000000001 +00101101011000110000000100100000 +01001000011011001111111111101110 +00110100000000010000000000000100 +01010100011000010000000000000011 +00110100011000110000000000000001 +00001101011000110000000100100000 +00101101011011010000000100100000 +00110100000000110000000000001010 +00110101011000100000001111000000 +00110101101011011111111111111111 +00001001101011000000000001110000 +00110101100000010000000100101000 +10110101011000010000100000000000 +11111000000000000100001100101011 +00110101100000010000000101101000 +10111001111000000001000000000000 +10110101011000010000100000000000 +11111000000000000000001000111011 +10110101011011000001000000000000 +10111001110000000000100000000000 +00110100010000100000000100110100 +11111000000000000000010111111000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111011010010000 +10111001101000000010100000000000 +11111011111111111110111000100011 +10111001011000000000100000000000 +11111000000000000000010000000010 +01011001011000010000000000000100 +00110100000000100000000000000010 +10111001011000000000100000000000 +11111011111111111110111010011101 +01111000000000010000000000000001 +00111000001000011001111011110100 +00101000001000100000000000100100 +00110100000000010000000000000000 +01000100010000000000000000000011 +10111001011000000000100000000000 +11011000010000000000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00101000001000100000000000000000 +01111000000001010000000000000001 +00111000101001011000111011000100 +00101000010000110000000000010100 +00101000010000100000000000001100 +00101000010001000000000000000100 +01011000011001000000000000000000 +00101000010000100000000000001000 +00110100000001001111111111111111 +01011000011000100000000000000100 +00101000001000110000000000000000 +00101000011000100000000000010100 +00101000011000110000000000001100 +00001100010001000000000000001010 +00101000101001000000000000000000 +01011000010001000000000000001100 +00101000011001000000000000000100 +01011000010001000000000000010000 +00101000011000110000000000001000 +01011000010000110000000000010100 +00101000001000100000000000000000 +00101000010000110000000000010100 +00101000010000100000000000001100 +00101000010001100000000000010000 +00101000010001010000000000010100 +00101000010001000000000000011000 +01011000011001100000000000011000 +01011000011001010000000000011100 +01011000011001000000000000100000 +01000000010000100000000000011100 +00110000011000100000000000100100 +00101000001000010000000000000000 +00101000001000100000000000010100 +00101000001000010000000000001100 +01000000001000010000000000011101 +00110000010000010000000000100101 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +10111000010000001000000000000000 +00101000001000100000000000110000 +10111000001000000101100000000000 +10111000011000000111100000000000 +00101000010011010000000000001000 +00101000001000100000000000110100 +00101000001011000000001101011000 +00101000010001000000000000000000 +11011000100000000000000000000000 +01001000000000010000000001100110 +00110101011011100000000000110000 +10111001110000000000100000000000 +11111011111111111111111111000111 +00101001011000010000000000110000 +00101000001001000000000000001100 +01000001011000010000000001011100 +00110000100000010000000000000100 +01000001011000010000000001011101 +00110000100000010000000000000101 +01000001011000010000000001011110 +00110000100000010000000000000110 +00110100000000011111111111111111 +00110000100000010000000000000111 +00110100000000011111111111111110 +00110000100000010000000000001000 +01000001011000010000000001011111 +00110000100000010000000000001001 +01000001011000010000000001100000 +00110000100000010000000000001010 +01000001011000010000000001100001 +00110000100000010000000000001011 +10111001110000000000100000000000 +11111011111111111111111110110011 +00101001011000010000000000110000 +00110100000000110000000000001000 +00101000001001000000000000001100 +10111001100000000000100000000000 +00110100100000100000000000000100 +11111000000000000100001010110010 +00101001011000010000000000110000 +00110101011000100000010000011000 +00101000001000010000000000000000 +00110001100000000000000000001010 +11001000010000010000100000000000 +00010100001000010000000000000011 +00001000001000010100111000101011 +00001101100000010000000000001000 +01000001101000010000000000011010 +00110001100000010000000000001011 +00110100000000010000000000010100 +00110001100000010000000000001100 +00101001101000010000000000011100 +00110001100000010000000000001101 +00110100000000010000000000000010 +00110001100000010000000000001110 +10111001011000000000100000000000 +11111011111111111110110111101011 +01111000000000010000000000000001 +00111000001000011001111011110100 +00101000001001000000000000000000 +01000100100000000000000000001111 +10111001011000000000100000000000 +10111010000000000001000000000000 +10111001111000000001100000000000 +11011000100000000000000000000000 +01000100001000000000000000001010 +01111000000001000000000000000001 +01111000000001010000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000010 +00110100000000110000000000000001 +00111000100001000111011010110000 +00111000101001011001000111010100 +11111011111111111110110110010110 +11100000000000000000000000100101 +00101001011000010000000000110000 +01111000000001000000000000000001 +00110100000000100000000000000011 +00101000001001010000000000001100 +00110100000000110000000000000001 +10111001011000000000100000000000 +00101000101001010000000000010000 +00111000100001000111011011001100 +11111011111111111110110110001100 +00101001011000010000000000110000 +01111000000001000000000000000001 +00110100000000100000000000000011 +00101000001001010000000000001100 +00110100000000110000000000000001 +10111001011000000000100000000000 +00101000101001010000000000010100 +00111000100001000111011011100000 +11111011111111111110110110000011 +00101001011000100000000001001100 +10111001011000000000100000000000 +11111000000000000000010100000111 +00101001011000100000000000100100 +00110100000000010000000000000001 +01000100010000010000000000000011 +00110100000000010000000000000100 +11100000000000000000000000000010 +00110100000000010000000000000110 +01011001011000010000000000000100 +01111000000000010000000000000001 +00111000001000011011000011001000 +00101000001000100000000000000000 +00110100000000010000000000000100 +01011100010000010000000000000110 +00110100000000010000000001101011 +01011001011000010000000000000100 +11100000000000000000000000000011 +00110100000000010000001111101000 +01011001011000010000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00110100000000100000000000000100 +10111000001000000101100000000000 +11111011111111111110111000111101 +01000100001000000000000000000100 +00110100000000010000000000000001 +01011001011000010000000000000100 +11100000000000000000000000000101 +10111001011000000000100000000000 +00110100000000100000000000000100 +11111011111111111110111001011000 +01011001011000010000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110100000000100000001111101000 +01011000001000100000000000001000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000110100000000000 +00110100000000100000000000000100 +10111000001000000101100000000000 +10111000011000000110000000000000 +11111011111111111110110111000100 +01111000000000010000000000000001 +00111000001000011001111011110100 +00101000001001000000000000001100 +01000100100000000000000000000110 +10111001011000000000100000000000 +10111001101000000001000000000000 +10111001100000000001100000000000 +11011000100000000000000000000000 +01011100001000000000000000010010 +01000001011000010000001110100001 +01000100001000000000000000001000 +00110100000000100000000000001011 +01011100001000100000000000001011 +10111001011000000000100000000000 +10111001101000000001000000000000 +10111001100000000001100000000000 +11111011111111111111111011010101 +11100000000000000000000000000101 +10111001011000000000100000000000 +10111001101000000001000000000000 +10111001100000000001100000000000 +11111000000000000000001000010001 +01011100001000000000000000000100 +10111001011000000000100000000000 +11111000000000000000000101100110 +01000100001000000000000000000011 +00110100000000010000000000000010 +01011001011000010000000000000100 +10111001011000000000100000000000 +00110100000000100000000000000010 +11111011111111111110111000100101 +01011001011000010000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000001001000000000000000000 +00110100000000110000000000000110 +01011100100000110000000000000011 +00110100001000100000000100000000 +11111000000000000000010111101010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000011000000110000000000000 +00101000001000110000000000000000 +10111000010000000110100000000000 +00110100000000100000000000000101 +10111000001000000101100000000000 +01011100011000100000000000000111 +11111011111111111110110111100100 +01000100001000000000000000001000 +00110100000000010000000000000110 +01011001011000010000000000000100 +00110100000011000000000000000000 +11100000000000000000000001000100 +11111011111111111111111000110111 +10111001011000000000100000000000 +11111011111111111111111001010111 +10111001011000000000100000000000 +00110100000000100000000000000000 +11111011111111111110110101111011 +01111000000000010000000000000001 +00111000001000011001111011110100 +00101000001001100000000000010000 +01000001011001010000001110100001 +01000100110000000000000000001000 +10111000101000000010000000000000 +10111001011000000000100000000000 +10111001101000000001000000000000 +10111001100000000001100000000000 +11011000110000000000000000000000 +10111000001000000010100000000000 +01001000000000010000000000101011 +00110100000000010000000000001011 +01010100101000010000000000001110 +01111000000000010000000000000001 +00111100101000100000000000000010 +00111000001000011001000111100100 +10110100001000100000100000000000 +00101000001001000000000000000000 +01000100100000000000000000001000 +10111001100000000001100000000000 +10111001011000000000100000000000 +10111001101000000001000000000000 +11011000100000000000000000000000 +10111000001000000110000000000000 +01011100001000000000000000001101 +11100000000000000000000000010001 +01111100101000010000000000001111 +01111101100011000000000000000000 +10100000001011000110000000000000 +01000101100000000000000000001101 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111011011111000 +11111011111111111110110011010110 +11100000000000000000000000000110 +00110100000000010000000000000001 +01000101100000010000000000001111 +00110100000000011111111111111111 +01011101100000010000000000001110 +11100000000000000000000000001100 +00101001011000010000000000110000 +00101000001000010000000000001100 +00101000001000100000000000010000 +00110100000000010000000011111111 +01000100010000010000000000000101 +00101001011000100000000000100100 +00110100000000010000000000000010 +00110100000011000000000000000000 +01011100010000010000000000000100 +00110100000000010000000000000100 +01011001011000010000000000000100 +00110100000011000000000000000000 +10111001011000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00110100000001000000000000000000 +11111011111111111110110111110111 +01011001011000010000000000001000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01000000001001000000001110100001 +10111000001000000101100000000000 +01000100100000000000000000000101 +00110100000001010000000000001011 +01011100100001010000000000000101 +11111011111111111111111001010000 +11100000000000000000000000000010 +11111000000000000000000110001111 +01011100001000000000000000000011 +10111001011000000000100000000000 +11111000000000000000000011100100 +00110100000000010000001111101000 +01011001011000010000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01000000001001000000001110100001 +10111000001000000101100000000000 +01000100100000000000000000000111 +00110100000001010000000000001000 +01000100100001010000000000000111 +00110100000001010000000000001011 +01011100100001010000000000000111 +11111011111111111111111000111001 +11100000000000000000000000000100 +11111000000000000000000011111101 +11100000000000000000000000000010 +11111000000000000000000100110100 +01011100001000000000000000000100 +10111001011000000000100000000000 +11111000000000000000000011001011 +01000100001000000000000000000011 +00110100000000010000000000000010 +01011001011000010000000000000100 +00110100000000010000001111101000 +01011001011000010000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111010100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000000100000000000 +00110111100000100000000000010000 +11111000000000000000010010000010 +00101001011000010000001101011000 +00110111100000100000000000100000 +00110100000000110000000000001000 +11111000000000000100000101010010 +01011100001000000000000000001011 +00101101011000100000001110000000 +00101101011000010000001111001010 +01011100010000010000000000001000 +00101001011000010000001101011000 +00101100001000100000000000001000 +00101111100000010000000000101000 +01011100010000010000000000000100 +01000001011000010000000000100000 +00100000001000010000000000000001 +01011100001000000000000000001010 +01000001011001010000000000100000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111011100001100 +11111011111111111110110001101000 +00110100000011000000000000000000 +11100000000000000000000000100010 +00101011100000010000000000010000 +00110101011000100000001110110000 +01011001011000010000000011001000 +00101011100000010000000000010100 +01011001011000010000000011001100 +00101011100000010000000000011000 +01011001011000010000000011010000 +00101011100000010000000000011100 +01011001011000010000000011010100 +00110101011000010000000011001000 +11111000000000000000010111000100 +10111001011000000000100000000000 +00110100000000100000000000000100 +11111011111111111110110011011000 +01111000000000010000000000000001 +00111000001000011001111011110100 +00101000001000100000000000011000 +01000100010000000000000000000110 +10111001011000000000100000000000 +11011000010000000000000000000000 +10111000001000000110000000000000 +01000100001000000000000000000100 +11100000000000000000000000001011 +10111001011000000000100000000000 +11111000000000000000011111110101 +00101001011000010000001101011000 +00010001011000100000001111001100 +00110100000011000000000000000000 +00010000001000110000000000001010 +01000100011000100000000000000100 +00110000001000100000000000001010 +10111001011000000000100000000000 +11111011111111111110110010001001 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000101100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000001100 +10111000010000000111000000000000 +10111000011000000110100000000000 +01000100001000000000000000010001 +00110100000000100000000000000000 +00110100000000110000000000010000 +00110101011000010000000010011000 +11111000000000000100000110100111 +10111001011000000000100000000000 +11111000000000000000011101001100 +01111000000000010000000000000001 +00111000001000011001111011110100 +00101000001001000000000000010100 +01000100100000000000000000000111 +10111001011000000000100000000000 +10111001110000000001000000000000 +10111001101000000001100000000000 +11011000100000000000000000000000 +10111000001000000110000000000000 +01011100001000000000000000011011 +10111001011000000000100000000000 +11111011111111111111110110011101 +01000001011001010000001110100001 +00110100000000010000000000001011 +01010100101000010000000000001100 +01111000000000010000000000000001 +00111100101000100000000000000010 +00111000001000011001001000010100 +10110100001000100000100000000000 +00101000001001000000000000000000 +01000100100000000000000000000110 +10111001011000000000100000000000 +10111001110000000001000000000000 +10111001101000000001100000000000 +11011000100000000000000000000000 +11100000000000000000000000001000 +01000101101000000000000000000111 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111011011111000 +11111011111111111110110000001101 +10111001011000000000100000000000 +11111000000000000000000001000110 +10111000001000000110000000000000 +01111101100000010000000000000001 +00101001011000100000000000000100 +11001000000000010000100000000000 +10100001100000010110000000000000 +00101001011000010000000000000000 +01000100010000010000000000000100 +10111001011000000000100000000000 +11111000000000000000011100100000 +11100000000000000000000000000110 +10111001011000000000100000000000 +00110100000000100000000000000010 +00110100000000110000000000000000 +11111011111111111110110100010100 +01011001011000010000000000001000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000110000000000110000 +11111000000000000100000011101001 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00101000001000100000000000101000 +00110100000000110000000000000001 +01000100010000110000000000001010 +00110100000000110000000000000010 +01000100010000110000000000000011 +01011100010000000000000000001001 +11100000000000000000000000000110 +00110100000000100000000000010010 +01011000001000100000000010000100 +00110100000000100000000000001110 +01011000001000100000000010001000 +11100000000000000000000000000011 +01011000001000000000000010000100 +01011000001000000000000010001000 +00101000001001000000000010000100 +00101000001001010000000000111100 +00110100000000100000000000000000 +10110100101001000010100000000000 +00100000101000110000000000000011 +01000100011000000000000000000011 +00110100000000100000000000000100 +11001000010000110001000000000000 +10110100101000100010100000000000 +00101000001001100000000001000000 +00101000001000100000000010001000 +01011000001001010000000001001100 +00110100000000110000000000000000 +10110100110000100011000000000000 +00100000110001110000000000000011 +01000100111000000000000000000011 +00110100000000110000000000000100 +11001000011001110001100000000000 +10110100110000110001100000000000 +11001000101001000010000000000000 +11001000011000100001000000000000 +01011000001000110000000001010000 +01011000001001000000000001000100 +01011000001000100000000001001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000100000000000000001 +00111000010000101001111011110100 +00101000010000100000000000100000 +10111000001000000101100000000000 +01000100010000000000000000000110 +11011000010000000000000000000000 +10111000001000000001000000000000 +00110100000000010000000000000001 +01000100010000010000000000011100 +01001000000000100000000000011100 +10111001011000000000100000000000 +00110100000000100000000000000010 +11111011111111111110110010010100 +01011100001000000000000000000110 +00110100000000100000000000000100 +10111001011000000000100000000000 +11111011111111111110110010010000 +00110100000000100000000000000000 +01000100001000100000000000010011 +00101001011000010000000000110000 +00001101011000000000000100100000 +00101000001000010000000000001100 +00101000001000100000000000010000 +00110100000000010000000011111111 +01000100010000010000000000000111 +00101001011000100000000000100100 +00110100000000010000000000000010 +01000100010000010000000000000100 +00110100000000010000000000000110 +01011001011000010000000000000100 +11100000000000000000000000000110 +00110100000000010000000000000100 +01011001011000010000000000000100 +00110100000000100000000000000010 +10111001011000000000100000000000 +11111011111111111110110000011111 +00110100000000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000000100000000000 +01000001011000100000000000100000 +00100000010000100000000000000001 +01000100010000000000000000101101 +00101001011000100000000100001100 +00101001011001010000000100000000 +00101001011001000000000100000100 +00101001011000110000000100001000 +01011001011000100000000010110100 +01011001011001010000000010101000 +00110111100000100000000000001100 +01011001011001000000000010101100 +01011001011000110000000010110000 +11111000000000000000001101001011 +01000001011000100000001110100111 +01000001011000010000000000100000 +00100000010000100000000000000010 +01000100010000000000000000001110 +00111000001000010000000000000010 +00110001011000010000000000100000 +00101101011000010000001111001010 +00101001011001000000001110110000 +00101001011000110000001110110100 +00001101011000010000001101111100 +00101001011000100000001110111000 +00101001011000010000001110111100 +01011001011001000000000010011000 +01011001011000110000000010011100 +01011001011000100000000010100000 +01011001011000010000000010100100 +11100000000000000000000000010010 +00100000001000010000000011111101 +00110001011000010000000000100000 +00101011100000010000000000001100 +00110101011000100000001110110000 +01011001011000010000000010011000 +00101011100000010000000000010000 +01011001011000010000000010011100 +00101011100000010000000000010100 +01011001011000010000000010100000 +00101011100000010000000000011000 +01011001011000010000000010100100 +00110101011000010000000010011000 +11111000000000000000010011010010 +10111001011000000000100000000000 +01011001011000000000000011111000 +01011001011000000000000011111100 +11111000000000000000011011111011 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000000100000000000 +01000001011000100000000000100000 +00100000010000110000000000000001 +01011100011000000000000000000100 +01111000000000010000000000000001 +00111000001000010111011110101000 +11100000000000000000000000000101 +00100000010000100000000000000010 +01011100010000000000000000000111 +01111000000000010000000000000001 +00111000001000010111011111100100 +01111000000000100000000000000001 +00111000010000101001001001000100 +11111000000000000010000010010001 +11100000000000000000000000100111 +00101101011001000000001101111100 +00101101011000110000001111001010 +01000100100000110000000000000111 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000010000101001001001000100 +00111000001000010111100000011100 +11111000000000000010000010001000 +11100000000000000000000000011110 +00110111100011010000000000010100 +10111001101000000001000000000000 +11111000000000000000001100111001 +01000001011000010000000000100000 +00110101011011000000000010011000 +10111001101000000001000000000000 +00100000001000010000000011111101 +00110001011000010000000000100000 +10111001100000000000100000000000 +11111000000000000000010010100001 +10111001100000000000100000000000 +00110101011000100000001110110000 +11111000000000000000010010011110 +00101001011000010000001110111000 +01011001011000010000000011111000 +00101001011000010000001110111100 +01011001011000010000000011111100 +01111000000000010000000000000001 +00111000001000011001111011110100 +00101000001000110000000000101000 +01000100011000000000000000000111 +10111001100000000001000000000000 +10111001011000000000100000000000 +11011000011000000000000000000000 +00110100000000100000000000000001 +01000100001000100000000000000100 +01001000000000010000000000000100 +10111001011000000000100000000000 +11111000000000000000011010111011 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100111010000000000001000 +10111000010000000110000000000000 +00101000001000100000000001001100 +10111000011000000111000000000000 +00101000001000110000000010000100 +01000000010011010000000000000000 +00101000001000100000000000110100 +10110101100000110001100000000000 +00100001101011010000000000001111 +00101000010001010000000000001100 +00101000001000100000000001000100 +10111001101000000010000000000000 +10111000001000000101100000000000 +11011000101000000000000000000000 +10111000001000000001000000000000 +00110100000000111111111111111110 +00110100000000010000000000000000 +01000100010000110000000000101111 +01111000000010010000000000000001 +00111001001010011001011101011000 +00001001101000010000000000001100 +01001100010011000000000000001100 +10110101001000010100100000000000 +00101001001001010000000000000000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111100001011100 +10111001101000000011000000000000 +11111011111111111110101011111000 +00110100000000011111111111111111 +11100000000000000000000000100000 +00101001011010000000000100011100 +00101001011010100000000100011000 +10110101001000010100100000000000 +00000001000001110000000000010000 +00100001000010001111111111111111 +00001001000010000000001111101000 +00101001001000010000000000000000 +00111101010010100000000000010000 +00101001011001100000000100010100 +01111000000001000000000000000001 +00000001000010000000000000010000 +01011011100000010000000000000100 +00110100000000100000000000000101 +10111001011000000000100000000000 +00110100000000110000000000000001 +00111000100001000111100001111100 +10111001100000000010100000000000 +10111001010001110011100000000000 +11111011111111111110101011100011 +00110100000000010000000000000001 +01011101110000010000000000000101 +00010001011000100000000100010000 +00110100000000010000000010000000 +00100000010000100000000011000000 +01000100010000010000000000000110 +00101001011000010000010000010000 +00110100001000010000000000000001 +01011001011000010000010000010000 +00110100000000010000000000000000 +11100000000000000000000000000010 +00110100000000010000000000000001 +00101011100111010000000000001000 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000110000000000001000 +11111000000000000011111110100100 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +01111000000011100000000000000001 +00111001110011101001001001100100 +01111000000001000000000000000001 +10111000010000000110100000000000 +10111000011000000110000000000000 +00110100000000100000000000000011 +00110100000000110000000000000010 +00111000100001000111100111011000 +10111001110000000010100000000000 +10111000001000000111100000000000 +00110101101100010000000000101001 +11111011111111111110101010110100 +00110101100100000000000000101001 +10111010001000000000100000000000 +10111010000000000001000000000000 +11111011111111111111111111100001 +01011100001000000000000000110011 +00101101100000010000000000110010 +00101101101010110000000000110010 +11001001011000010101100000000000 +00110101011000100000000000000001 +00110100000000010000000000000010 +01010100010000010000000001000011 +00101001111000100000000000110000 +00110100000000110000000000000001 +00110101101000010000000001100000 +00101000010000100000000000010100 +01011101011000110000000000001011 +11111011111111111111111111010100 +01011100001000000000000000111100 +01111000000001000000000000000001 +10111001111000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111100010100100 +10111001110000000010100000000000 +00110100000001100000000010010000 +11100000000000000000000000001110 +00110100000000111111111111111111 +00110101100011000000000001100000 +01011101011000110000000000001110 +10111001100000000000100000000000 +11111011111111111111111111000110 +01011100001000000000000000101110 +01111000000001000000000000000001 +10111001111000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111100010100100 +10111001110000000010100000000000 +00110100000001100000000010011001 +11111011111111111110101010001100 +00110100000010110000000000000000 +11100000000000000000000000100100 +10111001100000000001000000000000 +11111011111111111111111110111001 +10111000001000000101100000000000 +01011100001000000000000000100000 +01111000000001000000000000000001 +10111001111000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111100010110100 +10111001110000000010100000000000 +00110100000001100000000010100001 +11111011111111111110101001111110 +11100000000000000000000000010111 +01000001101010110000000000011010 +01000001100000010000000000011010 +01011101011000010000000000001110 +00101001101010110000000000011100 +00101001100000010000000000011100 +01011101011000010000000000001011 +00101001101010110000000000100000 +00101001100000010000000000100000 +01011101011000010000000000001000 +00101001101000100000000000100100 +00101001100000010000000000100100 +00110100000010110000000000000000 +01011100010000010000000000001010 +01000001101010110000000000101000 +01000001100000010000000000101000 +01000101011000010000000000000011 +11001001011000010101100000000000 +11100000000000000000000000000101 +10111010001000000000100000000000 +10111010000000000001000000000000 +11111011111111111111111110011001 +10111000001000000101100000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000100000000000000000 +00110100000000110000000000010000 +11111000000000000011111111001110 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000110100000000000 +00101000001000010000000000110000 +00101000001011000000000000010100 +00101000001010110000000000001100 +00101000001000010000000000010000 +00001100001000000000000000000000 +00110100001000010000000000001000 +11111011111111111111111111101100 +00101001101000010000000000110000 +00101000001000010000000000010000 +00110100001000010000000000011000 +11111011111111111111111111101000 +10111001100000000000100000000000 +00110100000000100000000000000000 +00110100000000110000000000101000 +11111000000000000011111110110110 +00101001011000010000000000000100 +01011001100000010000000000000000 +00101001011000010000000000001000 +00001101100000000000000000001000 +01011001100000010000000000000100 +00101001011000010000000000000100 +01011001100000010000000000010000 +00101001011000010000000000001000 +01011001100000010000000000010100 +00101001011000100000000000010100 +00101001011000010000000000011000 +00101001011000110000000000010000 +01011001100000100000000000011100 +01011001100000010000000000100000 +01011001100000110000000000011000 +01000001011000010000000000011100 +00110100000000100000000000000001 +00110001100000010000000000100100 +01000001011000010000000000011101 +00110001100000010000000000100101 +00101001101000010000000000110000 +00101000001000010000000000011000 +01011000001000100000000000011000 +00110100000000101111111110100000 +00110000001000100000000000011100 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111101110100 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00101100001000100000000100100000 +10111000001000000101100000000000 +00110100000011010000000000000000 +00110100000011000000000000000001 +01011100010000000000000000010100 +00101000001000110000000000000000 +10111000010000000110100000000000 +00110100000000100000000000000110 +01011100011000100000000000010000 +11111011111111111111111110111100 +00101001011011000000000000000000 +11100000000000000000000100010011 +00001001100000100000000001110000 +00001001101000110000000001110000 +10111001011000000000100000000000 +00110100010000100000000100101000 +00110100011000110000000100101000 +10110101011000100001000000000000 +10110101011000110001100000000000 +11111011111111111111111100111101 +01001000000000010000000000000010 +11100000000000000000000000000010 +10111001100000000110100000000000 +00110101100011000000000000000001 +00101101011001100000000100100000 +01001000110011001111111111110011 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111100011001100 +10111001101000000010100000000000 +11111011111111111110100111111000 +00011101011000010000000100100010 +01000100001011010000000000100010 +00001101011011010000000100100010 +00101001011011000000000000110000 +00110100000011110000000000000000 +00110100000011100000000000000001 +11100000000000000000000000010101 +00101001100000100000000000000000 +00001001110000010000010000011000 +10110100010000010000100000000000 +00101100001000110000000100100000 +01000100011000000000000000001111 +00001001111001000000010000011000 +00011100001000110000000100100010 +10110100010001000010000000000000 +00011100100000100000000100100010 +00001000011000110000000001110000 +00001000010000100000000001110000 +00110100011000110000000100101000 +10110100001000110001100000000000 +00110100010000100000000100101000 +10110100100000100001000000000000 +11111011111111111111111100011001 +01001000000000010000000000000010 +11100000000000000000000000000010 +10111001110000000111100000000000 +00110101110011100000000000000001 +00101001100000010000000000001100 +00101100001000010000000000001100 +01001000001011101111111111101010 +00101001100000010000000000011100 +01000100001011110000000000000100 +00110100000000010000000000000001 +01011001100011110000000000011100 +01011001100000010000000000100000 +00101001011000100000000000100100 +00110100000000010000000000000010 +01000100010000010000000001101100 +00101101011000010000000100100000 +01011100001000000000000000000100 +00101001011000010000000000000000 +00110100000011000000000000000100 +01000100001011000000000011010011 +00101001011000010000000000110000 +00001001101011000000000001110000 +00101000001000010000000000001100 +01000000001001000000000000001001 +01000000001000110000000000001010 +01000000001000100000000000001011 +01000000001010010000000000000100 +01000000001010000000000000000101 +01000000001001110000000000000110 +01000000001001100000000000000111 +01000000001001010000000000001000 +00110011100010010000000001001001 +00110011100010000000000001001010 +00110011100001110000000001001011 +00110011100001100000000001001100 +00110011100001010000000001001101 +00110011100001000000000001001110 +00110011100000110000000001001111 +00110011100000100000000001010000 +00101000001000100000000000011000 +00101000001001000000000000010000 +00101000001000110000000000010100 +01011011100000100000000001000100 +01000000001000100000000000011100 +01011011100000110000000001000000 +00110101100000110000000100101000 +00110011100000100000000000111010 +01000000001000100000000000011101 +10110101011000110001100000000000 +01011011100001000000000000111100 +00110011100000100000000001001000 +00101000001000100000000000000100 +00001111100000000000000001010010 +01011011100000100000000010000000 +00101000001000010000000000001000 +00110111100000100000000000100000 +01011011100000010000000010000100 +10111001011000000000100000000000 +11111011111111111111111011011110 +00101001011000100000000000100100 +00110100000001000000000000000001 +01000100010001000000000000101010 +00101001011000100000000000110000 +01111000000001010000000000000001 +00110100000001100000000001111111 +00101000010000110000000000001100 +00111000101001011001001001110100 +00101000011001110000000000010000 +01001000111001100000000000000100 +01001000000000010000000000100011 +01011100001000000000000000011001 +11100000000000000000000000000110 +01001000000000010000000000100000 +01000100001000000000000000000100 +00101100011000010000000000001100 +01011100001001000000000000001010 +11100000000000000000000000101110 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111100011101100 +11111011111111111110100110001110 +00110100000011000000000000000010 +11100000000000000000000010010010 +00101001011000110000001111011000 +00101000010000010000000000011100 +01000100011000010000000000100011 +10110101011011000001000000000000 +00110111100000010000000001001001 +00110100010000100000000101010001 +01011011100001010000000000011100 +11111011111111111111111010110101 +00101011100001010000000000011100 +01011100001000000000000000010000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111100011111000 +11111011111111111110100101111100 +00110100000011000000000000000111 +11100000000000000000000010000000 +01001100001000000000000000000111 +10111001011000000000100000000000 +11111011111111111111111100100100 +01111000000001100000000000000001 +00110100000011000000000000000110 +00111000110001101000000011010000 +11100000000000000000000000000100 +01111000000001100000000000000001 +00110100000011000000000000000101 +00111000110001100111100011000100 +01111000000001000000000000000001 +01111000000001010000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111100100001000 +00111000101001011001001001110100 +11111011111111111110100101101000 +11100000000000000000000001101101 +00001001101000110000000001110000 +00101001011000100000000000110000 +10110101011000110001100000000000 +00101100011001000000000101011010 +00101000010000010000000000010100 +00101000010011000000000000011000 +00101000010000100000000000010000 +00110100100001000000000000000001 +00001100010001000000000000000000 +00110100011000100000000110001000 +00101000010001000000000000000100 +00101000011001010000000110001000 +01011000001001000000000000000100 +01011000001001010000000000000000 +00101100010000100000000000001000 +00001100001000100000000000001000 +00110100011000100000000101001000 +01000000010011100000000000001001 +01000000010001100000000000001110 +01000000010001010000000000001111 +01000000010001000000000000010000 +01000000010010100000000000001010 +01000000010010010000000000001011 +01000000010010000000000000001100 +01000000010001110000000000001101 +00110000001011100000000000010000 +00110000001001000000000000010111 +00110000001010100000000000010001 +00110000001010010000000000010010 +00110000001010000000000000010011 +00110000001001110000000000010100 +00110000001001100000000000010101 +00110000001001010000000000010110 +00110100011001000000000101000000 +00101000100001010000000000001000 +00101000100001100000000000000100 +00101000100001000000000000001100 +00110100011011100000000100111000 +01011000001001010000000000011100 +01011000001001100000000000011000 +01011000001001000000000000100000 +01000001110001000000000000001010 +00110000001001000000000000100100 +01000000010000100000000000001000 +00110000001000100000000000100101 +01000000011000010000000101011100 +00110001100000010000000000011100 +00011101110001010000000000001000 +00011101100000010000000000000000 +01000100001001010000000000001110 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111100100011000 +11111011111111111110100100101111 +00101101110000010000000000001000 +00110100000000100000000000000000 +00001101100000010000000000000000 +00101001011000010000000000111000 +00101000001000110000000000000100 +10111001011000000000100000000000 +11011000011000000000000000000000 +00001001101011010000000001110000 +10110101011011010000100000000000 +00110100001000010000000101101001 +01000000001000100000000000000111 +00100000010000100000000000000100 +01111100010000100000000000000000 +01011001100000100000000000000100 +01000000001000100000000000000111 +00100000010000100000000000000010 +01111100010000100000000000000000 +01011001100000100000000000001000 +01000000001000100000000000000111 +00100000010000100000000000000001 +01011001100000100000000000001100 +01000000001000100000000000000111 +00100000010000100000000000010000 +01111100010000100000000000000000 +01011001100000100000000000010000 +01000000001000100000000000000111 +00100000010000100000000000100000 +01111100010000100000000000000000 +01011001100000100000000000010100 +01000000001000010000000000000111 +00100000001000010000000000001000 +01111100001000010000000000000000 +01011001100000010000000000011000 +01111000000000010000000000000001 +00111000001000011001111011110100 +00101000001001000000000000011100 +01000100100000000000000000000111 +00110101101000100000000101101000 +10110101011011010110100000000000 +10111001011000000000100000000000 +10110101011000100001000000000000 +00110101101000110000000100110100 +11011000100000000000000000000000 +01111000000001000000000000000001 +01111000000001010000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111100100101100 +00111000101001011001001001110100 +11111011111111111110100011111100 +00110100000011000000000000001001 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000010001100 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +10111000001000000110100000000000 +00101000001010110000000001001100 +00110100000000010000000000001111 +00110100000011110000000000000000 +01010100010000010000000000100001 +00001000010011100000000000001100 +01111000000000010000000000000001 +00111000001000011001011101011000 +10110100001011100111000000000000 +00101101110011110000000000000100 +01000001110011000000000000001001 +00110101011000010000000000001000 +00110001011000100000000000000000 +00001101011011110000000000000010 +00110100000000100000000000000000 +00110100000000110000000000001000 +11111000000000000011111001010001 +00001101011000000000000000000110 +01000001110000010000000000001000 +00110001011000010000000000100000 +00110100000000010000000000000001 +01000101100000010000000000001000 +01000101100000000000000000000100 +00110100000000010000000000000010 +01011101100000010000000000001100 +11100000000000000000000000001000 +00101001101000010000001101011000 +01000000001000010000000000001011 +11100000000000000000000000000011 +00101001101000010000001101011000 +01000000001000010000000000001101 +00110001011000010000000000100001 +11100000000000000000000000000101 +00101001101000010000001101011000 +01000000001000010000000000001010 +11100011111111111111111111111100 +00110001011011000000000000100001 +10111001111000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +01000000010000010000000000000000 +10111000010000000110000000000000 +00110100000000110000000000000010 +00000000001000010000000000000100 +00110101011011010000001111000000 +00110001011000010000001110100000 +01000000010000010000000000000000 +00100000001000010000000000001111 +00110001011000010000001110100001 +01000000010000010000000000000001 +00100000001000010000000000001111 +00110001011000010000001110100010 +00101100010000010000000000000010 +00001101011000010000001110100100 +01000000010000010000000000000100 +00110100010000100000000000000110 +00110001011000010000001110100110 +00110101011000010000001110100111 +11111000000000000011110110011101 +00101001100000100000000000001000 +00101001100000010000000000001100 +00110100000000110000000000001000 +01011001011000100000001110111000 +01011001011000010000001110111100 +00110101100000100000000000010100 +01011001011000000000001110110000 +01011001011000000000001110110100 +10111001101000000000100000000000 +11111000000000000011110110010011 +00101101100000010000000000011100 +00001101011000010000001111001000 +00101101100000010000000000011110 +00001101011000010000001111001010 +01000001100000010000000000100001 +00110001011000010000001111001100 +00101001011000010000000000110000 +00101000001000010000000000010100 +00101100001000100000000000001000 +01000100010000000000000000001010 +10111001101000000001000000000000 +00110100000000110000000000001000 +11111000000000000011110101100101 +01011100001000000000000000001001 +00101001011000010000000000110000 +00101000001000010000000000010100 +00101100001000100000000000001000 +00101101011000010000001111001000 +01011100010000010000000000000100 +01000001011000010000000000100000 +00111000001000010000000000000001 +11100000000000000000000000000011 +01000001011000010000000000100000 +00100000001000010000000011111110 +00110001011000010000000000100000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00110100000000110000000000100010 +10111000001000000101100000000000 +10111000010000000110000000000000 +10111000010000000000100000000000 +00110100000000100000000000000000 +11111000000000000011110111100111 +00101001011000010000001101011000 +00110100000000110000000000001000 +01000000001000010000000000001110 +00110001100000010000000000000001 +00101001011000010000000000110000 +00101000001000010000000000001100 +01000000001000010000000000011110 +00110001100000010000000000000100 +00101001011000100000001101011000 +00110101100000010000000000010100 +11111000000000000011110101011110 +00101001011000010000001101011000 +00101100001000010000000000001000 +00001101100000010000000000011100 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +00110100000000100000000000000000 +00101000001011010000000001001100 +10111000001000000110000000000000 +11111011111111111111111101100010 +00101101100000100000001101111110 +00110100010000100000000000000001 +00001101100000100000001101111110 +00110100000000100000000000000010 +00110001101000100000000000000110 +00101101100000100000001101111110 +00001101101000100000000000011110 +00101001011000110000000000000000 +00101001011000100000000000000100 +00001101101000110000000000100010 +01011001101000100000000000100100 +00101001011000110000000000001000 +00101101011000100000000000001100 +00111100011000110000000000010000 +10111000011000100001000000000000 +01011001101000100000000000101000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101000001000110000000000101000 +00101100001001000000000000100010 +00101000001000010000000000100100 +01011000010001000000000000000000 +01011000010000010000000000000100 +00000000011000010000000000010000 +00111100011000110000000000010000 +01011000010000010000000000001000 +01011000010000110000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101100001000010000000000100010 +10111000010000000110000000000000 +00110100000000110000000000001000 +00001100010000010000000000000100 +00101001011000010000000000100100 +01011000010000010000000000000000 +00101001011000010000000000101000 +01011000010000010000000000001000 +00101101011000010000000000101100 +00001100010000010000000000001100 +01000001011000010000000000101111 +00110000010000010000000000001110 +01000001011000010000000000110000 +01011000010000010000000000010000 +01000001011000010000000000110001 +01011000010000010000000000010100 +00101101011000010000000000110010 +01011000010000010000000000011000 +01000001011000010000000000110100 +00110000010000010000000000011100 +00110100010000010000000000011101 +00110101011000100000000000110101 +11111000000000000011110100010000 +00101101011000010000000000111101 +00001101100000010000000000100110 +01000001011000010000000000111111 +00110001100000010000000000101000 +01111000000000010000000000000001 +00111000001000011001111011110100 +00101000001000110000000000111000 +01000100011000000000000000000100 +10111001011000000000100000000000 +10111001100000000001000000000000 +11011000011000000000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00101000001000110000000000101000 +00101100001001000000000000100010 +00101000001000010000000000100100 +01011000010001000000000000000000 +01011000010000010000000000000100 +00000000011000010000000000010000 +00111100011000110000000000010000 +01011000010000010000000000001000 +01011000010000110000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000010000000110000000000000 +10111000001000000101100000000000 +00101100001000100000000000100010 +00101000001000010000000000101000 +00101001011000110000000000100100 +01011001100000100000000000000000 +00000000001000100000000000010000 +00111100001000010000000000010000 +01011001100000110000000000000100 +01011001100000100000000000001000 +01011001100000010000000000001100 +00110101011000100000000000101100 +00110101100000010000000000010000 +00110100000000110000000000001000 +11111000000000000011110011100011 +00101101011000010000000000110100 +00001101100000010000000000011000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111011000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00110100000000100000000000001011 +10111000001000000101100000000000 +00101000001011000000000001001100 +11111011111111111111111011101001 +10111000001000000110100000000000 +00101101011000010000001110010100 +00110101100001010000000000000111 +00110111100001000000000000010100 +00110100001000010000000000000001 +00001101011000010000001110010100 +00101001011000010000000000110000 +00110100000000100000000000000001 +00101000001000110000000000011000 +00110100011000010000000000001100 +01011011100000010000000000010100 +00110100011000010000000000001000 +01011011100000010000000000011000 +00110100011000010000000000000100 +01011011100000010000000000011100 +00110100011000010000000000011000 +01011011100000010000000000100000 +00110100011000010000000000010000 +00110100011000110000000000010100 +01011011100000010000000000100100 +01011011100000110000000000101000 +00110001100000000000000000000110 +00110001100000000000000000000111 +00110100000000110000000000000000 +00110100000000010000000000000110 +00101000100001100000000000000000 +00101000110001100000000000000000 +01000100110000000000000000000101 +01000000101001110000000000000000 +10111100010000110011000000000000 +10111000110001110011000000000000 +00110000101001100000000000000000 +00110100011000110000000000000001 +00110100100001000000000000000100 +01011100011000011111111111110111 +00101101011000010000001110010100 +00110100000000100000000000000000 +00110100000000110000000000001010 +00001101100000010000000000011110 +00110101100000010000000000100010 +11111000000000000011110100101000 +00101001011000010000000000110000 +00101000001000100000000000011000 +00101000001000010000000000010100 +00101100010000100000000000000000 +00001101100000100000000000101100 +01000000001000010000000000100100 +00110001100000010000000000101111 +00101001011000010000000000110000 +00101000001000010000000000010100 +00101000001000010000000000011000 +00110001100000010000000000110000 +00101001011000010000000000110000 +00101000001000010000000000010100 +00101000001000010000000000011100 +00110001100000010000000000110001 +00101001011000010000000000110000 +00101000001000110000000000010100 +00101000011000010000000000100000 +00001101100000010000000000110010 +01000000011000010000000000100101 +00110100000000110000000000001000 +00110001100000010000000000110100 +00101001011000010000000000110000 +00101000001000100000000000010100 +00110101100000010000000000110101 +00110100010000100000000000010000 +11111000000000000011110010001111 +00101001011000010000000000110000 +01111000000000110000000000000001 +00111000011000111001111011110100 +00101000001000100000000000010000 +00101000001000010000000000011000 +00101100010000100000000000000000 +00001101100000100000000000111101 +01000000001000010000000000011100 +00110001100000010000000000111111 +00101000011000110000000000110100 +01000100011000000000000000000100 +10111001011000000000100000000000 +11011000011000000000000000000000 +10111000001000000110100000000000 +10111001011000000000100000000000 +10111001101000000001000000000000 +00110100000000110000000000000000 +11111011111111111111110001101001 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000101000 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00101000001000100000000000111000 +00110111100011000000000000010000 +10111000001000000101100000000000 +00101000010000110000000000000000 +10111001100000000001000000000000 +11011000011000000000000000000000 +10111001100000000001000000000000 +10111001011000000000100000000000 +11111011111111111111111100010101 +10111000001000000001000000000000 +00110100000000110000000000000001 +10111001011000000000100000000000 +11111011111111111111110001010010 +01011100001000000000000000010111 +00110100000000100000000000001000 +10111001011000000000100000000000 +00101001011011000000000001001100 +11111011111111111111111001110111 +10111000001000000001000000000000 +00101101011000010000001101111110 +00001101100000010000000000011110 +00101001011000110000000100010000 +00101001011000010000000100010100 +00001101100000110000000000100010 +01011001100000010000000000100100 +00101001011000010000000100011100 +00101001011001000000000100011000 +00000000001000110000000000010000 +00111100100001000000000000010000 +00100000001000011111111111111111 +10111000100000110001100000000000 +01011001100000110000000000101000 +01011001100000010000000000001100 +00110100000000110000000000000000 +10111001011000000000100000000000 +11111011111111111111110000111011 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00101000001000100000000000111000 +10111000001000000101100000000000 +00101000010000110000000000000000 +00110111100000100000000000010000 +11011000011000000000000000000000 +10111001011000000000100000000000 +00110100000000100000000000000001 +00101001011011000000000001001100 +11111011111111111111111001010011 +10111000001000000001000000000000 +00101101011000010000001110000000 +00110100001000010000000000000001 +00100000001000011111111111111111 +00001101011000010000001110000000 +00001101100000010000000000011110 +00101011100000010000000000010100 +00101011100000110000000000010000 +01011001100000010000000000100100 +00001101100000110000000000100010 +00101011100000010000000000011000 +00101111100000110000000000011100 +00111100001000010000000000010000 +10111000001000110001100000000000 +01011001100000110000000000101000 +10111001011000000000100000000000 +00110100000000110000000000000001 +11111011111111111111110000010111 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +00101000001010110000000001001100 +10111000010000000110100000000000 +00110100000000100000000000001001 +10111000001000000110000000000000 +11111011111111111111111000110001 +01011001011000000000000000001000 +00101001101000110000000000001100 +10111000001000000111000000000000 +00101001101000010000000000001000 +00100000011000101111111111111111 +01011001011000100000000000001100 +00101101100000100000001111001010 +00111100001000010000000000010000 +00000000011000110000000000010000 +00001101011000100000000000011110 +00101001101000100000000000000000 +00101001101001000000000000000100 +10111000001000110001100000000000 +00001101011000100000000000100010 +01011001011001000000000000100100 +01011001011000110000000000101000 +00110101100000100000001111000000 +00110101011000010000000000101100 +00110100000000110000000000001000 +11111000000000000011110000000111 +00101101100000010000001111001000 +10111001110000000001000000000000 +00110100000000110000000000000000 +00001101011000010000000000110100 +10111001100000000000100000000000 +11111011111111111111101111101101 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00101000001000110000000000000000 +10111000001000000101100000000000 +00101000001001000000000000000100 +01001000000000110000000000000110 +10111000011001000000100000000000 +00110100000011010000000000000000 +00110100000011000000000000000001 +01000100001000000000000000001001 +11100000000000000000000000001110 +00010100011000100000000000011000 +00110100000000010000000010000000 +00100000010000100000000011000000 +00110100000011011111111111111111 +00110100000011001111111111111111 +01011100010000010000000000001000 +11100000000000000000000000000101 +00101001011000100000000000001000 +00110100000011011111111111111111 +00110100000011001111111111111111 +01001000001000100000000000000011 +00110100000011010000000000000000 +00110100000011000000000000000001 +10111001101000000000100000000000 +10111001100000000001000000000000 +11111000000000000011101011100111 +00101001011001000000000000001100 +00101001011000110000000000001000 +01011001011000010000000000000000 +01011001011000100000000000000100 +10111001101000000000100000000000 +10111001100000000001000000000000 +11111000000000000011101011100000 +01011001011000010000000000001000 +01011001011000100000000000001100 +01111000000001001100101000000000 +11100000000000000000000000001111 +00101001011001100000000000000100 +00101001011001010000000000000000 +00110100001000010011101110011010 +00110100110000111111111111111111 +11110100110000110011000000000000 +01011001011000110000000000000100 +10110100010001000001100000000000 +11110100010000110001000000000000 +00110100101001011111111111111111 +10110100110001010010100000000000 +10110100010000010000100000000000 +01011001011001010000000000000000 +01011001011000010000000000001000 +01011001011000110000000000001100 +00101001011000010000000000001000 +00101001011000100000000000001100 +01001000000000011111111111110000 +11100000000000000000000000001111 +00101001011001010000000000000100 +00101001011001100000000000000000 +00110101111011111100010001100101 +00110100101000100000000000000001 +11110100101000100010100000000000 +01011001011000100000000000000100 +10110101110000110001000000000000 +11110101110000100111000000000000 +10110100101001100010100000000000 +10110101110011110111000000000000 +01011001011001010000000000000000 +01011001011011100000000000001000 +01011001011000100000000000001100 +11100000000000000000000000000100 +00110100000000010011101110011010 +01111000000001001100101000000000 +01111000000000110011011000000000 +00101001011011110000000000001000 +00101001011011100000000000001100 +01001001111000011111111111101101 +01011101111000010000000000000010 +01010101110001001111111111101011 +00101001011000110000000000000000 +00101001011001000000000000000100 +10111001101000000000100000000000 +10111001100000000001000000000000 +11111000000000000011101010101111 +01011001011000010000000000000000 +01011001011000100000000000000100 +10111001111000000000100000000000 +10111001110000000001000000000000 +10111001101000000001100000000000 +10111001100000000010000000000000 +11111000000000000011101010101000 +01011001011000010000000000001000 +01011001011000100000000000001100 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000010001100000000000000100 +00101000001001000000000000000100 +00101000010001110000000000000000 +00101000001001010000000000000000 +10110100110001000010000000000000 +11110100110001000011000000000000 +10110100111001010010100000000000 +10110100110001010010100000000000 +01011000001001010000000000000000 +01011000001001000000000000000100 +00101000010001000000000000001100 +00101000010001010000000000001000 +00101000001000100000000000001100 +00101000001001100000000000001000 +10110100100000100001000000000000 +11110100100000100010000000000000 +10110100101001100010100000000000 +10110100100001010010000000000000 +01011000001001000000000000001000 +01011000001000100000000000001100 +11111011111111111111111110000001 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000010001000000000000000100 +00101000001001100000000000000100 +00101000010001010000000000000000 +00101000001001110000000000000000 +11001000110001000010000000000000 +11110100100001100011000000000000 +11001000111001010010100000000000 +11001000101001100010100000000000 +01011000001001010000000000000000 +01011000001001000000000000000100 +00101000010001100000000000001000 +00101000001001010000000000001100 +00101000010000100000000000001100 +00101000001001000000000000001000 +11001000101000100001000000000000 +11110100010001010010100000000000 +11001000100001100010000000000000 +11001000100001010010000000000000 +01011000001001000000000000001000 +01011000001000100000000000001100 +11111011111111111111111101100111 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001011110000000000001000 +00101001011011000000000000001100 +00101000001011010000000000000000 +00101000001011100000000000000100 +00000001100011000000000000000001 +00111101111000010000000000011111 +00010101111011110000000000000001 +10111000001011000110000000000000 +00010101101000100000000000011111 +01011001011011110000000000001000 +01011001011011000000000000001100 +00100001110000010000000000000001 +00111000010000100000000000000001 +01000100001000000000000000001011 +00010100010000010000000000011111 +00110100000000110001110111001101 +01111000000001000110010100000000 +11111000000000000011101001010000 +10110100010011000110000000000000 +11110100010011000001000000000000 +10110100001011110000100000000000 +10110100010000010000100000000000 +01011001011000010000000000001000 +01011001011011000000000000001100 +00111101101000100000000000011111 +00000001110000010000000000000001 +00010101101011010000000000000001 +10111000010000010000100000000000 +01011001011011010000000000000000 +01011001011000010000000000000100 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00101000001000100000000000000100 +00101000001001010000000000000000 +01111000000000110000000000000001 +11001000000000100010000000000000 +00111000011000110111100100111000 +01001000000001010000000000001100 +01111000000000110000000000000001 +10111000101000100010000000000000 +00111000011000110111110001001000 +01011100100000000000000000000111 +00101000001001010000000000001000 +01111000000000110000000000000001 +00111000011000110111100100111000 +01001000100001010000000000000011 +01111000000000110000000000000001 +00111000011000110111110001001000 +10111000010000000010000000000000 +00101000001000100000000000001000 +00101000001000010000000000001100 +00111100010001100000000000010000 +00000000001001010000000000010000 +10111000110001010010100000000000 +00010100010001100000000000010000 +01001000000001100000000000000010 +11100000000000000000000000001000 +11001000000000010000100000000000 +01111100001001010000000000000000 +11001000000000100001000000000000 +11001000010001010010100000000000 +00111100101001010000000000010000 +00000000001000010000000000010000 +10111000101000010010100000000000 +01111000000010110000000000000001 +00111001011010111011010111100000 +01111000000000100000000000000001 +10111001011000000000100000000000 +00111000010000100111100100111100 +11111000000000000001101101000100 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111001100 +01011011100010110000000000101100 +01011011100011000000000000101000 +01011011100011010000000000100100 +01011011100011100000000000100000 +01011011100011110000000000011100 +01011011100100000000000000011000 +01011011100100010000000000010100 +01011011100100100000000000010000 +01011011100100110000000000001100 +01011011100101000000000000001000 +01011011100111010000000000000100 +00101000010011010000000000010000 +10111000001000000111000000000000 +10111000010000000101100000000000 +10111000011000000110000000000000 +00101000010100110000000000010100 +01001001101000000000000000001100 +01011101101000000000000000000010 +01011110011011010000000000001010 +00101001100000010000000000000000 +01011001011000010000000000001000 +00101001100000010000000000000100 +01011001011000010000000000001100 +00101001100000010000000000000000 +01001000000000010000000000000010 +11100000000000000000000000000011 +01011001011000000000000000001000 +01011001011000000000000000001100 +00101001110000010000000000110000 +00101001011100100000000000001000 +00101001011100010000000000001100 +00101000001000010000000000001000 +00110100000011110000000000111111 +00011100001000010000000000011000 +00110100001100001111111111111111 +11001001111000010111100000000000 +10111001111000000001100000000000 +10111010010000000000100000000000 +10111010001000000001000000000000 +11111000000000000011101000011011 +10111000001000100000100000000000 +00110110000101000000000000000001 +00110101111011110000000000000001 +00110110000100001111111111111111 +01011100001000001111111111111000 +10111010100000000001100000000000 +00110100000000100000000000000001 +11111000000000000011101000000100 +10111000001000000001100000000000 +01001001101000110000000000000100 +01011101101000110000000000000101 +01010110011000100000000000000010 +11100000000000000000000000000011 +01011001011000110000000000010000 +01011001011000100000000000010100 +00101001011001000000000000010000 +00101001011001010000000000010100 +01001000011001000000000000000100 +01011100011001000000000000001000 +01010100010001010000000000000010 +11100000000000000000000000000110 +00110100101000010000000000000001 +11110100101000010010100000000000 +01011001011000010000000000010100 +10110100101001000010000000000000 +01011001011001000000000000010000 +00101001100000010000000000000000 +01001000000000010000000000000010 +11100000000000000000000000000011 +01011001100100100000000000000000 +01011001100100010000000000000100 +00101001100000010000000000000000 +01001000000000010000000000000010 +11100000000000000000000000000011 +01011001100000000000000000000000 +01011001100000000000000000000100 +00101001011000110000000000001100 +00101001011001100000000000001000 +00101001100000010000000000000000 +00111100011000100000000000000001 +00111100110001010000000000000001 +11110100011000100011100000000000 +10110100010000110001100000000000 +10110100111001010010100000000000 +11110100010000110001000000000000 +10110100101001100010100000000000 +10110100010001010001000000000000 +00101001100001000000000000000100 +01001000001000100000000000000100 +01011100001000100000000000011101 +01010100100000110000000000000010 +11100000000000000000000000011011 +00111100001001100000000000010000 +00000000100001010000000000010000 +01111000000001000000000000000001 +10111001110000000000100000000000 +00110100000000100000000000000100 +00110100000000110000000000000001 +00111000100001000111100101001000 +10111000110001010010100000000000 +11111011111111111110010110100010 +00101001011001000000000000010100 +00101001011000110000000000010000 +00101001011001010000000000001100 +00110100100000010000000000000001 +11110100100000010010000000000000 +00111100101000100000000000000001 +10110100100000110010000000000000 +00101001011000110000000000001000 +11110100101000100010100000000000 +10110100001000100001000000000000 +00111100011000110000000000000001 +11110100001000100000100000000000 +10110100101000110001100000000000 +10110100100000110001100000000000 +10110100001000110000100000000000 +01011001100000010000000000000000 +01011001100000100000000000000100 +00101001011011010000000000010100 +00101001011000010000000000010000 +00101001011001000000000000001100 +00110101101000101111111111111111 +11110101101000100001100000000000 +00110100001000011111111111111111 +10110100011000010000100000000000 +00101001011000110000000000001000 +11111000000000000011100110001110 +00101001100000110000000000000100 +00101001100001000000000000000000 +10110100011000100001000000000000 +11110100011000100001100000000000 +10110100100000010000100000000000 +10110100011000010000100000000000 +01011011100000010000000000110000 +01011011100000100000000000110100 +00110111100000010000000000110000 +10111001101000000001000000000000 +11111011111111111110101100010010 +00101011100000010000000000110100 +00101011100001100000000000110000 +01111000000001000000000000000001 +01011001011000010000000000001100 +01011001011001100000000000001000 +01011001100001100000000000000000 +01011001100000010000000000000100 +00000000001001110000000000010000 +00101001011001010000000000010100 +00111100110001100000000000010000 +10111001110000000000100000000000 +00110100000000100000000000000100 +00110100000000110000000000000001 +00111000100001000111100101100000 +10111000110001110011000000000000 +11111011111111111110010101101101 +00101011100111010000000000000100 +00101011100010110000000000101100 +00101011100011000000000000101000 +00101011100011010000000000100100 +00101011100011100000000000100000 +00101011100011110000000000011100 +00101011100100000000000000011000 +00101011100100010000000000010100 +00101011100100100000000000010000 +00101011100100110000000000001100 +00101011100101000000000000001000 +00110111100111000000000000110100 +11000011101000000000000000000000 +00110111100111001111111111010100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +00101000001011100000000000000000 +10111000001000001000000000000000 +00101000010000010000000000000100 +00101001110010110000000000000100 +00101000010011010000000000000000 +10111000010000000110000000000000 +00101001011011110000000000100100 +00101001011000100000000000100000 +01111000000001010000000000000001 +10110100001011110111100000000000 +11110100001011110000100000000000 +10110101101000100110100000000000 +10110100001011010110100000000000 +00101001110000010000000000001000 +00111000101001011000111011010100 +00101000101001000000000000000000 +00011100001000100000000000010110 +00110100000000110000000000000000 +01011001011011010000000000100000 +00010100010000010000000000011111 +01011001011011110000000000100100 +11111000000000000011100101001000 +00000000010001000000000000010000 +00111100001000110000000000010000 +00111100010000100000000000010000 +10111000100000110001100000000000 +01001001101000110000000000001011 +01011101101000110000000000000010 +01010101111000100000000000001001 +11001000000000100001000000000000 +01111100010000010000000000000000 +11001000000000110001100000000000 +11001000011000010001100000000000 +01001000011011010000000000000100 +01011100011011010000000000000101 +01010100010011110000000000000010 +11100000000000000000000000000011 +01011001011000110000000000100000 +01011001011000100000000000100100 +00101001011000100000000000100000 +00101001011000110000000000100100 +01001000010000000000000000000011 +01011100010000000000000000000100 +01000100011000100000000000000011 +00110100000010110000000000000000 +11100000000000000000000000000010 +00110100000010111111111111111111 +01011011100000100000000000101000 +01011011100000110000000000101100 +01000101011000000000000000000111 +11001000000000110001100000000000 +01111100011000010000000000000000 +11001000000000100001000000000000 +11001000010000010001000000000000 +01011011100000100000000000101000 +01011011100000110000000000101100 +00101001110000100000000000001000 +00110111100000010000000000101000 +00011100010000100000000000010110 +11111011111111111110101010110001 +01000101011000000000000000001001 +00101011100000010000000000101100 +00101011100000100000000000101000 +11001000000000010000100000000000 +01111100001000110000000000000000 +11001000000000100001000000000000 +11001000010000110001000000000000 +01011011100000100000000000101000 +01011011100000010000000000101100 +00101001100000100000000000000000 +00101001100000110000000000000100 +01001000010000000000000000000011 +01011100010000000000000000000100 +01000100011000100000000000000011 +00110100000010110000000000000000 +11100000000000000000000000000010 +00110100000010111111111111111111 +01011011100000100000000000100000 +01011011100000110000000000100100 +01000101011000000000000000000111 +11001000000000110001100000000000 +01111100011000010000000000000000 +11001000000000100001000000000000 +11001000010000010001000000000000 +01011011100000100000000000100000 +01011011100000110000000000100100 +00101010000000010000000000000000 +00101000001000100000000000001000 +00110111100000010000000000100000 +00011100010000100000000000010100 +11111011111111111110101010010010 +01000101011000000000000000001001 +00101011100000010000000000100100 +00101011100000100000000000100000 +11001000000000010000100000000000 +01111100001000110000000000000000 +11001000000000100001000000000000 +11001000010000110001000000000000 +01011011100000100000000000100000 +01011011100000010000000000100100 +00101011100000110000000000101100 +00101011100000100000000000100100 +00101011100000010000000000100000 +00101011100001000000000000101000 +10110100011000100001000000000000 +11110100011000100001100000000000 +10110100100000010000100000000000 +10110100011000010000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000101100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00101000001000100000000000110000 +00101000001001000000000000111000 +10111000001000000101100000000000 +00101000010000110000000000000100 +01011000011000000000000000111000 +01011000011000000000000000111100 +00101000010000110000000000010100 +00001100001000000000000100100000 +00001100011000000000000000001000 +00101000100000110000000000010100 +01000100011000000000000000010011 +11011000011000000000000000000000 +00110100000000101111111111111111 +01011100001000100000000000001000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000100 +00110100000000110000000000000001 +00111000100001000111100110000100 +11111011111111111110010011001100 +00110100000000010000000000000000 +00101001011000100000000000110000 +11001000000000010000100000000000 +00111100001000010000000000001010 +00101000010000100000000000000100 +00010100001000110000000000011111 +01011000010000010000000000100100 +01011000010000110000000000100000 +11100000000000000000000000001101 +00101000010000100000000000001000 +00101000010000100000000000010000 +00100000010000100000000000000001 +01011100010000110000000000000101 +00101000100001000000000000001000 +00110100000000100000000000000000 +00110100000000110000000000000000 +11011000100000000000000000000000 +00101001011000010000000000110000 +00101000001000010000000000000100 +01011000001000000000000000100000 +01011000001000000000000000100100 +10111001011000000000100000000000 +00110100000000100000000000000100 +11111011111111111110010100110100 +00101001011000010000000000110000 +01111000000001000000000000000001 +00110100000000100000000000000100 +00101000001001100000000000000100 +00110100000000110000000000000001 +10111001011000000000100000000000 +00101000110001010000000000100000 +00101000110001100000000000100100 +00111000100001000111100110100000 +11111011111111111110010010101010 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000011000000110000000000000 +00101000100001010000000000000000 +00101000100000110000000000000100 +10111000001000000101100000000000 +00101000100000010000000000001000 +00101000100001000000000000001100 +01011001100001010000000000000000 +01011001100000110000000000000100 +01011001100001000000000000001100 +01011001100000010000000000001000 +10111001100000000000100000000000 +11111011111111111111111000011000 +10111001100000000000100000000000 +11111011111111111111111001011110 +01111000000001000000000000000001 +10111000001000000010100000000000 +00110100000000100000000000000100 +10111001011000000000100000000000 +00110100000000110000000000000001 +00111000100001000111100111000000 +11111011111111111110010010001100 +00101001100000010000000000000100 +00101001100000100000000000000000 +10111000010000010001000000000000 +00110100000000010000000000000000 +01000100010000000000000000010111 +00101001011000100000000000110000 +00101000010000100000000000001000 +00101000010000100000000000010000 +00100000010000100000000000000001 +01011100010000000000000000010010 +00101001011000010000000000111000 +00110111100011010000000000010100 +10111001101000000001000000000000 +00101000001000110000000000000000 +10111001011000000000100000000000 +11011000011000000000000000000000 +10111001101000000000100000000000 +10111001100000000001000000000000 +11111011111111111111110111111100 +00101001011000010000000000111000 +10111001101000000001000000000000 +00101000001000110000000000000100 +10111001011000000000100000000000 +11011000011000000000000000000000 +10111001011000000000100000000000 +11111011111111111111111110010000 +00110100000000010000000000000001 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000001000000001000000000000 +00101000001000010000000000110000 +00101000010001100000000010101000 +00101000010001010000000010101100 +00101000010001000000000010110000 +00101000010000110000000010110100 +00101000001000010000000000000100 +00110100010000100000000010011000 +01011000001001100000000000000000 +01011000001001010000000000000100 +01011000001001000000000000001000 +01011000001000110000000000001100 +11111011111111111111110111011111 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +00101000001000100000000000110000 +00101000001000110000000010011100 +10111000001000000101100000000000 +00101000010011010000000000000100 +00101000010011000000000000010000 +00101000001000100000000010011000 +10111000010000110001000000000000 +01011100010000000000000000001011 +00101000001000110000000010100000 +00101000001001000000000010100100 +10111000011001000001100000000000 +01011100011000100000000000000111 +01111000000001000000000000000001 +00110100000000100000000000000100 +00110100000000110000000000000010 +00111000100001000111101000000100 +11111011111111111110010001000000 +11100000000000000000000010001000 +00101001011001000000000011001000 +00101001011000110000000011001100 +00101001011000100000000011010000 +00101001011000010000000011010100 +00110101101011100000000000010000 +00110101011100000000000010111000 +01011001101001000000000000010000 +01011001101000110000000000010100 +01011001101000100000000000011000 +01011001101000010000000000011100 +10111010000000000001000000000000 +10111001110000000000100000000000 +11111011111111111111110110110101 +00110101011000010000000010011000 +11111011111111111111110111111011 +01111000000001000000000000000001 +10111000001000000010100000000000 +00110100000000100000000000000100 +00110100000000110000000000000010 +00111000100001000111100111011100 +10111001011000000000100000000000 +11111011111111111110010000101001 +00110101011000010000000010101000 +11111011111111111111110111110010 +01111000000001000000000000000001 +10111000001000000010100000000000 +00110100000000100000000000000100 +00110100000000110000000000000010 +00111000100001000111100111100100 +10111001011000000000100000000000 +11111011111111111110010000100000 +10111010000000000000100000000000 +11111011111111111111110111101001 +01111000000001000000000000000001 +10111000001000000010100000000000 +00110100000000100000000000000100 +00110100000000110000000000000010 +00111000100001000111101000100100 +10111001011000000000100000000000 +11111011111111111110010000010111 +00110101011000010000000011001000 +11111011111111111111110111100000 +01111000000001000000000000000001 +10111000001000000010100000000000 +00110100000000100000000000000100 +00110100000000110000000000000010 +00111000100001000111101000101100 +10111001011000000000100000000000 +11111011111111111110010000001110 +10111001101000000000100000000000 +11111011111111111111110111010111 +01111000000001000000000000000001 +10111000001000000010100000000000 +00110100000000100000000000000100 +00110100000000110000000000000001 +00111000100001000111101000110100 +10111001011000000000100000000000 +11111011111111111110010000000101 +10111001110000000000100000000000 +11111011111111111111110111001110 +01111000000001000000000000000001 +10111000001000000010100000000000 +00110100000000100000000000000100 +10111001011000000000100000000000 +00110100000000110000000000000001 +00111000100001000111101001001100 +11111011111111111110001111111100 +00101001011000010000000000110000 +00110101100011110000000000011000 +00101000001000110000000000000100 +00101000011001010000000000000000 +00101000011001000000000000000100 +00101000011000100000000000001000 +00101000011000010000000000001100 +01011001100001010000000000011000 +01011001100001000000000000011100 +01011001100000100000000000100000 +01011001100000010000000000100100 +00110100011000100000000000010000 +10111001111000000000100000000000 +11111011111111111111110101010111 +10111001111000000000100000000000 +11111011111111111111110110001001 +10111001111000000000100000000000 +11111011111111111111110110110101 +01111000000001000000000000000001 +10111000001000000010100000000000 +00110100000000100000000000000100 +10111001011000000000100000000000 +00110100000000110000000000000001 +00111000100001000111101001100100 +11111011111111111110001111100011 +00101001100000010000000000011100 +00101001100011100000000000011000 +10111001110000010111000000000000 +01011101110000000000000000101000 +00110101101000100000000000101000 +10111001011000000000100000000000 +00110101100000110000000000100000 +11111011111111111111110111010100 +10111001101000000010000000000000 +10111001011000000000100000000000 +10111001111000000001000000000000 +00110101100000110000000000001000 +11111011111111111111111100110001 +10111000001000000110100000000000 +01011100001011100000000000011101 +00110101011000010000000000110000 +00110101100000100000000000010000 +11111011111111111111111001110010 +00101001011000110000000000110000 +00101000011000110000000000001000 +00101000011001000000000000010000 +00100000100001000000000000000001 +01011100100011010000000000001011 +00111100001000010000000000010000 +00000000010000100000000000010000 +10111000001000100001000000000000 +00101001011000010000000000111000 +11001000000000100001000000000000 +00101000001000110000000000010000 +01011100011001000000000000000010 +00101000001000110000000000001100 +10111001011000000000100000000000 +11011000011000000000000000000000 +00101001011000010000000000110000 +01111000000001000000000000000001 +00110100000000100000000000000100 +00101000001000010000000000000100 +00110100000000110000000000000010 +00111000100001000111100111101100 +00101000001001010000000000100100 +10111001011000000000100000000000 +00010100101001010000000000001010 +11111011111111111110001110111000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001010110000000000001100 +10111000001000000110000000000000 +00110100000000010000000000000001 +01011001011000010000000000000000 +00101001100000010000000000100100 +01001000001000000000000000000010 +00110100000000010000000000000001 +00001101011000010000000000001100 +00101001100000010000000000001000 +01011100001000000000000000000010 +01011001100000100000000000001000 +00101001100011010000000000001000 +00110101011000010000000000010000 +00110100000000110000000000001100 +10111001101000000001000000000000 +11111000000000000011100010010011 +00101101011000100000000000001100 +00110100000000010000000000000001 +01011100010000010000000000000100 +00101001100000010000000000000000 +00101000001000010000000000100100 +01100100001000010000000000000010 +01011001011000010000000000100000 +00101001101000010000000000100000 +00101101011001110000000000001100 +00110100000000100000000000000000 +00110001011000010000000000011100 +00101001101000010000000000100100 +00110100000001100000000000000010 +00110100000001010000000000000001 +00110001011000010000000000011101 +00101001101000010000000000101000 +00110100000001001111111111111111 +00110001011000010000000000011110 +11100000000000000000000000001101 +00001000010000010000010000011000 +00101001100010000000000000000000 +10110101000000010000100000000000 +01000100011000000000000000000100 +00101000001000110000000000100100 +01000100011001100000000000000010 +01011001011000000000000000100000 +01011000001000100000001111011000 +01011000001001010000000000000000 +01011000001000000000000000010000 +00001100001001000000000100100010 +00110100010000100000000000000001 +00101001011000110000000000100000 +01001000111000101111111111110011 +01000100011000000000000000000111 +00110100000000010000000011111111 +01011001011000010000000000010000 +01111000000000010000000000000001 +00111000001000010111101010001000 +00110100000000100000000011111111 +11111000000000000001100010110111 +01111000000000010000000000000001 +00111000001000011001111011110100 +00101000001000110000000000000100 +00110100000000010000000000000000 +01000100011000000000000000000100 +10111001100000000000100000000000 +10111001101000000001000000000000 +11011000011000000000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01111000000000100000000000000001 +00111000010000101001111011110100 +00101000010000110000000000001000 +00110100000000100000000000000000 +01000100011000000000000000000011 +11011000011000000000000000000000 +10111000001000000001000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011001111101100100 +00101000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011001110110011000 +11100000000000000000000000000100 +00101000010001000000000000000000 +01000100011001000000000000000100 +00110100001000010000000000001100 +00101000001000110000000000000000 +01011100011000001111111111111100 +00101000001000010000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01011011100000010000000000001100 +01011011100000100000000000010000 +10111000011000000101100000000000 +10111000010000000001100000000000 +01011100001000000000000000001110 +01111000000000100000000000000001 +00111000010000101000111011011000 +00101000010000010000000000000000 +01010100011000010000000000001010 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011011010111111100 +00111000010000100111101010101100 +01011101011000000000000000000011 +01111000000000100000000000000001 +00111000010000100111101010110100 +11111000000000000001100001101101 +11100000000000000000000000010000 +01111000000000110000000000000001 +00111000011000111000111010111000 +00101000011000100000000000000000 +00110111100000010000000000001100 +11111011111111111110100011000101 +10111000001000000010000000000000 +01111000000000100000000000000001 +01111000000000010000000000000001 +00101011100000110000000000010000 +00111000001000011011010111111100 +00111000010000100111101010111000 +01011101011000000000000000000011 +01111000000000100000000000000001 +00111000010000100111101011000100 +11111000000000000001100001011101 +01111000000000010000000000000001 +00111000001000011011010111111100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111100010000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011001111101100100 +00101000001000010000000000000000 +00101000001010110000000000011000 +01111000000000010000000000000001 +00111000001000011100001010000100 +00101000001000100000000000000000 +00110100000000010000000000000000 +01000100010000000000000011011011 +01111000000011000000000000000001 +00111001100011001011010111111000 +00101001100000010000000000000000 +01011100001000000000000000001000 +11111000000000000001111000111110 +01111000000000100000000000000001 +00111000010000101001011011101000 +00101000010000100000000000000000 +10100100010000000001000000000000 +10110100010000010000100000000000 +01011001100000010000000000000000 +01111000000000010000000000000001 +00111000001000011011111110100100 +00101000001000010000000000000000 +00101001011000100000000001011000 +01011100001000100000000000000111 +01111000000000010000000000000001 +00111000001000011011000011001000 +00101000001000110000000000000000 +00110100000000100000000000000011 +00110100000000010000000000000000 +01000100011000100000000011000101 +11111000000000000001111000101100 +01111000000000110000000000000001 +01111000000000100000000000000001 +00111000011000111001011011101000 +00111000010000101011010111111000 +00101000011000110000000000000000 +00101000010000100000000000000000 +10110100011000100001000000000000 +11001000001000100000100000000000 +01001100001000000000000000000111 +01111000000000010000000000000001 +00111000001000011011000011001000 +00101000001000110000000000000000 +00110100000000100000000000000011 +00110100000000010000000000000000 +01011100011000100000000010110101 +11111000000000000001111000011100 +01111000000000100000000000000001 +00111000010000101011010111111000 +01011000010000010000000000000000 +00101001011000100000000001011000 +01111000000000010000000000000001 +00111000001000011011111110100100 +01011000001000100000000000000000 +00110111100000010000000011011100 +00110111100000100000000011101000 +11111000000000000010001100010111 +00110100000000100000000000000000 +00110111100000010000000000010100 +11111000000000000000001100100110 +00110111100000010000000011110000 +00110111100000100000000011101100 +11111000000000000001110111011000 +00101011100000110000000011101100 +00101011100001000000000011110000 +00101011100000100000000001000000 +01111000000000010000000000000001 +00111000001000010111101011001100 +11111000000000000001100000011010 +00101011100000100000000001001000 +01111000000000010000000000000001 +00111000001000010111101011100000 +01111100010000100000000000000000 +11111000000000000001100000010101 +11111011111111111111111101111001 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000010111101011101100 +11111000000000000001100000010000 +01111000000000010000000000000001 +00111000001000011011000011001000 +00101000001000100000000000000000 +00110100000000010000000000000011 +01011100010000010000000000001010 +00101001011000100000000000010000 +01111000000000010000000000000001 +00111000001000010111101011110100 +00100000010000100000000000000001 +11111000000000000001100000000110 +01111000000000010000000000000001 +00111000001000010111101011111100 +00110101011000100000000001100000 +11111000000000000001100000000010 +00110100000000010000000000000000 +00110111100000100000000011100100 +01111000000011010000000000000001 +11111000000000000011001111011110 +00110100000011000000000000000000 +00111001101011010111101100001000 +11100000000000000000000000001000 +10111001100000000000100000000000 +11111000000000000011010000111110 +10111000001000000001100000000000 +10111001100000000001000000000000 +10111001101000000000100000000000 +11111000000000000001011111110101 +00110101100011000000000000000001 +00101011100000010000000011100100 +01001000001011001111111111111000 +00101011100000100000000011100000 +00101011100000110000000011101000 +01111000000000010000000000000001 +00111000001000010111101100010100 +11111000000000000001011111101101 +01111000000000010000000000000001 +00111000001000011011000011001000 +00101000001000100000000000000000 +00110100000000010000000000000011 +01011100010000010000000001001110 +00101001011000100000000001000100 +00101001011000010000000001000000 +00110100000000110000000000000000 +11111011111111111111111101010110 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000010111101100100100 +11111000000000000001011111100000 +00101001011000100000000001010100 +00101001011000010000000001010000 +00110100000000110000000000000000 +11111011111111111111111101001110 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000010111101100101100 +11111000000000000001011111011000 +00101001011000100000000000011000 +00101001011000110000000000011100 +01111000000000010000000000000001 +00111000001000010111101100110100 +11111000000000000001011111010011 +00101001011000100000000000100000 +00101001011000110000000000100100 +01111000000000010000000000000001 +00111000001000010111101101001000 +11111000000000000001011111001110 +00101001011000100000000001010100 +00101001011000110000000001000100 +01111000000000010000000000000001 +00111100010000100000000000000001 +00111000001000010111101101011100 +11001000011000100001000000000000 +11111000000000000001011111000111 +00101001011000100000000000011000 +00101001011000010000000001000100 +00101001011000110000000001000000 +00010100010001000000000000011111 +11001000001000100001000000000000 +11110100010000010000100000000000 +11001000011001000001100000000000 +11001000011000010001100000000000 +00101001011000010000000000011100 +00010100001001000000000000011111 +11001000010000010000100000000000 +11110100001000100001000000000000 +11001000011001000001100000000000 +11001000011000100001000000000000 +00101001011000110000000000100000 +00010100011001000000000000011111 +11001000001000110001100000000000 +11110100011000010000100000000000 +11001000010001000001000000000000 +11001000010000010000100000000000 +00101001011000100000000000100100 +00010100010001000000000000011111 +11001000011000100001000000000000 +11110100010000110001100000000000 +11001000001001000000100000000000 +11001000001000110000100000000000 +00110100000000110000000000000000 +11111011111111111111111100011101 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000010111101101101000 +11111000000000000001011110100111 +00101001011000100000000010001100 +01111000000000010000000000000001 +00111000001000010111101101110100 +11111000000000000001011110100011 +00101001011000100000000001001000 +01111000000000010000000000000001 +00111000001000010111101101111100 +11111000000000000001011110011111 +00101001011000100000000001011000 +01111000000000010000000000000001 +00111000001000010111101110001000 +11111000000000000001011110011011 +00110100000000011111111111111111 +11111000000000000011001111101001 +10111000001000000110000000000000 +00110100000000010000000000000000 +11111000000000000011001111100110 +10111000001000000101100000000000 +00110100000000010000000000000001 +11111000000000000011001111100011 +01111000000001010000000000000001 +10111000001000000010000000000000 +10111000101000000000100000000000 +10111001100000000001000000000000 +10111001011000000001100000000000 +00111000001000010111101110010100 +11111000000000000001011110001100 +01111000000000010000000000000001 +00111000001000010111101110101000 +11111000000000000010000101110101 +00100000001000111111111111111111 +00001000011000110010011100010000 +10111000001000000001000000000000 +00010100010000100000000000010000 +00010100011000110000000000010000 +01111000000000010000000000000001 +00111000001000010111101110101100 +11111000000000000001011110000001 +01111000000000010000000000000001 +00111000001000011000011110001000 +11111000000000000001011101111110 +00110100000000010000000000000001 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000011110000 +11000011101000000000000000000000 +00110111100111001111111100001100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100111010000000000001100 +11111000000000000001110111110110 +10111000001000000101100000000000 +11111000000000000001110111111010 +10100000001010110001000000000000 +00110100000000010000000000000000 +01011100010000000000000001011111 +01111000000010110000000000000001 +00111001011010111011011000010100 +00101001011000010000000000000000 +01011100001000100000000000000100 +11111000000000000001110101010100 +00110100001000011111110000010111 +01011001011000010000000000000000 +01111000000010110000000000000001 +11111000000000000001110101010000 +00111001011010111011011000010100 +00101001011000100000000000000000 +11001000001000100000100000000000 +00110100001000101111110000011000 +00110100000000010000000000000000 +01001000000000100000000001010000 +11111000000000000001110101001001 +01011001011000010000000000000000 +00110100000000010000000000000000 +11111000000000000001110111001100 +00110111100000010000000011110100 +00110111100000100000000011110000 +11111000000000000001110100001111 +00101011100000010000000011110100 +00101011100000100000000011110000 +01111000000010110000000000000001 +00111001011010111001111101100100 +11111000000000000001111000001101 +00110111100000010000000011100000 +00110111100000100000000011101100 +11111000000000000010001001000000 +00101011100000110000000011101100 +00101011100000010000000011100000 +00101011100000100000000011100100 +11111000000000000001111000001100 +00110100000000100000000000000000 +00110111100000010000000000011000 +11111000000000000000001001001011 +00101011100000010000000001000100 +00101011100000100000000001001100 +01111100001000010000000000000000 +01111100010000100000000000000000 +11111000000000000001110111101001 +00101001011000010000000000000000 +01000000001000010000000000000011 +11111000000000000001110111101111 +01111000000000010000000000000001 +00111000001000011011000011001000 +00101000001000100000000000000000 +00110100000000010000000000000011 +01011100010000010000000000010010 +00101001011000010000000000000000 +00101000001010010000000000011000 +00101001001010100000000001001000 +00101001001001100000000001010100 +00101001001001000000000001000100 +00101001001000010000000000010000 +00101001001000110000000001000000 +00101001001001010000000001010000 +01000001001000100000000000010111 +00101001001010000000000010001100 +01011011100010100000000000000100 +00111100110001110000000000000001 +00101001001010010000000001011000 +00100000001000010000000000000001 +11001000100001110011100000000000 +01011011100010010000000000001000 +11111000000000000001110110111011 +00110100000000010000000000000000 +00110111100000100000000011101000 +11111000000000000011001100000111 +00101011100000100000000011101000 +00110100000000010000000000001000 +01001100001000100000000000000010 +01011011100000010000000011101000 +00110100000010110000000000000000 +00110100000011000000000000000000 +11100000000000000000000000000111 +10111001011000000000100000000000 +11111000000000000011001101100011 +00100000001000010000000000000001 +10111100001010110000100000000000 +00110101011010110000000000000001 +10111001100000010110000000000000 +00101011100000010000000011101000 +01001000001010111111111111111001 +10111001100000000000100000000000 +11111000000000000001110111001011 +01111000000000010000000000000001 +00111000001000010111101110101000 +11111000000000000010000011111111 +11111000000000000001110111011010 +00110100000000010000000000000001 +11111000000000000001110110000010 +00110100000000010000000000000001 +00101011100111010000000000001100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00110111100111000000000011110100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111001111101100100 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000100111101110111100 +00101000001011000000000000011000 +00110100000000010000000000000100 +11111000000000000000101011001000 +11111011111111111111111001100010 +01111000000000100000000000000001 +10111000001000000001100000000000 +00111000010000100111101111001100 +00110100000000010000000000000111 +11111000000000000000101011000010 +00101001100000010000000000010000 +01000100001000000000000000000101 +00101001011000010000000000000000 +00101000001000100000000000000000 +00110100000000010000000000001001 +01000100010000010000000000000111 +01111000000000100000000000000001 +00110100000000010000000000000001 +00111000010000100111101111010000 +11111000000000000000101010111000 +00110100000000010000000000000000 +11100000000000000000000000000110 +01111000000000100000000000000001 +00110100000000010000000000000100 +00111000010000100111101111101000 +11111000000000000000101010110010 +00110100000000010000000000000001 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111011100100 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011001111101100100 +00101000001000010000000000000000 +01111000000011000000000000000001 +00111001100011001011011000011100 +00101000001010110000000000011000 +00101001100000010000000000000000 +01011100001000000000000000001000 +11111000000000000001110010111100 +01111000000000100000000000000001 +00111000010000101001011011101000 +00101000010000100000000000000000 +10100100010000000001000000000000 +10110100010000010000100000000000 +01011001100000010000000000000000 +11111000000000000001110010110101 +01111000000000110000000000000001 +01111000000000100000000000000001 +00111000011000111001011011101000 +00111000010000101011011000011100 +00101000011000110000000000000000 +00101000010000100000000000000000 +10110100011000100001000000000000 +11001000001000100000100000000000 +01001100001000000000000000000111 +01111000000000010000000000000001 +00111000001000011011011000011000 +00101000001000010000000000000000 +00101001011000100000000001011000 +00110100000011000000000000000000 +01000100001000100000000110110010 +11111000000000000001110010100101 +01111000000000100000000000000001 +00111000010000101011011000011100 +01011000010000010000000000000000 +00101001011000100000000001011000 +01111000000000010000000000000001 +00111000001000011011011000011000 +01011000001000100000000000000000 +11111000000000000000101010011010 +01111000000000110000000000000001 +00111000011000111001011011011000 +00101000011000110000000000000000 +01111000000000100000000000000001 +00110100000000010000000000000100 +00111000010000100111110000000100 +11111000000000000000101001110100 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111110000100000 +11111000000000000000101001110000 +00110111100000010000000100000100 +00110111100000100000000100010100 +11111000000000000010000110010100 +01111000000000100000000000000001 +00110100000000010000000000000100 +00111000010000100111110000101100 +11111000000000000000101001101001 +00101011100000100000000100001000 +00101011100000010000000100000100 +00110100000000110000000000000000 +11111000000000000000100110110100 +01111000000000100000000000000001 +10111000001000000001100000000000 +00111000010000100111101111001100 +00110100000000010000000000000111 +11111000000000000000101001100000 +00110100000000100000000000000000 +00110111100000010000000000101000 +11111000000000000000000110010110 +01111000000000100000000000000001 +00110100000000010000000000000100 +00111000010000100111110001001100 +11111000000000000000101001011001 +01111000000000100000000000000001 +01111000000000110000000000000001 +00110100000000010000000000000111 +00111000010000100111110001011100 +00111000011000110111110001100100 +11111000000000000000101001010011 +00101011100000010000000001010100 +01000100001000000000000000000101 +01111000000000100000000000000001 +00110100000000010000000000000010 +00111000010000100111110001101100 +11100000000000000000000000000100 +01111000000000100000000000000001 +00110100000000010000000000000001 +00111000010000100111110001111000 +11111000000000000000101001001001 +00110111100000010000000100011100 +00110111100000100000000100011000 +11111000000000000001110000110100 +00101011100000110000000100011000 +00101011100001000000000100011100 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111110010000100 +11111000000000000000101001000000 +00101011100000010000000001010100 +00110100000011000000000000000001 +01000100001000000000000101101011 +01111000000000100000000000000001 +00111000010000100111110010011000 +00110100000000010000000000000111 +11111000000000000000101000111001 +00110111100011010000000100001100 +10111001101000000000100000000000 +11111000000000000000110100001110 +00110111100000110000000011110000 +10111000011000000000100000000000 +10111001101000000001000000000000 +01011011100000110000000000100100 +11111000000000000000100001010110 +01111000000000010000000000000001 +00111000001000011011100011101000 +00101000001000010000000000000000 +00101011100000110000000000100100 +01000100001011000000000000001010 +01000100001000000000000000000100 +00110100000000100000000000000010 +01011100001000100000000000001111 +11100000000000000000000000001010 +01111000000000100000000000000001 +00110100000000010000000000000001 +00111000010000100111110010100000 +11111000000000000000101000100100 +11100000000000000000000000001001 +01111000000000100000000000000001 +00110100000000010000000000000010 +00111000010000100111110010110000 +11100000000000000000000000000100 +01111000000000100000000000000001 +00110100000000010000000000000010 +00111000010000100111110011000000 +11111000000000000000101000011011 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111110011011000 +01111000000011010000000000000001 +11111000000000000000101000010110 +00111001101011011001111101100100 +00101001101000010000000000000000 +00101000001000010000001101011000 +00101000001000010000000000010000 +00101000001011100000000000001000 +01011101110000000000000001001011 +01111000000000100000000000000001 +00110100000000010000000000000001 +00111000010000100111110011100000 +11111000000000000000101000001100 +11111011111111111111111100111000 +00110100000011000000000000000001 +01000100001011100000000100110111 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111110011101000 +11111000000000000000101000000101 +00101001101000010000000000000000 +00101000001000010000000000110000 +00101000001000010000000000010000 +00101000001001010000000000001000 +00101000001000110000000000001100 +00101000001000100000000000010000 +00101000001001000000000000010100 +10111000101000110010100000000000 +01000100101000000000000000010100 +00111100010000100000000000010000 +00000000100001000000000000010000 +10111000010001000010000000000000 +01001000011000000000000000000101 +01101100100000100000000000000000 +01100100011000010000000000000000 +10100000010000010000100000000000 +01000100001000000000000000000110 +01111000000000100000000000000001 +00110100000000010000000000000111 +00111000010000100111110100001000 +11111000000000000000100111110000 +11100000000000000000000100011100 +01111000000000100000000000000001 +00110100000000010000000000000111 +00111000010000100111110100010100 +11001000000001000010000000000000 +11111000000000000000100111101010 +11100000000000000000000100010111 +00000000100001000000000000010000 +00111100010000110000000000010000 +01111000000010110000000000000001 +00111001011010110111110100100000 +10111000011001000001100000000000 +10111001011000000001000000000000 +00110100000000010000000000000111 +11111000000000000000100111100001 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111110100101000 +11111000000000000000100111011101 +00101001101000010000000000000000 +10111001011000000001000000000000 +00101000001000010000000000110000 +00101000001000010000000000010000 +00101000001001000000000000100000 +00101100001000110000000000100100 +00110100000000010000000000000111 +00111100100001000000000000010000 +10111000100000110001100000000000 +11111000000000000000100111010011 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111110101001000 +11111000000000000000100111001111 +00101001101000010000000000000000 +10111001011000000001000000000000 +00101000001000010000000000110000 +00101000001001000000000000000100 +00110100000000010000000000000111 +00101000100000110000000000100000 +00101000100001000000000000100100 +11111000000000000000100111000111 +11100000000000000000000011110100 +01111000000000010000000000000001 +00111000001000011011000011001000 +00101000001000010000000000000000 +00110100000000100000000000000001 +01001000010000010000000000001110 +00110100000000100000000000000010 +01001100010000010000000000000100 +00110100000000100000000000000011 +01011100001000100000000000001010 +11100000000000000000000000000101 +01111000000000100000000000000001 +00110100000000010000000000000111 +00111000010000100111110101101000 +11100000000000000000000000001000 +01111000000000100000000000000001 +00110100000000010000000000000111 +00111000010000100111110101110100 +11100000000000000000000000000100 +01111000000000100000000000000001 +00110100000000010000000000000001 +00111000010000100111110110000000 +11111000000000000000100110110000 +00101011100000010000000001011100 +01000100001000000000000000000101 +01111000000000100000000000000001 +00110100000000010000000000000010 +00111000010000100111110110001100 +11100000000000000000000000000100 +01111000000000100000000000000001 +00110100000000010000000000000001 +00111000010000100111110110010100 +11111000000000000000100110100110 +00101011100000010000000001111000 +01000100001000000000000000000111 +00101011100000010000000001111100 +01000100001000000000000000000101 +01111000000000100000000000000001 +00110100000000010000000000000010 +00111000010000100111110110011100 +11100000000000000000000000000100 +01111000000000100000000000000001 +00110100000000010000000000000001 +00111000010000100111110110101000 +11111000000000000000100110011010 +11111011111111111111111011000110 +00110100000011000000000000000001 +01000100001000000000000011000101 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111110110111000 +11111000000000000000100110010011 +01111000000000100000000000000001 +00110100000000010000000000000111 +00111000010000100111100111011000 +00110101011000110000000001100000 +11111000000000000000100110001110 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111110111010100 +11111000000000000000100110001010 +00101001011000010000000001011100 +01000100001000000000000000000101 +01111000000000100000000000000001 +00110100000000010000000000000010 +00111000010000100111110111110000 +11100000000000000000000000000100 +01111000000000100000000000000001 +00110100000000010000000000000001 +00111000010000100111110111110100 +11111000000000000000100110000000 +00110100000000010000000000000000 +00110111100000100000000100010000 +01111000000100000000000000000001 +01111000000011110000000000000001 +01111000000011100000000000000001 +01111000000011010000000000000001 +11111000000000000011000110001111 +00110100000011000000000000000000 +00111010000100000111110111111100 +00111001111011110111111000011100 +00111001110011100111111000100100 +00111001101011011000011110001000 +11100000000000000000000000010101 +00110100000000010000000010000111 +10111010000000000001000000000000 +10111001100000000001100000000000 +11111000000000000000100101101111 +10111001100000000000100000000000 +11111000000000000011000111101000 +10111000001000001000100000000000 +00100000001000010000000000000001 +01000100001000000000000000000100 +00110100000000010000000000000010 +10111001111000000001000000000000 +11111000000000000000100101100111 +00100010001100010000000000000010 +01000110001000000000000000000100 +00110100000000010000000000000010 +10111001110000000001000000000000 +11111000000000000000100101100010 +10111001101000000000100000000000 +11111000000000000001010110010110 +00110101100011000000000000000001 +00101011100000010000000100010000 +01001000001011001111111111101011 +01111000000000100000000000000001 +00110100000000010000000000000100 +00111000010000100111111000110000 +11111000000000000000100101011001 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111111001001000 +11111000000000000000100101010101 +00101001011000100000000001000100 +00101001011000010000000001000000 +00110100000000110000000000000001 +01111000000011000000000000000001 +11111011111111111111110011111000 +00111001100011000111111001100000 +10111000001000000001100000000000 +10111001100000000001000000000000 +00110100000000010000000000000111 +11111000000000000000100101001011 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111111001101000 +11111000000000000000100101000111 +00101001011000100000000001010100 +00101001011000010000000001010000 +00110100000000110000000000000001 +01111000000011010000000000000001 +11111011111111111111110011101010 +10111000001000000001100000000000 +10111001100000000001000000000000 +00110100000000010000000000000111 +11111000000000000000100100111110 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111111010000000 +11111000000000000000100100111010 +00101001011000110000000000011000 +00101001011001000000000000011100 +00111001101011010111111010100000 +10111001101000000001000000000000 +00110100000000010000000000000111 +11111000000000000000100100110100 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111111010111000 +11111000000000000000100100110000 +00101001011001000000000000100100 +00101001011000110000000000100000 +10111001101000000001000000000000 +00110100000000010000000000000111 +11111000000000000000100100101011 +00101001011011010000000001010100 +00101001011000010000000001000100 +01111000000000100000000000000001 +00111101101011010000000000000001 +00111000010000100111111011011000 +11001000001011010110100000000000 +00110100000000010000000010000111 +11111000000000000000100100100011 +01111000000000100000000000000001 +10111001101000000001100000000000 +00110100000000010000000000000111 +00111000010000100111111011110000 +11111000000000000000100100011110 +00101001011000010000000000011000 +00101001011000100000000001000100 +00101001011011100000000001000000 +00010100001000110000000000011111 +11001000010000010000100000000000 +11110100001000100001000000000000 +11001001110000110111000000000000 +11001001110000100111000000000000 +00101001011000100000000000011100 +00101001011011010000000000100100 +00010100010000110000000000011111 +11001000001000100001000000000000 +11110100010000010000100000000000 +11001001110000110111000000000000 +11001001110000010111000000000000 +00101001011000010000000000100000 +00010100001000110000000000011111 +11001000010000010000100000000000 +11110100001000100001000000000000 +11001001110000110111000000000000 +00010101101000110000000000011111 +11001000001011010110100000000000 +11001001110000100111000000000000 +11110101101000010000100000000000 +11001001110000110111000000000000 +01111000000000100000000000000001 +11001001110000010111000000000000 +00111000010000100111111011111100 +00110100000000010000000010000111 +11111000000000000000100100000000 +10111001101000000001000000000000 +00110100000000110000000000000001 +10111001110000000000100000000000 +11111011111111111111110010100100 +10111000001000000001100000000000 +10111001100000000001000000000000 +00110100000000010000000000000111 +11111000000000000000100011111000 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111111100010100 +11111000000000000000100011110100 +00101001011000110000000010001100 +01111000000000100000000000000001 +00110100000000010000000000000111 +00111000010000100111111100100100 +11111000000000000000100011101111 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111111100110000 +11111000000000000000100011101011 +00101001011000110000000001001000 +01111000000000100000000000000001 +00110100000000010000000000000111 +00111000010000100111111101000000 +11111000000000000000100011100110 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111111101001100 +11111000000000000000100011100010 +00101001011000110000000010000100 +01111000000000100000000000000001 +00110100000000010000000000000111 +00111000010000100111111101011000 +11111000000000000000100011011101 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111111101100100 +11111000000000000000100011011001 +00101001011000110000000001011000 +01111000000000100000000000000001 +00110100000000010000000000000111 +00111000010000100111111101110100 +11111000000000000000100011010100 +00110100000011000000000000000001 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000100011100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +11111011111111111110000111110100 +00110100000000100000000000000011 +01011100001000100000000000000011 +00110100000000010000000000000010 +11100000000000000000000000000010 +00110100000000010000000000000001 +01011001011000010000000000101000 +00110101011000100000000001001100 +00110101011000010000000001001000 +11111000000000000001011010100100 +00110100000000010000000000000000 +01011001011000000000000001000000 +01011001011000000000000001000100 +01011001011000000000000010001000 +01011001011000000000000010001100 +00110111100000100000000000001100 +00110100000000110000000000000000 +11111000000000000011000010010110 +01000100001000000000000000000110 +00101011100000010000000000001100 +01011001011000010000000010100000 +00110100000000010000000000000001 +01011001011000010000000010100100 +11100000000000000000000000000011 +01011001011000000000000010100000 +01011001011000000000000010100100 +00110100000000010000000000000000 +11111000000000000001011001101010 +01011001011000010000000000101100 +00110100000000010000000000000001 +01011001011000010000000001010100 +01011001011000010000000001010000 +00110100000000010000000000000000 +11111000000000000011000000100011 +01011001011000010000000000110100 +00110100000000010011111010000000 +01011001011000010000000010110100 +01111000000000010000000000000001 +00111000001000011001011011110000 +00101000001000010000000000000000 +01011001011000010000000010111000 +01011001011000010000000010111100 +00110101011000010000000000010100 +11111000000000000001011000001111 +00110100000000010000000000000000 +01011001011000000000000000011100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000010111111110010100 +11111000000000000001010011000001 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111011011001110100 +00101001011001010000000000000000 +01111000000000100000000000000001 +00110100001001000000000000000001 +10111000001000000001100000000000 +00111000010000101011011000100000 +10110100001000100000100000000000 +11001000101000110001100000000000 +10110100100000100001000000000000 +11111000000000000011010010011101 +00101001011000010000000000000000 +00110100001000011111111111111111 +01011001011000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111001100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00110111100010110000000000010100 +00110100000000100000000000000000 +00110100000000110000000000100100 +10111001011000000000100000000000 +11111000000000000011010011010001 +01111000000000110000000000000001 +10111001011000000000100000000000 +00110100000001000000000000000000 +00110100000000100000000000000000 +00111000011000111011011000100000 +00110100000010000000000000100000 +00110100000001110000000000001000 +11100000000000000000000000000100 +00110100100001000000000000000001 +00110100001000010000000000000100 +01000100100001110000000000010111 +10110100010000110010100000000000 +11100000000000000000000000000100 +00110000101000000000000000000000 +00110100010000100000000000000001 +00110100101001010000000000000001 +01000000101001100000000000000000 +01000100110010001111111111111100 +01000100110000000000000000001101 +10110100010000110010100000000000 +01011000001001010000000000000000 +11100000000000000000000000000010 +00110100010000100000000000000001 +10110100010000110010100000000000 +01000000101001010000000000000000 +01111100101010010000000000000000 +01111100101001100000000000100000 +10100001001001100011000000000000 +01011100110000001111111111111010 +01011100101001101111111111101011 +11100000000000000000000000000011 +00110100000011000000000000000000 +01000100100011000000000000100001 +00101011100000010000000000010100 +00110100000011000000000000000000 +01000000001000100000000000000000 +00110100000000010000000000100011 +01000100010000010000000000011100 +01111000000010110000000000000001 +01111000000011000000000000000001 +00111001011010111010111000001000 +00111001100011001010111011010000 +11100000000000000000000000010001 +00101001011000010000000000000000 +11111000000000000011010011100101 +10111000001000000110100000000000 +01011100001000000000000000001100 +00101001011000100000000000000100 +00110111100000010000000000011000 +11011000010000000000000000000000 +10111000001000000110000000000000 +01001100001011010000000000001110 +00101001011000100000000000000000 +01111000000000010000000000000001 +10111001100000000001100000000000 +00111000001000010111111110011100 +11111000000000000001010001100110 +11100000000000000000000000001000 +00110101011010110000000000001000 +00101011100000100000000000010100 +01010101100010111111111111101111 +01111000000000010000000000000001 +00111000001000010111111110110100 +11111000000000000001010001011111 +00110100000011001111111111101010 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000110100 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011001111110011100 +01111000000000100000000000000001 +00101000001001100000000000000000 +00110100000001010000000000111011 +00110100000000010000000000000000 +00111000010000101011011000100000 +00110100000001000000000001010000 +11100000000000000000000000000101 +10110100001000100011100000000000 +00110000111000110000000000000000 +00110100001000010000000000000001 +01000100001001000000000000000101 +10110100110000010001100000000000 +01000000011000110000000000000000 +01000100011000000000000000000010 +01011100011001011111111111111001 +01111000000000100000000000000001 +00111000010000101011011000100000 +10110100010000010001000000000000 +00110000010000000000000000000000 +01111000000000100000000000000001 +00111000010000101001111110011100 +00101000010000110000000000000000 +00110100000001000000000000111011 +10110100011000010001100000000000 +01011000010000110000000000000000 +01000000011001010000000000000000 +01011100101001000000000000000011 +00110100011000110000000000000001 +01011000010000110000000000000000 +01011100001000000000000000000110 +01111000000000100000000000000001 +01111000000000110000000000000001 +00111000010000101001111110011100 +00111000011000111001111101101000 +01011000010000110000000000000000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000011011011000100000 +01000100010000010000000000000011 +00110100000000110000000001010000 +11111000000000000011010110001100 +01111000000000010000000000000001 +00111000001000011011011000100000 +11111000000000000011010100001101 +01111000000000100000000000000001 +00111000010000101011011001110100 +01111000000010110000000000000001 +01011000010000010000000000000000 +00111001011010111011111111000000 +00110100000000010000000000000001 +01011001011000010000000000000000 +11111011111111111111111101110101 +01011001011000000000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011011011001111100 +01011000001000000000000000000000 +01111000000000010000000000000001 +00111000001000011011011001110100 +01011000001000000000000000000000 +01111000000000010000000000000001 +00111000001000011011011001111000 +01011000001000000000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111011011001111000 +00101001011000010000000000000000 +00110100000011000000000000000001 +01000100001011000000000000010000 +00110100000000100000000000000010 +01000100001000100000000010011101 +00110100000000100000000000000000 +01011100001000000000000010100101 +01111000000000010000000000000001 +00111000001000010111111111010000 +11111000000000000001001111111110 +01111000000000010000000000000001 +00111000001000011011011001111100 +01011000001000000000000000000000 +01111000000000010000000000000001 +00111000001000011011011001110100 +01011000001000000000000000000000 +01011001011011000000000000000000 +11100000000000000000000010001110 +11111000000000000001010011111110 +00110100000000100000000000000000 +01001000000000010000000010010111 +00110100000000100000000000011011 +01000100001000100000000000001000 +01111000000000100000000000000001 +00111000010000101011011010000000 +00101000010000110000000000000000 +01100100001001000000000001011011 +00000000011001010000000000010000 +10100000101001000010000000000000 +01000100100000000000000000000110 +01111000000000010000000000000001 +00111000001000011011011010000000 +01111000000000100000000000000001 +01011000001000100000000000000000 +11100000000000000000000000000011 +10111000001000110000100000000000 +01011000010000010000000000000000 +01111000000000010000000000000001 +00111000001000011011011010000000 +00101000001010110000000000000000 +00110100000000100000000000000001 +00100001011000010000000011111111 +01000100001000000000000010000001 +00110100000000010000000001111110 +01000101011000010000000000101110 +01001001011000010000000000000110 +00110100000000010000000000001001 +01000101011000010000000001101101 +00110100000000010000000000001101 +01011101011000010000000001000010 +11100000000000000000000000100000 +01111000000000100000000000000001 +00111000010000101000111011011100 +00101000010000010000000000000000 +01000101011000010000000000010000 +01111000000000100000000000000001 +00111000010000101000111011100000 +00101000010000010000000000000000 +01000101011000010000000000000100 +00110100000000010000000001111111 +01011101011000010000000000110111 +11100000000000000000000000100111 +01111000000000010000000000000001 +00111000001000011011011001111100 +00101000001000100000000000000000 +01001100000000100000000001011011 +00110100010000101111111111111111 +01011000001000100000000000000000 +00110100000000010000000001000100 +11100000000000000000000000001011 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011011011001111100 +00111000010000101011011001110100 +00101000001000110000000000000000 +00101000010000100000000000000000 +01001100011000100000000001010000 +00110100011000110000000000000001 +01011000001000110000000000000000 +00110100000000010000000001000011 +11111011111111111111111011110001 +11100000000000000000000001001011 +01111000000000010000000000000001 +00111000001000011000011110001000 +11111000000000000001001110110011 +01111000000000010000000000000001 +00111000001000011011011001111000 +00110100000000100000000000000010 +01011000001000100000000000000000 +11100000000000000000000001000011 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011011011001111100 +00111000010000101011011001110100 +00101000001000010000000000000000 +00101000010000100000000000000000 +01000100001000100000000000111100 +11111011111111111111111011101001 +00110100000000010000000001010000 +11100011111111111111111111101101 +01111000000010110000000000000001 +00111001011010111011011001111100 +00101001011000010000000000000000 +01001100000000010000000000110101 +00110100000000010000000001000100 +11111011111111111111111011011000 +00110100000000010000000001010000 +11111011111111111111111011010110 +00101001011000010000000000000000 +00110100001000011111111111111111 +11111011111111111111111011011100 +00101001011000010000000000000000 +00110100001000011111111111111111 +01011001011000010000000000000000 +11100000000000000000000000101010 +01111000000000010000000000000001 +10100001011000010000100000000000 +01011100001000000000000000100111 +01111000000000010000000000000001 +00111000001000011011011001110100 +00101000001001000000000000000000 +00110100000000010000000001001111 +01001000100000010000000000100010 +01111000000000010000000000000001 +00111000001000011011011001111100 +00101000001000110000000000000000 +01000100011001000000000000001000 +01111000000000100000000000000001 +00110100011000010000000000000001 +00111000010000101011011000100000 +10110100001000100000100000000000 +10110100011000100001000000000000 +11001000100000110001100000000000 +11111000000000000011001101101111 +01111000000000010000000000000001 +00111000001000011011011001111100 +00101000001000110000000000000000 +01111000000000100000000000000001 +00111000010000101011011000100000 +10110100010000110001000000000000 +00110000010010110000000000000000 +00110100011000100000000000000001 +01011000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011011011001110100 +00101000001000100000000000000000 +00110100010000100000000000000001 +01011000001000100000000000000000 +00110100000000010000000001000000 +11111011111111111111111010101100 +01111000000000100000000000000001 +00111000010000101011011010000000 +00101000010000100000000000000000 +01111000000000010000000000000001 +00111000001000010111111111011000 +11111000000000000001001101101100 +01111000000000010000000000000001 +00111000001000011011011010000000 +01011000001000000000000000000000 +00110100000000100000000000000001 +11100000000000000000000000001011 +01111000000000100000000000000001 +00111000010000101011011001110100 +00101000010000100000000000000000 +01111000000000010000000000000001 +00111000001000011011011000100000 +10110100001000100000100000000000 +00110000001000000000000000000000 +11111011111111111111111010110111 +01011001011000000000000000000000 +11100011111111111111111111110101 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00110100000001000000000000000001 +10111000001000000101100000000000 +10111000010000000110000000000000 +01000100001000000000000000000110 +01000000001000100000000000000000 +00110100000000010000000000101101 +01011100010000010000000000000011 +00110101011010110000000000000001 +00110100000001001111111111111111 +00110100000000010000000000000000 +00110100000000100000000000000000 +00110100000010000000000000001001 +00110100000001110000000000000101 +11100000000000000000000000101000 +00110100011001011111111111010000 +00100000101001100000000011111111 +01010100110010000000000000001011 +00000000010001100000000000011100 +00111100001000110000000000000100 +00010100101000010000000000011111 +10111000110000110001100000000000 +00111100010001100000000000000100 +10110100011000010001100000000000 +10110100110001010001000000000000 +11110100110000100011000000000000 +10110100110000110000100000000000 +11100000000000000000000000011010 +00110100011001101111111110111111 +00100000110001010000000011111111 +01010100101001110000000000001000 +00000000010010010000000000011100 +00111100001001010000000000000100 +00111100010000100000000000000100 +10111001001001010010100000000000 +00010100110000010000000000011111 +00110100011000111111111111001001 +11100000000000000000000000001010 +00110100011001101111111110011111 +00100000110001010000000011111111 +01010100101001110000000000010001 +00000000010010010000000000011100 +00111100001001010000000000000100 +00111100010000100000000000000100 +00010100110000010000000000011111 +10111001001001010010100000000000 +00110100011000111111111110101001 +11110100110000110011000000000000 +10110100011000100001000000000000 +10110100110000010011000000000000 +11110100011000100001100000000000 +10110100110001010010100000000000 +10110100011001010000100000000000 +00110101011010110000000000000001 +01000101011000000000000000000011 +01000001011000110000000000000000 +01011100011000001111111111010111 +00010100100000110000000000011111 +11111000000000000011000111011010 +01011001100000010000000000000000 +10111001011000000000100000000000 +01011001100000100000000000000100 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +00110111100000100000000000001100 +11111011111111111111111110110101 +00101011100000100000000000010000 +01011001011000100000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110100000001000000000000000001 +01000100001000000000000000000110 +01000000001001010000000000000000 +00110100000000110000000000101101 +01011100101000110000000000000011 +00110100001000010000000000000001 +00110100000001001111111111111111 +00110100000000110000000000000000 +00110100000001100000000000001001 +11100000000000000000000000000111 +00110100101001011111111111010000 +00100000101001110000000011111111 +01010100111001100000000000000111 +00001000011000110000000000001010 +00110100001000010000000000000001 +10110100101000110001100000000000 +01000100001000000000000000000011 +01000000001001010000000000000000 +01011100101000001111111111111000 +10001000011001000001100000000000 +01011000010000110000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011011111101100100 +01000000001000010000000000000000 +01000100001000000000000000101100 +01111000000011010000000000000001 +01111000000011000000000000000001 +01111000000010110000000000000001 +00111001101011011011011001110100 +00111001100011000111111111011100 +00111001011010111011011000100000 +11111011111111111111111010001000 +01011001101000010000000000000000 +01011100001000000000000000001001 +01111000000010110000000000000001 +01111000000011100000000000000001 +01111000000011010000000000000001 +00110100000011000000000000000000 +00111001011010111011011000100000 +00111001110011101011011001110100 +00111001101011010111111111011100 +11100000000000000000000000000111 +10111001100000000000100000000000 +10111001011000000001000000000000 +11111000000000000001001011010001 +10111001011000000000100000000000 +11111011111111111111111010011111 +11100011111111111111111111110000 +10111001011000000000100000000000 +00110100000000100000000001010000 +10111001100000000001100000000000 +11111000000000000010001100100010 +01011001110000010000000000000000 +01001000001000000000000000000110 +01011101100000000000000000001110 +01111000000000010000000000000001 +00111000001000010111111111101100 +11111000000000000001001011000100 +11100000000000000000000000001010 +10110101011000010000100000000000 +00110000001000001111111111111111 +10111001011000000001000000000000 +10111001101000000000100000000000 +11111000000000000001001010111110 +10111001011000000000100000000000 +11111011111111111111111010001100 +00110100000011000000000000000001 +11100011111111111111111111101101 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011000000000000100 +01111000000011100000000000000001 +01111000000011010000000000000001 +01111000000011000000000000000001 +11111000000000000001001010100111 +00110100000010110000000000000000 +00111001110011101011011001110100 +00111001101011010111100111011000 +00111001100011001011011000100000 +11111011111111111111111001001100 +01011001110000010000000000000000 +01000100001000000000000000000111 +10111001101000000000100000000000 +10111001100000000001000000000000 +00110101011010110000000000000001 +11111000000000000001001010011100 +00100001011010110000000011111111 +11100011111111111111111111111000 +01011101011000010000000000000100 +01111000000000010000000000000001 +00111000001000011000000000011100 +11111000000000000001001010010110 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011100001010011100 +00101000001000010000000000000000 +01111000000000110000000000000001 +00111000011000111001011011011000 +00101000011000100000000000000000 +00101000001010110000000000001100 +01111000000000110000000000000001 +01111000000000010000000000000001 +00111000011000111000000011010000 +00111000001000011000000000101000 +11111000000000000001001010000000 +01111000000001010000000000000001 +01111000000000110000000000000001 +01111000000001000000000000000001 +00111000101001011001011011011100 +00111000011000111001011011100000 +00111000100001001001011011100100 +00101000101000100000000000000000 +00101000011000110000000000000000 +00101000100001000000000000000000 +01111000000000010000000000000001 +00111000001000011000000001000000 +11111000000000000001001001110100 +00100001011010110000000000001111 +00110101011010110000000000000001 +01111000000000010000000000000001 +00110100000000100000000010000000 +00111101011010110000000000000100 +00111000001000011000000001010100 +00110100000000110000100000000000 +11111000000000000001001001101100 +00110101011000011111111110000000 +00110100000000100000000000001111 +01010000010000010000000000000110 +01111000000000010000000000000001 +00111000001000011000000001111100 +10111001011000000001000000000000 +00110101011000110000000000010000 +11111000000000000001001001100100 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +00101000001000100000000000000000 +01000100010000000000000000000110 +01111000000011100000000000000001 +10111000001000000101100000000000 +00111001110011101001111110100000 +00110100000011110000000000001000 +11100000000000000000000000110011 +00110100000000011111111111111111 +11111011111111111110000000100101 +00111100001000010000000000000010 +01111000000000100000000000000001 +00111000010000101001001010001000 +10110100010000010001000000000000 +00110100000000011111111111111111 +00101000010011000000000000000000 +11111011111111111101111101000101 +00111100001000010000000000000010 +01111000000000110000000000000001 +00111000011000111001001010010000 +10110100011000010001100000000000 +00101000011010110000000000000000 +11111011111111111101111100111011 +00111100001000010000000000000010 +01111000000001000000000000000001 +00111000100001001001001010011000 +10110100100000010010000000000000 +00101000100001000000000000000000 +01111000000000010000000000000001 +00111000001000011000000010101100 +10111001100000000001000000000000 +10111001011000000001100000000000 +11111000000000000001001000110110 +00110100000000010000000000000000 +11100000000000000000000000011011 +10111001110000000110000000000000 +00110100000011010000000000000000 +00101001011000010000000000000000 +00101001100000100000000000000000 +11111000000000000011001010100010 +10111000001000001000000000000000 +01011100001000000000000000000110 +00101001100000100000000000000100 +00101001100000010000000000001000 +11011000010000000000000000000000 +01001010000000010000000000010000 +11100000000000000000000000000100 +00110101101011010000000000000001 +00110101100011000000000000001100 +01011101101011111111111111110100 +00110101011010110000000000000100 +01011101101011110000000000000111 +00101010001000100000000000000000 +01111000000000010000000000000001 +00111000001000011000000010111000 +11111000000000000001001000011111 +00110100000000011111111111101010 +11100000000000000000000000000100 +00101001011000010000000000000000 +10111001011000001000100000000000 +01011100001000001111111111100111 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011000000100011000 +01111000000010110000000000000001 +01111000000011010000000000000001 +01111000000011000000000000000001 +11111000000000000001001000000101 +00111001011010111010111000001000 +00111001101011011010111011010000 +00111001100011001000000100110000 +11100000000000000000000000000101 +00101001011000100000000000000000 +10111001100000000000100000000000 +00110101011010110000000000001000 +11111000000000000001000111111101 +01010101101010111111111111111100 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00110100000010110000000000000000 +10111000010000000110100000000000 +00110100000011000000000000000110 +00110111100000100000000000010100 +11111011111111111111111011011011 +00101011100000110000000000010100 +10110101101010110001000000000000 +00110101011010110000000000000001 +00110000010000110000000000000000 +01000000001000100000000000000000 +01100100010000100000000000111010 +10110100001000100000100000000000 +01011101011011001111111111110111 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000010000000100000000000000 +01000001000000110000000000000000 +01000001000001000000000000000001 +01000001000001010000000000000010 +01000001000001100000000000000011 +01000001000001110000000000000100 +01000001000010000000000000000101 +01111000000000100000000000000001 +00111000010000101000000101000000 +10111000001000000101100000000000 +11111000000000000001000111000001 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111010000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01000100001000000000000000000101 +01111000000000100000000000000001 +00111000010000101000000101100000 +11111000000000000011001000110100 +01011100001000000000000000000100 +00110111100000010000000000101100 +11111000000000000001001011111111 +11100000000000000000000000101011 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000000101100100 +11111000000000000011001000101100 +01011100001000000000000000001000 +00110111100010110000000000101100 +10111001011000000000100000000000 +11111000000000000001001011110110 +10111001011000000001000000000000 +00110100000000010000000000000000 +11111000000000000001111100100011 +11100000000000000000000000011111 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000000101101100 +11111000000000000011001000100000 +01011100001000000000000000001011 +00101001011000110000000000000100 +01000100011000010000000000001001 +00110111100010110000000000101100 +10111000011000000000100000000000 +10111001011000000001000000000000 +11111011111111111111111110110010 +10111001011000000000100000000000 +11111000000000000001001011010001 +11111000000000000001001111001100 +11100000000000000000000000010000 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000000101110000 +11111000000000000011001000010001 +10111000001000000001100000000000 +00110100000000101111111111101010 +01011100001000000000000000010001 +00101001011000010000000000000100 +01000100001000110000000000001111 +00110111100010110000000000101100 +10111001011000000001000000000000 +11111011111111111111111110100010 +00110100000000010000000000000000 +10111001011000000001000000000000 +11111000000000000001111101101101 +00110111100000100000000000101100 +00110111100000010000000000001100 +11111011111111111111111110110100 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000011000000101111000 +11111000000000000001000110001100 +00110100000000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000110000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01000100001000000000000000100100 +01111000000000100000000000000001 +00111000010000101000000110010000 +11111000000000000011000111101100 +01011100001000000000000000001101 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011010111011011100 +00111000010000101011000010011100 +11100000000000000000000000000110 +01011000001000000000000000011100 +01011000001000000000000000011000 +01011000001000000000000000010100 +01011000001000000000000000010000 +00110100001000010000000000100000 +01010100010000011111111111111011 +11100000000000000000000000101100 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000000110011000 +11111000000000000011000111011011 +10111000001000000001000000000000 +01011100001000000000000000001110 +00101001011000010000000000000100 +01000100001000100000000000000101 +11111000000000000000010101010100 +01111000000000100000000000000001 +00111000010000101011000010100100 +01011000010000010000000000000000 +01111000000000100000000000000001 +00111000010000101011000010100100 +00101000010000100000000000000000 +01111000000000010000000000000001 +00111000001000011000000110011100 +11111000000000000001000101011010 +11100000000000000000000000011001 +01111000000000010000000000000001 +00111000001000011000000110111100 +01111000000010110000000000000001 +01111000000011010000000000000001 +01111000000011000000000000000001 +11111000000000000001000101010011 +00111001011010111010111011011100 +00111001101011011011000010011100 +00111001100011001000000111101100 +11100000000000000000000000001110 +00101001011000010000000000011000 +00110100000000100000001111101000 +00101001011011110000000000010000 +11111000000000000011000010011110 +00101001011011100000000000010100 +00101001011001010000000000011100 +00101001011001100000000000000000 +10111000001000000010000000000000 +10111001111000000001000000000000 +10111001100000000000100000000000 +10111001110000000001100000000000 +11111000000000000001000101000011 +00110101011010110000000000100000 +01010101101010111111111111110011 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01111000000000100000000000000000 +00111000010000100000000010100000 +00101000010000100000000000000000 +01111000000000010000000000000001 +00111000001000011000001000010000 +11111000000000000001000100110000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100111010000000000000100 +10111000001000000001000000000000 +00101000001000010000000000000000 +01000100001000000000000000001101 +00101000010000100000000000000100 +01011100010000000000000000001011 +00110111100000100000000000001000 +11111011111111111111111000011111 +00101011100000100000000000001000 +01111000000000010000000000000001 +00111000001000011001011011101000 +00001000010000100000001111101000 +01011000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011000011110001000 +11100000000000000000000000000011 +01111000000000010000000000000001 +00111000001000011000001000010100 +11111000000000000001000100011000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01011100001000000000000000010001 +01111000000000010000000000000001 +00111000001000011100001010000100 +00101000001000100000000000000000 +00110100000010110000000000000000 +01100100010000100000000000000000 +01011000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011011111110100100 +00101000001000110000000000000000 +00110100011000111111111111111111 +01011000001000110000000000000000 +01011100010010110000000000101011 +01111000000000010000000000000001 +00111000001000011000001000111000 +11111000000000000001000011111111 +11100000000000000000000000100111 +01111000000000100000000000000001 +00111000010000101000001001001100 +11111000000000000011000101101110 +01011100001000000000000000000111 +11111000000000000001001010100011 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000011000101000010100 +11111000000000000001000011110101 +11100000000000000000000000011100 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000100111000100011100 +11111000000000000011000101100011 +01011100001000000000000000001011 +01111000000000010000000000000001 +00111000001000011100001010000100 +00110100000000100000000000000001 +01011000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011011111110100100 +00101000001000100000000000000000 +00110100010000101111111111111111 +01011000001000100000000000000000 +11100000000000000000000000001101 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001001010000 +11111000000000000011000101010100 +00110100000010111111111111101010 +01011100001000000000000000001000 +01111000000000010000000000000001 +00111000001000011100001010000100 +01011000001000000000000000000000 +01111000000000010000000000000001 +00111000001000011000001000111000 +11111000000000000001000011011001 +00110100000010110000000000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111110111000 +01011011100010110000000000101000 +01011011100011000000000000100100 +01011011100011010000000000100000 +01011011100011100000000000011100 +01011011100011110000000000011000 +01011011100100000000000000010100 +01011011100100010000000000010000 +01011011100100100000000000001100 +01011011100100110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01000100001000000000000011001000 +01111000000000100000000000000001 +00111000010000101000001001110000 +11111000000000000011000100110101 +01011100001000000000000000001000 +11111000000000000001111011001010 +00110100000000111111111111111111 +00110100000000100000000000000000 +01011100001000110000000011000100 +01111000000000010000000000000001 +00111000001000011000001001111000 +11100000000000000000000000111100 +00101001011000010000000000010000 +01000100001000000000000001000101 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001010001100 +11111000000000000011000100100111 +01011100001000000000000001000000 +00101001011000010000000000000100 +00110100000000100000000000010000 +00110101011011000000000000000100 +11111000000000000011001001000110 +00111100001000010000000000011000 +00110100000000110000000000000000 +00010100001000010000000000011000 +00110111100001000000000000101100 +11100000000000000000000000000111 +00101001100000100000000000000000 +10110100100000110010100000000000 +10110100010000110001000000000000 +01000000010000100000000000000000 +00110100011000110000000000000001 +00110000101000100000000000000000 +10110000011000000001000000000000 +01001000001000101111111111111001 +10110100100000100000100000000000 +00110100000000110000000000100000 +00110100000001000000000000001111 +11100000000000000000000000000101 +00110100010000100000000000000001 +00110000001000110000000000000000 +10110000010000000001000000000000 +00110100001000010000000000000001 +01001100100000101111111111111100 +00101001011000010000000000001000 +11111000000000000000010010001000 +01011011100000010000000001000000 +00101001011000010000000000001100 +11111000000000000000010010000101 +01011011100000010000000001000100 +00101001011000010000000000010000 +11111000000000000000010010000010 +01011011100000010000000000111100 +00110100000000100000000000000001 +00110111100000010000000000101100 +00110100000000110000000000000000 +11111000000000000001111011110110 +00111100001000100000000000011000 +00110100000000011111111111111110 +00010100010000100000000000011000 +01011100010000010000000000000110 +01111000000000010000000000000001 +00111000001000011000001010010000 +11111000000000000001000010000101 +00110100000000101111111111100100 +11100000000000000000000010001010 +00110100000000011111111111111111 +01011100010000010000000000000110 +01111000000000010000000000000001 +00111000001000011000001010100000 +11111000000000000001000001111110 +00110100000000101111111111111011 +11100000000000000000000010000011 +01001100010000000000000000000100 +01111000000000010000000000000001 +00111000001000011000001010101100 +11100000000000000000000000100011 +01111000000000010000000000000001 +00111000001000011000001011001000 +11111000000000000001000001110101 +11100000000000000000000001110101 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001011011000 +11111000000000000011000011100011 +01011100001000000000000000110000 +01111000000100000000000000000001 +01111000000011110000000000000001 +01111000000011100000000000000001 +00110100000011000000000000000000 +00110100000100010000000000000000 +00110111100100100000000000101100 +00111010000100001000001011110100 +00110111100100110000000000111100 +00111001111011110111111111011000 +00111001110011101000001011111100 +10111010010000000000100000000000 +00110100000000100000000000000000 +10111001100000000001100000000000 +11111000000000000001111011001011 +00111100001010110000000000011000 +00010101011010110000000000011000 +01011101011000000000000000000101 +01111000000000010000000000000001 +00111000001000011000001011100000 +11111000000000000001000001011011 +11100000000000000000000001011011 +01001101011000000000000000000111 +01111000000000010000000000000001 +00111000001000011000001010101100 +10111001011000000001000000000000 +11111000000000000001000001010101 +00110100000000101111111111110010 +11100000000000000000000001011010 +00110101100011000000000000000001 +10111010000000000000100000000000 +10111001100000000001000000000000 +11111000000000000001000001001111 +10111010010000000110100000000000 +01000001101000100000000000000000 +10111001111000000000100000000000 +00110101101011010000000000000001 +11111000000000000001000001001010 +01011101101100111111111111111100 +00101011100000100000000001000000 +00101011100000110000000001000100 +00101011100001000000000000111100 +00110110001100010000000000000001 +10111001110000000000100000000000 +10110010001000001000100000000000 +11111000000000000001000001000010 +01001001011100011111111111011101 +11100000000000000000000001000001 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001100011100 +11111000000000000011000010101111 +01011100001000000000000000110010 +11111000000000000001011100000111 +00111100001011000000000000011000 +00110100000000011111111111101101 +00010101100011000000000000011000 +01011101100000010000000000000110 +01111000000000010000000000000001 +00111000001000011000001100100100 +11111000000000000001000000110011 +00110100000000101111111111101101 +11100000000000000000000000111000 +01111000000010110000000000000001 +00111001011010111011111110101100 +01111000000011010000000000000001 +00110100000000011111111111111011 +00110101011011100000000000010000 +00111001101011010111111111011000 +01011101100000010000000000000100 +01111000000000010000000000000001 +00111000001000011000001100110000 +11100011111111111111111110101001 +01000001011000100000000000000000 +10111001101000000000100000000000 +00110101011010110000000000000001 +11111000000000000001000000100011 +01011101011011101111111111111100 +01111000000000010000000000000001 +00111000001000011000011110001000 +11111000000000000001000000011111 +00110100000000011111111111111010 +01011101100000010000000000000110 +01111000000000010000000000000001 +00111000001000011000001101000000 +11111000000000000001000000011010 +00110100000000101111111111111010 +11100000000000000000000000011111 +01111000000000100000000000000001 +01111000000000110000000000000001 +01111000000001000000000000000001 +00111000010000101011111100110000 +00111000011000111011111100110100 +00111000100001001010011111111000 +00101000010000100000000000000000 +00101000011000110000000000000000 +00101000100001000000000000000000 +01111000000000010000000000000001 +00111000001000011000001101011000 +11111000000000000001000000001100 +10111001100000000001000000000000 +11100000000000000000000000010001 +00101001011000010000000000000100 +01000100001000000000000000001011 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001110000000 +11111000000000000011000001110111 +01011100001000000000000000000110 +00101001011000010000000000000100 +11111000000000000000001111110010 +11111000000000000001000111110111 +00110100000000100000000000000000 +11100000000000000000000000000101 +01111000000000010000000000000001 +00111000001000011000001001011100 +11111000000000000000111111111011 +00110100000000101111111111101010 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000101000 +00101011100011000000000000100100 +00101011100011010000000000100000 +00101011100011100000000000011100 +00101011100011110000000000011000 +00101011100100000000000000010100 +00101011100100010000000000010000 +00101011100100100000000000001100 +00101011100100110000000000001000 +00110111100111000000000001001000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001110001000 +11111000000000000011000001010110 +01011100001000000000000000010001 +00101001011000110000000000001100 +00110100000000101111111111101010 +01000100011000010000000010000110 +00101001011000010000000000000100 +11111000000000000000001111001110 +10111000001000000110100000000000 +00101001011000010000000000001000 +11111000000000000000001111001011 +10111000001000000110000000000000 +00101001011000010000000000001100 +11111000000000000000001111001000 +10111000001000000001100000000000 +10111001100000000001000000000000 +10111001101000000000100000000000 +11111000000000000010101001010100 +11100000000000000000000001111000 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001110010000 +11111000000000000011000001000001 +10111000001000000001100000000000 +01011100001000000000000000000111 +00101001011000010000000000000100 +00110100000000101111111111101010 +01000100001000110000000001110000 +11111000000000000000001110111001 +11111000000000000010101100010010 +11100000000000000000000001100000 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001001010100 +11111000000000000011000000110101 +01011100001000000000000000000011 +11111000000000000010101110101011 +11100000000000000000000001100101 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001110010100 +11111000000000000011000000101110 +01011100001000000000000000001101 +00101001011000110000000000001000 +00110100000000101111111111101010 +01000100011000010000000001011110 +00101001011000010000000000000100 +11111000000000000000001110100110 +10111000001000000110000000000000 +00101001011000010000000000001000 +11111000000000000000001110100011 +10111000001000000001000000000000 +10111001100000000000100000000000 +11111000000000000010101100001011 +11100000000000000000000001010100 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001110011000 +11111000000000000011000000011101 +10111000001000000001100000000000 +01011100001000000000000000001110 +00101001011000010000000000000100 +00110100000000101111111111101010 +01000100001000110000000001001100 +11111000000000000000001110010101 +00110111100000100000000000011000 +00110111100000110000000000010100 +11111000000000000010101100100101 +00101011100000100000000000011000 +00101011100000110000000000010100 +01111000000000010000000000000001 +00111000001000011000001110011100 +11111000000000000000111110011100 +11100000000000000000000001000001 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000000011010100 +11111000000000000011000000001010 +10111000001000000001100000000000 +01011100001000000000000000000111 +00101001011000010000000000000100 +00110100000000101111111111101010 +01000100001000110000000000111001 +11111000000000000000001110000010 +11111000000000000010101010111101 +11100000000000000000000000110101 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000000011011100 +11111000000000000010111111111110 +10111000001000000001100000000000 +01011100001000000000000000000111 +00101001011000010000000000000100 +00110100000000101111111111101010 +01000100001000110000000000101101 +11111000000000000000001101110110 +11111000000000000010101011000010 +11100000000000000000000000101001 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001110100100 +11111000000000000010111111110010 +01011100001000000000000000001101 +00101001011000110000000000001000 +00110100000000101111111111101010 +01000100011000010000000000100010 +00101001011000010000000000000100 +11111000000000000000001101101010 +10111000001000000110000000000000 +00101001011000010000000000001000 +11111000000000000000001101100111 +10111000001000000001000000000000 +10111001100000000000100000000000 +11111000000000000010101111010010 +11100000000000000000000000011000 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001110101100 +11111000000000000010111111100001 +10111000001000000001100000000000 +01011100001000000000000000001011 +00101001011000010000000000000100 +00110100000000101111111111101010 +01000100001000110000000000010000 +11111000000000000000001101011001 +11111000000000000010101110110111 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000010111111110110000 +11111000000000000000111101100011 +11100000000000000000000000001000 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001110110100 +11111000000000000010111111010001 +00110100000000101111111111101010 +01011100001000000000000000000011 +11111000000000000010110001101001 +00110100000000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01000100001000000000000000001011 +01111000000000100000000000000001 +00111000010000101000001111000100 +11111000000000000010111110111100 +10111000001000000110000000000000 +01011100001000000000000000000110 +00110111100000010000000000010000 +11111000000000000001011110010110 +00110100000010111111111111111111 +01001001100000010000000000100001 +11100000000000000000000000011100 +00101001011000010000000000000000 +00110100000010110000000000000000 +01011100001000000000000000011101 +00110111100000010000000000010000 +00110100000000100000000000000000 +11111000000000000001111001111000 +01001101011000010000000000001010 +00101011100000100000000000010000 +01111000000000010000000000000001 +00111000001000011000001111001100 +11111000000000000000111100110111 +00101011100000100000000000010000 +01111000000000010000000000000001 +00111000001000011001011011110000 +01011000001000100000000000000000 +11100000000000000000000000010000 +01111000000000010000000000000001 +00111000001000011000001111110100 +11111000000000000000111100101111 +00110111100000010000000000010000 +11111000000000000001011101111110 +00110100000010111111111111111111 +01001000000000010000000000001001 +00101011100000100000000000010000 +01111000000000010000000000000001 +00111000001000011001011011110000 +01011000001000100000000000000000 +00110111100000010000000000010000 +00110100000000100000000000000001 +11111000000000000001111001100000 +10111000001000000101100000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00110111100000100000000000011000 +00110111100000010000000000010000 +11111000000000000001101000000110 +00101001011000010000000000001000 +01000100001000000000000000010100 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000000101101100 +11111000000000000010111110000010 +01011100001000000000000000001111 +11111011111111111101110000001000 +00110100000000110000000000000011 +00110100000000101111111111110000 +01000100001000110000000001000000 +00101001011000010000000000000100 +11111000000000000000001011111001 +10111000001000000110000000000000 +00101001011000010000000000001000 +11111000000000000000001011110110 +10111000001000000001100000000000 +10111001100000000001000000000000 +00010101100000010000000000011111 +00110100000001000000000000000011 +11100000000000000000000000100000 +00101001011000010000000000000000 +01000100001000000000000000001111 +01111000000000100000000000000001 +00111000010000101000010000101000 +11111000000000000010111101101110 +01011100001000000000000000001011 +11111011111111111101101111110100 +00110100000000100000000000000011 +01000100001000100000000000100011 +00101001011000010000000000000100 +11111000000000000000001011100110 +10111000001000000001000000000000 +00110100000000110000000000000000 +00010100001000010000000000011111 +00110100000001000000000000000001 +11100000000000000000000000010000 +00101001011000010000000000000000 +01000100001000000000000000010000 +01111000000000100000000000000001 +00111000010000101000010000110000 +11111000000000000010111101011110 +01011100001000000000000000001100 +11111011111111111101101111100100 +00110100000000100000000000000011 +01000100001000100000000000010011 +00101001011000010000000000000100 +11111000000000000000001011010110 +10111000001000000001100000000000 +00110100000000100000000000000000 +00110100000000010000000000000000 +00110100000001000000000000000010 +11111000000000000001100110110001 +11100000000000000000000000010100 +00101001011000010000000000000000 +01000100001000000000000000001001 +01111000000000100000000000000001 +00111000010000101000010000111000 +11111000000000000010111101001101 +01011100001000000000000000000101 +01111000000000010000000000000001 +00111000001000011000001110011100 +00101011100000100000000000010100 +11100000000000000000000000001000 +00101011100000100000000000010100 +00101011100000010000000000010000 +00110100000000110000000000000000 +11111000000000000000000111101010 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000011000010000111100 +00101011100000110000000000011000 +11111000000000000000111011001100 +00110100000000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011011000010100000 +00110100000000100000000000000001 +01011000001000100000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01011100001000000000000000000011 +11111000000000000001010111101111 +11100000000000000000000001010111 +00101001011000010000000000000100 +00110100000011001111111111101010 +01000100001000000000000001010101 +00101001011000100000000000001100 +01000100010000000000000000001000 +11111000000000000000001010011111 +01011100001000000000000000000110 +00101001011000010000000000001100 +00110100000011010000000001010000 +11111000000000000000001010011011 +00111100001011100000000000001010 +11100000000000000000000000000111 +00101001011000010000000000001100 +00110100000011100000000000000001 +00110100000011010000000001010000 +01000100001000000000000000000011 +11111000000000000000001010010100 +00100000001011010000000011111111 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000010001100000 +11111000000000000010111100010001 +01011100001000000000000000001101 +00101001011000100000000000001000 +01000100010000010000000000001011 +00101001011000010000000000000100 +11111000000000000000001010001010 +10111000001000000110000000000000 +00101001011000010000000000001000 +11111000000000000000001010000111 +10111000001000000001000000000000 +10111001110000000001100000000000 +10111001100000000000100000000000 +10111001101000000010000000000000 +11100000000000000000000000010000 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000010001100000 +11111000000000000010111100000000 +01011100001000000000000000001101 +01111000000011000000000000000001 +00111001100011001011111110010100 +00101001100000100000000000000100 +01000100010000010000000000001001 +00101001011000010000000000000100 +11111000000000000000001001110111 +01011100001000000000000000000110 +00101001100000100000000000001100 +00101001100000110000000000001000 +00110100000001000000000000000000 +11111000000000000001111101111100 +11100000000000000000000000100011 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000010001100100 +11111000000000000010111011101111 +01011100001000000000000000001101 +00101001011000100000000000001000 +01000100010000010000000000001011 +00101001011000010000000000000100 +11111000000000000000001001101000 +10111000001000000110000000000000 +00101001011000010000000000001000 +11111000000000000000001001100101 +10111000001000000001000000000000 +10111001110000000001100000000000 +10111001100000000000100000000000 +10111001101000000010000000000000 +11100000000000000000000000010001 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000010001100100 +11111000000000000010111011011110 +00110100000011001111111111101010 +01011100001000000000000000001101 +01111000000011010000000000000001 +00111001101011011011111110010100 +00101001101000100000000000000100 +01000100010000010000000000001001 +00101001011000010000000000000100 +11111000000000000000001001010100 +01011100001000000000000000000110 +00101001101000100000000000001100 +00101001101000110000000000001000 +00110100000001000000000000000000 +11111000000000000001111100011001 +00110100000011000000000000000000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01000100001000000000000000001100 +01111000000000100000000000000001 +00111000010000101000010001110100 +11111000000000000010111010111111 +01011100001000000000000000001000 +00110100000000010000000000000001 +11111011111111111110011010010101 +01111000000000010000000000000001 +00111000001000011001011011101100 +00110100000000100000000000000001 +01011000001000100000000000000000 +11100000000000000000000000001011 +00101001011000010000000000000000 +01000100001000000000000000001001 +01111000000000100000000000000001 +00111000010000101000010001111100 +11111000000000000010111010110010 +01011100001000000000000000000101 +11111011111111111110011010001001 +01111000000000010000000000000001 +00111000001000011001011011101100 +01011000001000000000000000000000 +01111000000000010000000000000001 +00111000001000011001011011101100 +00101000001000010000000000000000 +01111000000000100000000000000001 +00111000010000101000010001110000 +01000100001000000000000000000011 +01111000000000100000000000000001 +00111000010000101000010001101100 +01111000000000010000000000000001 +00111000001000011000010010000100 +11111000000000000000111000101111 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00110100000010110000000000000000 +10111000010000000110100000000000 +00110100000011000000000000000100 +00110111100000100000000000010100 +11111011111111111111101100011100 +00101011100000110000000000010100 +10110101101010110001000000000000 +00110101011010110000000000000001 +00110000010000110000000000000000 +01000000001000100000000000000000 +01100100010000100000000000101110 +10110100001000100000100000000000 +01011101011011001111111111110111 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000010000000011000000000000 +01000000110000110000000000000000 +01000000110001000000000000000001 +01000000110001010000000000000010 +01000000110001100000000000000011 +01111000000000100000000000000001 +00111000010000101000010010100000 +10111000001000000101100000000000 +11111000000000000000110111111000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01000100001000000000000000000101 +01111000000000100000000000000001 +00111000010000101000000101100000 +11111000000000000010111001101011 +01011100001000000000000000000100 +00110111100000010000000000100000 +11111000000000000000010010010111 +11100000000000000000000000010010 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000000101101100 +11111000000000000010111001100011 +10111000001000000001100000000000 +00110100000000101111111111101010 +01011100001000000000000000100100 +00101001011000010000000000000100 +01000100001000110000000000100010 +01111000000000100000000000000001 +00111000010000101011100011101000 +00110100000000110000000000000010 +01011000010000110000000000000000 +00110111100000100000000000100000 +11111011111111111111111110111100 +00110111100000010000000000100000 +11111000000000000000010010001110 +00110111100010110000000000001100 +00110111100000100000000000100000 +10111001011000000000100000000000 +11111011111111111111111111001110 +01111000000000010000000000000001 +00111000001000011011100011101000 +00101000001000010000000000000000 +00110100000000100000000000000001 +01000100001000100000000000001001 +01000100001000000000000000000100 +00110100000000100000000000000010 +01011100001000100000000000001101 +11100000000000000000000000001000 +01111000000000010000000000000001 +00111000001000011000010010101100 +11111000000000000000110111010011 +11100000000000000000000000001000 +01111000000000010000000000000001 +00111000001000011000010011001000 +11100000000000000000000000000011 +01111000000000010000000000000001 +00111000001000011000010011101000 +10111001011000000001000000000000 +11111000000000000000110111001011 +00110100000000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000001000010000000000000000 +01000100001000000000000000000101 +11111011111111111101100010100001 +01111000000000100000000000000001 +00111000010000101011000010111100 +01011000010000010000000000000000 +01111000000000100000000000000001 +00111000010000101011000010111100 +00101000010000100000000000000000 +01111000000000010000000000000001 +00111000001000011000010100010000 +11111000000000000000110110110111 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01000100001000000000000000001011 +01111000000000100000000000000001 +00111000010000101000001001110000 +11111000000000000010111000011100 +10111000001000000110000000000000 +01011100001000000000000000000110 +11111000000000000001110100100100 +01001100001011000000000000100110 +01111000000000010000000000000001 +00111000001000011000010100110000 +11100000000000000000000000001110 +00101001011000010000000000000100 +01000100001000000000000000010001 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001010001100 +11111000000000000010111000001111 +10111000001000000110000000000000 +01011100001000000000000000001011 +10111001011000000000100000000000 +11111000000000000001110100111100 +01001100001011000000000000000101 +01111000000000010000000000000001 +00111000001000011000010101010000 +11111000000000000000110110010100 +11100000000000000000000000010100 +01111000000000010000000000000001 +00111000001000011000010101101100 +11100011111111111111111111111100 +00101001011000010000000000000000 +01000100001000000000000000001000 +01111000000000100000000000000001 +00111000010000101000001011011000 +11111000000000000010110111111110 +01011100001000000000000000000100 +11111011111111111111101011010111 +11111000000000000001110110100000 +11100000000000000000000000001000 +00101001011000010000000000000000 +01000100001000000000000000000110 +01111000000000100000000000000001 +00111000010000101000010101110100 +11111000000000000010110111110101 +01011100001000000000000000000010 +11111011111111111111101010010010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01000100001000000000000000100111 +01111000000000100000000000000001 +00111000010000101000000101100000 +11111000000000000010110111100100 +01000100001000000000000000100011 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000000101101100 +11111000000000000010110111011111 +10111000001000000001000000000000 +01011100001000000000000000010011 +00101001011000010000000000000100 +01000100001000100000000000010001 +00110111100000100000000000001100 +11111011111111111111101001100010 +00101011100000100000000000001100 +00110100000000110000111111111110 +00110100010000011111111111111111 +01010000011000010000000000000111 +00101001011000110000000000000100 +01111000000000010000000000000001 +00111000001000011000010101111100 +11111000000000000000110101011110 +00110100000000101111111111101010 +11100000000000000000000000010111 +01111000000000010000000000000001 +00111000001000011001011011110100 +01011000001000100000000000000000 +11100000000000000000000000001010 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001001010000 +11111000000000000010110111000111 +00110100000000101111111111101010 +01011100001000000000000000001101 +01111000000000010000000000000001 +00111000001000011001011011110100 +01011000001000000000000000000000 +11111000000000000000111101110111 +01111000000000010000000000000001 +00111000001000011001011011110100 +00101000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011000010110010100 +10111000010000000001100000000000 +11111000000000000000110101000111 +00110100000000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111011100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01011100001000000000000000010010 +00110111100000100000000000100000 +00110111100000110000000000011100 +00110111100001000000000000011000 +00110111100000010000000000100100 +11111000000000000001001100101110 +01111000000000010000000000000001 +00111000001000011000010110111000 +11111000000000000000110100110001 +00101011100000100000000000100100 +00101011100000110000000000100000 +00101011100001000000000000011100 +00101011100001010000000000011000 +01111000000000010000000000000001 +00111000001000011000010111010000 +11111000000000000000110100101010 +00110100000011000000000000000000 +11100000000000000000000000111010 +01111000000000100000000000000001 +00111000010000101000010111111100 +11111000000000000010110110011000 +10111000001000000001000000000000 +01011100001000000000000000000111 +00101001011000010000000000000100 +01000100001000100000000000000101 +11111000000000000000000100010001 +10111000001000000101100000000000 +00110100000000100000000000000001 +11100000000000000000000000001100 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000011000010100 +11111000000000000010110110001100 +10111000001000000001000000000000 +01011100001000000000000000001111 +00101001011000010000000000000100 +01000100001000100000000000001101 +11111000000000000000000100000101 +10111000001000000101100000000000 +00110100000000100000000000000000 +00110111100000110000000000010100 +11111000000000000001001100100100 +10111000001000000110000000000000 +01011100001000000000000000100000 +01111000000000010000000000000001 +00111000001000011000011000000000 +10111001011000000001000000000000 +00101011100000110000000000010100 +11100000000000000000000000011010 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000011000011000 +11111000000000000010110101111000 +10111000001000000001000000000000 +00110100000011001111111111101010 +01011100001000000000000000010100 +00101001011000010000000000000100 +01000100001000100000000000010010 +00101001011000100000000000001000 +01000100010000000000000000010000 +11111000000000000000000011101110 +10111000001000000110100000000000 +00101001011000010000000000001000 +11111000000000000000000011101011 +10111000001000000001000000000000 +01011011100000010000000000010100 +10111001101000000000100000000000 +11111000000000000001001101010001 +10111000001000000110000000000000 +01011100001000000000000000000110 +00101011100000100000000000010100 +01111000000000010000000000000001 +00111000001000011000011000011100 +10111001101000000001100000000000 +11111000000000000000110011101111 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000100100 +11000011101000000000000000000000 +00110111100111001111111111010000 +01011011100010110000000000110000 +01011011100011000000000000101100 +01011011100011010000000000101000 +01011011100011100000000000100100 +01011011100011110000000000100000 +01011011100100000000000000011100 +01011011100100010000000000011000 +01011011100100100000000000010100 +01011011100100110000000000010000 +01011011100101000000000000001100 +01011011100111010000000000001000 +10111000011000001001000000000000 +01111000000000110000000000000001 +00111000011000111000111011100100 +10111000010000000110000000000000 +10111000010000000000100000000000 +00101000011000100000000000000000 +11111000000000000010110000111000 +01111000000000110000000000000001 +00111000011000111000111011100100 +00101000011000100000000000000000 +10111000001000000101100000000000 +10111001100000000000100000000000 +11111000000000000010110000100010 +10111000001000001010000000000000 +00110100000000100000000000111100 +10111001011000000000100000000000 +11111000000000000010110000101110 +00110100000000100000111000010000 +10111000001000000111100000000000 +10111001011000000000100000000000 +11111000000000000010110000101010 +00110100000000100000000000111100 +11111000000000000010110000011000 +10111000001000001000000000000000 +00110100000000100000111000010000 +10111001011000000000100000000000 +11111000000000000010110000010100 +10111000001000001000100000000000 +10111010100000000111000000000000 +00110100000010110000011110110010 +11100000000000000000000000001111 +00110100000000100000000101101101 +01011101100000000000000000001011 +00110100000000100000000001100100 +10111001011000000000100000000000 +11111000000000000010101111101011 +00110100000000100000000101101110 +01011100001011000000000000000110 +00110100000000100000000110010000 +10111001011000000000100000000000 +11111000000000000010101111100110 +01100100001000100000000000000000 +00110100010000100000000101101101 +11001001110000100111000000000000 +00110101011010110000000000000001 +00100001011011000000000000000011 +00110100000000100000000101101101 +01011101100000000000000000001011 +00110100000000100000000001100100 +10111001011000000000100000000000 +11111000000000000010101111011100 +00110100000000100000000101101110 +01011100001011000000000000000110 +00110100000000100000000110010000 +10111001011000000000100000000000 +11111000000000000010101111010111 +01100100001000100000000000000000 +00110100010000100000000101101101 +01010001110000101111111111100101 +00110100000000100000000001100100 +10111001011000000000100000000000 +11111000000000000010101111010001 +00110100000000100000000110010000 +10111000001000001001100000000000 +10111001011000000000100000000000 +11111000000000000010101111001101 +01111000000000100000000000000001 +00110100000011010000000000000000 +01100100001001010000000000000000 +00111000010000101001001010101100 +11100000000000000000000000001101 +00110100000001000000000000000000 +01011101100000000000000000000100 +00110100000001000000000000000001 +01011110011011000000000000000010 +10111000101000000010000000000000 +00001000100001000000000000001100 +10110100100011010010000000000000 +00111100100001000000000000000010 +00110101101011010000000000000001 +10110100010001000010000000000000 +00101000100000010000000000000000 +11001001110000010111000000000000 +00110100000001000000000000000000 +01011101100000000000000000000100 +00110100000001000000000000000001 +01011110011011000000000000000010 +10111000101000000010000000000000 +00001000100001000000000000001100 +10110100100011010010000000000000 +00111100100001000000000000000010 +10110100010001000010000000000000 +00101000100000010000000000000000 +01010001110000011111111111101010 +00110100000000010000000000000001 +00110101110011100000000000000001 +01000110010000010000000000011101 +01111000000011000000000000000001 +00110100000000010000000000000010 +00111001100011001011011010000100 +01000110010000010000000000101000 +00110110100000010000000000000100 +00110100000000100000000000000111 +11111000000000000010101111010111 +00111100001000010000000000000010 +01111000000100110000000000000001 +01111000000000100000000000000001 +00111101101011010000000000000010 +00111000010000101001001100101000 +00111010011100111001001100001100 +10110110011000011001100000000000 +10110100010011010110100000000000 +01111000000100100000000000000001 +00101010011000110000000000000000 +00101001101001000000000000000000 +00111010010100101000011001001100 +10111001100000000000100000000000 +10111010010000000001000000000000 +10111001110000000010100000000000 +10111001011000000011000000000000 +10111010001000000011100000000000 +10111010000000000100000000000000 +01011011100011110000000000000100 +11111000000000000000110001010010 +11100000000000000000000000011010 +01111000000000010000000000000001 +00111101101011010000000000000010 +00111000001000011001001100101000 +10110100001011010110100000000000 +00101001101000110000000000000000 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000010000101000011001101100 +10111001110000000010000000000000 +10111010001000000010100000000000 +10111010000000000011000000000000 +10111001111000000011100000000000 +00111000001000011011011010000100 +11111000000000000000110001000011 +11100000000000000000000000001011 +01111000000000100000000000000001 +10111001100000000000100000000000 +00111000010000101000011010000100 +10111001011000000001100000000000 +00110101101001000000000000000001 +10111001110000000010100000000000 +10111010001000000011000000000000 +10111010000000000011100000000000 +10111001111000000100000000000000 +11111000000000000000110000111000 +01111000000000010000000000000001 +00111000001000011011011010000100 +00101011100111010000000000001000 +00101011100010110000000000110000 +00101011100011000000000000101100 +00101011100011010000000000101000 +00101011100011100000000000100100 +00101011100011110000000000100000 +00101011100100000000000000011100 +00101011100100010000000000011000 +00101011100100100000000000010100 +00101011100100110000000000010000 +00101011100101000000000000001100 +00110111100111000000000000110000 +11000011101000000000000000000000 +00110111100111001111111111011100 +01011011100010110000000000001000 +01011011100111010000000000000100 +01011011100001000000000000010100 +00100000001001000000000010000000 +01100100100001000000000000000000 +01011011100000110000000000010000 +01111000000000110000000000000001 +10111000001000000100100000000000 +10111000011000000000100000000000 +00110100000000110000000000000010 +01011011100000100000000000001100 +10111000010000000101100000000000 +00111000001000011000011010100100 +11001000011001000001000000000000 +00100001001000110000000001111111 +01011011100001010000000000011000 +01011011100001100000000000011100 +01011011100001110000000000100000 +01011011100010000000000000100100 +11111000000000000000110000100010 +00110111100000100000000000010000 +10111001011000000000100000000000 +11111000000000000000101111111101 +01111000000000010000000000000001 +00111000001000011000011010110000 +11111000000000000000110000011100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000100100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011000011011000000 +11111000000000000000110000010011 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +01000000001001000000000000000000 +00110100000000100000000000101101 +00110100000000110000000000000001 +01011100100000100000000000000011 +00110100001000010000000000000001 +00110100000000111111111111111111 +00110100000000100000000000000000 +00110100000001010000000000001001 +11100000000000000000000000000100 +00001000010000100000000000001010 +00110100001000010000000000000001 +10110100100000100001000000000000 +01000000001001000000000000000000 +00110100100001001111111111010000 +00100000100001100000000011111111 +01010000101001101111111111111010 +10001000010000110000100000000000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +11111000000000000001000111100100 +00110100001010110000000000000001 +11111000000000000001000111100010 +01011100001010111111111111111111 +10111001100000000000100000000000 +11100000000000000000000000000010 +00110100001000011111111111111111 +01001000001000001111111111111111 +11111000000000000001000111011100 +11001000001010110000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00110100000010110000010000000000 +00110100000011000000010000000000 +11100000000000000000000000000011 +10110101100010110110000000000000 +00111101011010110000000000000001 +10111001100000000000100000000000 +11111011111111111111111111100001 +01000100001000001111111111111100 +00010101100011000000000000000001 +00010101011010110000000000000010 +11100000000000000000000000001001 +10110101011011000110100000000000 +10111001101000000000100000000000 +11111011111111111111111111011010 +01011100001000000000000000000010 +10111001101000000110000000000000 +00000001011000010000000000011111 +10110100001010110101100000000000 +00010101011010110000000000000001 +01011101011000001111111111111000 +01111000000000010000000000000001 +00111000001000011011011011000100 +01011000001011000000000000000000 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000011000011100011000 +11111000000000000000101111001010 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01111000000000100000000000000001 +00111000010000101011011011000100 +00101000010000110000000000000000 +00110100000001000010011100010000 +00001000011001010000000000001010 +11100000000000000000000000000100 +00110100010000101111111111111111 +01001000010000001111111111111111 +00110100001000011101100011110000 +01010000100000010000000000000011 +10111000101000000001000000000000 +11100011111111111111111111111100 +10001000001000110000100000000000 +00110100000000100000001111101000 +11111000000000000010101100000110 +11100000000000000000000000000010 +00110100001000011111111111111111 +01001000001000001111111111111111 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +10111000001000000010100000000000 +01011100100000000000000000000010 +10111000011000000010000000000000 +10111000100000000011000000000000 +01010000011001000000000000000010 +10111000011000000011000000000000 +10110100001001100000100000000000 +11100000000000000000000000001110 +00101100010001100000000000000010 +00101000010001110000000000001100 +10110100111001100011100000000000 +01000000111001100000000000000000 +00110000101001100000000000000000 +00101100010001110000000000000010 +00101100010001100000000000000110 +00110100101001010000000000000001 +00110100111001110000000000000001 +00100000111001111111111111111111 +00001100010001110000000000000010 +01011100110001110000000000000010 +00001100010000000000000000000010 +01011100101000011111111111110011 +01010000100000110000000000001011 +00101100010000010000000000000010 +10110100011000010000100000000000 +11001000001001000010000000000000 +00001100010001000000000000000010 +00101100010000010000000000000110 +11100000000000000000000000000011 +11001000100000010010000000000000 +00001100010001000000000000000010 +00101100010001000000000000000010 +01010100100000011111111111111101 +10111000011000000000100000000000 +11000011101000000000000000000000 +10110100010000110010100000000000 +11100000000000000000000000001101 +00101100001001000000000000000000 +00101000001001100000000000001100 +01000000010001110000000000000000 +00110100010000100000000000000001 +10110100110001000011000000000000 +00110000110001110000000000000000 +00110100100001000000000000000001 +00101100001001100000000000000110 +00100000100001001111111111111111 +00001100001001000000000000000000 +01011100110001000000000000000010 +00001100001000000000000000000000 +01011100010001011111111111110100 +10111000011000000000100000000000 +11000011101000000000000000000000 +00110111100111001111111111001000 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +01111000000011000000000000000001 +00111001011010111011100011011000 +00111001100011001011011011111000 +10111001011000000000100000000000 +10111001100000000001000000000000 +00110100000000110000000111100000 +00110111100001000000000000100000 +11111000000000000000111111000000 +10111000001000000110100000000000 +00110100000011110000000000000000 +01001100000000010000000001100001 +00101101011000100000000000001100 +00001111100000000000000000111000 +00111000000000011000000100000000 +01011100010000010000000000001110 +10111001100000000001000000000000 +00110100000000110000000000000010 +00110111100000010000000000111000 +11111000000000000010101100010000 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011011100011100100 +00111000010000101011011011111010 +00110100000000110000000000000010 +01111000000011000000000000000001 +11111000000000000010101100001001 +00110101101011011111111111111100 +00111001100011001011011011111100 +01111000000000010000000000000001 +00101111100000100000000000111000 +00111000001000011001011011110100 +00101000001000010000000000000000 +00100000010000100000111111111111 +00110100000011110000000000000000 +01011100010000010000000001001001 +01000001100000100000000000000000 +00110100000000010000000001000101 +00110100000000110000000000000000 +01011100010000010000000000001000 +01000001100000100000000000001001 +00110100000000010000000000010001 +01011100010000010000000000000101 +01000001100000110000000000010110 +01000001100000010000000000010111 +00111100011000110000000000001000 +10111000011000010001100000000000 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011011100011011000 +00111000010000101011011011001000 +00101100001001110000000000001100 +00110100010001100000000000110000 +00110100000001000000000000000000 +00110100000010110000000000000000 +11100000000000000000000000001100 +00101000010000010000000000000000 +01000100001000000000000000001001 +00101100001001010000000000001100 +01011100101001110000000000000111 +00101100001001010000000000001110 +01011100011000000000000000000011 +01000100101000110000000000111000 +11100000000000000000000000000011 +01011100101000110000000000000010 +10111000001000000010000000000000 +00110100010000100000000000000100 +01011100010001101111111111110101 +01000100100000000000000000000010 +10111000100000000101100000000000 +00110100000011110000000000000001 +01000101011000000000000000100101 +00101101011100000000000000101000 +00110101101000010000000000101000 +01001000001100000000000000100010 +00110101011011100000000000100100 +00110111100000100000000000111010 +00110100000000110000000000000010 +10111001110000000000100000000000 +00001111100011010000000000111010 +11111011111111111111111110010111 +11001010000000010110100000000000 +00100001101011011111111111111111 +00001101011011010000000000101000 +00110111100000100000000000100000 +00110100000000110000000000011000 +10111001110000000000100000000000 +11111011111111111111111110010000 +11001001101000010110100000000000 +00100001101011011111111111111111 +01111000000000100000000000000001 +00001101011011010000000000101000 +00111000010000101011100011011000 +00110100000000110000000000001110 +10111001110000000000100000000000 +11111011111111111111111110001000 +11001001101000010110100000000000 +00101111100000110000000000111010 +00100001101011011111111111111111 +00001101011011010000000000101000 +10111001110000000000100000000000 +10111001100000000001000000000000 +11111011111111111111111110000001 +11001001101000010000100000000000 +00001101011000010000000000101000 +00101101011000010000000000101100 +00110100001000010000000000000001 +00001101011000010000000000101100 +10111001111000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000111000 +11000011101000000000000000000000 +10111000001000000101100000000000 +11100011111111111111111111001011 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000010000000000100000000000 +11111000000000000000110000110101 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101011011011001000 +00110100010000110000000000110000 +11100000000000000000000000000100 +00101000010001000000000000000000 +00110100010000100000000000000100 +01011000100000010000000000011100 +01011100010000111111111111111101 +11000011101000000000000000000000 +00110111100111001111111100100100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000001010000000000000001 +10111000001000000101100000000000 +10111000010000000110000000000000 +10111000011000000111000000000000 +10111000100000000110100000000000 +00111000101001011011011011001000 +00110100000000010000000000000000 +00110100000000100000000000001100 +00101000101000110000000000000000 +00110100101001010000000000000100 +01011100011000000000000000001001 +00111100001000100000000000000010 +01111000000001010000000000000001 +00111000101001011011011011001000 +10110100101000100010100000000000 +01011000101010110000000000000000 +00110100000000100000000000001100 +01011100001000100000000000001010 +11100000000000000000000000000011 +00110100001000010000000000000001 +01011100001000101111111111110100 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000010000101001001101011000 +00111000001000011000011100110000 +11111000000000000000101011000111 +11100000000000000000000000100000 +01111000000000100000000000000001 +00110111100000010000000000011000 +00111000010000101000011101001100 +11111011111111111111010111000101 +01001000000000010000000000011011 +10111001011000000000100000000000 +00110100000000100000000000000000 +00110100000000110000000000010010 +11111000000000000010101011101111 +01000101100000000000000000000101 +10111001011000000000100000000000 +10111001100000000001000000000000 +00110100000000110000000000010010 +11111000000000000010101001101100 +00001101011000000000000000001110 +01011101110000000000000000000100 +00110100000000010000100000000000 +00001101011000010000000000001100 +00001101011011010000000000001110 +00110101011000010000000000010010 +11111000000000000000101111110010 +00101011100000010000000011010000 +00001101011000000000000000100110 +00001101011000000000000000100100 +01011001011000010000000000011100 +00101011100000010000000010111000 +00001101011000000000000000101100 +01011001011000010000000000100000 +00101101011000010000000000101010 +00001101011000010000000000101000 +11100000000000000000000000000010 +00110100000010110000000000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000011011100 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101011011011001000 +00110100010000110000000000110000 +11100000000000000000000000000101 +00101000010001000000000000000000 +01011100100000010000000000000010 +01011000010000000000000000000000 +00110100010000100000000000000100 +01011100010000111111111111111100 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +01011001011000100000000000010000 +10111000010000000111000000000000 +10111000100000000111100000000000 +10111000101000000110000000000000 +00101000001011010000000000001000 +01000100011000000000000000000101 +10111000101000000000100000000000 +00110100000000101111110000011000 +11111000000000000010100110001000 +10110100001011010110100000000000 +11001001110011110010000000000000 +10111000100000000001100000000000 +01001100100000000000000000000010 +10110100100011000001100000000000 +00000001100000010000000000011111 +10110100001011000000100000000000 +00010100001000010000000000000001 +10110100001001000010000000000000 +01001100100000000000000000000010 +10110100100011000010000000000000 +01001001100001000000000000000010 +11001000100011000010000000000000 +00001001100000100000000000000011 +00010100010001010000000000011111 +00000000101001010000000000011110 +10110100101000100001000000000000 +00010100010000100000000000000010 +01001000011000100000000000000110 +00010101100000100000000000011111 +00000000010000100000000000011110 +10110100010011000001000000000000 +00010100010000100000000000000010 +01001100011000100000000000001101 +10110100100000010010000000000000 +01011001011011010000000000001000 +01011001011001000000000000001100 +01001001100001000000000000001010 +11001000100011000010000000000000 +01011001011001000000000000001100 +10111001100000000000100000000000 +00110100000000100000001111101000 +11111000000000000010100101100111 +10110101101000010000100000000000 +01011001011000010000000000001000 +11100000000000000000000000000010 +01011001011000110000000000001100 +01111000000000110000000000000001 +00111000011000111000111011011000 +00101001011000010000000000001000 +00101000011000100000000000000000 +01001100010000010000000000001101 +01111000000000110000000000000001 +00111000011000111000111011001100 +00101000011000100000000000000000 +00101001011000110000000000000000 +10110100001000100000100000000000 +00101001011000100000000000000100 +01011001011000010000000000001000 +00110100010000010000000000000001 +11110100010000010001000000000000 +01011001011000010000000000000100 +10110100010000110001000000000000 +01011001011000100000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111110110100 +01011011100010110000000000100100 +01011011100011000000000000100000 +01011011100011010000000000011100 +01011011100011100000000000011000 +01011011100011110000000000010100 +01011011100100000000000000010000 +01011011100100010000000000001100 +01011011100100100000000000001000 +01011011100111010000000000000100 +10111000010000000110100000000000 +00101100001000100000000000101100 +10111000101000000101100000000000 +10111000001000000110000000000000 +10111000011000001001000000000000 +10111000100000000111100000000000 +00110100000001010000000000000000 +01000100010000000000000001010110 +00110100001011100000000000100100 +00101100001100010000000000101000 +00110100010000101111111111111111 +00001100001000100000000000101100 +00110100000000110000000000000010 +10111001110000000001000000000000 +00110100000001000000000000000000 +00110111100000010000000001001110 +11111011111111111111111001111110 +10110110001000011000100000000000 +00100010001100011111111111111111 +00001101100100010000000000101000 +10111001110000000001000000000000 +00110100000000110000000000011000 +00110100000001000000000000000000 +00110111100000010000000000101000 +11111011111111111111111001110110 +10110110001000011000100000000000 +00100010001100011111111111111111 +00110111100100000000000001000000 +00001101100100010000000000101000 +10111001110000000001000000000000 +00110100000000110000000000001110 +00110100000001000000000000000000 +10111010000000000000100000000000 +11111011111111111111111001101101 +10110110001000011000100000000000 +00101111100000110000000001001110 +00100010001100011111111111111111 +10111001110000000001000000000000 +10111001111000000010000000000000 +00001101100100010000000000101000 +10111010010000000000100000000000 +11111011111111111111111001100101 +10110110001000010000100000000000 +00001101100000010000000000101000 +00101111100000010000000001001100 +01111000000000110000000000000001 +00111000011000111001011011110100 +00001101101000010000000000001100 +00101000011000010000000000000000 +00110111100000100000000001000110 +00110100000000110000000000000110 +00001101101000010000000000010000 +10111001101000000000100000000000 +11111000000000000010100110111000 +00110101101000010000000000000110 +10111010000000000001000000000000 +00110100000000110000000000000110 +11111000000000000010100110110100 +01000101011000000000000000011111 +00101011100000010000000000111000 +01011001011000010000000000010100 +00101011100000010000000000101100 +01011001011000010000000000011000 +00110100000000010000000000000000 +11111000000000000010011000001000 +10111000001000000110100000000000 +00110101011000100000000000010000 +00110100000000110000000000000000 +00110100000000010000000000000000 +11111000000000000010010110100010 +00101011100000010000000000110000 +01000011100000100000000000101000 +00101011100000110000000000101100 +01011001011000010000000000000000 +00101011100000010000000000110100 +01111100010000100000000000000000 +00101001100001000000000000011100 +01011001011000010000000000000100 +00101011100000010000000000111000 +01011001011000000000000000001100 +00110100000001010011111010000000 +01011001011000010000000000001000 +00100001101000010000000011111111 +01100100001000010000000000000000 +10100000001000100000100000000000 +00101001011000100000000000010000 +01011001011000010000000000011100 +10111001011000000000100000000000 +11111011111111111111111101001111 +00101111100000010000000001001110 +10111001111000000010100000000000 +01010000001011110000000000000010 +10111000001000000010100000000000 +10111000101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100100 +00101011100011000000000000100000 +00101011100011010000000000011100 +00101011100011100000000000011000 +00101011100011110000000000010100 +00101011100100000000000000010000 +00101011100100010000000000001100 +00101011100100100000000000001000 +00110111100111000000000001001100 +11000011101000000000000000000000 +00110111100111001111111111000000 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +10111000011000000111000000000000 +00110111100000010000000000110000 +00110100000000110000000000000110 +10111000101000000101100000000000 +10111000100000000110100000000000 +11111000000000000010100101111000 +00110111100000010000000000110110 +00110101100000100000000000010010 +00110100000000110000000000000110 +11111000000000000010100101110100 +01111000000000010000000000000001 +00111000001000011001011011110100 +00101000001001010000000000000000 +00101101100000010000000000001100 +01000100101000000000000000001001 +00110100000000101000000100000000 +00001111100000100000000000111100 +00101101100000100000000000011000 +00001111100000010000000001000000 +00111100010000100000000000001101 +10111000010001010010100000000000 +00001111100001010000000000111110 +11100000000000000000000000000010 +00001111100000010000000000111100 +00110111100000010000000000110000 +10111001110000000001000000000000 +10111001101000000001100000000000 +00110111100001000000000000011000 +11111000000000000000111011000000 +01000101011000000000000000001010 +00101011100000100000000000100000 +01011001011000000000000000001100 +01011001011000100000000000000000 +00101011100000100000000000100100 +01011001011000100000000000000100 +00101011100000100000000000101000 +01011001011000100000000000001000 +01000011100000100000000000011000 +01011001011000100000000000011100 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000001000000 +11000011101000000000000000000000 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00110100000000100000000000000000 +00110100000000110000000000000000 +00110100000001000000000001000100 +00111000001000011010000000000000 +11111011111111111111111010101100 +01111000000000100000000000000001 +00111000010000101011100011101100 +01011000010000010000000000000000 +01111000000000010000000000000001 +00110100000001000000000000100101 +00110100000000100000000000000000 +00110100000000110000000000000000 +00111000001000011010000000110100 +11111011111111111111111010100011 +01111000000000100000000000000001 +00110111100010110000000000001100 +00111000010000101011100011111100 +01011000010000010000000000000000 +00110100000000110000000000010010 +10111001011000000000100000000000 +00110100000000100000000000000000 +11111000000000000010100110110011 +00110100000000010000100000000000 +00001111100000010000000000011000 +01111000000000010000000000000001 +10111001011000000001000000000000 +00110100000000110000000000000001 +00110100000001000000000000000000 +00111000001000011010000001101000 +11111011111111111111111010010011 +01111000000000100000000000000001 +00111000010000101011100011111000 +01011000010000010000000000000000 +11111011111111111111111111011010 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110100000000110000000000000000 +00110100000001000000000000000000 +11100000000000000000000000000101 +00101100001001010000000000000000 +00110100100001000000000000000001 +00110100001000010000000000000010 +10110100011001010001100000000000 +01001000010001001111111111111100 +00000000011000010000000000010000 +00100000011000111111111111111111 +10110100011000010001100000000000 +00000000011000010000000000010000 +10110100001000110001100000000000 +10100100011000000000100000000000 +00100000001000011111111111111111 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01111000000000100000000000000001 +00111000010000101011100100000000 +00110100000000110000000000000100 +11111000000000000010100100001101 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +01111000000010110000000000000001 +00111001011010111011100100000000 +00111000011000111100001010101000 +10111000001000000001000000000000 +00101000011011000000000000000000 +10111001011000000000100000000000 +00110100000000110000000000000100 +11111000000000000010100011111101 +01000001011000100000000000000000 +01000001011000010000000000000001 +00110101100011000000000000011000 +00111100010000100000000000011000 +00111100001000010000000000010000 +10111000010000010000100000000000 +01000001011000100000000000000011 +10111000001000100000100000000000 +01000001011000100000000000000010 +00111100010000100000000000001000 +10111000001000100000100000000000 +11100000000000000000000000000010 +01011001100000010000000000000000 +00101001100000100000000000000000 +01011100010000011111111111111110 +01011100001000000000000000000100 +01111000000000010000000000000001 +00111000001000011011100011101000 +01011000001000000000000000000000 +01111000000000010000000000000001 +00111000001000011011100011110100 +01011000001000000000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000001000000001000000000000 +00110100000000011111111111111111 +01000100010000000000000000000110 +00110100010000010000000000010000 +01111000000000100000000000000001 +00111000010000101011100100000000 +00110100000000110000000000000100 +11111000000000000010100010110111 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111000110000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011100001010010100 +00101000001000100000000000000000 +00110100000000010000000000000001 +01011100010000010000000000000110 +01111000000000010000000000000001 +00111000001000011011100011101000 +00101000001000110000000000000000 +01011100011000100000000000000010 +01011000001000000000000000000000 +01111000000000100000000000000001 +00111000010000101011100011101100 +00101000010000010000000000000000 +00110111100011000000000000100100 +00110111100000100000000110110100 +00110100000001000000000110010000 +10111001100000000001100000000000 +00110100000001010000000000000000 +11111011111111111111111011000010 +01111000000001000000000000000001 +00111000100001001011100011101000 +10111000001000000001000000000000 +00101000100000010000000000000000 +00110100000010110000000000000000 +01011100001000000000000000100011 +01001101011000100000000000000100 +10111001100000000000100000000000 +11111000000000000000001000110101 +10111000001000000101100000000000 +11111000000000000000111011100110 +01111000000000100000000000000001 +00111000010000101011100011110000 +00101000010000110000000000000000 +01011100011000000000000000000011 +01011000010000010000000000000000 +11100000000000000000000000000101 +00110100011000110000001111101000 +11001000001000110000100000000000 +01001000000000010000000000010101 +01011000010000110000000000000000 +01111000000000010000000000000001 +00111000001000011011100011110100 +00101000001000110000000000000000 +00110111100010110000000000100100 +00110111100011000000000110110100 +00110100011000110000000000000001 +01011000001000110000000000000000 +10111001011000000001000000000000 +10111001100000000000100000000000 +11111000000000000000000110111011 +01111000000001010000000000000001 +00111000101001011011100011101100 +10111000001000000010000000000000 +00101000101000010000000000000000 +10111001011000000001100000000000 +10111001100000000001000000000000 +00110100000001010000000000000000 +11111011111111111111111100001110 +00110100000010110000000000000001 +01111000000011010000000000000001 +00111001101011011011100011111000 +00101001101000010000000000000000 +00110111100011100000000110110100 +00110111100011000000000000100100 +10111001110000000001000000000000 +10111001100000000001100000000000 +00110100000001000000000010000000 +00110100000001010000000000000000 +11111011111111111111111010010000 +10111000001000001000100000000000 +00110100000011110000000000000000 +01001100000000010000000000010100 +01111000000000110000000000000001 +00111000011000111011100011101000 +00101000011000010000000000000000 +01000100001000000000000000010000 +10111001100000000000100000000000 +11111011111111111111111110011101 +10111000001000001000000000000000 +01011100001000000000000000001100 +10111001100000000000100000000000 +10111010001000000001000000000000 +11111000000000000000000010111101 +10111000001000000010000000000000 +00110100000011110000000000000001 +01001110000000010000000000000110 +00101001101000010000000000000000 +10111001110000000001000000000000 +10111001100000000001100000000000 +00110100000001010000000000000000 +11111011111111111111111011101101 +01111000000011010000000000000001 +00111001101011011011100011111100 +00101001101000010000000000000000 +00110111100100000000000110110100 +00110111100011000000000000100100 +10111010000000000001000000000000 +10111001100000000001100000000000 +00110100000001000000000000100000 +00110100000001010000000000000000 +11111011111111111111111001110000 +00110100000011100000000000000000 +01001100000000010000000000011100 +10111001100000000000100000000000 +11111011111111111111111110000010 +01011100001000000000000000011001 +00110111100000010000000111001000 +00110100000000100000000000000000 +11111000000000000001001110011100 +01111000000000100000000000000001 +00111000010000101000111011101000 +00101000010000010000000000000000 +00101011100000100000000111001100 +00110100000000110000000000000100 +00110100000011100000000000000001 +10110100010000010000100000000000 +01011011100000010000000111010000 +00110111100000100000000111010000 +00110111100000010000000001000000 +11111000000000000010100001010100 +10111001100000000000100000000000 +00110100000000100000000000100000 +00110100000000110000000000000000 +11111000000000000000000011110101 +00101001101000010000000000000000 +10111010000000000001000000000000 +10111001100000000001100000000000 +00110100000001000000000000100000 +00110100000001010000000000000000 +11111011111111111111111011000110 +11111011111111111111111100100101 +10110101111010110101100000000000 +10110101011000010000100000000000 +10110100001011100111000000000000 +01111101110000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000111010000 +11000011101000000000000000000000 +00110111100111001111111100110100 +01011011100010110000000000101000 +01011011100011000000000000100100 +01011011100011010000000000100000 +01011011100011100000000000011100 +01011011100011110000000000011000 +01011011100100000000000000010100 +01011011100100010000000000010000 +01011011100100100000000000001100 +01011011100100110000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011011100011101000 +00101000001000010000000000000000 +00110100000010110000000000000000 +01000100001000000000000001000111 +01111000000011000000000000000001 +00111001100011001011101111100100 +00101001100000010000000000000000 +00110111100011110000000010101100 +00110111100011100000000000101100 +10111001111000000001000000000000 +10111001110000000001100000000000 +00110100000001000000000010000000 +00110100000001010000000000000000 +11111011111111111111111000101010 +01001100000000010000000000111100 +00110100000000100000000000011011 +00110100000010110000000000000001 +01001100010000010000000000111001 +00110111100011010000000011001000 +10111001101000000000100000000000 +11111011111111111111111100001000 +01000011100000010000000000110010 +01011100001000000000000000110100 +01000011100000010000000000110011 +01011100001010110000000000110010 +00110111100100000000000001000100 +10111010000000000000100000000000 +10111001101000000001000000000000 +00110100000000110000000000000100 +11111000000000000010011111110000 +01011100001000000000000000101100 +00110111100100010000000011000000 +00110111100100110000000000110100 +10111010011000000001000000000000 +00110100000000110000000000000110 +10111010001000000000100000000000 +11111000000000000010100000001010 +00110111100100100000000000111010 +10111010010000000001000000000000 +00110100000000110000000000000100 +00110111100000010000000011001100 +11111000000000000010100000000101 +00110100000000010000000000001000 +00110011100000010000000000101110 +00110100000000010000000000000110 +00110011100000010000000000110000 +00110100000000010000000000000100 +00110011100000010000000000110001 +00110100000000010000000000000010 +00110011100000010000000000110011 +10111010011000000000100000000000 +00110011100000000000000000101100 +00110011100010110000000000101101 +00110011100000000000000000101111 +00110011100000000000000000110010 +11111000000000000000100110000100 +10111001101000000001000000000000 +00110100000000110000000000000100 +10111010010000000000100000000000 +11111000000000000010011111110011 +10111010001000000001000000000000 +00110100000000110000000000000110 +00110111100000010000000000111110 +11111000000000000010011111101111 +00110111100000100000000011001100 +00110100000000110000000000000100 +10111010000000000000100000000000 +11111000000000000010011111101011 +00101001100000010000000000000000 +10111001111000000001000000000000 +10111001110000000001100000000000 +00110100000001000000000000011100 +00110100000001010000000000000000 +11111011111111111111111001100001 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000101000 +00101011100011000000000000100100 +00101011100011010000000000100000 +00101011100011100000000000011100 +00101011100011110000000000011000 +00101011100100000000000000010100 +00101011100100010000000000010000 +00101011100100100000000000001100 +00101011100100110000000000001000 +00110111100111000000000011001100 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000001000 +01011011100111010000000000000100 +00110111100010110000000000001100 +10111001011000000000100000000000 +00110100000000100000000000000000 +00110100000000110000000000010010 +11111000000000000010100001001110 +10111001011000000000100000000000 +00110100000000100000000011111111 +00110100000000110000000000000110 +11111000000000000010100001001010 +00110100000000010000100000000110 +00001111100000010000000000011000 +01111000000000010000000000000001 +10111001011000000001000000000000 +00110100000000110000000000000001 +00110100000001000000000000000000 +00111000001000011010000010011100 +11111011111111111111110100101010 +01111000000000100000000000000001 +00111000010000101011101111100100 +01011000010000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00110111100011010000000000011100 +10111000001000000101100000000000 +10111001101000000000100000000000 +11111011111111111111111010100000 +01000001011000100000000000000000 +00110100000000010000000001000101 +00110100000011000000000000000000 +01011100010000010000000001001010 +00110101011011100000000000010000 +10111001101000000001000000000000 +10111001110000000000100000000000 +00110100000000110000000000000100 +11111000000000000010011110001000 +10111000001000000001000000000000 +01011100001000000000000001000011 +01000001011001000000000000001001 +00110100000000110000000000000001 +01000001011011010000000000000010 +01000001011000010000000000000011 +10111000010000000110000000000000 +01011100100000110000000000111101 +01000001011000110000000000010100 +00110100000000100000000000001000 +01011100011000100000000000111010 +00111101101011010000000000001000 +10111001101000010110100000000000 +00110101101011011111111111101000 +00110100000000010000000001000000 +01001100001011010000000000000010 +00110100000011010000000001000000 +00110101011011110000000000001100 +10111001111000000001000000000000 +00110100000000110000000000000100 +00110111100000010000000000100000 +11111000000000000010011110010011 +00110101101011000000000000011000 +00110100000000010000000001000101 +00110001011000010000000000000000 +00010101100000010000000000001000 +00110111100000100000000000011100 +00110001011000010000000000000010 +00110100000000010000000000111111 +00110001011000010000000000001000 +00110100000000010000000000000001 +00110001011000010000000000001001 +00110100000000110000000000000100 +00110001011000000000000000000001 +00110001011011000000000000000011 +00110001011000000000000000000100 +00110001011000000000000000000101 +00110001011000000000000000000110 +00110001011000000000000000000111 +00110001011000000000000000001010 +00110001011000000000000000001011 +10111001111000000000100000000000 +11111000000000000010011101111110 +00110100000000110000000000000100 +00110111100000100000000000100000 +10111001110000000000100000000000 +11111000000000000010011101111010 +00110101101011010000000000000101 +00000001101000010000000000011111 +00110001011000000000000000010100 +10110100001011010110100000000000 +00010101101000100000000000000001 +00110001011000000000000000010101 +00110001011000000000000000010110 +00110001011000000000000000010111 +00110101011000010000000000010100 +11111011111111111111111001001110 +00100000001000011111111111111111 +00000000001000100000000000001000 +00110001011000010000000000010111 +00110001011000100000000000010110 +10111001011000000000100000000000 +00110100000000100000000000001010 +11111011111111111111111001000111 +00100000001000011111111111111111 +00000000001000100000000000001000 +00110001011000010000000000001011 +00110001011000100000000000001010 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111001100 +01011011100010110000000000101000 +01011011100011000000000000100100 +01011011100011010000000000100000 +01011011100011100000000000011100 +01011011100011110000000000011000 +01011011100100000000000000010100 +01011011100100010000000000010000 +01011011100100100000000000001100 +01011011100100110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000110100000000000 +10111000011000000110000000000000 +01011100011000000000000000010010 +00110101011000100000000000001100 +00110100000000110000000000000100 +00110111100000010000000000110000 +11111000000000000010011101001001 +00110111100011000000000000101100 +00110101011000100000000000010000 +00110100000000110000000000000100 +10111001100000000000100000000000 +11111000000000000010011101000100 +00110101011000100000000000010100 +00110100000000110000000000000010 +00110111100000010000000000110110 +11111000000000000010011101000000 +00110111100000010000000000110100 +00110101011000100000000000010110 +00110100000000110000000000000010 +11111000000000000010011100111100 +00110101011100010000000000001000 +10111001100000000001000000000000 +00110100000000110000000000000100 +10111010001000000000100000000000 +11111000000000000010011100110111 +00110101101011101111111111101100 +00110101011100000000000000001100 +00110101100011110000000000000100 +10111001111000000001000000000000 +00110100000000110000000000000100 +00010101110100100000000000001000 +10111010000000000000100000000000 +11111000000000000010011100101111 +00100010010100100000000011111111 +00100001110011100000000011111111 +00110100000000010000000000010001 +00110001011000010000000000010001 +00110001011100100000000000010010 +00110001011011100000000000010011 +00110101100000100000000000001000 +00110100000000110000000000000010 +00110001011000000000000000010000 +00110101011000010000000000010100 +11111000000000000010011100100100 +00110100000000110000000000000010 +00110101100000100000000000001010 +00110101011000010000000000010110 +11111000000000000010011100100000 +00110101101000101111111111111001 +00000000010000010000000000011111 +00110001011011100000000000011001 +00110001011100100000000000011000 +00110001011000000000000000011010 +00110001011000000000000000011011 +10110101011011010111000000000000 +10110100001000100001000000000000 +01000001110100100000000000000000 +00010100010000100000000000000001 +00110001110000000000000000000000 +10111010001000000000100000000000 +11111011111111111111110111110001 +00100000001000111111111111111111 +00110001110100100000000000000000 +00110101011100110000000000010000 +01011100011000000000000000000010 +00111000000000111111111111111111 +00000000011000010000000000001000 +00110001011000110000000000011011 +00110001011000010000000000011010 +00110100000000010000000001000101 +00110001011000010000000000000000 +00010101101000010000000000001000 +10111001100000000001000000000000 +00110001011000010000000000000010 +00110100000000010000000000111111 +00110001011000010000000000001000 +00110100000000010000000000010001 +00110001011000010000000000001001 +00110001011000000000000000000001 +00110001011011010000000000000011 +00110001011000000000000000000100 +00110001011000000000000000000101 +00110001011000000000000000000110 +00110001011000000000000000000111 +00110001011000000000000000001010 +00110001011000000000000000001011 +10111010000000000000100000000000 +00110100000000110000000000000100 +11111000000000000010011011110111 +10111001111000000001000000000000 +00110100000000110000000000000100 +10111010011000000000100000000000 +11111000000000000010011011110011 +10111001011000000000100000000000 +00110100000000100000000000001010 +11111011111111111111110111001110 +00100000001000011111111111111111 +00000000001000100000000000001000 +00110001011000010000000000001011 +00110001011000100000000000001010 +00101011100111010000000000000100 +00101011100010110000000000101000 +00101011100011000000000000100100 +00101011100011010000000000100000 +00101011100011100000000000011100 +00101011100011110000000000011000 +00101011100100000000000000010100 +00101011100100010000000000010000 +00101011100100100000000000001100 +00101011100100110000000000001000 +00110111100111000000000000110100 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +10111000001000000110100000000000 +00110100000000100000000000000001 +00110100000000010000000000000110 +00110001011000100000000000011100 +00110001011000100000000000011101 +00110001011000010000000000011110 +00110001011000000000000000011111 +00110101011000010000000000100000 +10111000011000000110000000000000 +11111000000000000000100001011101 +01000001011000100000000000100100 +01000001011000010000000000100000 +00110100000000110000000000000010 +10011000010000010000100000000000 +00110001011000010000000000100000 +01000001011000100000000000100101 +01000001011000010000000000100001 +00110001011011000000000000100101 +10011000010000010000100000000000 +00110001011000010000000000100001 +01000001011000010000000000100010 +00010101100000100000000000001000 +10011000010000010000100000000000 +00110001011000010000000000100010 +01000001011000010000000000100011 +00110001011000100000000000100100 +00110100000000100000000000000000 +10011000001011000000100000000000 +00110001011000010000000000100011 +00110101011000010000000000100110 +11111000000000000010011100111001 +00110101011000010000000000101000 +00110100000000100000000000000000 +00110100000000110000000000000100 +11111000000000000010011100110101 +00110101011000010000000000101100 +00110100000000100000000000000000 +00110100000000110000000000000100 +11111000000000000010011100110001 +00110101011000010000000000110000 +00110100000000100000000000000000 +00110100000000110000000000000100 +11111000000000000010011100101101 +00110101011000010000000000110100 +00110100000000100000000000000000 +00110100000000110000000000000100 +11111000000000000010011100101001 +00110101011011000000000000111000 +00110100000000100000000000000000 +00110100000000110000000000010000 +10111001100000000000100000000000 +11111000000000000010011100100100 +10111001100000000000100000000000 +11111000000000000000100000110001 +00110101011000010000000001001000 +00110100000000100000000000000000 +00110100000000110000000001000000 +11111000000000000010011100011110 +00110101011000010000000010001000 +00110100000000100000000000000000 +00110100000000110000000010000000 +11111000000000000010011100011010 +00110101011000010000000100001000 +00110100000000100000000000000000 +00110100000000110000000001000000 +11111000000000000010011100010110 +00110111100011000000000000010100 +10111001100000000000100000000000 +00110100000000100000000000000000 +00110100000000110000000000000100 +11111000000000000010011100010001 +00110111100000010000000000011000 +00110100000000100000000011111111 +00110100000000110000000000000100 +11111000000000000010011100001101 +00110100000000010000000001000100 +00001111100000010000000000011100 +00110100000000010000000001000011 +00001111100000010000000000011110 +10111001100000000001100000000000 +10111001011000000000100000000000 +00110100000000100000000101001000 +11111011111111111111111100101100 +10111001101000000000100000000000 +00110100000000100000000011111111 +00110100000000110000000000000110 +11111000000000000010011100000001 +00110100000000010000000101001000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +00110111100011010000000000011000 +10111000001000000101100000000000 +10111001101000000000100000000000 +10111000010000000111000000000000 +11111000000000000000011111111110 +00110100000000010000000101001000 +00110100000011000000000000000000 +01011101110000010000000000011011 +01000001011000010000000000010100 +01011100001000000000000000011001 +01000001011000100000000000010101 +00110100000000010000000001000011 +01011100010000010000000000010110 +00110101011000010000000000111000 +10111001101000000001000000000000 +00110100000000110000000000000110 +11111000000000000010011001000100 +01011100001000000000000000010001 +01111000000000010000000000000001 +00110100000000100000000000000001 +00111000001000011011100011101000 +01011000001000100000000000000000 +00110101011000010000000000101100 +11111011111111111111110101010101 +00110111100000010000000000100000 +11111011111111111111110101001010 +01000011100000100000000000100000 +01000011100000110000000000100001 +01000011100001000000000000100010 +01000011100001010000000000100011 +01111000000000010000000000000001 +00111000001000011000011101100100 +11111000000000000000011010100001 +00110100000011000000000000000001 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111010000 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +00100000100001000000000011111111 +00100000100100000000000000001000 +00100000010000100000000011111111 +01111110000100000000000000000000 +10111000001000000111100000000000 +00110100010010110000000000000001 +00100000100011010000000000000100 +10111000011000000110000000000000 +01000000001000010000000000000000 +10110101111010110101100000000000 +01111101101011010000000000000000 +01011110000000000000000000000111 +11001000001000100001000000000000 +00110100000000010000000000000001 +11101100001000100000100000000000 +10111001101000000111000000000000 +10100001101000010000100000000000 +01000100001100000000000000000111 +00110100000000010000000000000010 +00110001011000010000000000000000 +00110100000000010000000000000001 +00110001011000010000000000000001 +00110100000011100000000000000000 +00110100000000100000000000000010 +01100101101000010000000000000000 +01111100010000110000000000000010 +10100000011000010001100000000000 +00110100000000010000000000000000 +01011100011000000000000000110101 +01101000010000100000000000000010 +10100000010011010001000000000000 +01000100010000110000000000000010 +00110100000011100000000000000001 +00110100000000010000000000000010 +00110011100000010000000000110000 +01000001100000010000000000010001 +01011011100010110000000000100000 +00110011100000010000000000110001 +00101001100000010000000000001100 +01011011100000010000000000101100 +01000101110000000000000000000100 +01000001011000010000000000000001 +00110100001000010000000000000001 +00110001011000010000000000000001 +00100000100001000000000000000001 +01000100100000000000000000001001 +00101001100000110000000000001000 +00110100000000011111111111111100 +01000100011000000000000000100001 +00110101011000010000000000000010 +00110111100000100000000000100000 +11011000011000000000000000000000 +01001000000000010000000000011101 +11100000000000000000000000000101 +00101001100000110000000000000100 +00110101011000010000000000000010 +00110111100000100000000000100000 +11011000011000000000000000000000 +01100100001000100000000000000000 +10100000010011100111000000000000 +01000101110000000000000000001100 +01000001011000010000000000000000 +00110111100000100000000000100000 +00110100001000010000000000000001 +00110001011000010000000000000000 +00110100000000010000000000000001 +00110001011000010000000000000001 +00101001100000110000000000000100 +00110101011000010000000000000010 +11011000011000000000000000000000 +01011100001000000000000000000011 +11100000000000000000000000001010 +01011100010011100000000000001000 +01001000000000010000000000001000 +10111010000011010110100000000000 +00110100001000010000000000000010 +01000101101000000000000000000101 +00110100000000100000000000000010 +00110001111000100000000000000000 +11100000000000000000000000000010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000110000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100010110000000000000100 +01111000000001000000000000000001 +00111000100001001001001110010000 +00110100010000101111111111111111 +00110100100010100000000000011100 +00110100000000110000000000000000 +00110100000010010000000011111101 +00110100000010000000000011111001 +00110100000001110000000011111111 +00110100000001101111111110100010 +11100000000000000000000000010001 +01000000100001010000000000000000 +01011100101010010000000000000100 +10110100001000110010100000000000 +00110000101001100000000000000000 +11100000000000000000000000001010 +01011100101010000000000000000101 +10110100001000110010100000000000 +01000000101001010000000000000000 +10110100011001010001100000000000 +11100000000000000000000000000101 +01011100101001110000000000000100 +10110100001000110010100000000000 +11001000010000110101100000000000 +00110000101010110000000000000000 +00110100011000110000000000000001 +00110100100001000000000000000001 +01011100100010101111111111110000 +00101011100010110000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01000000001000110000000000000110 +00110100000001000000000000100000 +01001100100000110000000000000010 +00110100000000110000000000100000 +00100000011010110000000011111111 +10110100001010110001100000000000 +00110100000001001111111110100010 +00110000011001000000000000000111 +01000000011000110000000000001010 +00110100000001000000000000000100 +01001100100000110000000000000010 +00110100000000110000000000000100 +10110101011000110101100000000000 +00100001011010110000000011111111 +10110100001010110001100000000000 +00110000011000100000000000001101 +00110100000000100000000000000001 +00110000011000100000000000010000 +01000000011000100000000000010110 +00110100000000110000000000101000 +01001100011000100000000000000010 +00110100000000100000000000101000 +10110101011000100001000000000000 +00100000010000100000000011111111 +10110100001000100001100000000000 +00110100010000100000000000011001 +00110100000001000000000000000101 +00100000010010110000000011111111 +00110000011001000000000000010111 +00110000011000000000000000011000 +10111001011000000001000000000000 +11111011111111111111111110111110 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111011111100 +01011011100010110000000000101000 +01011011100011000000000000100100 +01011011100011010000000000100000 +01011011100011100000000000011100 +01011011100011110000000000011000 +01011011100100000000000000010100 +01011011100100010000000000010000 +01011011100100100000000000001100 +01011011100100110000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011011110001101000 +00101000001000010000000000000000 +00110111100010110000000000101100 +00110111100000100000000011110100 +10111001011000000001100000000000 +00110100000001000000000011001000 +00110100000001010000000000000000 +11111011111111111111101110010111 +00110100000000100000000000111000 +00110100000011000000000000000000 +01010000010000010000000010100110 +10111001011000000000100000000000 +11111011111111111111110010101000 +01011100001000000000000010100011 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011100001010001100 +00111000010000101001001110010000 +01111000000000110000000000000001 +01000000001001010000000000000000 +00110100010011100000000000011100 +10111001011000000000100000000000 +00110100000001000000000000000000 +00110100000011010000000000000110 +00111000011000111001001101110100 +00110100000010110000000010100000 +00110100000010100000000010100001 +00110100000010010000000010100011 +00110100000010000000000000000001 +11100000000000000000000000101000 +01000000010001100000000000000000 +00110100110001110000000000000111 +00100000111001110000000011111111 +01010100111011010000000000010100 +00111100111001110000000000000010 +10110100011001110011100000000000 +00101000111001100000000000000000 +11000000110000000000000000000000 +10110100100000010011000000000000 +01000000110001100000000000011100 +10110100100001100010000000000000 +11100000000000000000000000011010 +10110100100000010010100000000000 +01000000101001010000000000011100 +01010001000001010000000000010111 +11100000000000000000000000001011 +10110100100000010011000000000000 +01000000110001100000000000011100 +01000100110010110000000000001110 +01000100110010100000000000001111 +01000100110010010000000000010000 +01011101100000000000000000010000 +11100000000000000000000000000100 +10110100100000010011100000000000 +01000000111001110000000000011100 +01000100111001100000000000001100 +01111000000000010000000000000001 +00111000001000011100001010001100 +00110000001001010000000000000000 +00110100000000100000000000000101 +00110111100000010000000001001000 +11100000000000000000000001011011 +00110100000011000000000000000010 +11100000000000000000000000000100 +00110100000011000000000000000100 +11100000000000000000000000000010 +00110100000011000000000000000001 +00110100100001000000000000000001 +00110100010000100000000000000001 +01011100010011101111111111011001 +01111000000000010000000000000001 +00111000001000011100001010001100 +00110000001001010000000000000000 +00110111100000010000000001001000 +10110100001001000110100000000000 +01111000000010110000000000000001 +00110100100001000000000000000001 +10110100001001000111100000000000 +00111001011010111010000011010000 +00100001100100110000000000000011 +00100001100100000000000000000100 +00111001100100100000000000001000 +11100000000000000000000000111111 +01000001101100010000000000000000 +01000110011000000000000000000010 +01010100001100010000000000111011 +00100010001000100000000011111111 +01010000001000100000000000000010 +10111000001000001000100000000000 +00101001011000010000000000000000 +00100010001100010000000011111111 +10111001111000000001000000000000 +10111010001000000001100000000000 +11111000000000000010010100010111 +00111100001001010000000000011000 +10111001100000000111000000000000 +00010100101001010000000000011000 +01000110000000000000000000001010 +01001000101000000000000000000111 +01000001011000110000000000001100 +01000001101000010000000000000000 +01100100101000100000000000000000 +11110000011000010000100000000000 +10100000010000010000100000000000 +01000100001000000000000000000011 +01000001011100010000000000001100 +10111010010000000111000000000000 +01000001011000110000000000001100 +01100100101000010000000000000000 +11100100011100010001000000000000 +10100000010000010001000000000000 +01011100010000000000000000000011 +00100001110000010000000000001000 +01000100001000100000000000011110 +01011110000000000000000000000011 +00100001110000010000000000001000 +01000100001100000000000000000100 +00101001011000100000000000000000 +10111001111000000000100000000000 +11111000000000000010010100011110 +00101001011001010000000000000100 +00101001011000110000000000001000 +10111001101000000000100000000000 +10111010001000000001000000000000 +10111001110000000010000000000000 +11011000101000000000000000000000 +01001100000000010000000000001100 +01011110000000000000000000000011 +00100001110011100000000000001000 +01000101110100000000000000000101 +01000001101000110000000000000000 +01000001011000100000000000001100 +10110100011000100001000000000000 +00110001101000100000000000000000 +01000001011001000000000000001100 +10110101111001000111100000000000 +10110101111000010111100000000000 +11100000000000000000000000001010 +01000100001000000000000000000110 +11001000000000010001000000000000 +00100000010000100000000011111111 +00110111100000010000000001001000 +11100000000000000000000000001010 +01001000101000010000000000000111 +00110101011010110000000000010000 +01000001011000010000000000001100 +01011100001000001111111111000001 +01000101011000000000000000000011 +01000001011000010000000000001100 +01011100001000000000000000000110 +00110111100000010000000001001000 +00110100000000100000000000000010 +11111011111111111111111100110100 +10111000001000000101100000000000 +11100000000000000000000000000111 +00110111100000010000000001001000 +11001001111000010101100000000000 +10111001011000000001000000000000 +11111011111111111111111100001110 +00110100000011000000000000000000 +01001000000010110000000000010000 +00110111100011000000000000101100 +00110101011010110000000000011100 +10111001100000000000100000000000 +10111001011000000001000000000000 +00110100000000110000000000000000 +11111011111111111111110110010100 +01111000000001010000000000000001 +00111000101001011011110001101000 +00101000101000010000000000000000 +10111001100000000001100000000000 +00110111100000100000000011110100 +10111001011000000010000000000000 +00110100000001010000000000000000 +11111011111111111111101101100011 +00110100000011000000000000000001 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000101000 +00101011100011000000000000100100 +00101011100011010000000000100000 +00101011100011100000000000011100 +00101011100011110000000000011000 +00101011100100000000000000010100 +00101011100100010000000000010000 +00101011100100100000000000001100 +00101011100100110000000000001000 +00110111100111000000000100000100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000011000000000000 +01000000110001010000000000010001 +01000000001000100000000000000000 +10111000011000000110000000000000 +01000000001010110000000000000001 +00110100000001001111111111111101 +01011100101000100000000000011110 +00110100001000100000000000000010 +00110100000000010000000000000100 +01000100101000010000000000010011 +00110100000000010000000001000010 +01000100101000010000000000000100 +00110100000000010000000000000010 +00110100000001000000000000000000 +01011100101000010000000000010110 +00110100000011010000000000000100 +00110100000001001111111111111101 +01010101011011010000000000010011 +00110111100000010000000000010100 +10111001011000000001100000000000 +01011011100000000000000000010100 +11111000000000000010010010111110 +00101011100000010000000000010100 +11001001101010110110100000000000 +00111101101011010000000000000011 +10000000001011010110100000000000 +01011001100011010000000000000000 +11100000000000000000000000001000 +01000000110000010000000000010011 +01010101011000010000000000000111 +10111000011000000000100000000000 +10110101100010110110000000000000 +10111001011000000001100000000000 +11111000000000000010010010110010 +00110001100000000000000000000000 +00110101011001000000000000000010 +10111000100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01000000010000110000000000010010 +00101000010001000000000000001100 +10110100100000110001100000000000 +11111011111111111111111111001011 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111001100 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +01000000001011100000000000000000 +00100000010000100000000011111111 +00100000100001000000000011111111 +00110100010011000000000000000001 +11001001110000100111000000000000 +00100000100000100000000000000001 +10111000001000000111100000000000 +10110100001011000110000000000000 +00110100000000011111111111111100 +01011100010000000000000001101000 +00100000100011010000000000000100 +01111101101011010000000000000000 +00100000100100000000000000001000 +01111110000100000000000000000000 +10111000011000000101100000000000 +00100001101100010000000011111111 +11100000000000000000000000100011 +10111001110000000001100000000000 +01001100001011100000000000000010 +10111000001000000001100000000000 +00101001011000010000000000000000 +10111001100000000001000000000000 +00100000011000110000000011111111 +11111000000000000010010001011110 +01011110000000000000000000001010 +10110000001000000000100000000000 +01100100001000100000000000000000 +10100000010100010001100000000000 +01000100011100000000000000000011 +01000001011000110000000000010000 +01001100011011100000000000000100 +01101000001000010000000000000000 +10100010001000010000100000000000 +01000100001000000000000000001011 +00101001011000100000000000000000 +01000001011000110000000000010000 +10111001100000000000100000000000 +00110100000011100000000000000000 +11111000000000000010010001110000 +01000001011000010000000000010000 +00110100000000100000000000000001 +10110101100000010000100000000000 +00110000001000100000000000000000 +11100000000000000000000000001101 +01000100010000010000000000000110 +01000001011000010000000000010000 +00110100001000010000000000000001 +01000101110000010000000000000110 +01000101101000000000000000000010 +01001001110000010000000000000110 +00110101011010110000000000010100 +01000001011000010000000000010000 +01011100001000001111111111011101 +10111001101000000111000000000000 +11100000000000000000000000000010 +00110100000011100000000000000001 +01000001011000100000000000010000 +00110100000000010000000000000000 +01000100010000000000000000110111 +01000001011000010000000000010001 +00110011100000100000000000110100 +01011011100011000000000000100100 +00110011100000010000000000110101 +00101001011000010000000000001100 +01011011100000010000000000110000 +01000101110000000000000000000100 +01000001100000010000000000000001 +00110100001000010000000000000001 +00110001100000010000000000000001 +01000001011000010000000000010000 +00101001011000110000000000000100 +00110111100100010000000000100100 +00110100001000010000000000000001 +10110101100000010000100000000000 +10111010001000000001000000000000 +11011000011000000000000000000000 +01100100001000110000000000000000 +10100000011011100111000000000000 +01000101110000000000000000011001 +00110101011010110000000000010100 +01000001011000110000000000010000 +00110100000000010000000000000000 +01000100011000000000000000011111 +00101001011000100000000000000000 +10111001100000000000100000000000 +11111000000000000010010001000001 +01000001011000010000000000010000 +00110100000000100000000000000001 +10110101100000010000100000000000 +00110000001000100000000000000000 +01000001011000100000000000010001 +01000001011000010000000000010000 +00101001011000110000000000000100 +00110011100000100000000000110101 +00101001011000100000000000001100 +00110011100000010000000000110100 +00110100001000010000000000000001 +01011011100000100000000000110000 +10110101100000010000100000000000 +10111010001000000001000000000000 +11011000011000000000000000000000 +01011100001000000000000000000011 +11100000000000000000000000001011 +01011100011011100000000000001001 +01001000000000010000000000001001 +01000001011000100000000000010000 +10111010000011010110100000000000 +00110100010000100000000000000001 +10110100001000100000100000000000 +01000101101000000000000000000100 +00110001111000100000000000000000 +11100000000000000000000000000010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000110100 +11000011101000000000000000000000 +00110111100111001111111111010000 +01011011100010110000000000110000 +01011011100011000000000000101100 +01011011100011010000000000101000 +01011011100011100000000000100100 +01011011100011110000000000100000 +01011011100100000000000000011100 +01011011100100010000000000011000 +01011011100100100000000000010100 +01011011100100110000000000010000 +01011011100101000000000000001100 +01011011100101010000000000001000 +01011011100111010000000000000100 +00100000100001000000000011111111 +01000000001100010000000000000000 +00100000010000100000000011111111 +00000000100011010000000000000011 +00110100010011100000000000000001 +00100000100011110000000000000100 +10111000001000001000000000000000 +11001010001000101000100000000000 +10110100001011100111000000000000 +00100001101011010000000000000001 +10111000011000000101100000000000 +00110100000011000000000000000000 +00100000100101010000000000000011 +00100000100101000000000000000001 +01111101111100110000000000000000 +11100000000000000000000000110100 +10111000101000001001000000000000 +01011101101000000000000000000101 +10111010001000001001000000000000 +01001100101100010000000000000010 +10111000101000001001000000000000 +00100010010100100000000011111111 +01000110101000000000000000000010 +01011110001001010000000000101011 +01011101101000000000000000001100 +00101001011000010000000000000000 +10111001110000000001000000000000 +10111010010000000001100000000000 +11111000000000000010001111010001 +00111100001011000000000000011000 +00010101100011000000000000011000 +01011101100011010000000000000110 +01000101111011000000000000001001 +01000001011000010000000000010000 +01011100001100100000000000000111 +11100000000000000000000000011111 +01000101100000000000000000000101 +01101001100000010000000000000000 +10100000001100110001000000000000 +01011100010000000000000000000010 +01000101101000100000000000011001 +01000101111000000000000000000111 +00101001011000100000000000000000 +01000001011000110000000000010000 +10111001110000000000100000000000 +11111000000000000010001111100001 +01000001011000010000000000010000 +00110010000000010000000000000000 +01000110100000000000000000001000 +00101001011000110000000000001000 +01000100011000000000000000010100 +01000001011000010000000000010000 +10111001011000000001000000000000 +10110101110000010000100000000000 +11011000011000000000000000000000 +01001000000000010000000000010010 +01000001011000010000000000010000 +00101001011000110000000000000100 +10111001011000000001000000000000 +10110101110000010000100000000000 +11011000011000000000000000000000 +01000100001000000000000000000101 +01000001011000100000000000010000 +10110100001000100000100000000000 +11100000000000000000000000001001 +01011100001011010000000000000111 +00110101011010110000000000010100 +01000001011001010000000000010000 +01011100101000001111111111001100 +11100000000000000000000000000011 +00110100000000011111111111111100 +11100000000000000000000000000010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000110000 +00101011100011000000000000101100 +00101011100011010000000000101000 +00101011100011100000000000100100 +00101011100011110000000000100000 +00101011100100000000000000011100 +00101011100100010000000000011000 +00101011100100100000000000010100 +00101011100100110000000000010000 +00101011100101000000000000001100 +00101011100101010000000000001000 +00110111100111000000000000110000 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +00110100001011010000000000000010 +00110000001000100000000000000000 +00110100000000010000000001000011 +10111000011000000101100000000000 +01010100010000010000000000001000 +00110100000000010000000001000001 +01010000010000010000000000001001 +00110100000000010000000000000010 +01000100010000010000000000000111 +00110100000000010000000000000100 +01011100010000010000000000101001 +11100000000000000000000000011100 +00110100000000010000000001000110 +01011100010000010000000000100110 +11100000000000000000000000001001 +00101001011000010000000000000000 +00110111100000100000000000011100 +00110100000000110000000000000100 +01011011100000010000000000011100 +10111001101000000000100000000000 +11111000000000000010001110011101 +00110100000000010000000000000100 +11100000000000000000000000001111 +01111000000000010000000000000001 +00111000001000011100001010001100 +01000000001000010000000000000000 +00110100000000100000000000000000 +01000100001000000000000000011001 +00101000011000010000000000000000 +00110111100000100000000000010100 +01011011100000010000000000010100 +00101000011000010000000000000100 +00110100000000110000000000001000 +01011011100000010000000000011000 +10111001101000000000100000000000 +11111000000000000010001110001110 +00110100000000010000000000001000 +00110001100000010000000000000001 +11100000000000000000000000001010 +10111000011000000000100000000000 +00110100000000100000000000011111 +11111000000000000010010101101011 +00100000001000110000000011111111 +00110001100000110000000000000001 +10111001101000000000100000000000 +10111001011000000001000000000000 +00110100011000110000000000000001 +11111000000000000010001110000010 +01000001100000100000000000000001 +00110100010000100000000000000010 +11100000000000000000000000000010 +00110100000000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +00101000010011010000000000001100 +10111000001000000111000000000000 +10111000010000000101100000000000 +00110100000000010000000000000001 +01111000000000100000000000000001 +00111000010000101011110010010000 +01000101101000010000000000000101 +00110100000001001111111111111101 +01011101101000000000000000101100 +01111000000000100000000000000001 +00111000010000101011110010010100 +00101001011000010000000000000000 +00110100000001010000000000000001 +00101000010000100000000000000000 +01000000001011000000000000000000 +01000000001000010000000000000001 +00110100000001000000000000000000 +01011100001001010000000000100011 +01001100001011000000000000100010 +00110100010000010000000000000010 +01001001100000010000000000100000 +00110100000000010000000000000010 +01011101100000010000000000000110 +00110100000000010000000010100011 +00110100000001001111111111111100 +01000100011000010000000000011011 +01011011100000100000000000011000 +11100000000000000000000000010100 +00110100000000010000000010100011 +01011100011000010000000000001100 +10111001110000000000100000000000 +10111001011000000001000000000000 +00110111100000110000000000011000 +11111011111111111111111001110111 +10111000001000000010000000000000 +01001100000000010000000000010001 +00101011100000100000000000011000 +00110101100000011111111111111101 +11111000000000000000100111110001 +00110100000001001111111111111011 +01001000000000010000000000001100 +00110101100000011111111111111101 +10111001101000000001000000000000 +00110111100000110000000000011000 +11111000000000000000100110100100 +00110100000001001111111111111011 +01001000000000010000000000000110 +01000001011000100000000000010001 +10111001110000000000100000000000 +00110111100000110000000000011000 +11111011111111111111111110000111 +10111000001000000010000000000000 +10111000100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000110000000010100011 +11111011111111111111111110111011 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000110000000010100000 +11111011111111111111111110110100 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000110000000000000 +00101000010000100000000000001100 +00110100000000110000000000000001 +10111000001000000110100000000000 +01000100010000110000000000011001 +00110100000000110000000000000010 +01011100010000110000000000110001 +01111000000000100000000000000001 +00111000010000101011110001101100 +00101000010000110000000000000000 +00101000011001010000000001010100 +00101000011001000000000001010000 +00111100101000100000000000000001 +00111100100001000000000000000001 +11110100101000100010100000000000 +11001000000000100001000000000000 +10110100101001000010000000000000 +01111100010001010000000000000000 +11001000000001000010000000000000 +11001000100001010010000000000000 +00101000011001010000000001000000 +00101000011000110000000001000100 +10110100100001010010000000000000 +10110100010000110001100000000000 +11110100010000110001000000000000 +01011011100000110000000000011100 +10110100010001000001000000000000 +01011011100000100000000000011000 +11100000000000000000000000010111 +01111000000000100000000000000001 +00111000010000101011110001101100 +00101000010000110000000000000000 +01111000000001010000000000000001 +00111000101001011000111010111000 +00101000011011100000000010101000 +00101100011010110000000010101100 +00101000011000100000000010100100 +00111101110000010000000000010000 +00101000101001000000000000000000 +10111000001010110101100000000000 +00101000011000010000000010100000 +00110100000000110000000000000000 +00010101110011100000000000010000 +11111000000000000010001000000010 +10110101011000100001000000000000 +11110101011000100101100000000000 +10110101110000010001100000000000 +10110101011000110001100000000000 +01011011100000110000000000011000 +01011011100000100000000000011100 +10111001101000000000100000000000 +01000001100000100000000000010001 +00110111100000110000000000011000 +11111011111111111111111100110100 +11100000000000000000000000000010 +00110100000000011111111111111111 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100111010000000000000100 +00101000010000110000000000001100 +01000000010001010000000000010001 +01000000010000100000000000010010 +00101000011000110000000000000000 +10110100011000100001000000000000 +00101000010001000000000000000000 +00101000010000110000000000000100 +01001000100000000000000000001110 +01011100100000000000000000000101 +01111000000001100000000000000001 +00111000110001101000111011101100 +00101000110000100000000000000000 +01010100011000100000000000001001 +00110100000000101111111111111111 +01001000010001000000000000001011 +01011100100000100000000000001011 +01111000000001000000000000000001 +00111000100001001000111011110000 +00101000100000100000000000000000 +01010100010000110000000000000110 +11100000000000000000000000000110 +01111000000001100000000000000001 +00111000110001101000111011000100 +00101000110000110000000000000000 +11100000000000000000000000000010 +01111000000000111000000000000000 +01011011100000110000000000001000 +10111000101000000001000000000000 +00110111100000110000000000001000 +11111011111111111111111100001011 +00101011100111010000000000000100 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000010001000000000000001100 +01000000010000110000000000010010 +01000000010000100000000000010001 +00101000100001000000000000000000 +10110100100000110001100000000000 +11111011111111111111111100000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000010001000000000000001100 +01000000010000110000000000010010 +01000000010000100000000000010001 +10110100100000110001100000000000 +11111011111111111111111011110110 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111110011000 +01011011100010110000000000110100 +01011011100011000000000000110000 +01011011100011010000000000101100 +01011011100011100000000000101000 +01011011100011110000000000100100 +01011011100100000000000000100000 +01011011100100010000000000011100 +01011011100100100000000000011000 +01011011100100110000000000010100 +01011011100101000000000000010000 +01011011100101010000000000001100 +01011011100101100000000000001000 +01011011100111010000000000000100 +10111000001000001000000000000000 +00101000010000010000000000000000 +10111000010000000111000000000000 +00110100000011010000000000000000 +01000000001101100000000000000001 +01000000001011000000000000000000 +00110100000010110000000000000001 +00110111100011110000000000111000 +00110100000101011111111111111111 +00110100000101000000000000000010 +00110100000100110000000000000011 +00110100000100100000000000000100 +00110100000100010000000000000101 +00100001101000110000000011111111 +10111001111000000000100000000000 +00110100000000100000000000000000 +11111000000000000001000101000001 +10111000001000000001100000000000 +01000100001000000000000000011100 +01000100001101010000000000011011 +01011110110010110000000000001101 +01011101100101000000000000001001 +00110111100010110000000001011000 +00110100000000110000000000010000 +10111001011000000000100000000000 +10111001111000000001000000000000 +11111000000000000010001010000001 +10111001011000000001100000000000 +00110011100000000000000001101000 +11100000000000000000000000001101 +01000101100100110000000000000111 +01000101100100100000000000001000 +01000101100100010000000000001001 +00110101011010110000000000000001 +00110101101011010000000000000001 +01001100011010111111111111101010 +11100000000000000000000000001010 +00110111100000110000000001001100 +11100000000000000000000000000100 +00110111100000110000000001010000 +11100000000000000000000000000010 +00110111100000110000000001001000 +01000001110000100000000000010001 +10111010000000000000100000000000 +11111011111111111111111010111000 +11100000000000000000000000000010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000110100 +00101011100011000000000000110000 +00101011100011010000000000101100 +00101011100011100000000000101000 +00101011100011110000000000100100 +00101011100100000000000000100000 +00101011100100010000000000011100 +00101011100100100000000000011000 +00101011100100110000000000010100 +00101011100101000000000000010000 +00101011100101010000000000001100 +00101011100101100000000000001000 +00110111100111000000000001101000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +00101000010000100000000000001100 +10111000001000000110000000000000 +00110100000000010000000000000001 +01011100010000010000000000001010 +00110100000000010000000000000000 +11111000000000000000010000101011 +00110100001000100000000000000001 +01011011100000100000000000010000 +01000001011000100000000000010001 +10111001100000000000100000000000 +00110111100000110000000000010000 +11111011111111111111111010010110 +11100000000000000000000000000010 +00110100000000011111111111111111 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00101000010010110000000000001100 +10111001011000000001100000000000 +11111011111111111111110101100111 +10111000001000000110000000000000 +01001100000000010000000000001010 +00101001011000100000000000000000 +00110100000000010000000000000001 +01011100010000010000000000000101 +11111011111111111100111110101110 +11111011111111111100111110000111 +00110100000000010000000001100100 +11100000000000000000000000000010 +00110100000000010000000011001000 +01011001011000010000000000000000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000010010110000000000001100 +10111001011000000001100000000000 +11111011111111111111110101001110 +10111000001000000110100000000000 +01001100000000010000000001010000 +00101001011000100000000000000000 +00110100000000010000000000000010 +01000100010000010000000000011110 +01001000010000010000000000000100 +00110100000000010000000000000001 +01011100010000010000000001001000 +11100000000000000000000000100000 +00110100000000010000000000000011 +01000100010000010000000000000100 +00110100000000010000000000110010 +01011100010000010000000001000011 +11100000000000000000000000111101 +01111000000000100000000000000001 +00111000010000101011110001110000 +00101000010000010000000000010100 +01111000000000110000000000000001 +00111000011000111011111100110000 +01011000011000010000000000000000 +00101000010000010000000000011000 +01111000000000110000000000000001 +00111000011000111011111100110100 +01011000011000010000000000000000 +00101000010000010000000000010000 +01111000000000110000000000000001 +00111000011000111010011111111000 +01011000011000010000000000000000 +01111000000000010000000000000001 +00111000001000011000011110001100 +11111000000000000000001001010011 +11111011111111111100111101111011 +11111011111111111100111101010100 +11100000000000000000000000101100 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011011110001110000 +00111000010000101011111110101100 +00110100000000110000000000010000 +11111000000000000010000111111110 +01111000000011000000000000000001 +00111001100011001011110001110000 +01000001100000010000000000000000 +01011100001000000000000000000011 +00110100000000010000000011001011 +11100000000000000000000000100011 +00110100000000100000000000010000 +10111001100000000000100000000000 +11111000000000000010001111011000 +10111000001000000001000000000000 +00110100000000110000000000001111 +00110100000000010000000000100000 +11100000000000000000000000000100 +10110100010011000010000000000000 +00110000100000010000000000000000 +00110100010000100000000000000001 +01001100011000101111111111111101 +00110100000000100000000000000001 +10111001100000000000100000000000 +00110100000000110000000000000000 +11111000000000000001000010011111 +10111000001000000001000000000000 +00110100000000011111111111111110 +01011100010000010000000000000011 +00110100000000010000000011001010 +11100000000000000000000000001111 +00110100000000011111111111111111 +01011100010000010000000000000011 +00110100000000010000000011001001 +11100000000000000000000000001011 +11111000000000000000100011111000 +01000100001000000000000000000110 +00110100000000010000000001100101 +11100000000000000000000000000111 +11111000000000000001000000110001 +00110100000000101111111111111111 +01000100001000100000000000000011 +00110100000000010000000001100100 +11100000000000000000000000000010 +00110100000000010000000011001000 +01011001011000010000000000000000 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111001000 +01011011100010110000000000100100 +01011011100011000000000000100000 +01011011100011010000000000011100 +01011011100011100000000000011000 +01011011100011110000000000010100 +01011011100100000000000000010000 +01011011100100010000000000001100 +01011011100100100000000000001000 +01011011100111010000000000000100 +10111000001000000111100000000000 +00101000010000010000000000000000 +10111000010000000110100000000000 +00110100000011000000000000000001 +01000000001100100000000000000001 +01000000001011100000000000000000 +00110100000000010000000000000000 +11111000000000000000110000010100 +10111000001000000010000000000000 +00110100000100010000000000000010 +00110100000100000000000000000011 +11100000000000000000000000100101 +01011110010011000000000000100000 +00101000100010110000000000000100 +01011101110100010000000000000111 +00101000100000110000000000000000 +01111000000000100000000000000001 +00110111100000010000000000101000 +00111000010000100111101111001100 +11111000000000000000000111101110 +11100000000000000000000000011111 +01011101110100000000000000010111 +01111000000000011000000000000000 +01011101011000010000000000000110 +01111000000000100000000000000001 +00110111100000010000000000101000 +00111000010000101000011110111000 +11111000000000000000000111100110 +11100000000000000000000000010111 +01001101011000000000000000000110 +01111000000000100000000000000001 +00110111100000010000000000101000 +00111000010000100111100100111000 +11001000000010110101100000000000 +11111000000000000000000111011111 +00100001011001001111111111111111 +00001000100001000010011100010000 +01111000000000100000000000000001 +00010101011000110000000000010000 +00000000100001000000000000010000 +00110111100000010000000000101000 +00111000010000101000011111000000 +11111000000000000000000111010111 +11100000000000000000000000001000 +10111000100000000000100000000000 +11111000000000000000101111101110 +10111000001000000010000000000000 +00110101100011000000000000000001 +01011100100000001111111111011100 +00110100000000010000000000000000 +11100000000000000000000000000101 +01000001101000100000000000010001 +10111001111000000000100000000000 +00110111100000110000000000101000 +11111011111111111111110111010110 +00101011100111010000000000000100 +00101011100010110000000000100100 +00101011100011000000000000100000 +00101011100011010000000000011100 +00101011100011100000000000011000 +00101011100011110000000000010100 +00101011100100000000000000010000 +00101011100100010000000000001100 +00101011100100100000000000001000 +00110111100111000000000000111000 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000010011010000000000001100 +10111000001000000110000000000000 +10111000010000000101100000000000 +00100001101000010000000000000010 +01000100001000000000000000001001 +11111000000000000000011110101111 +00110100000000100000000000001010 +11111000000000000010000100010100 +01011011100000010000000000011100 +01000001011000100000000000010001 +10111001100000000000100000000000 +00110111100000110000000000011100 +11100000000000000000000000010011 +00100001101000100000000000000100 +01000100010000010000000000000100 +00110111100000010000000000010100 +00110100000000100000000000000000 +11111000000000000000110010101000 +00100001101011010000000000000001 +01000101101000000000000000001001 +00101011100000100000000000011000 +00101011100000010000000000010100 +00110100000000110000000000000010 +11111011111111111111010011001010 +10111000001000000001100000000000 +01000001011000100000000000010001 +10111001100000000000100000000000 +11100000000000000000000000000100 +01000001011000100000000000010001 +10111001100000000000100000000000 +00110111100000110000000000010100 +11111011111111111111110110100110 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100111010000000000000100 +01111000000000010000000000000001 +00110100000000100000000000000000 +00110100000000110000000000000000 +00110100000001000000000010100001 +00111000001000011010000110011000 +11111011111111111111011010110101 +01111000000000100000000000000001 +00111000010000101011110001101000 +01011000010000010000000000000000 +01111000000000010000000000000001 +00111000001000011001100000011000 +00101000001000010000000000011000 +01111000000000100000000000000001 +00111000010000101011110001101100 +01111000000000110000000000000001 +01111000000001000000000000000001 +01011000010000010000000000000000 +00111000011000111011110010010100 +00110111100000010000000000001100 +00110111100000100000000000001000 +00111000100001001011110010010000 +11111000000000000000011110000101 +01000011100000110000000000001111 +01000011100000100000000000001011 +01111000000000010000000000000001 +00111000001000011010000110000000 +00110000001000110000000000001000 +00110000001000100000000000001001 +01111000000000010000000000000001 +00111000001000011010000110001100 +00110000001000110000000000001000 +00110000001000100000000000001001 +00101011100111010000000000000100 +00110111100111000000000000001100 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111011110110100100 +00101100011001010000000000000000 +01111000000001000000000000000001 +00111000100001001011110110111100 +00111100001000010000000000000001 +10110100100001010010000000000000 +00110100101001010000000000000010 +00110000100000010000000000000000 +00110000100000100000000000000001 +00001100011001010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111000000 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +00110100000000100000000000001000 +01010100001000100000000010111110 +00111100001000010000000000000010 +01111000000000100000000000000001 +00111000010000101001001110101100 +10110100010000010001000000000000 +00101000010000010000000000000000 +01111000000011000000000000000001 +00111001100011001011110110100100 +11000000001000000000000000000000 +00110100000000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111111100010 +11100000000000000000000010101100 +00110100000000010000000000000001 +00110100000000100000000000000111 +11111011111111111111111111011110 +00101101100000100000000000000000 +01111000000000010000000000000001 +00111000001000011011110110111100 +10110100001000100000100000000000 +00110100000000100000000000000100 +11100000000000000000000000001001 +00110100000000010000000000000010 +00110100000000100000000000000111 +11111011111111111111111111010101 +00101101100000100000000000000000 +01111000000000010000000000000001 +00111000001000011011110110111100 +10110100001000100000100000000000 +00110100000000100000000000000011 +00110000001000100000000000000000 +00110100001000010000000000000001 +11111000000000000000001010001011 +00110100000010110000000000000111 +11100000000000000000000010010111 +00110100000000010000000000000011 +00110100000000100000000000000010 +11111011111111111111111111001000 +00101101100000100000000000000000 +01111000000000010000000000000001 +00111000001000011011110110111100 +10110100001000100000100000000000 +00110100000000100000000000101000 +00110000001000000000000000000000 +00110000001000100000000000000001 +00110100000010110000000000000010 +11100000000000000000000010001011 +01111000000011010000000000000001 +00111001101011011000011101001100 +10111001101000000000100000000000 +11111000000000000010001000100000 +00110100001010110000000000000001 +00100001011000100000000011111111 +00110100000000010000000000000100 +11111011111111111111111110110111 +00101101100000100000000000000000 +01111000000000010000000000000001 +00111000001000011011110110111100 +10110100010000010000100000000000 +10111001101000000001000000000000 +11111000000000000010000111110010 +11100000000000000000000001111100 +00110111100000010000000001000000 +11111011111111111111011111001101 +01111000000000100000000000000001 +00110111100000010000000001000000 +00111000010000101000111110000000 +00110100000000110000000000000100 +01111000000011000000000000000001 +01111000000011100000000000000001 +11111000000000000010000010110111 +00111001100011001011110110100100 +00111001110011101011110110111100 +00110111100011010000000000011000 +01000100001000000000000000001101 +00110111100000100000000001000000 +10111001101000000000100000000000 +11111011111111111111001100001100 +10111001101000000000100000000000 +11111000000000000010001000000011 +10111000001000000101100000000000 +00101101100000010000000000000000 +10111001101000000001000000000000 +00110100001000010000000000000010 +10110100001011100000100000000000 +11111000000000000010000111011001 +11100000000000000000000000010100 +00110111100000010000000000111000 +11111000000000000000001001010011 +01000011100000110000000000111000 +01000011100001000000000000111001 +01000011100001010000000000111010 +01000011100001100000000000111011 +01000011100001110000000000111100 +01000011100010000000000000111101 +01111000000000100000000000000001 +00111000010000101000000101000000 +10111001101000000000100000000000 +11111000000000000000000011111010 +00101101100000010000000000000000 +10111001101000000001000000000000 +00110100000000110000000000010001 +00110100001000010000000000000010 +10110100001011100000100000000000 +11111000000000000010001001100110 +00110100000010110000000000010001 +00110100000000010000000000000101 +00100001011000100000000011111111 +11100000000000000000000000100110 +00101101100011100000000000000000 +01111000000011010000000000000001 +00111001101011011011110110111100 +00110101110011100000000000000010 +01111000000010110000000000000001 +10110101110011010111000000000000 +00111001011010111100001001110100 +00110100000000110000000000000100 +10111001011000000001000000000000 +10111001110000000000100000000000 +11111000000000000010001001010111 +10111001011000000000100000000000 +00110100000000100000000000000100 +11111000000000000010001010000111 +10110101110000010101100000000000 +01111000000000100000000000000001 +10111001011000000000100000000000 +00111000010000100111111001011100 +01111000000011100000000000000001 +11111000000000000010000110101110 +00111001110011101001011011011000 +00101001110000100000000000000000 +00110101011010110000000000000010 +10111001011000000000100000000000 +00110100000000110000000000100000 +11111000000000000010001001001000 +00101001110000010000000000000000 +00110100000000100000000000100000 +11111000000000000010001001111000 +10110101011000010000100000000000 +00101101100010110000000000000000 +00110101011010110000000000000010 +10110101011011010101100000000000 +11001000001010110101100000000000 +00100001011010110000000011111111 +00110100000000010000000000000110 +10111001011000000001000000000000 +11111011111111111111111101011011 +11100000000000000000000000100110 +01111000000000100000000000000001 +00110111100000010000000001000000 +00111000010000101000111110000000 +00110100000000110000000000000100 +11111000000000000010000001100101 +00110100000010110000000000000000 +01000100001000000000000000011111 +00110100000000010000000000001000 +00110100000000100000000000001100 +01111000000011000000000000000001 +11111011111111111111111101001111 +00111001100011001011110110100100 +00101101100000010000000000000000 +01111000000010110000000000000001 +00111001011010111011110110111100 +10110101011000010000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000010 +00110000001000100000000000000000 +00110100000000100000000000000001 +00110000001000110000000000000110 +00110000001000100000000000000001 +00110000001000100000000000001010 +00110111100000010000000001000000 +11111011111111111111011101100000 +00110111100000100000000001000000 +00110111100000010000000000011000 +11111011111111111111001010101010 +00101101100000010000000000000000 +00110111100000100000000001000000 +00110100000000110000000000000100 +00110100001000010000000000000010 +10110101011000010000100000000000 +11111000000000000010000001101001 +00110100000010110000000000001100 +11100000000000000000000000000010 +00110100000010110000000000000000 +01111000000000010000000000000001 +00111000001000011011110110100100 +00101100001000100000000000000000 +10110101011000100101100000000000 +00001100001010110000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000001000000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00110100000000100000000000000000 +00110100000000110000000010011110 +00111000001000011011110110111100 +11111000000000000010000011001111 +01111000000000010000000000000001 +00111000001000011011110110100100 +00001100001000000000000000000000 +01111000000000010000000000000001 +00111000001000011000011111101000 +11111000000000000000000010010111 +00110100000010110000000000000001 +00110100000011000000000000001001 +10111001011000000000100000000000 +00110101011010110000000000000001 +11111011111111111111111100100001 +01011101011011001111111111111101 +00110100000000010000000000000000 +11111011111111111111111100011110 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011011111001101000 +00101000001000100000000000000000 +00110100000000110010011100010000 +01001100011000100000000000110100 +00110111100011000000000000010000 +10111001100000000000100000000000 +11111000000000000000000110111111 +00110111100010110000000000010111 +10111001011000000000100000000000 +11111011111111111111011100011101 +01111000000000100000000000000001 +00110100000000110000000000000110 +10111001100000000000100000000000 +00111000010000101011111001011100 +11111000000000000010000000001001 +10111000001000000001100000000000 +01011100001000000000000000001011 +01111000000000100000000000000001 +00111000010000101011100011101000 +00101000010000010000000000000000 +01000100001000110000000000010010 +01111000000000100000000000000001 +10111001011000000000100000000000 +00111000010000101011111001100100 +00110100000000110000000000000100 +11111000000000000001111111111110 +01000100001000000000000000001100 +11111011111111111111111111000100 +01111000000000010000000000000001 +00110111100000100000000000010000 +00110100000000110000000000000110 +00111000001000011011111001011100 +11111000000000000010000000011000 +01111000000000010000000000000001 +00111000001000011011111001100100 +00110111100000100000000000010111 +00110100000000110000000000000100 +11111000000000000010000000010011 +01111000000000010000000000000001 +01111000000001000000000000000001 +00111000001000011011110110100000 +00111000100001001011110110100100 +00101000001000010000000000000000 +00101100100001000000000000000000 +01111000000000100000000000000001 +01111000000000110000000000000001 +00111000010000101011110110101000 +00111000011000111011110110111100 +00110100000001010000000000000000 +11111011111111111111011010000011 +01111000000000010000000000000001 +00111000001000011011111001101000 +01011000001000000000000000000000 +00110100000000010000000000000001 +11100000000000000000000000000100 +00110100010000100000000000000001 +01011000001000100000000000000000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000001000 +01011011100111010000000000000100 +00110111100010110000000000001100 +10111001011000000000100000000000 +00110100000000100000000000000000 +00110100000000110000000000010010 +11111000000000000010000001110000 +00110100000000011000100011001100 +00001111100000010000000000011000 +01111000000000010000000000000001 +00110100000001000000000000000000 +10111001011000000001000000000000 +00110100000000110000000000000001 +00111000001000011011111001101100 +11111011111111111111010101010000 +01111000000000100000000000000001 +01111000000010110000000000000001 +00111001011010111011110110101000 +00111000010000101011110110100000 +01011000010000010000000000000000 +00110100000000110000000000010010 +10111001011000000000100000000000 +00110100000000100000000000000000 +11111000000000000010000001011111 +01111000000000100000000000000001 +00111000010000101000111110001000 +00110100000000110000000000000110 +10111001011000000000100000000000 +11111000000000000001111111011100 +11111011111111111111111110000010 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +10111000001000000010000000000000 +00111001011010111011111010100000 +10111000010000000001100000000000 +10111001011000000000100000000000 +10111000100000000001000000000000 +11111000000000000000000000100111 +10111000001000000110000000000000 +10111001011000000000100000000000 +11111000000000000000000100001100 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100111010000000000000100 +01011011100000110000000000001100 +00110111100000110000000000001100 +01011011100000100000000000001000 +01011011100001000000000000010000 +01011011100001010000000000010100 +01011011100001100000000000011000 +01011011100001110000000000011100 +01011011100010000000000000100000 +11111000000000000000000000010011 +00101011100111010000000000000100 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111011100 +01011011100111010000000000000100 +01011011100000100000000000001100 +00110111100000100000000000001100 +01011011100000010000000000001000 +01011011100000110000000000010000 +01011011100001000000000000010100 +01011011100001010000000000011000 +01011011100001100000000000011100 +01011011100001110000000000100000 +01011011100010000000000000100100 +11111011111111111111111111010011 +00101011100111010000000000000100 +00110111100111000000000000100100 +11000011101000000000000000000000 +00110111100111001111111110011100 +01011011100010110000000001000100 +01011011100011000000000001000000 +01011011100011010000000000111100 +01011011100011100000000000111000 +01011011100011110000000000110100 +01011011100100000000000000110000 +01011011100100010000000000101100 +01011011100100100000000000101000 +01011011100100110000000000100100 +01011011100101000000000000100000 +01011011100101010000000000011100 +01011011100101100000000000011000 +01011011100101110000000000010100 +01011011100110000000000000010000 +01011011100110010000000000001100 +01011011100110110000000000001000 +01011011100111010000000000000100 +01111000000101100000000000000001 +10111000001000001100100000000000 +10111000010000001010000000000000 +10111000001000001001100000000000 +00110100000110000000000000100101 +00110100000010010000000001101001 +00110100000010000000000001110000 +00110100000001110000000001011000 +00110100000110110000000000101010 +00110100000010100000000000110000 +00110100000101110000000000010000 +00110111100101010000000001011000 +00111010110101101000100000000000 +11100000000000000000000010010110 +00110100000011110000000000000000 +00110100000100010000000000100000 +00110100000011010000000000001010 +01000100001110000000000000000100 +00110010011000010000000000000000 +11100000000000000000000000111100 +00110100000100010000000000110000 +00110110100101000000000000000001 +01000010100000010000000000000000 +01000100001010010000000001000000 +01010100001010010000000000001111 +01000100001001110000000000111011 +01010100001001110000000000001000 +01000100001110110000000000011010 +01010100001110110000000000000100 +01000100001000000000000010001000 +01011100001110000000000000011010 +11100000000000000000000000101111 +01011100001010100000000000011000 +11100000000000000000000000010110 +00110100000000100000000001100011 +01000100001000100000000000011100 +00110100000001000000000001100100 +01011100001001000000000000010011 +11100000000000000000000000110001 +01000100001010000000000000101101 +01010100001010000000000000000110 +00110100000000100000000001101110 +01000100001000100000000001111000 +00110100000001000000000001101111 +01011100001001000000000000001100 +11100000000000000000000000100100 +00110100000000100000000001110101 +01000100001000100000000000101000 +00110100000001000000000001111000 +01000100001001000000000000100011 +00110100000000100000000001110011 +01011100001000100000000000000101 +11100000000000000000000000010000 +00101000011011010000000000000000 +00110100011000110000000000000100 +01000101111000001111111111011101 +00110100001000011111111111010000 +00100000001000100000000011111111 +00110100000001000000000000001001 +01010100010001001111111111011010 +00001001111011110000000000001010 +10110100001011110111100000000000 +11100011111111111111111111010111 +00101000011000010000000000000000 +00110100011000110000000000000100 +00110010011000010000000000000000 +00110110011100110000000000000001 +11100000000000000000000001011111 +10111000011000000000100000000000 +00101000001000010000000000000000 +00110100011000110000000000000100 +11100000000000000000000000000100 +00110010011000100000000000000000 +00110100001000010000000000000001 +00110110011100110000000000000001 +01000000001000100000000000000000 +01011100010000001111111111111100 +11100000000000000000000001010101 +00110010011110000000000000000000 +00110110011100110000000000000001 +11100000000000000000000001010010 +00110100000000010000000000001010 +01000101101000010000000000000100 +11100000000000000000000000000100 +00110100000011010000000000010000 +11100000000000000000000000000010 +00110100000011010000000000001000 +00101000011001010000000000000000 +00110100011100100000000000000100 +10111000101000000111000000000000 +01011101111000000000000000000010 +00110100000011110000000000000001 +00000000101001100000000000011111 +01100101101000110000000000001010 +00110100000100000000000000000000 +10100000110000110001100000000000 +01000100011000000000000000000011 +11001000000001010111000000000000 +00110100000100000000000000000001 +00110100000011000000000000010000 +11100000000000000000000000010101 +10111001110000000000100000000000 +10111001101000000001000000000000 +01011011100001110000000001001100 +01011011100010000000000001010000 +01011011100010010000000001010100 +01011011100010100000000001001000 +11111000000000000001111011010111 +10110110110000010001100000000000 +01000000011000110000000000000000 +00110101100011001111111111111111 +10110110101011000101100000000000 +10111001110000000000100000000000 +00110001011000110000000000000000 +10111001101000000001000000000000 +11111000000000000001111010111111 +00101011100010100000000001001000 +00101011100010010000000001010100 +00101011100010000000000001010000 +00101011100001110000000001001100 +10111000001000000111000000000000 +01111101100001000000000000000000 +01111101110000110000000000000000 +10100000100000110001100000000000 +01011100011000001111111111101001 +01011101100101110000000000000100 +00110100000000100000000000110000 +00110011100000100000000001100111 +00110100000011000000000000001111 +01100110001000100000000000100000 +10100010000000100001000000000000 +01000100010000000000000000001011 +00110101100011001111111111111111 +10110110101011000001000000000000 +00110100000000110000000000101101 +00110000010000110000000000000000 +00110100000100000000000000000000 +11100000000000000000000000000101 +00110101100011001111111111111111 +10110110101011000001000000000000 +00110000010100010000000000000000 +11100000000000000000000000000011 +11001010111011110000100000000000 +10110100001100000000100000000000 +01001001100000011111111111111010 +01000110000000000000000000000101 +00110101100011001111111111111111 +10110110101011000000100000000000 +00110100000000100000000000101101 +00110000001000100000000000000000 +11001010111011000001100000000000 +10111010011000000000100000000000 +00110100000001000000000000001111 +11100000000000000000000000000110 +10110110101011000001000000000000 +01000000010000100000000000000000 +00110101100011000000000000000001 +00110000001000100000000000000000 +00110100001000010000000000000001 +01001100100011001111111111111011 +10110110011000111001100000000000 +10111010010000000001100000000000 +00110110100101000000000000000001 +01000010100000010000000000000000 +01011100001000001111111101101010 +11001010011110010000100000000000 +00110010011000000000000000000000 +00101011100111010000000000000100 +00101011100010110000000001000100 +00101011100011000000000001000000 +00101011100011010000000000111100 +00101011100011100000000000111000 +00101011100011110000000000110100 +00101011100100000000000000110000 +00101011100100010000000000101100 +00101011100100100000000000101000 +00101011100100110000000000100100 +00101011100101000000000000100000 +00101011100101010000000000011100 +00101011100101100000000000011000 +00101011100101110000000000010100 +00101011100110000000000000010000 +00101011100110010000000000001100 +00101011100110110000000000001000 +00110111100111000000000001100100 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011100001001111100 +00101000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011100001010100100 +01011000001000100000000000000000 +00110100000000010000001111000110 +01011000010000010000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00110100000000010000000000001010 +01011101011000010000000000000011 +00110100000000010000000000001101 +11111011111111111111111111111001 +01111000000000100000000000000001 +00111000010000101100001010100100 +00101000010000100000000000000000 +00101000010000010000000000000000 +00100000001000010000000000000001 +01011100001000001111111111111110 +01011000010010110000000000001000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +10111000001000000101100000000000 +11100000000000000000000000000100 +10111000010000000000100000000000 +00110101011010110000000000000001 +11111011111111111111111111100100 +01000001011000100000000000000000 +01011100010000001111111111111100 +11001001011011000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011100001010100100 +00101000001000100000000000000000 +00110100000000011111111111111111 +00101000010000110000000000000000 +00100000011000110000000000000010 +01000100011000000000000000000011 +00101000010000010000000000001100 +00100000001000010000000011111111 +11000011101000000000000000000000 +01111000000000100000000000000001 +00010100001000010000000000000010 +00111000010000101100001010100000 +00101000010000100000000000000000 +00100000001000010000000011111111 +00111100001000010000000000010000 +01011000010000010000000000101100 +00101000010000010000000000110000 +01001100001000001111111111111111 +00101000010000010000000000110000 +00100000001000011111111111111111 +11000011101000000000000000000000 +00010100001000010000000000000010 +01111000000000110000000000000001 +00111000011000111100001010100000 +00100000001000010000000011111111 +00101000011000110000000000000000 +00100000010000101111111111111111 +01111000000001001000000000000000 +00111100001000010000000000010000 +10111000010001000001000000000000 +10111000010000010001000000000000 +01011000011000100000000000101100 +00101000011000010000000000110000 +01001100001000001111111111111111 +11000011101000000000000000000000 +01000000001001000000000000000010 +01000000001000110000000000000011 +01111000000000100000000000000001 +00111100100001000000000000011000 +00111100011000110000000000010000 +00111000010000101100001010100000 +10111000100000110001100000000000 +01000000001001000000000000000101 +00101000010000100000000000000000 +10111000011001000001100000000000 +01000000001001000000000000000100 +00111100100001000000000000001000 +10111000011001000001100000000000 +01011000010000110000000000101000 +01000000001000110000000000000001 +01000000001000010000000000000000 +00111100001000010000000000001000 +10111000011000010000100000000000 +01011000010000010000000000100100 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101100001010100000 +00101000010000110000000000000000 +00101000011000110000000000101000 +00110000001000110000000000000101 +00101000010000110000000000000000 +00101000011000110000000000101000 +00000000011000110000000000001000 +00110000001000110000000000000100 +00101000010000110000000000000000 +00101000011000110000000000101000 +00000000011000110000000000010000 +00110000001000110000000000000011 +00101000010000110000000000000000 +00101000011000110000000000101000 +00000000011000110000000000011000 +00110000001000110000000000000010 +00101000010000110000000000000000 +00101000011000110000000000100100 +00110000001000110000000000000001 +00101000010000100000000000000000 +00101000010000100000000000100100 +00000000010000100000000000001000 +00110000001000100000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +10111000010000000110000000000000 +00111001011010111100001010100000 +01011100001000000000000000000100 +00101001011000010000000000000000 +01011000001000000000000000000000 +11100000000000000000000000100010 +00101001011000010000000000000000 +01011000001000000000000000000000 +00101000001000100000000000110100 +01111000000000010000000000000001 +00111000001000011000100000010100 +11111011111111111111111010010110 +11111000000000000000000010111110 +00101001011000010000000000000000 +00110100000000100000000011100000 +01011000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011011111100100000 +00110100000000100000100000000000 +01011000001011000000000000000000 +00110100000000010000000000000000 +11111011111111111111111110101011 +00110100000000010000000011001000 +11111000000000000000010001111011 +00110100000000010000000000000000 +00111000000000101000000000000000 +11111011111111111111111110100110 +00110100000000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111110100011 +00110100000000010000000000010000 +00110100000000100000000000000000 +11111011111111111111111110100000 +01111101100000100000000000000000 +00110100000000010000000000000000 +11001000000000100001000000000000 +00100000010000100001001000000000 +00110100010000100000000101000000 +11111011111111111111111110011010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000000100000000000000001 +00111000010000101011111100100000 +00101000010010110000000000000000 +10111000001000000110000000000000 +00110100000000010000000000000100 +11111011111111111111111101111110 +01111101011010110000000000000000 +00001111100000010000000000010010 +00110100000000010000000000000100 +11001000000010110101100000000000 +11111011111111111111111101111001 +00100001011010110000000000100000 +00001111100000010000000000010010 +00110101011010110000000000000100 +01000101100000000000000000000100 +00110100000000010000000000010100 +11111011111111111111111101110011 +00001101100000010000000000000000 +00101111100000010000000000010010 +10100001011000010000100000000000 +11100100001010110000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000010000000001000000 +11111011111111111111111101100110 +00000000001000010000000000000100 +00100000001000010000000000011111 +00001000001000010000001100100000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +00111000011000111011111100110000 +10111000010000000101100000000000 +00101000011000100000000000000000 +01011000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011011111100110100 +00101000001011000000000000000000 +00110100000000010000000001000000 +11111011111111111111111101010010 +00000000001000010000000000000100 +00100000001000010000000000011111 +00001000001000010000001100100000 +10110100001011000000100000000000 +01011001011000010000000000000000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000010000000001000000 +11111011111111111111111101000011 +00111000001000100000000000000001 +00110100000000010000000001000000 +11111011111111111111111101001100 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000010000000001000000 +11111011111111111111111100111000 +00110100000000101111111111111110 +10100000001000100001000000000000 +00110100000000010000000001000000 +11111011111111111111111101000000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111100001010100000 +00101001011000010000000000000000 +00101000001000100000000000000100 +00111000010000100000000000010000 +01011000001000100000000000000100 +00110100000000010000000000000001 +11111000000000000000010000000011 +00101001011000010000000000000000 +00101000001000010000000000000100 +00100000001000010000000000100000 +01111100001000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00110100000000010000000001000100 +11111011111111111111111100010111 +00111000001000100000000000100000 +01000101011000000000000000000011 +00110100000000101111111111011111 +10100000001000100001000000000000 +00110100000000010000000001000100 +11111011111111111111111100011101 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000100000000000000001 +00111000010000101011111110010000 +00101000010000100000000000000000 +01111000000010110000000000000001 +00111001011010111100001010100000 +01011001011000100000000000000000 +11111011111111111111111100011100 +00110100000000010000000000000001 +11111011111111111111111111100100 +01111000000000100000000000000001 +00111000010000101000111011110100 +00101000010000010000000000000000 +01111000000001000000000000000001 +00111000100001001000111011111000 +01011000001000000000000000000000 +00101001011000010000000000000000 +00101000100000110000000000000000 +00110100000000100000000000000011 +01011000001000000000000000000000 +01011000001000100000000000001100 +01011000001000110000000000001000 +01111000000000110000000000000001 +00111000011000111000111011111100 +01011000001000100000000000000100 +00101000011000100000000000000000 +01011000001000100000000000111100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011001011011110100 +00101000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011010011111010000 +01000100010000000000000000000011 +01111000000000010000000000000001 +00111000001000011010011111011000 +00101000001010110000000000000000 +01011101011000000000000000000100 +01111000000000010000000000000001 +00111000001000011000100000011100 +11100000000000000000000000110110 +01111000000000110000000000000001 +00111000011000111000111100000000 +00101000001011000000000000000100 +00101001011000100000000000000000 +00101000011000010000000000000000 +01000100010000010000000000010001 +10111001011000000000100000000000 +01111000000001000000000011111111 +11100000000000000000000000001101 +00101000001000110000000000000000 +00111100011001100000000000011000 +00000000011001010000000000011000 +10111000110001010010100000000000 +10100000011001000011000000000000 +00000000110001100000000000001000 +00100000011000111111111100000000 +00111100011000110000000000001000 +10111000101001100010100000000000 +10111000101000110001100000000000 +01011000001000110000000000000000 +00110100001000010000000000000100 +01010101100000011111111111110100 +01111000000001000000000000000001 +00111000100001001000111100000000 +00101001011000110000000000000000 +00101000100000010000000000000000 +01000100011000010000000000000101 +01111000000000010000000000000001 +00111000001000011000100000110100 +11111011111111111111110110101000 +11100000000000000000000010101011 +01111000000000010000000000000001 +00111000001000011011111100100100 +00101000001000100000000000000000 +00110101011010110000000000000100 +01011100010000000000000000010110 +00101001011000110000000000001000 +00110100000000100001001000110100 +00000000011000110000000000001101 +00100000011000111111111111111111 +01011100011000100000000000001011 +00101001011000110000000000010000 +00110100000000100101011001111000 +00000000011000110000000000001101 +00100000011000111111111111111111 +01011100011000100000000000000110 +00101001011000110000000000011000 +00110100010000100100010001000100 +00000000011000110000000000001101 +00100000011000111111111111111111 +01000100011000100000000000000101 +01111000000000010000000000000001 +00111000001000011000100001011100 +11111011111111111111110110010000 +11100000000000000000000010010011 +00110100000000100000000000000001 +01011000001000100000000000000000 +00110111100000010000000000010100 +11111011111111111111111011001100 +01111000000001100000000000000001 +00111000110001101000111100000100 +00101000110001010000000000000000 +00101001011001110000000000001000 +00101001011001100000000000010000 +00101001011000010000000000011000 +10100000111001010011100000000000 +10100000110001010011000000000000 +10100000001001010000100000000000 +01011001011001110000000000001000 +01011001011001100000000000010000 +01011001011000010000000000011000 +01000011100010000000000000010100 +01000011100010010000000000010101 +00110101011001000000000000001000 +00111101000010000000000000001000 +00110101011000110000000000010000 +10111001000010010100000000000000 +00111101000010000000000000001101 +00110101011000100000000000011000 +10111000111010000011100000000000 +01011001011001110000000000001000 +01000011100001110000000000010110 +01000011100010000000000000010111 +00111000000010011100101011111110 +00111100111001110000000000001000 +10111000111010000011100000000000 +00111100111001110000000000001101 +00110100000010000000000000000001 +10111000110001110011000000000000 +01011001011001100000000000010000 +01000011100001100000000000011000 +01000011100001110000000000011001 +00111100110001100000000000001000 +10111000110001110011000000000000 +00111100110001100000000000001101 +10111000001001100000100000000000 +01111000000001100000000000000001 +00111000110001101000111100001000 +01011001011000010000000000011000 +00101000110001110000000000000000 +10111001011000000000100000000000 +11100000000000000000000000001011 +00101000001001100000000000000000 +00000000110010100000000000001101 +00100001010010101111111111111111 +01011101010010010000000000000110 +00100000110010100000000000000111 +01011101010010000000000000000100 +10100000110001010011000000000000 +10111000110001110011000000000000 +01011000001001100000000000000000 +00110100001000010000000000001000 +01010101100000011111111111110110 +01111000000001110000000000000001 +00111000111001111000111100000100 +01111000000001100000000000000001 +10111001011000000000100000000000 +00110100000001010000000000000000 +00110100000010100000101010101010 +00110100000010010000000000000111 +00101000111010000000000000000000 +00111000110001101001011011110100 +11100000000000000000000000010000 +00101000001001110000000000000000 +00000000111011010000000000001101 +00100001101011011111111111111111 +01011101101010100000000000001011 +00000000111011010000000000000111 +00100001101011010000000000011111 +01011101101010010000000000001000 +10100000111010000011100000000000 +01011000001001110000000000000000 +00101000110001010000000000000000 +00111100101001010000000000001101 +10111000101001110011100000000000 +01011000001001110000000000000000 +10111000001000000010100000000000 +00110100001000010000000000001000 +01010101100000011111111111110001 +01111000000000010000000000000001 +00111000001000011100001010100000 +00101000001000010000000000000000 +00110100000001100000000000000000 +01011000001000000000000000010100 +11100000000000000000000000001111 +00101001011001110000000000000000 +00101001011010010000000000000100 +00110101011010110000000000001000 +00100000111010000000111111111111 +00111101001010010000000000010100 +00000000111001110000000000001100 +01011000001010000000000000011000 +10111001001001110011100000000000 +00111100111001110000000000001000 +00100000110010010000000000111111 +00111000111001110000000001000000 +10111000111010010011100000000000 +01011000001001110000000000010100 +00110100110001100000000000000001 +01010101100010111111111111110010 +01000100101000000000000000001011 +01111000000010000000000000000001 +00111001000010001000111100000100 +00101000101001110000000000000000 +00101001000001100000000000000000 +01111000000010000000000000000001 +00111001000010001000111100001100 +10100000111001100011000000000000 +00101001000001110000000000000000 +10111000110001110011000000000000 +01011000101001100000000000000000 +01111000000001110000000000000001 +00111000111001111000111100000100 +00101000100001100000000000000000 +00101000111001010000000000000000 +01111000000010000000000000000001 +00111001000010001000111100010000 +10100000110001010011000000000000 +01011000100001100000000000000000 +00101000011001100000000000000000 +10100000110001010011000000000000 +01011000011001100000000000000000 +00101000010001100000000000000000 +10100000110001010010100000000000 +01011000010001010000000000000000 +00101000100001100000000000000000 +00101001000001010000000000000000 +10111000110001010010100000000000 +01011000100001010000000000000000 +00101000011001010000000000000000 +01111000000001000000101011001111 +10111000101001000010000000000000 +01111000000001010000000000000001 +01011000011001000000000000000000 +00111000101001011000111100010100 +00101000010001000000000000000000 +00101000101000110000000000000000 +10111000100000110001100000000000 +01011000010000110000000000000000 +00110100000000100000000010000000 +01011000001000100000000000010100 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111100001010011100 +01000100010000000000000000000100 +00101000011000100000000000000000 +01011000010000010000000000000100 +11000011101000000000000000000000 +00101000011000100000000000000000 +01011000010000010000000000001000 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111100001010011100 +01000100010000000000000000000100 +00101000011000100000000000000000 +01011000010000010000000000000100 +11000011101000000000000000000000 +00101000011000100000000000000000 +01011000010000010000000000001000 +11000011101000000000000000000000 +00110100000000100000000000000000 +11100000000000000000000000000011 +00110100000000000000000000000000 +00110100010000100000000000000001 +01011100010000011111111111111110 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00100000001000010000000011111111 +00001000001010110000000000001100 +01111000000000100000000000000001 +00111000010000101010011111100000 +10110100010010110101100000000000 +00101001011000010000000000000100 +00110100000000100000000000000000 +11111011111111111111111111011110 +00101001011000010000000000001000 +11111011111111111111111111101110 +00101001011000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111111011001 +00101001011000010000000000001000 +11111011111111111111111111101001 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00100000001000010000000011111111 +00001000001010110000000000001100 +01111000000000100000000000000001 +00111000010000101010011111100000 +10110100010010110101100000000000 +00101001011000010000000000000100 +00110100000000100000000000000001 +11111011111111111111111111001000 +00101001011000010000000000001000 +11111011111111111111111111011000 +00101001011000010000000000000000 +00110100000000100000000000000001 +11111011111111111111111111000011 +00101001011000010000000000001000 +11111011111111111111111111010011 +00101001011000010000000000000100 +00110100000000100000000000000000 +11111011111111111111111110111110 +00101001011000010000000000001000 +11111011111111111111111111001110 +00101001011000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111110111001 +00101001011000010000000000001000 +11111011111111111111111111001001 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00100000001000010000000011111111 +00001000001010110000000000001100 +01111000000000100000000000000001 +00111000010000101010011111100000 +10110100010010110101100000000000 +00101001011000010000000000000100 +00110100000000100000000000000000 +11111011111111111111111110101000 +00101001011000010000000000001000 +11111011111111111111111110111000 +00101001011000010000000000000000 +00110100000000100000000000000001 +11111011111111111111111110100011 +00101001011000010000000000001000 +11111011111111111111111110110011 +00101001011000010000000000000100 +00110100000000100000000000000001 +11111011111111111111111110011110 +00101001011000010000000000001000 +11111011111111111111111110101110 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00100000001000010000000011111111 +00001000001010110000000000001100 +01111000000000110000000000000001 +00111000011000111010011111100000 +00100000010011110000000011111111 +00110100000011100000000000001000 +10110100011010110101100000000000 +00101001011000010000000000000100 +00100001111000100000000010000000 +00110101110011101111111111111111 +11111011111111111111111110000110 +00101001011000010000000000001000 +00111101111011110000000000000001 +00100001110011100000000011111111 +11111011111111111111111110010100 +00101001011000010000000000000000 +00110100000000100000000000000001 +00110101011011010000000000000100 +11111011111111111111111101111110 +00101001011000010000000000001000 +00110101011011000000000000001000 +00100001111011110000000011111111 +11111011111111111111111110001100 +00101001011000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111101110111 +00101001011000010000000000001000 +11111011111111111111111110000111 +01011101110000001111111111101011 +00101001101000010000000000000000 +00110100000000100000000000000001 +11111011111111111111111101110001 +00101001100000010000000000000000 +11111011111111111111111110000001 +00101001011000010000000000000000 +00110100000000100000000000000001 +11111011111111111111111101101100 +00101001100000010000000000000000 +11111011111111111111111101111100 +01111000000000010000000000000001 +00111000001000011100001010011100 +00101000001000010000000000000000 +00101001101011100000000000000000 +00110100000000100000000000000000 +00101000001000010000000000000100 +10100000001011100111000000000000 +00101001011000010000000000000000 +11111011111111111111111101100001 +00101001100000010000000000000000 +11111011111111111111111101110001 +00101001101000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111101011100 +00101001100000010000000000000000 +11111011111111111111111101101100 +01111101110000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +00100000001000010000000011111111 +00001000001010110000000000001100 +01111000000001000000000000000001 +00111000100001001010011111100000 +10110100100010110101100000000000 +00101001011000010000000000000100 +10111000010000001000000000000000 +00110100000000100000000000000001 +00100000011100010000000011111111 +11111011111111111111111100111110 +00101001011000010000000000001000 +01111000000011110000000000000001 +00110100000011100000000000001000 +11111011111111111111111101001100 +00101001011000010000000000000000 +00110100000000100000000000000000 +00110100000011010000000000000000 +11111011111111111111111100110110 +00101001011000010000000000001000 +00111001111011111100001010011100 +11111011111111111111111101000101 +00101001011000010000000000000000 +00110100000000100000000000000001 +00111101101011010000000000000001 +11111011111111111111111100101111 +00101001011000010000000000001000 +00100001101011010000000011111111 +11111011111111111111111100111110 +00101001111000010000000000000000 +00101001011000100000000000000100 +00101000001000010000000000000100 +10100000001000100000100000000000 +01000100001000000000000000000010 +00111001101011010000000000000001 +00101001011000010000000000000000 +00110100000000100000000000000000 +00110101110011101111111111111111 +11111011111111111111111100100010 +00101001011000010000000000001000 +00110101011011000000000000001000 +11111011111111111111111100110001 +01011101110000001111111111101100 +01000110001011100000000000000100 +00101001011000010000000000000100 +00110100000000100000000000000001 +11100000000000000000000000000011 +00101001011000010000000000000100 +00110100000000100000000000000000 +11111011111111111111111100010111 +00101001100000010000000000000000 +11111011111111111111111100100111 +00101001011000010000000000000000 +00110100000000100000000000000001 +11111011111111111111111100010010 +00101001100000010000000000000000 +11111011111111111111111100100010 +00101001011000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111100001101 +00101001100000010000000000000000 +11111011111111111111111100011101 +00110010000011010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00100000001000010000000011111111 +00001000001010110000000000001100 +01111000000000100000000000000001 +00111000010000101010011111100000 +10110100010010110101100000000000 +00101001011000010000000000000000 +00110100000000100000000000000001 +11111011111111111111111011110101 +00101001011000010000000000001000 +11111011111111111111111100000101 +00101001011000010000000000000100 +00110100000000100000000000000001 +11111011111111111111111011110000 +00101001011000010000000000001000 +11111011111111111111111100000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00100000001010110000000011111111 +10111001011000000000100000000000 +00100000010011000000000011111111 +11111011111111111111111011111010 +00111101100000100000000000000001 +10111001011000000000100000000000 +00100000010000100000000011111110 +11111011111111111111111101000111 +10111000001000000110000000000000 +10111001011000000000100000000000 +11111011111111111111111100101001 +01100101100000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00100000001000010000000000000011 +00111100001000010000000000010000 +10111000001000100001000000000000 +01111000000000010000000000000001 +00111000001000011100001010101100 +00101000001000010000000000000000 +01011000001000100000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011100001010101100 +00101000001000010000000000000000 +01111000000010110000000000000001 +00110100000001000000000000000001 +00101000001000110000000000000000 +00111001011010111100001010010000 +00000000011000100000000000011000 +00100000010000100000000000001111 +01000100010001000000000000000110 +01111000000000010000000000000001 +00111000001000011000100010000100 +11111011111111111111101110110011 +01011001011000000000000000000000 +11100000000000000000000000000110 +01011001011000100000000000000000 +00110100000000100000000000000111 +01011000001000100000000001000000 +00111000011000110000010000000000 +01011000001000110000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111010000 +01011011100010110000000000100100 +01011011100011000000000000100000 +01011011100011010000000000011100 +01011011100011100000000000011000 +01011011100011110000000000010100 +01011011100100000000000000010000 +01011011100100010000000000001100 +01011011100100100000000000001000 +01011011100111010000000000000100 +10111000011000001000100000000000 +01111000000000110000000000000001 +00111000011000111100001010101100 +10111000100000000110000000000000 +00101000011001000000000000000000 +00110100000010110000000000000000 +00101000100001010000000000000000 +00100000101001010001000000000000 +01011100101000000000000010011100 +01111000000000110000000000000001 +00111000011000111100001010010000 +00101000011000110000000000000000 +10111000101000000101100000000000 +01000100011001010000000010010111 +00110100100011110000000000001000 +01111000000010100100000000000000 +00110100000001000000000000000000 +00110100000010010000000000001101 +00110100000010000000000000000011 +00110100000001110000000000000001 +00101001111100000000000000000000 +11110001001001000011000000000000 +00000010000011100000000000010000 +00100010000011011111111111111111 +00100001110011100000000000000011 +01100101110001010000000000000000 +10100010000010101000000000000000 +10100000101001100011000000000000 +01111110000100000000000000000000 +01000100110000000000000000000111 +00000000100000110000000000000001 +00110100100001000000000000000010 +00111100011000110000000000000001 +10110100001000110001100000000000 +00001100011011010000000000000000 +11100000000000000000000000011110 +11110101011100011001000000000000 +01111101110000110000000000000010 +10100010010000110001100000000000 +01011100011001100000000000000110 +01000100101000110000000000000111 +00000001011000110000000000000001 +00111100011000110000000000000001 +10110100010000110001100000000000 +00001100011011010000000000000000 +00110101011010110000000000000010 +11100000000000000000000000010011 +01011101110010000000000000000111 +00000001011000110000000000000001 +00110101011010110000000000000001 +00111100011000110000000000000001 +10110100010000110001100000000000 +00001100011011010000000000000000 +11100000000000000000000000001100 +01111100100001100000000000000000 +01100101110000110000000000000010 +10100000110000110001100000000000 +01000100011001010000000000001000 +00100001101000010000000000000010 +00110100000011100000000000000010 +01000100001001010000000000001001 +01111000000000010000000000000001 +00111000001000011000100010111000 +11111011111111111111101101011110 +11100000000000000000000000000101 +01011110000000000000000000000011 +01011101110001111111111111010010 +11100000000000000000000000000010 +00110100000100000000000000000001 +01111000000000010000000000000001 +00111000001000011100001010101100 +00101000001001010000000000000000 +00110100000100100000100000000000 +00110100000000010000000000000000 +00110100101001010000000000001000 +00110100000011110000000000000000 +00110100000000100000000000000001 +00110100000001000000000000000010 +01111000000000110100000000000000 +11100000000000000000000000010000 +01000100001000000000000000000111 +01011100001000100000000000000011 +00111101101011110000000000010000 +11100000000000000000000000000101 +01011100001001000000000000000100 +10111001111011010111100000000000 +11100000000000000000000000000010 +10111001101000001001000000000000 +00101000101100000000000000000000 +00110100001000010000000000000001 +00000010000011100000000000010000 +00100010000011011111111111111111 +10100010000000111000000000000000 +01111110000100000000000000000000 +00100001110011100000000000000011 +01011110000000000000000000000010 +01000101110000101111111111110000 +00110100001000011111111111111111 +00110100000000100000000000000010 +01010000010000010000000000000100 +01000101100000000000000000110000 +00110001100000000000000000000000 +11100000000000000000000000101110 +01000101100000000000000000101101 +00110111100000010000000000101000 +00110111100000100000000000110000 +11111000000000000000011000100100 +01111000000000100000000000000001 +00111000010000101000111100011000 +01111000000000110000000000000001 +00101000010000010000000000000000 +00111000011000111000111100011100 +00101000011000100000000000000000 +10100001111000010000100000000000 +00000001111011110000000000011100 +01010000010000010000000000001110 +01111000000001000000000000000001 +00111000100001001000111100100000 +00101011100000110000000000110000 +00101000100000100000000000000000 +01010100011000100000000000001001 +00101011100001000000000000101100 +00101011100000110000000000101000 +00110100100000101111111111111111 +11110100100000100010000000000000 +00110100011000111111111111111111 +10110100100000110001100000000000 +01011011100000110000000000101000 +01011011100000100000000000101100 +00101011100000100000000000101000 +01011001100000100000000000001000 +00101011100000100000000000101100 +01011001100000100000000000001100 +00100000001000100000000000001111 +11001000010011110111100000000000 +01100101111000101111111111110001 +01100101111011110000000000000001 +10111000010011110111100000000000 +01000101111000000000000000000100 +00110100000000100000000000000001 +01011001100000100000000000000100 +11100000000000000000000000000010 +01011001100000000000000000000100 +00100010010100100000100000000000 +00111100001000010000000000000100 +01100110010100100000000000000000 +01011001100000010000000000010000 +00110001100100100000000000000000 +01111000000000010000000000000001 +00111000001000011100001001101100 +00101000001000100000000000000100 +00110100010000100000000000000001 +01011000001000100000000000000100 +01111000000000010000000000000001 +00111000001000011100001010101100 +00101000001000010000000000000000 +00101000001000010000000000000000 +00100000001000010010000000000000 +01000100001000000000000000000100 +01111000000000010000000000000001 +00111000001000011000100011100100 +11111011111111111111101011111100 +01010010001010110000000000000010 +10111010001000000101100000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100100 +00101011100011000000000000100000 +00101011100011010000000000011100 +00101011100011100000000000011000 +00101011100011110000000000010100 +00101011100100000000000000010000 +00101011100100010000000000001100 +00101011100100100000000000001000 +00110111100111000000000000110000 +11000011101000000000000000000000 +00110111100111001111111111010100 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +10111000010000000110100000000000 +01111000000000100000000000000001 +00111000010000101100001010010000 +00101000010000100000000000000000 +10111000001000000111100000000000 +10111000011000000110000000000000 +10111000100000000101100000000000 +00110100000000010000000000000000 +01000100010000000000000010001010 +00101101111000110000000000001100 +00111000000000011000000100000000 +11111100011000010001100000000000 +00110100000000011111111111111100 +11001000000000110001100000000000 +10100000011000010001100000000000 +00110100011000110000000000010010 +10110100011011000001000000000000 +00110100000000010000000000111011 +00010100011100010000000000000001 +01010100010000010000000000000011 +00110100000011000000000000111100 +11001001100000110110000000000000 +00110101100100000000000000000001 +00110100000000010000000000000010 +00110100000000100000000000000000 +00000010000100000000000000000001 +11111011111111111111111100000000 +00110100000011100000000000000000 +11100000000000000000000000000110 +00101101111000100000000000000000 +00110100000000010000000000000000 +00110101110011100000000000000001 +11111011111111111111111011111010 +00110101111011110000000000000010 +01010110001011101111111111111011 +10111001101000000111100000000000 +00110100000011100000000000000000 +00110110000100001111111111111111 +11100000000000000000000000000110 +00101101111000100000000000000000 +00110100000000010000000000000000 +00110101110011100000000000000001 +11111011111111111111111011110000 +00110101111011110000000000000010 +01010110000011101111111111111011 +00100001100000100000000000000001 +00111110000000010000000000000001 +01011100010000000000000000000100 +10110101101000010110100000000000 +00110100000000010000000000000000 +11100000000000000000000000000011 +10110101101000010110100000000000 +00110100000000010000000000000011 +00101101101000100000000000000000 +11111011111111111111111011100100 +01000101011000000000000000000111 +00110100000000010000000000000001 +00110100000000100001000000000000 +11111011111111111111111011100000 +00110100000000010000000000000001 +00110100000000100000000000000000 +11111011111111111111111011011101 +01111000000000010000000000000001 +00111000001000011100001010101100 +00101000001000100000000000000000 +00110100000011010000000000000000 +10111000001000000111100000000000 +00101000010000110000000000000000 +00110100000100000000001111101000 +00111000011000110000000000000001 +01011000010000110000000000000000 +00101001111000010000000000000000 +00101000001011100000000000000000 +00100001110000010000000000000010 +01011100001000000000000000001001 +00110100000000010000000000000001 +00110101101011010000000000000001 +11111000000000000000000010001000 +01011101101100001111111111111001 +01111000000000010000000000000001 +00111000001000011000100100011000 +10111001110000000001000000000000 +11111011111111111111101010010010 +01000101011000000000000000111110 +01111000000011010000000000000001 +00110100000011100000000000000000 +00111001101011011100001010101100 +00110100000011110000000001100100 +00101001101000010000000000000000 +00101000001000100000000000000000 +00100000010000100000100000000000 +01011100010000000000000000001010 +00110100000000010000000000000001 +00110101110011100000000000000001 +11111000000000000000000001110111 +01011101110011111111111111111001 +01111000000000010000000000000001 +00111000001000011000100101001000 +11111011111111111111101010000010 +00110100000011100000000000000000 +11100000000000000000000000000011 +00101000001011100000000000010100 +00100001110011100000000000000001 +01111000000000010000000000000001 +00111000001000011100001010101100 +00101000001000010000000000000000 +01111000000000100000000000000001 +00111000010000101000111100011000 +00101000001011010000000000011000 +00101000001000010000000000010100 +00101000010000010000000000000000 +00110111100000100000000000101100 +10100001101000010110100000000000 +00110111100000010000000000100100 +11111000000000000000010101100011 +01111000000000110000000000000001 +00111000011000111000111100011100 +00101000011000010000000000000000 +01010000001011010000000000001110 +01111000000000110000000000000001 +00111000011000111000111100100000 +00101011100000100000000000101100 +00101000011000010000000000000000 +01010100010000010000000000001001 +00101011100000110000000000101000 +00101011100000100000000000100100 +00110100011000011111111111111111 +11110100011000010001100000000000 +00110100010000101111111111111111 +10110100011000100001000000000000 +01011011100000100000000000100100 +01011011100000010000000000101000 +00101011100000010000000000100100 +00110001011011100000000000000000 +00111101101011010000000000000100 +01011001011000010000000000001000 +00101011100000010000000000101000 +01011001011000000000000000000100 +01011001011011010000000000010000 +01011001011000010000000000001100 +01111000000000010000000000000001 +00111000001000011100001001101100 +00101000001000100000000000000000 +00110100010000100000000000000001 +01011000001000100000000000000000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000101100 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111100001001101100 +00101000011001000000000000000000 +01011000001001000000000000000000 +00101000011000010000000000000100 +01011000010000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100111010000000000000100 +01111000000000100000000000000001 +00111000010000101100001010011100 +00101000010000100000000000000000 +00110100000000110000000000000100 +00101000010000100000000000010000 +01011011100000100000000000001000 +00110111100000100000000000001000 +11111000000000000001100111101100 +00101011100111010000000000000100 +00110111100111000000000000001000 +11000011101000000000000000000000 +01111000000001000000000000000001 +00111000100001001100001010011100 +00101000100001000000000000000000 +00101000100001010000000000001100 +00000000101001010000000000010000 +00111100101001010000000000001010 +01011000011001010000000000000000 +00101000100000110000000000010100 +01011000010000110000000000000000 +00101000100000100000000000001100 +00000000010000100000000000001000 +00100000010000100000000000000011 +01011000001000100000000000000000 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101100001010110000 +00101000010000100000000000000000 +01111000000000110000000000000001 +00111000011000111100001010011100 +01011000011000100000000000000000 +01000100001000000000000000000101 +00101000010000110000000000011000 +01111000000000011000000000000000 +10111000011000010000100000000000 +11100000000000000000000000000110 +01111000000001000000000000000001 +00111000100001001000111011000100 +00101000010000110000000000011000 +00101000100000010000000000000000 +10100000011000010000100000000000 +01011000010000010000000000011000 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011100001010011100 +00101000001000010000000000000000 +00101000001000010000000000011100 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101100001010011100 +00101000010000100000000000000000 +00101000010000110000000000011100 +10110100001000110000100000000000 +00101000010000110000000000011100 +11001000011000010001100000000000 +01001000000000111111111111111110 +11000011101000000000000000000000 +01111000000001010000000000000001 +00111000101001011100001010011100 +00101000101001010000000000000000 +01111000000001100000000000000001 +00111000110001101011111100101000 +00101000101010000000000000100100 +00101000101001110000000000100100 +00100001000010001111111111111111 +01011000110010000000000000000000 +00000000111001110000000000010000 +01111000000001100000000000000001 +00111000110001101011111100101100 +01011000110001110000000000000000 +01000100001000000000000000000100 +00101000101001100000000000100000 +00000000110001100000000000010000 +01011000001001100000000000000000 +01000100010000000000000000000100 +00101000101000010000000000100000 +00100000001000011111111111111111 +01011000010000010000000000000000 +01000100011000000000000000000010 +01011000011010000000000000000000 +01000100100000000000000000000010 +01011000100001110000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000111000000000000 +10111000011000000110100000000000 +00110100000000011111111111101010 +01000100011000000000000000110110 +01111000000011000000000000000001 +00111001100011001011111100101000 +00101001100000010000000000000000 +01011100001000000000000000001010 +01111000000000010000000000000001 +00111000001000011000100101111000 +11111011111111111111100111011011 +01111000000000010000000000000001 +00111000001000011100001010011100 +00101000001000010000000000000000 +00101000001000010000000000100100 +00100000001000011111111111111111 +01011001100000010000000000000000 +01111000000011000000000000000001 +00111001100011001011111100101100 +00101001100000010000000000000000 +01011100001000000000000000001010 +01111000000000010000000000000001 +00111000001000011000100110010000 +11111011111111111111100111001110 +01111000000000010000000000000001 +00111000001000011100001010011100 +00101000001000010000000000000000 +00101000001000010000000000100100 +00000000001000010000000000010000 +01011001100000010000000000000000 +01011101110000000000000000000110 +01111000000000010000000000000001 +00111000001000011011111100101000 +00101000001000010000000000000000 +01010001011000010000000000001000 +11100000000000000000000000001110 +00110100000000010000000000000001 +01011101110000010000000000001100 +01111000000000010000000000000001 +00111000001000011011111100101100 +00101000001000010000000000000000 +01010100001010110000000000000100 +01011001101000000000000000000000 +00110100000000011111111111101010 +11100000000000000000000000001101 +01111000000000010000000000000001 +00111000001000011011111100101000 +00101000001000010000000000000000 +10110101011000010101100000000000 +01111000000000010000000000000001 +00111000001000011100001010011100 +00101000001000010000000000000000 +00100001011010111111111111111111 +01011000001010110000000000101000 +00101000001000010000000000101100 +01011001101000010000000000000000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111011111100101000 +00101000011001000000000000000000 +00110100000000111111111111101010 +01010000001001000000000000001010 +01111000000000110000000000000001 +00111000011000111100001010011100 +00101000011000110000000000000000 +00100000001000011111111111111111 +01011000011000100000000000101100 +01111000000000101000000000000000 +10111000001000100000100000000000 +01011000011000010000000000101000 +00110100000000110000000000000000 +10111000011000000000100000000000 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011100001010011100 +00101000001000010000000000000000 +00101000001000100000000000000100 +00111000010000100000000000010000 +01011000001000100000000000000100 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101100001010011100 +01000100001000000000000000000101 +00101000010000010000000000000000 +00101000001000100000000000110000 +00111000010000100000000000000001 +11100000000000000000000000000101 +00101000010000010000000000000000 +00110100000000101111111111111110 +00101000001000110000000000110000 +10100000011000100001000000000000 +01011000001000100000000000110000 +01111000000000010000000000000001 +00111000001000011100001010011100 +00101000001000010000000000000000 +00101000001000010000000000110000 +00100000001000010000000000000001 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011100001010011100 +00101000001000010000000000000000 +00101000001000010000000000110000 +00100000001000010000000000000001 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011100001010011100 +00101000001000010000000000000000 +00101000001000010000000000110000 +00100000001000010000000100000000 +01111100001000010000000000000000 +11000011101000000000000000000000 +01111000000010010000000000000001 +00111001001010011100001010011100 +00101001001010010000000000000000 +01111100001000010000000000000000 +00100000010000100000000000001111 +01011001001000010000000000110100 +00101001001000010000000000110100 +00111100010000100000000000001000 +10111000010000010001000000000000 +01011001001000100000000000110100 +01011001001000110000000001011000 +01011001001001000000000001011100 +01011001001001010000000001100000 +01011001001001100000000001100100 +00101011100000010000000000000100 +01011001001001110000000001101000 +01011001001010000000000001101100 +01011001001000010000000001110000 +00101011100000010000000000001000 +01011001001000010000000001110100 +11000011101000000000000000000000 +01111100010000100000000000000000 +01111000000000110000000000000001 +00111000011000111100001010011100 +01111100001000010000000000000000 +00111100010000100000000000000001 +00101000011000110000000000000000 +10111000010000010001000000000000 +01011000011000100000000000111000 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101100001010011100 +00101000010000100000000000000000 +00100000001000010000000011111111 +01011000010000010000000000111100 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101100001010011100 +00101000010000100000000000000000 +00100000001000010000000011111111 +01011000010000010000000001000000 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111100001010011100 +00101000011000110000000000000000 +01011000011000010000000001000100 +01011000011000100000000001001000 +11000011101000000000000000000000 +01111000000001000000000000000001 +00111000100001001100001010011100 +00101000100001000000000000000000 +01011000100000010000000001001100 +01011000100000100000000001010000 +01011000100000110000000001010100 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101100001010011100 +00101000010000100000000000000000 +01011000010000010000000001111000 +11000011101000000000000000000000 +00110111100111001111111111000100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011100001010011100 +00101000001000010000000000000000 +01111000000011000000000000000001 +00111001100011001011111110101100 +00110001100000000000000000000000 +00101000001000100000000000000100 +00110100000000011111111111101101 +00100000010000100000000010000000 +01011100010000000000000001010011 +00110100000000010000000000000001 +11111011111111111111110100101011 +00110100000000010000000000000001 +11111011111111111111110001000000 +00110100000000100000000010100000 +00110100000000010000000000000001 +11111011111111111111110010001110 +00110100000000100000000000000000 +00110100000000010000000000000001 +11111011111111111111110010001011 +00110100000000010000000000000001 +11111011111111111111110001001110 +00110100000000100000000010100001 +00110100000000010000000000000001 +11111011111111111111110010000110 +00110111100011100000000000111111 +10111001110000000001000000000000 +00110100000000110000000000000001 +00110100000000010000000000000001 +11111011111111111111110011001000 +00110100000000010000000000000001 +11111011111111111111110001100100 +00110100000000010000000000000001 +01000011100011010000000000111111 +11111011111111111111110000101011 +00110100000000010000000000000001 +00110100000000100000000010100001 +11111011111111111111110001111001 +00110100000010111111111111011001 +00110100000100000000000000001111 +00110100000011110000000000010111 +00110100000000010000000000000001 +10111001110000000001000000000000 +00110100000000110000000000000000 +11111011111111111111110010111001 +01000011100000010000000000111111 +10110101101000010110100000000000 +00100001101011010000000011111111 +01010101011100000000000000000011 +10110101011011000001000000000000 +00110000010000010000000000000000 +00110101011010110000000000000001 +01011101011011111111111111110101 +00110111100000100000000000111111 +00110100000000010000000000000001 +00110100000000110000000000000001 +11111011111111111111110010101101 +00110100000000010000000000000001 +11111011111111111111110001001001 +01000011100000100000000000111111 +00110100000000011111111111111011 +01011100010011010000000000011111 +00110111100010110000000000100000 +01111000000000100000000000000001 +00111000010000101011111110101100 +00110100000000110000000000010000 +10111001011000000000100000000000 +11111000000000000001101001001100 +10111001011000000000100000000000 +11111000000000000000011100010110 +01111000000000100000000000000001 +00111000010000101011111100111000 +01011100001000000000000000000101 +00110100000000010000000000000001 +01011000010000010000000000000000 +00110100000000011111111111111010 +11100000000000000000000000010000 +00101011100000110000000000110100 +01111000000000010000000000000001 +00111000001000011011111100110000 +01011000001000110000000000000000 +00101011100000110000000000111000 +01111000000000010000000000000001 +00111000001000011011111100110100 +01011000001000110000000000000000 +00101011100000110000000000110000 +01111000000000010000000000000001 +00111000001000011010011111111000 +01011000001000110000000000000000 +00110100000000010000000000000010 +01011000010000010000000000000000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000111100 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100110110000000000001000 +00110100000110110000000000100000 +10110111011111001101100000000000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100111010000000000000100 +01111000000010110000000000000001 +01111000000011000000000000000001 +10111011100000000111100000000000 +00110100000000100000000000000001 +00111001011010111010100011000000 +00111001100011001000100110101000 +11100000000000000000000000010010 +10111011100000001000000000000000 +00110111100111001111111111100100 +00110111100011100000000000001011 +00000001110011100000000000000011 +00110101101000100000000000101100 +00111101110011100000000000000011 +00110100000000110000000000010100 +10111001110000000000100000000000 +11111000000000000001100001100000 +00110001110000000000000000010011 +00101001101000100000000000100000 +00101001011000110000000001110100 +10111001100000000000100000000000 +10111001110000000010000000000000 +11111011111111111111100010100110 +00110100000000100000000000000000 +10111010000000001110000000000000 +10111001011000000000100000000000 +11111000000000000001011000011010 +10111000001000000110100000000000 +01011100001000001111111111101100 +10111001111000001110000000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100110110000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111011111100111100 +00101001011000010000000000000000 +01011100001000000000000000000111 +01111000000000010000000000000001 +00111000001000011010100011000000 +11111000000000000001010111011110 +00101001011000010000000000000000 +00110100001000010000000000000001 +01011001011000010000000000000000 +01111000000010110000000000000001 +00111001011010111010100000000000 +01111000000011000000000000000001 +00110101011011010000000011000000 +00111001100011001010100011000000 +11100000000000000000000000001001 +00101001011000100000000000001000 +00101001011000110000000000001100 +00101001011001000000000000010000 +00101001011011100000000000000000 +10111001100000000000100000000000 +11111000000000000001011010100110 +01011001110000010000000000000000 +00110101011010110000000000011000 +01011101011011011111111111111000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00110100000000100000000000000000 +10111000001000000110000000000000 +11111000000000000000011110100100 +10111000001000000101100000000000 +01001100001000000000000000000101 +01111000000000010000000000000001 +00111000001000011000100111010000 +10111001011000000001000000000000 +11100000000000000000000000000100 +00101001100000100000000000000000 +01111000000000010000000000000001 +00111000001000011000100111111100 +11111011111111111111100001011110 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011011111101000000 +01011000001000000000000000000000 +01111000000000100000000000000001 +01111000000000010000000000000001 +00111000001000011011111101010100 +00111000010000101011111101000100 +00110100000000111111111111111111 +01011000001000110000000000000000 +01011000010000110000000000000000 +01011000001000000000000000001000 +01011000010000000000000000001000 +01011000010000000000000000000100 +01011000001000000000000000000100 +01011000010000000000000000001100 +01011000001000000000000000001100 +00110100000000100000000000000000 +00110100000000010000000000000000 +11111000000000000001001110011111 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +00110100000000010000000000000000 +11111000000000000001010001001000 +10111000001000000101100000000000 +00110100000000100000000000000000 +01011100001000000000000010000001 +11111011111111111111101000011001 +01111000000000110000000000000001 +00111000011000111011111101000100 +00101000011001010000000000001000 +01111000000000100000000000000001 +00111000010000101011111101000000 +10111000001000000010000000000000 +00101000010000100000000000000000 +01000100101010110000000000000100 +00110100000000010000000000000001 +01011100101000010000000000011101 +11100000000000000000000000010000 +00110100000000010000000000000001 +01000100100000010000000000000101 +00101000011000010000000000000100 +00110100001000010000000000000001 +01011000011000010000000000000100 +11100000000000000000000000000010 +01011000011000000000000000000100 +01111000000000110000000000000001 +00111000011000111011111101000100 +00101000011001010000000000000100 +00110100000000010000000000000100 +01001100001001010000000000010000 +00110100000000010000000000000001 +01011000011000010000000000001000 +11100000000000000000000000000010 +01000100100001010000000000000011 +01011000011000000000000000000100 +11100000000000000000000000001010 +00101000011001010000000000000100 +00110100000000010000000000000100 +00110100101001010000000000000001 +01011000011001010000000000000100 +01001100001001010000000000000101 +00110100000000010000000000000010 +01011000011000010000000000001000 +00110100010000011111111000001100 +01011000011000010000000000001100 +01111000000000110000000000000001 +00111000011000111011111101010100 +00101000011001010000000000001000 +01000100101000000000000000000100 +00110100000000010000000000000001 +01011100101000010000000000011100 +11100000000000000000000000001111 +01000100100001010000000000000101 +00101000011000010000000000000100 +00110100001000010000000000000001 +01011000011000010000000000000100 +11100000000000000000000000000010 +01011000011000000000000000000100 +01111000000000110000000000000001 +00111000011000111011111101010100 +00101000011001000000000000000100 +00110100000000010000000000000100 +01001100001001000000000000010000 +00110100000000010000000000000001 +01011000011000010000000000001000 +11100000000000000000000000000010 +01000100100000000000000000000011 +01011000011000000000000000000100 +11100000000000000000000000001010 +00101000011001000000000000000100 +00110100000000010000000000000100 +00110100100001000000000000000001 +01011000011001000000000000000100 +01001100001001000000000000000101 +00110100000000010000000000000010 +01011000011000010000000000001000 +00110100010000011111111000001100 +01011000011000010000000000001100 +00110100000000010100010001011011 +01001100001000100000000000110000 +01111000000000100000000000000001 +00111000010000101011111101000100 +00101000010001000000000000001000 +00110100000000010000000000000010 +00110100000000101111111111111111 +01011100100000010000000000110001 +01111000000000110000000000000001 +00111000011000111011111101010100 +00101000011000010000000000001000 +01011100001001000000000000101101 +00101000011000100000000000001100 +00110100000000010011111001111111 +11100000000000000000000000000010 +00110100010000101100000110000000 +01001000010000011111111111111111 +01111000000000110000000000000001 +00111000011000111011111101010100 +01011000011000100000000000001100 +01111000000000110000000000000001 +00111000011000111011111101000100 +00101000011000110000000000001100 +00110100000000010011111001111111 +11100000000000000000000000000010 +00110100011000111100000110000000 +01001000011000011111111111111111 +01111000000001000000000000000001 +00111000100001001011111101000100 +01011000100000110000000000001100 +01001100011000100000000000000011 +00110100010001001110000011000000 +11100000000000000000000000000100 +00110100000001000000000000000000 +01001100010000110000000000000010 +00110100010001000001111101000000 +10110100100000110001100000000000 +00000000011000100000000000011111 +10110100010000110001100000000000 +00010100011000100000000000000001 +01001100010000000000000000000011 +00110100010000100011111010000000 +11100000000000000000000000000100 +00110100000000010011111001111111 +01001100001000100000000000000010 +00110100010000101100000110000000 +01011001100000100000000000000000 +00110100000000100000000000000001 +11100000000000000000000000001000 +01111000000000010000000000000001 +00110100010000100000000001100100 +00111000001000011011111101000000 +01011000001000100000000000000000 +00110100000000010000000000000000 +11111000000000000001001100010011 +00110100000000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000100000000000000001 +10111000001000000101100000000000 +10111000010000000000100000000000 +00111000001000011000101000011100 +11111011111111111111011110101000 +11100000000000000000000000000011 +00110100000000010000000001100100 +11111011111111111111110110010110 +00110100000000010000000000000000 +11111011111111111111100100101111 +01000100001000001111111111111100 +00110100000000010000000000000011 +00110100000000100000000000000000 +00110100000000110000000000000001 +11111000000000000001001000011111 +01111000000000100000000000000001 +10111000010000000000100000000000 +00111000001000011000101000110100 +11111011111111111111011110011010 +11100000000000000000000000000011 +00110100000000010000000001100100 +11111011111111111111110110001000 +00110100000000010000000000000000 +11111000000000000001001011100000 +01000100001000001111111111111100 +01111000000000100000000000000001 +10111000010000000000100000000000 +00111000001000011000011110001000 +11111011111111111111011110010000 +01111000000000100000000000000001 +10111000010000000000100000000000 +00111000001000011000101001000100 +11111011111111111111011110001100 +11111011111111111111111100110100 +10111001011000000000100000000000 +11111011111111111111111101001010 +01000100001000001111111111111110 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +00110100000000100000000000000011 +00110100000011000000000000000000 +00110100000011010000001111101001 +01011100001000100000000000100010 +11100000000000000000000000000101 +01000101100011010000000000100111 +11111011111111111111100100000011 +01000100001000000000000000100101 +00110101100011000000000000000001 +10111001011000000000100000000000 +11111011111111111111111100110100 +01000100001000001111111111111010 +01001100001000000000000000000010 +11100000000000000000000000011000 +00110111100000010000000000010100 +00110100000000100000000000000000 +11111000000000000000011010101001 +01001000000000010000000000000111 +00101001011000100000000000000000 +00101011100000010000000000010100 +00110100010000111111111100111000 +01010100011000010000000000000011 +00110100010000100000000011001000 +01010000010000010000000000011101 +00110100000000100000000000000001 +10111001011000000000100000000000 +11111000000000000000011010011111 +01111000000000110000000000000001 +00101001011000100000000000000000 +00111000011000111000101001101100 +01001100001000000000000000000011 +01111000000000110000000000000001 +00111000011000111000101001100100 +01111000000000010000000000000001 +00111000001000011000101001110100 +11111011111111111111011101011010 +11100000000000000000000000010000 +10111001011000000000100000000000 +11111011111111111111111011101001 +10111000001000000110000000000000 +01001000000000010000000000000101 +00101001011000010000000000000000 +11111011111111111110110001100100 +11100000000000000000000000000010 +00110100000011001111111111111111 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110100000011000000000000000000 +11100011111111111111111111110100 +00110100000000000000000000000000 +00110100000000000000000000000000 +00110100000000000000000000000000 +00110100000000000000000000000000 +00110100000000000000000000000000 +00110100000000000000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000001100000000000 +10111000010000000101100000000000 +00110100000000010000100000000000 +10111000011000000001000000000000 +01111000000011000000000000000001 +11111011111111111111101001001001 +00110100000011010000000000001000 +11111011111111111111111111101101 +00111001100011001100001010011100 +00110100000000010000010000000000 +00110100000000100000000000000000 +11111011111111111111101001000011 +10110001011000000000100000000000 +01001100001000000000000000000100 +00110100000000010001000000000000 +00110100000000100000000000000001 +11100000000000000000000000000011 +00110100000000010001000000000000 +00110100000000100000000000000000 +11111011111111111111101000111011 +11111011111111111111111111100000 +00110100000000010000010000000000 +00110100000000100000000000000001 +11111011111111111111101000110111 +00101001100000010000000000000000 +00111101011010110000000000000001 +00110101101011011111111111111111 +00101000001000010000000000000100 +00100000001000010010000000000000 +01111100001000010000000000000000 +10111001011000010101100000000000 +00100001011010110000000011111111 +11111011111111111111111111010100 +01011101101000001111111111101000 +00110100000000010000010000000000 +00110100000000100000000000000000 +11111011111111111111101000101010 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000010000100000000000 +00110100000000100000000000000001 +11111011111111111111101000011110 +00110100000000010000010000000000 +00110100000000100000000000000000 +11111011111111111111101000011011 +00110100000000010001000000000000 +00110100000000100000000000000000 +11111011111111111111101000011000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000110100000000000 +00110100000000010000000000000001 +00110100000000100000000000000000 +10111000011000000110000000000000 +11111011111111111111111110110111 +00110100000000100000000000001011 +00110100000000010000000000000000 +11111011111111111111111110110100 +00000001011000110000000000010000 +00110100000000010000000000000000 +00100000011000100000000011111111 +11111011111111111111111110110000 +00100001011000111111111100000000 +00000000011000100000000000001000 +00110100000000010000000000000000 +11111011111111111111111110101100 +00100001011000100000000011111111 +00110100000000010000000000000000 +11111011111111111111111110101001 +00110100000000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111110100110 +00110100000010110000000000000000 +11100000000000000000000000000111 +00110100000000100000000000000000 +00110100000000010000000000000000 +11111011111111111111111110100001 +10110101101010110001000000000000 +00110000010000010000000000000000 +00110101011010110000000000000001 +01001001100010111111111111111010 +00110100000000100000000000000000 +00110100000000010000000000000001 +11111011111111111111111110011010 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00110100000000100000000000000000 +10111000001000000101100000000000 +00110100000000010000000000000001 +11111011111111111111111110001100 +00110100000000100000000000000110 +00110100000000010000000000000000 +11111011111111111111111110001001 +00110100000000100000000000000000 +00110100000000010000000000000001 +11111011111111111111111110000110 +00110100000000100000000011011000 +00110100000000010000000000000000 +11111011111111111111111110000011 +00000001011000100000000000010000 +00110100000000010000000000000000 +00100000010000100000000011111111 +11111011111111111111111101111111 +00100001011000101111111100000000 +00000000010000100000000000001000 +00110100000000010000000000000000 +11111011111111111111111101111011 +00100001011000100000000011111111 +00110100000000010000000000000000 +11111011111111111111111101111000 +00110100000000100000000000000000 +00110100000000010000000000000001 +11111011111111111111111101110101 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00110100000000100000000000000000 +00110100000000010000000000000001 +11111011111111111111111101101011 +00110100000000100000000000000101 +00110100000000010000000000000000 +11111011111111111111111101101000 +00110100000000100000000000000000 +00110100000000010000000000000000 +11111011111111111111111101100101 +10111000001000000101100000000000 +00110100000000100000000000000000 +00110100000000010000000000000001 +11111011111111111111111101100001 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111011111110010100 +00101001011011000000000000001000 +10111000010000000110100000000000 +10111000001000000111100000000000 +10111000010000000000100000000000 +10111001100000000001000000000000 +11111000000000000001010111110000 +01111100001011100000000000000000 +10111001100000000001000000000000 +10111001101000000000100000000000 +11111000000000000001010111011100 +10110101110000010111000000000000 +00110100000011000000000000000000 +11100000000000000000000000001001 +00101001011000100000000000001000 +10001001100000100001000000000000 +10110100010011110000100000000000 +11111011111111111111111110110000 +11111011111111111111111111010001 +00100000001000100000000000000001 +01011100010000001111111111111110 +00110101100011000000000000000001 +01001001110011001111111111111000 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000110100000000000 +00110100000000010000000000000001 +00110100000000100000000000000000 +10111000011000000110000000000000 +11111011111111111111111100101001 +00110100000000100000000000000110 +00110100000000010000000000000000 +11111011111111111111111100100110 +00110100000000100000000000000000 +00110100000000010000000000000001 +11111011111111111111111100100011 +00110100000000100000000000000010 +00110100000000010000000000000000 +11111011111111111111111100100000 +00000001011000110000000000010000 +00110100000000010000000000000000 +00100000011000100000000011111111 +11111011111111111111111100011100 +00100001011000111111111100000000 +00000000011000100000000000001000 +00110100000000010000000000000000 +11111011111111111111111100011000 +00100001011000100000000011111111 +00110100000000010000000000000000 +11111011111111111111111100010101 +00110100000010110000000000000000 +11100000000000000000000000000110 +10110101101010110001000000000000 +01000000010000100000000000000000 +00110100000000010000000000000000 +00110101011010110000000000000001 +11111011111111111111111100001110 +01001001100010111111111111111011 +00110100000000010000000000000001 +00110100000000100000000000000000 +11111011111111111111111100001010 +11111011111111111111111110011001 +00100000001000010000000000000001 +01011100001000001111111111111110 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +01111000000011000000000000000001 +00111001011010111010111011010000 +00111001100011001010111011011100 +11100000000000000000000000000101 +00101001011000100000000000000000 +10111001011000000000100000000000 +00110101011010110000000000001100 +11011000010000000000000000000000 +01010101100010111111111111111100 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +01111000000011010000000000000001 +00110100000011000000000000000000 +00111001011010111010111011010000 +00111001101011011010111011011100 +11100000000000000000000000000110 +00101001011000100000000000000000 +10111001011000000000100000000000 +00110101011010110000000000001100 +11011000010000000000000000000000 +10110101100000010110000000000000 +01010101101010111111111111111011 +01101001100000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +01111000000011010000000000000001 +10111000001000000111000000000000 +00111001011010111010111011010000 +00111001101011011010111011011100 +11100000000000000000000000001100 +00101001011011000000000000001000 +11100000000000000000000000000111 +10111001110000000001000000000000 +11111000000000000001011010011001 +01011100001000000000000000000011 +00101001100000010000000000000100 +11100000000000000000000000000111 +00110101100011000000000000001000 +00101001100000010000000000000000 +01011100001000001111111111111001 +00110101011010110000000000001100 +01010101101010111111111111110101 +01111000000000011000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +10111000001000000001100000000000 +01011100001000000000000000001000 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011010111011010000 +00111000010000101010111011011100 +01000100001000100000000000000011 +00101000001000010000000000001000 +11000011101000000000000000000000 +00101000011000100000000000001000 +00110100011000010000000000001000 +01011100010000000000000000010110 +01111000000000100000000000000001 +01111000000001000000000000000001 +00111000010000101010111011010000 +00111000100001001010111011011100 +11100000000000000000000000001111 +00101000010000010000000000001000 +11100000000000000000000000001010 +01011100001000110000000000001000 +01111000000000110000000000000001 +00110100010000100000000000001100 +00111000011000111010111011011100 +00110100000000010000000000000000 +01010000010000110000000000001001 +00101000010000010000000000001000 +11000011101000000000000000000000 +00110100001000010000000000001000 +00101000001001010000000000000000 +01011100101000001111111111110110 +00110100010000100000000000001100 +01010100100000101111111111110010 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111001000 +01011011100010110000000000111000 +01011011100011000000000000110100 +01011011100011010000000000110000 +01011011100011100000000000101100 +01011011100011110000000000101000 +01011011100100000000000000100100 +01011011100100010000000000100000 +01011011100100100000000000011100 +01011011100100110000000000011000 +01011011100101000000000000010100 +01011011100101010000000000010000 +01011011100101100000000000001100 +01011011100101110000000000001000 +01011011100111010000000000000100 +10111000001000000111000000000000 +00110100000000010000000000000000 +10111000010000001011100000000000 +01111000000101000000000000000001 +11111011111111111111111111001011 +01111000000100110000000000000001 +01111000000100100000000000000001 +01111000000100010000000000000001 +01111000000100000000000000000001 +01111000000011110000000000000001 +10111000001000000110100000000000 +00110100000101010000000000000000 +00110100000010110000000000000000 +00111010100101001000000011010000 +00111010011100110111110001001000 +00111010010100101000101010100000 +01111000000101101000000000000000 +00111010001100011000011111000000 +00111010000100000111100100111000 +00111001111011111000011110111000 +11100000000000000000000000101000 +00110101011000100000000000001111 +10110101110010110000100000000000 +01001010111000100000000000000110 +01111000000000100000000000000001 +00111000010000101000101010011000 +11111011111111111111010110011011 +10110101011000010101100000000000 +11100000000000000000000000100001 +00101001101011000000000000000100 +10111010100000000001100000000000 +01000110101000000000000000000010 +10111010011000000001100000000000 +00101001101001000000000000000000 +10111010010000000001000000000000 +11111011111111111111010110010010 +10110100001010110101100000000000 +01011101100101100000000000000101 +10110101110010110000100000000000 +10111001111000000001000000000000 +11111011111111111111010110001101 +11100000000000000000000000001110 +01001101100000000000000000000110 +10110101110010110000100000000000 +10111010000000000001000000000000 +11111011111111111111010110001000 +11001000000011000110000000000000 +10110101011000010101100000000000 +00100001100001001111111111111111 +00001000100001000010011100010000 +00010101100000110000000000010000 +10110101110010110000100000000000 +00000000100001000000000000010000 +10111010001000000001000000000000 +11111011111111111111010101111111 +10110100001010110101100000000000 +10111001101000000000100000000000 +11111011111111111111111110010110 +10111000001000000110100000000000 +00110110101101010000000000000001 +01011101101000001111111111011001 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000111000 +00101011100011000000000000110100 +00101011100011010000000000110000 +00101011100011100000000000101100 +00101011100011110000000000101000 +00101011100100000000000000100100 +00101011100100010000000000100000 +00101011100100100000000000011100 +00101011100100110000000000011000 +00101011100101000000000000010100 +00101011100101010000000000010000 +00101011100101100000000000001100 +00101011100101110000000000001000 +00110111100111000000000000111000 +11000011101000000000000000000000 +00110111100111001111111110101000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00110111100010110000000000001100 +10111001011000000000100000000000 +00110100000000100000000001010000 +11111011111111111111111110011101 +01111000000000010000000000000001 +10111001011000000001000000000000 +00111000001000010111100111011000 +11111011111111111111010101101011 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000001011000 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011011111111000100 +00101000001000010000000000000000 +00101000001000100000000000001000 +00101000001000010000000000001100 +00100000001000010000000011111111 +11000011101000000000000000000000 +01111000000000010000000000000001 +01111000000000110000000000000001 +00111000011000111000111100100100 +00111000001000011011111111000100 +00101000001000010000000000000000 +00101000011000100000000000000000 +01111000000001000000000000000001 +00111000100001001000111100101000 +01011000001000100000000000000000 +01011000001000000000000000010100 +00101000100000110000000000000000 +01011000001000000000000000011000 +01011000001000000000000000010000 +01011000001000110000000000000000 +01011000001000100000000000000000 +01011000001000000000000000011100 +11000011101000000000000000000000 +01111000000001000000000000000001 +00110100000001010000000000000010 +00111000100001001011111111000100 +01011100001001010000000000001110 +00101000100000010000000000000000 +00010100010001000000000000011111 +00100000100001000000000000001111 +10110100100000110001100000000000 +11110100100000110010000000000000 +00000000011000110000000000000100 +10110100100000100001000000000000 +00111100010000100000000000011100 +01011000001000000000000000010100 +01011000001000000000000000011000 +10111000010000110001100000000000 +01011000001000110000000000010000 +11100000000000000000000000000110 +00101000100000010000000000000000 +00100000010000100000000011111111 +01011000001000110000000000010100 +01011000001000100000000000011000 +01011000001000000000000000010000 +01111000000000010000000000000001 +00111000001000011011111111000100 +00101000001000010000000000000000 +00101000001000100000000000000000 +00111000010000100000000000000100 +01011000001000100000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +01111000000001010000000000000001 +00111000101001011011111111000100 +00101000101001010000000000000000 +00100000001000010000000011111111 +00000000011000110000000000000100 +01011000101000100000000000010100 +01011000101000010000000000011000 +01011000101000110000000000010000 +00110100000000010000000000000011 +01011100100000010000000000000111 +00101000101000100000000000000000 +00110100000000011111111111110011 +10100000010000010000100000000000 +00111000001000010000000000001000 +01011000101000010000000000000000 +11000011101000000000000000000000 +00110100000000010000000000000001 +01011100100000010000000000000111 +00101000101000100000000000011100 +00110100000000011111111111100111 +10100000010000010000100000000000 +00111000001000010000000000010000 +01011000101000010000000000011100 +11000011101000000000000000000000 +00110100000000010000000000000010 +01011100100000010000000000000110 +00101000101000100000000000011100 +00110100000000011111111111000111 +10100000010000010000100000000000 +00111000001000010000000000100000 +01011000101000010000000000011100 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +01111000000000010000000000000001 +00111000001000011000111100011000 +00101000001011110000000000000000 +01111000000010110000000000000001 +10111000010000000110100000000000 +00111001011010111011111111000100 +11111011111111111111111110011010 +10111000001000001000100000000000 +00101001011000010000000000000000 +10111000010000001000000000000000 +00101000001011100000000000000100 +10100001110011110111000000000000 +11111011111111111111111110010100 +01011100001100011111111111111001 +01011100010100001111111111111000 +01000101100000000000000000000011 +01011001100000010000000000000000 +01011001100000100000000000000100 +01000101101000000000000000000011 +00111101110000010000000000000011 +01011001101000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011011111111000100 +00101000001000010000000000000000 +00101000001000010000000000000000 +00100000001000010000000000000100 +01100100001000010000000000000000 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101011111111000100 +00101000010000100000000000000000 +00101000010000110000000000011100 +01000100001000000000000000000011 +00111000011000110000000000001100 +11100000000000000000000000000011 +00110100000000011111111111110011 +10100000011000010001100000000000 +01011000010000110000000000011100 +00110100000000010000000000000000 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101011111111000100 +00101000010000100000000000000000 +00101000010000110000000000011100 +01000100001000000000000000000011 +00111000011000110000000000000010 +11100000000000000000000000000011 +00110100000000011111111111111101 +10100000011000010001100000000000 +01011000010000110000000000011100 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00101000001010110000000000000100 +10111000100000000110100000000000 +10111000011000000111100000000000 +01000001011000010000000000000011 +10111000010000000110000000000000 +00110101101011101111111111111111 +11111011111111111111011111011100 +00101001011000100000000000000100 +01000001011000010000000000000011 +00111100010000100000000000000001 +00100000010000100000000011111110 +11111011111111111111100000101000 +00010101100000100000000000001000 +01000001011000010000000000000011 +00100000010000100000000011111111 +11111011111111111111100000100100 +01000001011000010000000000000011 +00100001100000100000000011111111 +00110100000011000000000000000000 +11111011111111111111100000100000 +01000001011000010000000000000011 +11111011111111111111011111100011 +00101001011000100000000000000100 +01000001011000010000000000000011 +00111100010000100000000000000001 +00111000010000100000000000000001 +00100000010000100000000011111111 +11111011111111111111100000011000 +11100000000000000000000000000101 +00100000101000010000000011111111 +00110100000000110000000000000000 +11111011111111111111100001011011 +00110101100011000000000000000001 +10110101111011000001000000000000 +00101001011001010000000000000000 +01001001110011001111111111111010 +00100000101000010000000011111111 +00110100000000110000000000000001 +11111011111111111111100001010100 +01000001011000010000000000000011 +11111011111111111111011111110000 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00110100000011010000000000000000 +10111000010000000110000000000000 +10111000011000000111000000000000 +00101000001010110000000000000100 +11100000000000000000000000100001 +01000001011000010000000000000011 +11111011111111111111011110100011 +00101001011000100000000000000100 +01000001011000010000000000000011 +00111100010000100000000000000001 +00100000010000100000000011111110 +11111011111111111111011111101111 +00010101100000100000000000001000 +01000001011000010000000000000011 +00100000010000100000000011111111 +11111011111111111111011111101011 +01000001011000010000000000000011 +00100001100000100000000011111111 +00110101100011000000000000000001 +11111011111111111111011111100111 +01000001011000010000000000000011 +00110100000000100000000011111111 +11111011111111111111011111100100 +01000001011000010000000000000011 +11111011111111111111011111000111 +01000001011000010000000000000011 +11111011111111111111011110001111 +00101001011000100000000000000100 +01000001011000010000000000000011 +00111100010000100000000000000001 +00100000010000100000000011111110 +11111011111111111111011111011011 +10111000001000000111100000000000 +01000001011000010000000000000011 +11111011111111111111011110111101 +01011101111000001111111111110110 +00110101101011010000000000000001 +01001001110011011111111111100000 +10111001110000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +00110100000011000000000000000000 +10111000010000000110100000000000 +10111000011000000111100000000000 +10111000100000000111000000000000 +00101000001010110000000000000100 +11100000000000000000000000100010 +01000001011000010000000000000011 +11111011111111111111011101101011 +00101001011000100000000000000100 +01000001011000010000000000000011 +00111100010000100000000000000001 +00100000010000100000000011111110 +11111011111111111111011110110111 +00010101101000100000000000001000 +01000001011000010000000000000011 +00100000010000100000000011111111 +11111011111111111111011110110011 +01000001011000010000000000000011 +00100001101000100000000011111111 +00110101101011010000000000000001 +11111011111111111111011110101111 +10110101111011000001000000000000 +01000001011000010000000000000011 +01000000010000100000000000000000 +11111011111111111111011110101011 +01000001011000010000000000000011 +11111011111111111111011110001110 +01000001011000010000000000000011 +11111011111111111111011101010110 +00101001011000100000000000000100 +01000001011000010000000000000011 +00111100010000100000000000000001 +00100000010000100000000011111110 +11111011111111111111011110100010 +10111000001000001000000000000000 +01000001011000010000000000000011 +11111011111111111111011110000100 +01011110000000001111111111110110 +00110101100011000000000000000001 +01001001110011001111111111011111 +10111001110000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000010000000000100000000000 +10111000011000000001000000000000 +11111011111111111111110101111111 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000010000000000100000000000 +10111000011000000001000000000000 +10111000100000000001100000000000 +11111011111111111111110110011110 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000001000010000000000000100 +11111000000000000000100101011000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000001000010000000000000100 +11111000000000000000100101111001 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000001000010000000000000100 +11111000000000000000100101011110 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111110111100 +01011011100010110000000000100100 +01011011100011000000000000100000 +01011011100011010000000000011100 +01011011100011100000000000011000 +01011011100011110000000000010100 +01011011100100000000000000010000 +01011011100100010000000000001100 +01011011100100100000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +00110100000000010000000000000011 +10111000010000000110100000000000 +10111000011000000111000000000000 +00110100000010111111111111111100 +01010100011000010000000001110010 +01111000000000110000000000000001 +01111000000001000000000000000001 +01111000000001010000000000000001 +00111000011000111000111100101100 +00111000100001001000111100110000 +00111000101001011000111100110100 +00101000011000100000000000000000 +01111000000011110000000000000001 +00101000100000110000000000000000 +00101000101001000000000000000000 +00111001111011111010100101111000 +10111001111000000000100000000000 +11111000000000000001000111010110 +00110100000010111111111111111111 +01001000000000010000000001100011 +01011101110000000000000000010111 +01111000000001000000000000000001 +00111000100001001011111101110010 +00110000100000000000000000000000 +00110100000000100000000000000001 +00110111100100000000000000101000 +00110111100100100000000000111000 +00110100000100010000000011111111 +10111000100000000101100000000000 +11100000000000000000000000000110 +01000000010000010000000000000000 +01000100001100010000000000001100 +00110100010000100000000000000001 +01011100010100101111111111111101 +11100000000000000000000001100000 +10111001111000000000100000000000 +10111010000000000001100000000000 +00110100000001000000000000011101 +11111000000000000001001000000100 +00110100000000100000000000011101 +01011100001000100000000000000011 +10111010000000000001000000000000 +11100011111111111111111111110100 +00110100000000010000000000000001 +01011101101000010000000000000111 +01111000000000010000000000000001 +00111000001000011011111101110010 +01000000001000100000000000000000 +00110100000000010000000000000100 +00110100000010111111111111111110 +01000100010000010000000001000001 +10111001110011010000100000000000 +01011100001000000000000000000111 +01111000000000010000000000000001 +00111000001000011011111101110010 +01000000001000010000000000000000 +00110100000010110000000000000000 +01000100001010110000000000111010 +11100000000000000000000000000010 +01011101101000000000000000011010 +00001001110000100000000000011101 +01111000000000010000000000000001 +00111000001000011010100101111000 +00110100010000100000000000000001 +10111001100000000001100000000000 +00110100000001000000000000011101 +11111000000000000001000111101000 +00110100000000100000000000011101 +00110100000010111111111111111111 +01011100001000100000000000101110 +10111001100000000000100000000000 +00110101100000110000000000011100 +00110100000000100000000000000000 +01000000001001000000000000000000 +00110100001000010000000000000001 +10110100010001000001000000000000 +00100000010000100000000011111111 +01011100001000111111111111111100 +01000001100000010000000000011100 +01000100001000100000000000100001 +01111000000000010000000000000001 +00111000001000011000101010111100 +11111011111111111111001110011011 +00110100000010111111111111111111 +11100000000000000000000000011111 +00110100000000010000000000000001 +01011101101000010000000000011010 +10111001100000000000100000000000 +00110101100000110000000000011100 +00110100000000100000000000000000 +01000000001001000000000000000000 +00110100001000010000000000000001 +10110100010001000001000000000000 +00100000010000100000000011111111 +01011100001000111111111111111100 +01111000000011010000000000000001 +00110001100000100000000000011100 +00111001101011011011111101110010 +01000001101000100000000000000000 +01111000000000010000000000000001 +00111000001000011010100101111000 +00001000010000100000000000011101 +10111001100000000001100000000000 +00110100000001000000000000011101 +00110100010000100000000000000001 +11111000000000000001000111101101 +00110100000000100000000000011101 +00110100000010111111111111111111 +01011100001000100000000000000111 +01000001101000010000000000000000 +00110100001000010000000000000001 +00110001101000010000000000000000 +01111000000000010000000000000001 +00111000001000011011111101110010 +01000000001010110000000000000000 +01111000000000010000000000000001 +00111000001000011010100101111000 +11111000000000000001000110100010 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100100 +00101011100011000000000000100000 +00101011100011010000000000011100 +00101011100011100000000000011000 +00101011100011110000000000010100 +00101011100100000000000000010000 +00101011100100010000000000001100 +00101011100100100000000000001000 +00110111100111000000000001000100 +11000011101000000000000000000000 +01000001011000100000000000000000 +00110100010000100000000000000001 +00100000010000100000000011111111 +00110001011000100000000000000000 +00001000010000100000000000011101 +00110100010000100000000000000001 +11100011111111111111111110011011 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000010000000000100000000000 +10111000011000000001000000000000 +10111000100000000001100000000000 +11111011111111111111110001011110 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111011000 +01011011100010110000000000100100 +01011011100011000000000000100000 +01011011100011010000000000011100 +01011011100011100000000000011000 +01011011100011110000000000010100 +01011011100100000000000000010000 +01011011100100010000000000001100 +01011011100110110000000000001000 +01011011100111010000000000000100 +10111000001000000111100000000000 +01111000000000010000000000000001 +00111000001000011000111100111000 +00101000001011100000000000000000 +01111000000010110000000000000001 +01011011100000000000000000101000 +00111001011010111001001111100100 +00110100000011000000000000000000 +00110100000011010000000000000111 +00101001011000010000000000000000 +00110111100110110000000000101000 +10111011011000000001000000000000 +00110100000000110000000000000100 +11111011111111111111110001000011 +00101011100000010000000000101000 +00110101011010110000000000000100 +01000100001011100000000000000011 +00110101100011000000000000000001 +01011101100011011111111111110111 +01111000000000010000000000000001 +00111000001000011000111100111000 +00101000001000100000000000000000 +00101011100000010000000000101000 +01000100001000100000000000001010 +01111000000011010000000000000001 +00111001101011011001010000000000 +01111000000011000000000000000001 +10111001101000000111000000000000 +00110100000010110000000000000000 +00111001100011001100000111100000 +10111000010000001000100000000000 +00110100000100000000000000000110 +11100000000000000000000000011011 +01111000000000010000000000000001 +00111101100011000000000000000010 +00111000001000011001001111100100 +10110100001011000000100000000000 +00101000001010110000000000000000 +01111000000000010000000000000001 +00111000001000011000101011011000 +10111001011000000001000000000000 +11111011111111111111001100101000 +01111000000000110000000000000001 +00111000011000111011111110010100 +00101000011000100000000000001000 +01111000000000010000000000000001 +00111000001000011010100101111000 +01011000001000100000000000001000 +01111000000000100000000000000001 +00111000010000100001001011101000 +01011000001000100000000000011100 +01111000000000100000000000000001 +00111000010000100001000000100000 +01011000001000100000000000100000 +01111000000000100000000000000001 +01011000001000000000000000000100 +01011000001010110000000000001100 +00111000010000100001000000000000 +11100000000000000000000000101011 +00101001110000100000000000000000 +10111001100000000000100000000000 +10111011011000000001100000000000 +00110100000001000000000000000100 +11111000000000000000100001100000 +00110100000000100000000000000100 +01011100001000100000000000000110 +00101011100000010000000000101000 +00110101110011100000000000000100 +01000100001100010000000000000011 +00110101011010110000000000000001 +01011101011100001111111111110101 +01111000000000010000000000000001 +00111000001000011000111100111000 +00101000001100000000000000000000 +00101011100000010000000000101000 +01011100001100000000000000011100 +00111101011010110000000000000010 +01111000000000010000000000000001 +00111000001000011001010000000000 +10110100001010110000100000000000 +00101000001010110000000000000000 +01111000000000010000000000000001 +00111000001000011000101011111000 +10111001011000000001000000000000 +11111011111111111111001011111101 +01111000000000010000000000000001 +00111000001000011010100101111000 +00110100000000100000000000000001 +01011000001000100000000000001000 +01111000000000100000000000000001 +00111000010000100001000001000100 +01011000001000100000000000011100 +01111000000000100000000000000001 +00111000010000100001000001111100 +01111000000000110000000000000001 +00111000011000111100000111100000 +01011000001000100000000000100000 +01111000000000100000000000000001 +01011000001000110000000000000100 +01011000001010110000000000001100 +00111000010000100001000001100000 +01011000001000100000000000100100 +11100000000000000000000000111010 +01111000000010110000000000000001 +00111001011010111011111101101000 +01111000000011100000000000000001 +01011001011011110000000000000000 +01011001011000000000000000000100 +00110100000100010000000001111111 +00111001110011101010100101111000 +00110100000110110000000000000110 +11100000000000000000000000101111 +01000001011000010000000000000011 +00100000010000100000000011111111 +10111001101000000111100000000000 +11111011111111111111011011111111 +00110100000011000000000000000000 +01000100001000000000000000100110 +00101001111000100000000000000000 +10111001110000000000100000000000 +00110111100000110000000000101000 +00110100000001000000000000000100 +11111011111111111111111000010000 +00101011100000010000000000101000 +00110101111011110000000000000100 +01000100001100000000000000000011 +00110101100011000000000000000001 +01011101100110111111111111110111 +00101011100000010000000000101000 +01011100001100000000000000011010 +00111101100011000000000000000010 +01111000000000010000000000000001 +00111000001000011001010000000000 +10110100001011000000100000000000 +00101000001011000000000000000000 +00101001011000110000000000000100 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000011000101100010100 +11111011111111111111001011000110 +01111000000000010000000000000001 +00111000001000011010100101111000 +00110100000000100000000000000001 +01011000001000100000000000001000 +01111000000000100000000000000001 +00111000010000100000110101011100 +01011000001000100000000000011100 +01111000000000100000000000000001 +00111000010000100000111100011000 +01011000001000100000000000100000 +01111000000000100000000000000001 +01011000001010110000000000000100 +01011000001011000000000000001100 +00111000010000100000111001000000 +11100011111111111111111111001011 +00101001011000010000000000000100 +00110100001000010000000000000001 +01011001011000010000000000000100 +00101001011000100000000000000100 +01001110001000101111111111010001 +01111000000000010000000000000001 +01111000000010110000000000000001 +00110100000000100000000000000001 +00111000001000011011111101100100 +00111001011010111010100101111000 +00110000001000100000000000000000 +10111001011000000000100000000000 +11111000000000000001000000000000 +01111000000011000000000000000001 +00110100000000100000000000000001 +00111001100011001000101100111000 +11100000000000000000000000001000 +00101000100000100000000000100000 +00101000100000110000000000001100 +00110000100000000000000000111111 +10111001100000000000100000000000 +00110100100001000000000000101100 +11111011111111111111001010100000 +00110100000000100000000000000000 +10111001011000000000100000000000 +11111000000000000001000000010101 +10111000001000000010000000000000 +01011100001000001111111111110110 +00101011100111010000000000000100 +00101011100010110000000000100100 +00101011100011000000000000100000 +00101011100011010000000000011100 +00101011100011100000000000011000 +00101011100011110000000000010100 +00101011100100000000000000010000 +00101011100100010000000000001100 +00101011100110110000000000001000 +00110111100111000000000000101000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +01111000000001000000000000000001 +01111000000001010000000000000001 +00111000011000111000111100101100 +00111000100001001000111100110000 +00111000101001011000111100111100 +10111000010000000101100000000000 +01111000000011010000000000000001 +00101000011000100000000000000000 +00101000100000110000000000000000 +00101000101001000000000000000000 +00111001101011011010100101111000 +10111001101000000000100000000000 +11111000000000000001000001110111 +00110100000000101111111111111111 +01001000000000010000000001001110 +10111001101000000000100000000000 +00110100000000100000000000000000 +10111001011000000001100000000000 +00110100000001000000000000000110 +11111000000000000001000010110011 +10111000001000000110000000000000 +10111001101000000000100000000000 +11111000000000000001000010011101 +01001101100000000000000000000110 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011000101101010100 +00111000010000101001000011000100 +11111011111111111111001001101101 +01000001011000010000000000000000 +00110100000000100000000011111111 +01000100001000100000000000001101 +01000001011000110000000000000001 +01000001011000100000000000000010 +10111000011000100001000000000000 +10111000001000100000100000000000 +01000001011000100000000000000011 +10111000001000100000100000000000 +01000001011000100000000000000100 +10111000001000100000100000000000 +01000001011000100000000000000101 +10111000001000100000100000000000 +00100000001000010000000011111111 +01011100001000000000000000001000 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011000101101100100 +00111000010000101001000011000100 +11111011111111111111001001011001 +00110100000011001111111111111111 +11100000000000000000000000000011 +00110100000000100000000000000000 +01001101100000000000000000101000 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000010000101001000011000100 +00111000001000011000101101111100 +11111011111111111111001001010000 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011100000111100000 +00111000010000101100000111110000 +00110100001001100000000010010000 +00110100000001010000000000100010 +00110100000001000000000000110011 +00101000010000010000000000000100 +00100000001000110000000011111111 +01111100011001110000000001000010 +01111100011000110000000000101000 +10100000111000110001100000000000 +01011100011000000000000000001100 +00101000010000110000000000000000 +00110100000011000000000000000000 +00110001011001010000000000000000 +00110001011000110000000000000010 +00000000001000110000000000011000 +00110001011001000000000000000001 +00110001011000110000000000000011 +00000000001000110000000000010000 +00000000001000010000000000001000 +00110001011000110000000000000100 +00110001011000010000000000000101 +00110100010000100000000000010000 +01011100010001101111111111101110 +00110100000000100000000000000000 +01000101100000000000000000000111 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000010000101001000011000100 +00111000001000011000101110011000 +11111011111111111111001000101111 +00110100000000101111111111111111 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +01111000000001000000000000000001 +01111000000001010000000000000001 +00111000011000111000111100101100 +00111000100001001000111100110000 +00111000101001011000111100111100 +10111000010000000110100000000000 +01111000000010110000000000000001 +00101000011000100000000000000000 +00101000100000110000000000000000 +00101000101001000000000000000000 +00111001011010111010100101111000 +10111001011000000000100000000000 +11111000000000000001000000001110 +10111000001000000110000000000000 +01001000000000010000000000001011 +00101001011000110000000001110000 +00110100000000100000000000000000 +10111001011000000000100000000000 +11111000000000000001000010100011 +10111001011000000000100000000000 +00110100000000100000000000000000 +10111001101000000001100000000000 +00110100000001000000000000000110 +11111000000000000001000001110010 +10111000001000000110000000000000 +01111000000000010000000000000001 +00111000001000011010100101111000 +11111000000000000001000000101111 +00110100000000010000000000000000 +01001101100000000000000000000111 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011000101110101000 +00111000010000101001001111010000 +11111011111111111111000111111110 +00110100000000011111111111111111 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +01111000000001000000000000000001 +01111000000001010000000000000001 +00111000011000111000111100101100 +00111000100001001000111100110000 +00111000101001011000111100110100 +00101000011000100000000000000000 +01111000000010110000000000000001 +00101000100000110000000000000000 +00101000101001000000000000000000 +00111001011010111010100101111000 +10111001011000000000100000000000 +11111000000000000000111111100000 +10111000001000000001000000000000 +00110100000000011111111111111111 +01001000000000100000000000001110 +00101001011000110000000001110000 +10111001011000000000100000000000 +00110100000000100000000000000000 +11111000000000000001000001110100 +10111000001000000110000000000000 +00101001011000010000000001110000 +01011101100000010000000000000010 +00110100000011000000000000000001 +01111000000000010000000000000001 +00111000001000011010100101111000 +11111000000000000001000000000010 +01111101100000010000000000000001 +11001000000000010000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111001100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +00110100000011000000000000000000 +10111000001000000101100000000000 +00110100000011010000000000000001 +00110111100011100000000000011000 +11100000000000000000000000100111 +10111001110000000000100000000000 +00110100000000100000000000000000 +10111001100000000001100000000000 +11111011111111111111110111001010 +00100000001011010000000011111111 +01000101101000000000000000100010 +10111001110000000000100000000000 +10111001011000000001000000000000 +00110100000000110000000000010000 +11111000000000000001001011010011 +00110101100011000000000000000001 +01011100001000000000000000011011 +00101011100000010000000000101100 +00000000001000100000000000011000 +00110001011000010000000000010111 +00110001011000100000000000010100 +00000000001000100000000000010000 +00110001011000100000000000010101 +00000000001000100000000000001000 +00101011100000010000000000110000 +00110001011000100000000000010110 +00000000001000100000000000011000 +00110001011000010000000000011011 +00110001011000100000000000011000 +00000000001000100000000000010000 +00110001011000100000000000011001 +00000000001000100000000000001000 +00101011100000010000000000101000 +00110001011000100000000000011010 +00000000001000100000000000011000 +00110001011000010000000000010011 +00110001011000100000000000010000 +00000000001000100000000000010000 +00110001011000100000000000010001 +00000000001000100000000000001000 +00110100000000010000000000000001 +00110001011000100000000000010010 +11100000000000000000000000000011 +01001001101011001111111111011010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000110100 +11000011101000000000000000000000 +00110111100111001111111100101000 +01011011100010110000000001000100 +01011011100011000000000001000000 +01011011100011010000000000111100 +01011011100011100000000000111000 +01011011100011110000000000110100 +01011011100100000000000000110000 +01011011100100010000000000101100 +01011011100100100000000000101000 +01011011100100110000000000100100 +01011011100101000000000000100000 +01011011100101010000000000011100 +01011011100101100000000000011000 +01011011100101110000000000010100 +01011011100110000000000000010000 +01011011100110010000000000001100 +01011011100110110000000000001000 +01011011100111010000000000000100 +00100000010000100000000011111111 +10111000001000000110000000000000 +00100000011000110000000011111111 +01000100010000000000000001000100 +01000000001000100000000000000000 +01000000001001000000000000000001 +01000000001111010000000000000101 +01000000001110110000000000000110 +01000000001110010000000000000111 +01000000001110000000000000001000 +01000000001101110000000000001001 +01000000001101100000000000001010 +01000000001101010000000000001011 +01000000001101000000000000001100 +01000000001100110000000000001101 +01000000001100100000000000001110 +01000000001100010000000000001111 +01000000001100000000000000010000 +01000000001011110000000000010001 +01000000001011100000000000010010 +01000000001011010000000000010011 +01000000001010110000000000010100 +01000000001010100000000000010101 +01000000001010010000000000010110 +01000000001010000000000000010111 +01000000001001110000000000011000 +01000000001001100000000000011001 +01000000001001010000000000011010 +01000000001000110000000000011011 +01000000001000010000000000011100 +00110011100000100000000010111100 +00110011100001000000000010111101 +01000001100000100000000000000010 +00110011100000100000000010111110 +01000001100000100000000000000011 +00110011100000100000000010111111 +01000001100000100000000000000100 +00110011100000100000000011000000 +00110011100000010000000011011000 +00110111100000010000000010111100 +00110011100111010000000011000001 +00110011100110110000000011000010 +00110011100110010000000011000011 +00110011100110000000000011000100 +00110011100101110000000011000101 +00110011100101100000000011000110 +00110011100101010000000011000111 +00110011100101000000000011001000 +00110011100100110000000011001001 +00110011100100100000000011001010 +00110011100100010000000011001011 +00110011100100000000000011001100 +00110011100011110000000011001101 +00110011100011100000000011001110 +00110011100011010000000011001111 +00110011100010110000000011010000 +00110011100010100000000011010001 +00110011100010010000000011010010 +00110011100010000000000011010011 +00110011100001110000000011010100 +00110011100001100000000011010101 +00110011100001010000000011010110 +00110011100000110000000011010111 +11111011111111111111111101110101 +01011100001000000000000000001001 +01111000000000010000000000000001 +00111000001000011000101111000100 +11111011111111111111000101000001 +10111001100000000000100000000000 +00110100000000100000000000000001 +00110100000000110000000000000000 +11111011111111111111110101000101 +11100000000000000000000001100011 +01111000000000010000000000000001 +00111000001000011000101111011100 +11111011111111111111000100111001 +00110100000011010000000000000000 +00110100000010110000000000000001 +00110111100100010000000001001000 +00110111100100000000000011011100 +11100000000000000000000001000110 +00001001101011100000000000011101 +00110100000000100000000000000000 +10111001101000000001100000000000 +10110110001011100111100000000000 +10111001111000000000100000000000 +11111011111111111111110100110110 +10111000001000000101100000000000 +01001100000000010000000001010100 +10111001111000000000100000000000 +10111001100000000001000000000000 +00110100000000110000000000010000 +11111000000000000001001000111111 +01011100001000000000000000111000 +01000001100001010000000000010100 +01000001100000010000000000010101 +01000001100000110000000000010110 +00111100101001010000000000011000 +00111100001000010000000000010000 +00111100011000110000000000001000 +10111000001001010000100000000000 +10111000011000010001100000000000 +01000001100000010000000000010111 +10110110000011100001000000000000 +00110100010001001111111110000000 +10111000001000110001100000000000 +00000000011000010000000000011000 +00110000010000011111111110000000 +00000000011000010000000000010000 +00110000100000110000000000000011 +00110000100000010000000000000001 +00000000011000010000000000001000 +00110000100000010000000000000010 +01000001100001010000000000011000 +01000001100000010000000000011001 +01000001100000110000000000011010 +00111100101001010000000000011000 +00111100001000010000000000010000 +00111100011000110000000000001000 +10111000001001010000100000000000 +10111000011000010001100000000000 +01000001100000010000000000011011 +00110100010001001111111110000100 +10111000001000110001100000000000 +00000000011000010000000000011000 +00110000010000011111111110000100 +00000000011000010000000000010000 +00110000100000110000000000000011 +00110000100000010000000000000001 +00000000011000010000000000001000 +00110000100000010000000000000010 +01000001100001010000000000010000 +01000001100000010000000000010001 +01000001100000110000000000010010 +00111100101001010000000000011000 +00111100001000010000000000010000 +00111100011000110000000000001000 +10111000001001010000100000000000 +10111000011000010001100000000000 +01000001100000010000000000010011 +00110100010001001111111101111100 +10111000001000110001100000000000 +00000000011000010000000000011000 +00110000010000011111111101111100 +00000000011000010000000000010000 +00110000100000110000000000000011 +00110000100000010000000000000001 +00000000011000010000000000001000 +00110000100000010000000000000010 +00110101101011010000000000000001 +01001001011011011111111110111011 +11111011111111111111111011110111 +00110100000000101111111111111111 +10111001011000000111000000000000 +00110100000011000000000000000000 +00110111100011010000000001001000 +01011100001000100000000000001101 +01111000000000010000000000000001 +00111000001000011000001001111000 +11111011111111111111000011100101 +00110100000010111111111111111111 +11100000000000000000000000001011 +00001001100000010000000000011101 +00110100000000100000000000000001 +00110100000000110000000000000000 +10110101101000010000100000000000 +11111011111111111111110011100110 +00110101100011000000000000000001 +01001000000000010000000000000011 +10111001100000000000100000000000 +01001001110011001111111111111000 +10111000001000000101100000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000001000100 +00101011100011000000000001000000 +00101011100011010000000000111100 +00101011100011100000000000111000 +00101011100011110000000000110100 +00101011100100000000000000110000 +00101011100100010000000000101100 +00101011100100100000000000101000 +00101011100100110000000000100100 +00101011100101000000000000100000 +00101011100101010000000000011100 +00101011100101100000000000011000 +00101011100101110000000000010100 +00101011100110000000000000010000 +00101011100110010000000000001100 +00101011100110110000000000001000 +00110111100111000000000011011000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +01111000000001000000000000000001 +01111000000001010000000000000001 +00111000011000111000111100101100 +00111000100001001000111100110000 +00111000101001011000111101000000 +00100000010011100000000011111111 +01111000000010110000000000000001 +00101000011000100000000000000000 +00101000100000110000000000000000 +00101000101001000000000000000000 +00111001011010111010100101111000 +10111000001000000110100000000000 +10111001011000000000100000000000 +11111000000000000000111010101010 +00110100000011001111111111111111 +01001000000000010000000000100100 +01000101110000000000000000010010 +00101001011000110000000001110000 +00110100000000100000000000000000 +10111001011000000000100000000000 +11111000000000000000111100111110 +00101001101000100000000000000000 +01111000000000011000000000000000 +00110111100000110000000000011000 +10111000010000010000100000000000 +01011011100000010000000000011000 +00110100000000100000000000000000 +10111001011000000000100000000000 +00110100000001000000000000000100 +11111000000000000000111100001001 +01111100001000010000000000000100 +11001000000000010110000000000000 +00111001100011000000000000000001 +11100000000000000000000000001111 +00110100000000100000000000000000 +10111001011000000000100000000000 +00110111100000110000000000011000 +00110100000001000000000000000100 +11111000000000000000111011010100 +00110100000000100000000000000100 +01011100001000100000000000001000 +01111000000000100000000000000001 +00111000010000101000111011000100 +00101011100011000000000000011000 +00101000010000010000000000000000 +10100001100000010000100000000000 +00000001100011000000000000011111 +01011001101000010000000000000000 +01111000000000010000000000000001 +00111000001000011010100101111000 +11111000000000000000111010110101 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +01111000000001000000000000000001 +01111000000001010000000000000001 +00111000011000111000111100101100 +00111000100001001000111100110000 +00111000101001011000111101000100 +00101000011000100000000000000000 +01111000000010110000000000000001 +00101000100000110000000000000000 +00101000101001000000000000000000 +00111001011010111010100101111000 +10111001011000000000100000000000 +11111000000000000000111001101100 +10111000001000000001000000000000 +00110100000000011111111111111111 +01001000000000100000000000001110 +00101001011000110000000001110000 +10111001011000000000100000000000 +00110100000000100000000000000000 +11111000000000000000111100000000 +10111000001000000110000000000000 +00101001011000010000000001110000 +01011101100000010000000000000010 +00110100000011000000000000000001 +01111000000000010000000000000001 +00111000001000011010100101111000 +11111000000000000000111010001110 +01111101100000010000000000000001 +11001000000000010000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111011100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +01111000000001000000000000000001 +01111000000001010000000000000001 +00111000011000111000111100101100 +00111000100001001000111100110000 +00111000101001011000111101000100 +00101000011000100000000000000000 +01111000000011000000000000000001 +00101000100000110000000000000000 +00101000101001000000000000000000 +10111000001000000110100000000000 +00111001100011001010100101111000 +00110100000000010000000000100000 +00110011100000010000000000100111 +10111001100000000000100000000000 +11111000000000000000111000111111 +00110100000010111111111111111111 +01001000000000010000000001010001 +00001111100000000000000000100100 +00110111100011100000000000100110 +00110100000010110000000011111111 +11100000000000000000000000000110 +01000011100000010000000000100110 +01000100001010110000000000001100 +00101111100000010000000000100100 +00110100001000010000000000000001 +00001111100000010000000000100100 +00101111100000100000000000100100 +10111001100000000000100000000000 +10111001110000000001100000000000 +00110100010000100000000000000010 +00110100000001000000000000000001 +11111000000000000000111001110001 +00110100000000100000000000000001 +01000100001000101111111111110100 +00101111100000010000000000100100 +00110100000000100000000100000000 +01010000010000010000000000000010 +00001111100000000000000000100100 +01111000000011000000000000000001 +10111001101000000101100000000000 +00111001100011001010100101111000 +00110100000100000000000000001010 +00110100000011110000000000100000 +00110111100011100000000000100111 +11100000000000000000000000011110 +11111000000000000001000100001110 +00101111100000100000000000100100 +00101001011000110000000000000100 +10111000001000000110100000000000 +00110100010000100000000000000010 +10111001100000000000100000000000 +10111001101000000010000000000000 +11111000000000000000111010001000 +01011100001011010000000000101000 +00101111100000100000000000100100 +10110100001000100000100000000000 +00100000001000101111111111111111 +00101001011000010000000000001000 +00001111100000100000000000100100 +01000100001000000000000000000011 +00110011100011110000000000100111 +11100000000000000000000000000010 +00110011100100000000000000100111 +00110100010000100000000000000010 +10111001100000000000100000000000 +10111001110000000001100000000000 +00110100000001000000000000000001 +11111000000000000000111001111001 +00110100000000100000000000000001 +00110101011010110000000000000100 +01011100001000100000000000010111 +00101111100000010000000000100100 +00110100001000010000000000000001 +00001111100000010000000000100100 +00101001011000010000000000000100 +01011100001000001111111111100010 +10111001100000000000100000000000 +00110100000000100000000000000000 +00110111100000110000000000100100 +00110100000001000000000000000010 +11111000000000000000111001101100 +10111000001000000110100000000000 +00110100000000010000000000000010 +00110100000010111111111111111111 +01011101101000010000000000001010 +10111001100000000000100000000000 +00110100000000100000000000000000 +00110111100000110000000000100010 +00110100000001000000000000000010 +11111000000000000000111000110111 +11100100001011010101100000000000 +00110101011010111111111111111111 +11100000000000000000000000000010 +00110100000010111111111111111111 +01111000000000010000000000000001 +00111000001000011010100101111000 +11111000000000000000111000011101 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000100100 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +01111000000001000000000000000001 +01111000000001010000000000000001 +00111000011000111000111100101100 +00111000100001001000111100110000 +00111000101001011000111101000100 +00101000011000100000000000000000 +01111000000011000000000000000001 +00101000100000110000000000000000 +00101000101001000000000000000000 +00111001100011001010100101111000 +10111001100000000000100000000000 +11111000000000000000110111001111 +00110100000011011111111111111111 +01001000000000010000000000100010 +01111000000000010000000000000001 +00111000001000011000101111111000 +01111000000011010000000000000001 +11111011111111111110111111001111 +00110100000010110000000000000000 +00110111100011110000000000011111 +00110100000011100000000011111111 +00111001101011010111111111011000 +00110101011000100000000000000010 +10111001100000000000100000000000 +10111001111000000001100000000000 +00110100000001000000000000000001 +11111000000000000000111000000011 +00110100000000100000000000000001 +01011100001000100000000000001111 +01000011100000100000000000011111 +01000100010011100000000000000101 +10111001101000000000100000000000 +00110101011010110000000000000001 +11111011111111111110111110111111 +00100001011010111111111111111111 +01000011100000010000000000011111 +01011100001011101111111111110010 +00110100000011010000000000000000 +01011101011000000000000000000110 +01111000000000010000000000000001 +00111000001000011000000000011100 +11111011111111111110111110110111 +11100000000000000000000000000010 +00110100000011011111111111111111 +01111000000000010000000000000001 +00111000001000011010100101111000 +11111000000000000000110111011100 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +10111000001000000110100000000000 +00100000011011000000000011111111 +10111000100000000000100000000000 +01111000000000110000000000000001 +01111000000001000000000000000001 +01111000000001010000000000000001 +00111000011000111000111100101100 +00111000100001001000111100110000 +00111000101001011000111101000100 +00100000010100010000000011111111 +00101000011000100000000000000000 +00101000100000110000000000000000 +00101000101001000000000000000000 +00111000001000011010100101111000 +00110100000010111111111111111111 +11111000000000000000110110001001 +01001000000000010000000000100010 +01011101100000000000000000000101 +01111000000000110000000000000001 +00111000011000111011111101110000 +00110100000000010000000000000010 +00001100011000010000000000000000 +01111000000011000000000000000001 +01111000000011100000000000000001 +00110100000010110000000000000000 +00111001100011001011111101110000 +00111001110011101010100101111000 +00110100000100000000000011111111 +00110100000011110000000000001010 +00101101100000100000000000000000 +00110100010000011111111111111110 +01010100001100010000000000001111 +00110100010000010000000000000001 +00001101100000010000000000000000 +10111001101000000001100000000000 +10111001110000000000100000000000 +00110100000001000000000000000001 +11111000000000000000110110110110 +00110100000000100000000000000001 +01011100001000100000000000000111 +01000001101000010000000000000000 +01000100001100000000000000000110 +00110101011010110000000000000001 +00110101101011010000000000000001 +01011100001011111111111111110001 +11100000000000000000000000000010 +00110100000010111111111111111111 +01111000000000010000000000000001 +00111000001000011010100101111000 +11111000000000000000110110010111 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111011111110010100 +01111000000000100000000000000001 +01111000000000110000000000000001 +10111001011000000000100000000000 +00111000010000101011111110100000 +00111000011000111011111110011100 +11111011111111111111010100100011 +00101001011000010000000000000000 +01011100001000000000000000000111 +00101001011000100000000000001000 +01011100010000010000000000000101 +01111000000000010000000000000001 +01011001011000000000000000000100 +01011001011000010000000000001000 +11100000000000000000000000000101 +01111000000000010000000000000001 +00111000001000011011111110010100 +00110100000000100000000000000001 +01011000001000100000000000000100 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000011000000111000000000000 +00100000100011010000000011111111 +01100100011000110000000000000000 +01100100001001000000000000000000 +10111000010000000110000000000000 +10100000100000110001100000000000 +00110100000010111111111111101010 +01011100011000000000000000101011 +01000100100000110000000000001000 +01111000000000010000000000000001 +00111000001000011000110000010100 +11111011111111111110111100110100 +00001001110000100000000000000101 +10111001100000000000100000000000 +11111011111111111111100010010110 +11100000000000000000000000010010 +00110100000000110000000000000001 +01011100001000110000000000010010 +01111000000000010000000000000001 +10111001101000000001000000000000 +10111001100000000001100000000000 +00111000001000011000110000101100 +11111011111111111110111100101001 +01111000000001010000000000000001 +01111000000000010000000000000001 +00111000101001011011111101101000 +00111000001000011010100101111000 +01011000101000000000000000000000 +01011000101011010000000000000100 +01011000001001010000000000000100 +10111001100000000001000000000000 +00110100000000110000000101000000 +11111011111111111111101010010001 +00110100000010110000000000000000 +11100000000000000000000000010000 +00110100000000110000000000000010 +00110100000010110000000000000000 +01011100001000110000000000001101 +01111000000000010000000000000001 +00111000001000011000110001001100 +11111011111111111110111100010111 +01111000000000010000000000000001 +01111000000001000000000000000001 +00111000001000011010100101111000 +00111000100001001100000111100000 +01011000001001000000000000000100 +10111001100000000001000000000000 +10111000100000000000100000000000 +00110100000000110000000101000000 +11111000000000000000010010000100 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111110111100 +01011011100010110000000000101100 +01011011100011000000000000101000 +01011011100011010000000000100100 +01011011100011100000000000100000 +01011011100011110000000000011100 +01011011100100000000000000011000 +01011011100100010000000000010100 +01011011100100100000000000010000 +01011011100100110000000000001100 +01011011100101000000000000001000 +01011011100111010000000000000100 +10111000001000000110100000000000 +10111000010000000101100000000000 +10111000011000000111000000000000 +00110100000000100000000000000000 +00110111100000010000000000110000 +00110100000000110000000000010011 +00100000100100000000000011111111 +11111000000000000000111100100100 +01100101110000100000000000000000 +01100101011000010000000000000000 +01100101101100100000000000000000 +10111000010000010000100000000000 +01111000000011000000000000000001 +10100010010000010000100000000000 +00111001100011001010110000101100 +01011100001000000000000010001011 +11001000000011100001000000000000 +00110101110000010000000100111111 +10100000010000010000100000000000 +10110100001010110000100000000000 +10111001100000000111100000000000 +00110101100001110000000100000000 +10111001100000000010100000000000 +00110101110001101111111111111111 +00101000101001000000000001010100 +00101000101000110000000001001100 +01011000101000010000000001001100 +11001000100000110001100000000000 +00010100001001000000000000011111 +01011000101001000000000001001000 +10110100001000110010000000000000 +01011000101001000000000001010100 +00110100011000110000000000000001 +00010100100001000000000000011111 +10110100011000010000100000000000 +01011000101001000000000001010000 +10110100110000010000100000000000 +00110100101001010000000001000000 +10100000001000100000100000000000 +01011100101001111111111111110001 +01111000000000010000000000000001 +00111000001000011010110000101100 +01011000001000000000000000001000 +01011000001010110000000000001100 +00101001100000100000000100010000 +01111000000100010000000000000001 +00110101111101000000000101000000 +01011000001000100000000000010000 +00101001100000100000000100010100 +00110111100100110000000000110000 +10111001111000000110000000000000 +01011000001000100000000000010100 +00111010001100011000110001101100 +00110101100000100000000000101100 +00110100000000110000000000010010 +10111010011000000000100000000000 +11111000000000000001000000100101 +00101001100000110000000000001100 +00101001100001000000000000010100 +10111010001000000000100000000000 +10111010011000000001000000000000 +00110101100011000000000001000000 +11111011111111111110111010111011 +01011101100101001111111111110110 +01000110010000000000000000010001 +01111000000000010000000000000001 +10111001011000000001000000000000 +00111000001000011000110010010000 +11111011111111111110111010110101 +00001001110000100000000000000101 +10111001011000000000100000000000 +00110100000011000000000000000000 +11111011111111111111100000010110 +00110100000011100000000101000000 +10110101100010110000100000000000 +10110101111011000001000000000000 +00110100000000110000000001000000 +00110101100011000000000001000000 +11111011111111111111100000111000 +01011101100011101111111111111011 +11100000000000000000000001000110 +00110100000000010000000000000001 +01011101101000010000000000100010 +00110100000000010000000000000000 +10111010000000000001000000000000 +11111011111111111111001011000101 +01011100001000000000000000000100 +01111000000000010000000000000001 +00111000001000011000110010110100 +11100000000000000000000000101010 +01111000000011100000000000000001 +00111001110011101011111101101000 +01111000000000010000000000000001 +01011001110100000000000000000100 +10111010000000000001000000000000 +01011001110000000000000000000000 +10111001011000000001100000000000 +00111000001000011000110011001100 +01111000000011000000000000000001 +11111011111111111110111010010110 +00111001100011001010100101111000 +01011001100011100000000000000100 +10111001100000000000100000000000 +10111001011000000001000000000000 +00110100000000110000000101000000 +11111011111111111111101000000010 +00110100000011100000000000000000 +00110100000100000000000101000000 +10110101110010110001000000000000 +10110101111011100001100000000000 +10111001100000000000100000000000 +00110100000001000000000001000000 +00110101110011100000000001000000 +11111011111111111111101000110000 +01011101110100001111111111111010 +11100000000000000000000000100011 +00110100000000010000000000000010 +01011101101000010000000000100001 +01111000000011000000000000000001 +01111000000000010000000000000001 +00111000001000011100000111100000 +00111001100011001010100101111000 +00110100000000100000000000000000 +01011001100000010000000000000100 +00110111100000110000000001000100 +00110100000001000000000000000100 +11111000000000000000001111001001 +00110100000000100000000000000100 +01000100001000100000000000000101 +01111000000000010000000000000001 +00111000001000011000110011111100 +11111011111111111110111001110110 +11100000000000000000000000010110 +01111000000000010000000000000001 +10111001011000000001000000000000 +00111000001000011000110100011000 +11111011111111111110111001110001 +00101001100000010000000000000100 +10111001011000000001000000000000 +00110100000000110000000101000000 +11111000000000000000001111100011 +00110100000011100000000000000000 +00110100000100000000000101000000 +00101001100000010000000000000100 +10110101110010110001000000000000 +10110101111011100001100000000000 +00110100000001000000000001000000 +00110101110011100000000001000000 +11111000000000000000001111000111 +01011101110100001111111111111010 +00110100000000010000000000000000 +00110100000000100000000001010000 +11111011111111111111101100000110 +11100000000000000000000000000010 +00110100000011011111111111101010 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000101100 +00101011100011000000000000101000 +00101011100011010000000000100100 +00101011100011100000000000100000 +00101011100011110000000000011100 +00101011100100000000000000011000 +00101011100100010000000000010100 +00101011100100100000000000010000 +00101011100100110000000000001100 +00101011100101000000000000001000 +00110111100111000000000001000100 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +10111000001000000111100000000000 +10111000010000000111000000000000 +00110100000011010000000000001000 +00110100000011000000000000000001 +00111001011010111010101000110000 +10100001100011100001100000000000 +00101001011001000000000000001000 +01111100011000100000000000000000 +10111001111000000000100000000000 +00110101101011011111111111111111 +11011000100000000000000000000000 +00111101100011000000000000000001 +01011101101000001111111111111001 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +10111000001000000111100000000000 +00110100000011100000000000001000 +00110100000011000000000000000000 +00110100000011010000000000000001 +00111001011010111010101000110000 +00101001011000100000000000000100 +10111001111000000000100000000000 +00110101110011101111111111111111 +11011000010000000000000000000000 +01111100001000100000000000000000 +11001000000000100001000000000000 +10100001101000100001000000000000 +10111001100000100110000000000000 +00111101101011010000000000000001 +01011101110000001111111111110111 +00110100000000010000000001100100 +11111011111111111110001001011000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111000000 +01011011100010110000000001000000 +01011011100011000000000000111100 +01011011100011010000000000111000 +01011011100011100000000000110100 +01011011100011110000000000110000 +01011011100100000000000000101100 +01011011100100010000000000101000 +01011011100100100000000000100100 +01011011100100110000000000100000 +01011011100101000000000000011100 +01011011100101010000000000011000 +01011011100101100000000000010100 +01011011100101110000000000010000 +01011011100110000000000000001100 +01011011100110010000000000001000 +01011011100111010000000000000100 +00110100000000100000000000000000 +10111000001000000110000000000000 +00110100000000110000000010000000 +00110100001000010000000000001000 +01111000000011010000000000000001 +11111000000000000000111000101101 +00111001101011011010101000110000 +00101001101000010000000000000000 +00110100000011110000000000000000 +01000100001000000000000001100001 +10111001100000000101100000000000 +00110100000100100000000000000000 +00110100000100010000000000000000 +01111000000110010100000000000000 +00110100000101100000000000000001 +00110100000110000000000000001000 +01011001011011000000000000001000 +01000101111000000000000000100010 +00101001011000010000000000000000 +01111000000000101000000000000000 +00110100000000110000000000000000 +01011001011000010000000000010000 +00101001011000010000000000000100 +01011001011000010000000000010100 +10100000010110010000100000000000 +01000100001000000000000000000011 +01111000000000100100000000000000 +00110100000000110000000000000000 +10100000011100010000100000000000 +10100000010100100010100000000000 +10111000101000010010100000000000 +00101001011001000000000000010000 +00101001011000010000000000010100 +01011100101000000000000000001110 +10100100011000000011000000000000 +10100000001001100000100000000000 +01011001011000010000000000010100 +00000000011000110000000000000001 +00111100010000010000000000011111 +10100100010000000011100000000000 +00000000010000100000000000000001 +10100000100001110010000000000000 +10111000001000110001100000000000 +01011001011001000000000000010000 +10111000010000110000100000000000 +01011100001001011111111111101011 +11100000000000000000000000111100 +10111000100000100001000000000000 +10111000001000110001100000000000 +01011001011000100000000000010000 +01011001011000110000000000010100 +00110101111011100000000000000001 +00101001101000100000000000000000 +00111101110011100000000000000100 +10111001100000000000100000000000 +10110101100011100111000000000000 +11011000010000000000000000000000 +01011100001101100000000000110001 +10111001100000000000100000000000 +00110100000000100000000011110000 +11111011111111111111111101110100 +00110100000101000000000001000000 +00110100000100110000000000000000 +00110100000100000000000000000001 +00110100000100100000000000000000 +00110100000100010000000000000000 +00101001101000100000000000000100 +10111001100000000000100000000000 +00101001110101110000000000000100 +11011000010000000000000000000000 +00101001101000100000000000000100 +10111000001000001010100000000000 +10111001100000000000100000000000 +10100010111100001011100000000000 +11011000010000000000000000000000 +01000110101000010000000000001000 +00101001101000110000000000001000 +10111010101000000001000000000000 +01111110101101010000000000000000 +10111001100000000000100000000000 +11011000011000000000000000000000 +01011110101101100000000000010001 +11100000000000000000000000000111 +00101001101000110000000000001000 +10111001100000000000100000000000 +10111010111000000001000000000000 +11011000011000000000000000000000 +01000110111000000000000000001001 +11100000000000000000000000001010 +00101001110000010000000000000000 +10111000001100110000100000000000 +01011001110000010000000000000000 +00101001110000010000000000000100 +10111000001100000000100000000000 +01011001110000010000000000000100 +11100000000000000000000000000011 +10111010010100111001000000000000 +10111010001100001000100000000000 +00111110000000010000000000000001 +00111110011100110000000000000001 +11110110000000011000000000000000 +00110110100101001111111111111111 +10110110000100111001100000000000 +10111000001000001000000000000000 +01011110100000001111111111011010 +11100000000000000000000000010100 +10111001111000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000001000000 +00101011100011000000000000111100 +00101011100011010000000000111000 +00101011100011100000000000110100 +00101011100011110000000000110000 +00101011100100000000000000101100 +00101011100100010000000000101000 +00101011100100100000000000100100 +00101011100100110000000000100000 +00101011100101000000000000011100 +00101011100101010000000000011000 +00101011100101100000000000010100 +00101011100101110000000000010000 +00101011100110000000000000001100 +00101011100110010000000000001000 +00110111100111000000000001000000 +11000011101000000000000000000000 +00110101111011110000000000000001 +00110101011010110000000000010000 +01011101111110001111111110010001 +11100011111111111111111111101010 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +01111000000000010000000000000001 +00111000001000011010101000110000 +00101000001000100000000000000000 +00101001011000010000000000000000 +00110100000011000000000000000000 +00110100000011010000000001000000 +11011000010000000000000000000000 +00101001011000010000000000000000 +00110100000000100000000001010101 +11111011111111111111111100100000 +00101001011000010000000000001000 +00101001011000100000000000001100 +10111001100000000001100000000000 +00110101100011000000000000001000 +11111000000000000000110001000100 +00101001011000010000000000000000 +11111011111111111111111100011001 +01011101100011011111111111111001 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101000001000010000000000000000 +01111000000000100000000000000001 +00111000010000101100001001101000 +00101000010000100000000000000000 +00111100001000010000000000001000 +00111000001000010000000000001010 +01011000010000010000000000000000 +00101000010000010000000000000000 +00100000001000110000000000001000 +01011100011000001111111111111110 +00100000001000010000000000000001 +00011000001000010000000000000001 +11000011101000000000000000000000 +00101000001000010000000000000000 +01111000000000100000000000000001 +00111000010000101100001001101000 +00101000010000100000000000000000 +00111100001000010000000000001000 +00111000001000010000000000001001 +01011000010000010000000000000000 +00101000010000010000000000000000 +00100000001000110000000000001000 +01011100011000001111111111111110 +00100000001000010000000000000001 +11000011101000000000000000000000 +00101000001000010000000000000000 +01111000000000110000000000000001 +00111000011000111100001001101000 +00111100001000010000000000001000 +00101000011000110000000000000000 +01111100010000100000000000000000 +00111000001000010000000000001000 +10111000001000100001000000000000 +01011000011000100000000000000000 +00101000011000010000000000000000 +00100000001000010000000000001000 +01011100001000001111111111111110 +11000011101000000000000000000000 +01111000000000010000000000000001 +01111000000000110000000000000001 +00111000001000011100001001101000 +00111000011000111000111101001000 +00101000001000010000000000000000 +00101000011000100000000000000000 +01011000001000100000000000000100 +11000011101000000000000000000000 +00110111100111001111111111000100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +00101000001000010000000000000000 +00110100000010111111111111111111 +01000100001000000000000000101010 +00101001100000100000000000000100 +01000100010000000000000000101000 +11111011111111111110000100010110 +01111000000011100000000000000001 +10111000001000000110100000000000 +00110100000010110000000000000000 +00110100000100000000000000011111 +00110111100011110000000000100000 +00111001110011101000110101001100 +11100000000000000000000000001011 +11111011111111111110000100001110 +00100000001001000000000011111111 +10110101011011010001000000000000 +10110101111010110000100000000000 +00110000001001000000000000000000 +10111000010000000001100000000000 +10111001110000000000100000000000 +10111000100000000010100000000000 +11111011111111111110110100010101 +00110101011010110000000000000001 +00101001100000010000000000000100 +11101110000010110001100000000000 +00110101100011000000000000000100 +01111100001000100000000000000000 +10100000011000100001000000000000 +01011100010000001111111111110001 +01111000000000010000000000000001 +10111001011000000010000000000000 +10111001101000000001000000000000 +10111001111000000001100000000000 +00111000001000011100000111100000 +11111000000000000000001001101010 +10111000001000000110000000000000 +10111001011000000001100000000000 +01111000000000010000000000000001 +11111101100010110101100000000000 +00111000001000011000110101110000 +10111001101000000001000000000000 +10111001100000000010000000000000 +11111011111111111110110100000000 +11001000000010110101100000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000111100 +11000011101000000000000000000000 +00110111100111001111111111001000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +00110100000001011111111111111111 +01000100001000000000000000101100 +00101001011000100000000000000100 +01000100010000000000000000101010 +11111011111111111110000011011000 +10111000001000000111000000000000 +00101001011000010000000000000100 +11111011111111111110000011010101 +10111000001000000101100000000000 +00110100000000010000000000100000 +01001100001010110000000000000010 +00110100000010110000000000100000 +00110111100011010000000000011100 +01111000000000010000000000000001 +10111001011000000010000000000000 +10111001110000000001000000000000 +10111001101000000001100000000000 +00111000001000011100000111100000 +11111000000000000000001000100111 +10111000001000000110000000000000 +01111000000000010000000000000001 +10111001011000000001100000000000 +00111000001000011000110110010000 +10111001110000000001000000000000 +10111001100000000010000000000000 +11111011111111111110110011010010 +11101001100010110101100000000000 +11101100000011000000100000000000 +00110100000001011111111111111111 +10111001011000010101100000000000 +01011101011000000000000000001111 +10111001101000000111100000000000 +01111000000011010000000000000001 +00111001101011011000110101001100 +10110101111010110000100000000000 +01000000001001000000000000000000 +10110101011011100001000000000000 +10111001101000000000100000000000 +10111000010000000001100000000000 +10111000100000000010100000000000 +00110101011010110000000000000001 +11111011111111111110110011000010 +01001001100010111111111111111000 +11111101100010110010100000000000 +11001000000001010010100000000000 +10111000101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000111000 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +01111000000011010000000000000001 +00111001101011011100000111100000 +10111001101000000000100000000000 +01111000000010110000000000000001 +01111000000011110000000000000001 +01111000000011100000000000000001 +11111011111111111111111010010110 +00111001011010111100000111110000 +00110100000011000000000000000000 +00111001111011111000110110110000 +00111001110011101000110111001000 +00110100000100000000000000001000 +00101001011000110000000000000000 +00101001011001000000000000000100 +10111000011001000000100000000000 +01000100001000000000000000010000 +10111001100000000001000000000000 +10111001111000000000100000000000 +11111011111111111110110010011011 +00111101100000010000000000000100 +00110100000000100000000000000000 +00110100001000010000000000001000 +10110101101000010000100000000000 +11111000000000000000000000010101 +00100000001000111111111111111111 +00001000011000110010011100010000 +10111000001000000001000000000000 +00010100010000100000000000010000 +00010100011000110000000000010000 +10111001110000000000100000000000 +11111011111111111110110010001111 +00110101100011000000000000000001 +00110101011010110000000000010000 +01011101100100001111111111101011 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01000000001011010000000000001111 +10111000001000000110000000000000 +00110100000000010000000000101000 +10111000010000000111000000000000 +01000101101000010000000000000101 +00110100000000010000000001000010 +01000101101000010000000000000011 +00110100000000010000000000010000 +01011101101000010000000000110100 +00100001110010110000000000000010 +01011101011000000000000000001111 +10111001100000000000100000000000 +11111011111111111111111011110000 +00101001100000010000000000000000 +00110100000000100000000001000100 +00100001110011100000000000000001 +11111011111111111111111000011011 +00110100000000010000000000000000 +01011101110010110000000000101101 +01111000000010110000000000000001 +00111001011010111010101000110000 +00101001011000100000000000000100 +00101001100000010000000000000000 +11011000010000000000000000000000 +01000100001000001111111111111101 +10111001100000000000100000000000 +11111011111111111111111011100010 +00101001100000010000000000000000 +01111000000010110000000000000001 +00110100000000100000000010111110 +00111001011010111011111101110100 +11111011111111111111111000001100 +00110101011011100000000000001000 +11100000000000000000000000000101 +00101001100000010000000000000000 +11111011111111111111111000100101 +00110001011000010000000000000000 +00110101011010110000000000000001 +01011101011011101111111111111100 +01111000000000100000000000000001 +00111000010000101011111101110100 +01000000010000010000000000000001 +01000000010000110000000000000000 +00111100001000010000000000001000 +10111000001000110000100000000000 +00110100000000110000000000101000 +11011100001000000000100000000000 +01000101101000110000000000001011 +00110100000000110000000001000010 +01000101101000110000000000001001 +00110100000000110000000000010000 +01011101101000110000000000001011 +01000000010000100000000000000110 +00111100001000010000000000001111 +00111100010000100000000000001100 +00110100001000011100000000000000 +10111000001000100000100000000000 +11100000000000000000000000000110 +00111100001000010000000000001100 +11100000000000000000000000000100 +01111000000000011000000000000000 +11100000000000000000000000000010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000110000000000000000 +10111000001000000010000000000000 +00110100000010010000000000101000 +00110100000010000000000001000010 +00110100000001110000000000010000 +00110100000001100000000000001000 +01000000100001010000000000010111 +01000100101010010000000000000011 +01000100101010000000000000000010 +01011100101001110000000000000110 +00111100011000110000000000000100 +00110100011000110000000000001000 +10110100001000110000100000000000 +11111011111111111111111110100101 +11100000000000000000000000000101 +00110100011000110000000000000001 +00110100100001000000000000010000 +01011100011001101111111111110101 +01111000000000011000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000001000000000000000 +10111000011000000110000000000000 +11111011111111111111111010010010 +00101001011000010000000000000000 +00110100000000100000000000001111 +00100010000011100000000011111111 +11111011111111111111110110111101 +00101001011000010000000000000000 +10111001110000000001000000000000 +00100010000100001111111100000000 +11111011111111111111110110111001 +00010110000100000000000000001000 +00101001011000010000000000000000 +10111010000000000001000000000000 +00110100000011010000000000000000 +11111011111111111111110110110100 +11100000000000000000000000000101 +00101001011000010000000000000000 +00110100000000100000000011111111 +00110101101011010000000000000001 +11111011111111111111110110101111 +01001001100011011111111111111100 +10111001011000000000100000000000 +11111011111111111111111001111101 +00101001011000010000000000000000 +00110100000000100000000010101010 +11111011111111111111110110101001 +00101001011000010000000000000000 +11111011111111111111110111000100 +10111000001000000111100000000000 +01011100001011100000000000100001 +00101001011000010000000000000000 +11111011111111111111110111000000 +10111000001000000111000000000000 +01011100001100000000000000011111 +00101001011000010000000000000000 +00110100000011010000000000000000 +00110100000100010000000011111111 +11111011111111111111110110111010 +10111000001000001000000000000000 +11100000000000000000000000000101 +00101001011000010000000000000000 +11111011111111111111110110110110 +01011100001100010000000000011000 +00110101101011010000000000000001 +01001001100011011111111111111100 +10111001011000000000100000000000 +11111011111111111111111001100101 +00101001011000010000000000000000 +00110100000000100000000001010101 +11111011111111111111110110010001 +00101001011000010000000000000000 +10111001111000000001000000000000 +11111011111111111111110110001110 +00101001011000010000000000000000 +10111001110000000001000000000000 +11111011111111111111110110001011 +00101001011000010000000000000000 +10111010000000000001000000000000 +11111011111111111111110110001000 +00110100000000010010011100010000 +11111011111111111110000000010011 +11100000000000000000000000000110 +00110100000011001111111111111111 +11100000000000000000000000000100 +00110100000011001111111111111110 +11100000000000000000000000000010 +00110100000011001111111111111101 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000001000100000000000 +10111000011000001000000000000000 +10111000100000000110000000000000 +11111011111111111111111000111000 +00101001011000010000000000000000 +00110100000000100000000000001111 +00100010001011100000000011111111 +11111011111111111111110101100011 +00101001011000010000000000000000 +10111001110000000001000000000000 +00100010001100011111111100000000 +11111011111111111111110101011111 +00010110001100010000000000001000 +00101001011000010000000000000000 +10111010001000000001000000000000 +00110100000011010000000000000000 +11111011111111111111110101011010 +11100000000000000000000000000110 +10110110000011010001000000000000 +00101001011000010000000000000000 +01000000010000100000000000000000 +00110101101011010000000000000001 +11111011111111111111110101010100 +01001001100011011111111111111011 +10111001011000000000100000000000 +11111011111111111111111000100010 +00101001011000010000000000000000 +00110100000000100000000010101010 +11111011111111111111110101001110 +00101001011000010000000000000000 +11111011111111111111110101101001 +10111000001000000111100000000000 +01011100001011100000000000100010 +00101001011000010000000000000000 +11111011111111111111110101100101 +10111000001000000111000000000000 +01011100001100010000000000100000 +00101001011000010000000000000000 +00110100000011010000000000000000 +11111011111111111111110101100000 +10111000001000001000100000000000 +11100000000000000000000000000111 +00101001011000010000000000000000 +11111011111111111111110101011100 +10110110000011010001000000000000 +01000000010000100000000000000000 +01011100001000100000000000011000 +00110101101011010000000000000001 +01001001100011011111111111111010 +10111001011000000000100000000000 +11111011111111111111111000001001 +00101001011000010000000000000000 +00110100000000100000000001010101 +11111011111111111111110100110101 +00101001011000010000000000000000 +10111001111000000001000000000000 +11111011111111111111110100110010 +00101001011000010000000000000000 +10111001110000000001000000000000 +11111011111111111111110100101111 +00101001011000010000000000000000 +10111010001000000001000000000000 +11111011111111111111110100101100 +00110100000000010010011100010000 +11111011111111111101111110110111 +11100000000000000000000000000110 +00110100000011001111111111111111 +11100000000000000000000000000100 +00110100000011001111111111111110 +11100000000000000000000000000010 +00110100000011001111111111111101 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +10111000001000001000000000000000 +00100000010000010000000000011111 +10111000010000000101100000000000 +10111000011000000111000000000000 +10111000100000000110000000000000 +00110100000011010000000000000000 +01000100001000000000000000110000 +00110100010000011111111111111111 +10110100001001000000100000000000 +00010100001000100000000000011111 +10111000100000000111100000000000 +00000000010000100000000000011011 +10110100010000010000100000000000 +00010101011000100000000000011111 +00010100001000010000000000000101 +00000000010000100000000000011011 +10110100010010110001000000000000 +00010100010000100000000000000101 +01000100001000100000000000001100 +01111000000000010000000000000001 +00111000001000011000111101001100 +00101000001000100000000000000000 +10100001011000100001000000000000 +01001100010000000000000000000101 +00110100010000101111111111111111 +00110100000000011111111111100000 +10111000010000010001000000000000 +00110100010000100000000000000001 +00110100000011110000000000100000 +11001001111000100111100000000000 +10111010000000000000100000000000 +10111001011000000001000000000000 +10111001110000000001100000000000 +10111001111000000010000000000000 +11111011111111111111111101111010 +10111000001000000110100000000000 +01001000000000010000000000010110 +10110101110011110111000000000000 +10110101011011110101100000000000 +11001001100011110110000000000000 +11100000000000000000000000001110 +10111001100000000010000000000000 +01001101111011000000000000000010 +00110100000001000000000000100000 +10111010000000000000100000000000 +10111001011000000001000000000000 +10111001110000000001100000000000 +11111011111111111111111101101101 +01001000000000010000000000001001 +10110101101000010110100000000000 +00110101110011100000000000100000 +00110101011010110000000000100000 +00110101100011001111111111100000 +11100000000000000000000000000010 +00110100000011110000000000100000 +01001001100000001111111111110010 +11100000000000000000000000000010 +10111000001000000110100000000000 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +10111000001000000110000000000000 +10111000011000000111000000000000 +10111000100000000110100000000000 +11111011111111111111110110010011 +00101001100000010000000000000000 +00110100000000100000000011110000 +11111011111111111111110010111111 +00101001100000010000000000000000 +00100001011000100000000011111111 +11111011111111111111110010111100 +00100001011000101111111100000000 +00101001100000010000000000000000 +00000000010000100000000000001000 +00110100000010110000000000000000 +11111011111111111111110010110111 +11100000000000000000000000000110 +00101001100000010000000000000000 +11111011111111111111110011010001 +10110101110010110001000000000000 +00110000010000010000000000000000 +00110101011010110000000000000001 +01001001101010111111111111111011 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +10111000001000000111100000000000 +00100000010000010000000000011111 +10111000010000000101100000000000 +10111000011000000110000000000000 +00110100000011010000000000000000 +01000100001000000000000000101100 +00110100010000011111111111111111 +10110100001000110000100000000000 +00010100001000100000000000011111 +10111000011000000111000000000000 +00000000010000100000000000011011 +10110100010000010000100000000000 +00010101011000100000000000011111 +00010100001000010000000000000101 +00000000010000100000000000011011 +10110100010010110001000000000000 +00010100010000100000000000000101 +01000100001000100000000000001100 +01111000000000010000000000000001 +00111000001000011000111101001100 +00101000001000100000000000000000 +10100001011000100001000000000000 +01001100010000000000000000000101 +00110100010000101111111111111111 +00110100000000011111111111100000 +10111000010000010001000000000000 +00110100010000100000000000000001 +00110100000011100000000000100000 +11001001110000100111000000000000 +10111001111000000000100000000000 +10111001011000000001000000000000 +10111001110000000001100000000000 +11111011111111111111111010110011 +10111000001000000110100000000000 +01001000000000010000000000010011 +10110101011011100101100000000000 +11001001100011100110000000000000 +11100000000000000000000000001100 +10111001100000000001100000000000 +01001101110011000000000000000010 +00110100000000110000000000100000 +10111001111000000000100000000000 +10111001011000000001000000000000 +11111011111111111111111010101000 +01001000000000010000000000001000 +10110101101000010110100000000000 +00110101011010110000000000100000 +00110101100011001111111111100000 +11100000000000000000000000000010 +00110100000011100000000000100000 +01001001100000001111111111110100 +11100000000000000000000000000010 +10111000001000000110100000000000 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000001010000000000000000 +10111000001000000011000000000000 +00110100000010000000000001000011 +00110100000001110000000000001000 +01000000110010010000000000010111 +01011101001010000000000000000110 +00111100101001010000000000000100 +00110100101001010000000000001000 +10110100001001010000100000000000 +11111011111111111111111110001011 +11100000000000000000000000000101 +00110100101001010000000000000001 +00110100110001100000000000010000 +01011100101001111111111111110111 +00110100000000011111111111111111 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000001010000000000000000 +10111000001000000011000000000000 +00110100000010000000000001000011 +00110100000001110000000000001000 +01000000110010010000000000010111 +01011101001010000000000000000110 +00111100101001010000000000000100 +00110100101001010000000000001000 +10110100001001010000100000000000 +11111011111111111111111100101011 +11100000000000000000000000000101 +00110100101001010000000000000001 +00110100110001100000000000010000 +01011100101001111111111111110111 +00110100000000011111111111111111 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000001000000000000000000 +10111000001000000010100000000000 +00110100000001110000000001000011 +00110100000001100000000000001000 +01000000101010000000000000010111 +01011101000001110000000000000110 +00111100100001000000000000000100 +00110100100001000000000000001000 +10110100001001000000100000000000 +11111011111111111111111110001000 +11100000000000000000000000000101 +00110100100001000000000000000001 +00110100101001010000000000010000 +01011100100001101111111111110111 +00110100000000011111111111111111 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111011111110000100 +00101001011000010000000000000000 +01011100001000000000000000001001 +11111011111111111111000001011010 +01111000000000100000000000000001 +00110100001000010000001111101000 +00111000010000101011111101111100 +01011000010000010000000000000000 +00101001011000010000000000000000 +00110100001000010000000000000001 +01011001011000010000000000000000 +01111000000010110000000000000001 +00111001011010111011111110000000 +00101001011011000000000000000000 +11111011111111111111000001001111 +01111000000000100000000000000001 +00111000010000101011111101111100 +00101000010001000000000000000000 +11001000001001000010100000000000 +00110100000000010000000000000000 +01001000000001010000000000011000 +00100001100000110000000000000001 +01111000000000010000000000000001 +00111100011001010000000000000010 +00111000001000011001010000011000 +10110100001001010000100000000000 +00101000001000010000000000000000 +10110100001001000010000000000000 +00101001011000010000000000000000 +01011000010001000000000000000000 +00110100000000100000000000000001 +00110100001000010000000000000001 +01011001011000010000000000000000 +01111000000000010000000000000001 +00111000001000011100000111100000 +01000100011000100000000000000011 +11111011111111111111111000011000 +11100000000000000000000000000110 +00110100000000100000000000000010 +11111011111111111111111000010101 +01111000000000100000000000000001 +00111000010000101010101000111100 +01011000010000010000000000000100 +00110100000000010000000000000001 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00101000001001010000000000001000 +00101000001001000000000000000000 +00101000001001100000000000000100 +10110100010001010001100000000000 +10001000011001000010000000000000 +01011000001000100000000000011100 +10001000010001100001000000000000 +10110100100000100001000000000000 +00101000001001000000000000001100 +00010100010000100000000000001100 +10110100010001000010000000000000 +00101000001000100000000000010100 +01001100100000100000000000000101 +00101000001001000000000000010000 +01000100100000000000000000001000 +01001100101000110000000000001011 +11100000000000000000000000000110 +00101000001000100000000000011000 +01001100010001000000000000000110 +00101000001001000000000000010000 +01000100100000000000000000000010 +01001100011001010000000000000101 +01011000001000110000000000001000 +11100000000000000000000000000011 +01011000001000110000000000001000 +10111000100000000001000000000000 +01011000001000100000000000100000 +10111000010000000000100000000000 +11000011101000000000000000000000 +00101000001000100000000000001100 +01011000001000000000000000001000 +01011000001000100000000000100000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +01011000001000000000000000010100 +10111000010000000000100000000000 +11111000000000000000100110101000 +00101001011000110000000000001100 +00101001011000100000000000000000 +01001000001000110000000000001011 +00101001011000010000000000000100 +01001100010000010000000000000011 +00110100010000100000000000000001 +01011001011000100000000000000000 +00101001011000100000000000000000 +01011100010000010000000000010001 +00110100000000010000000000000001 +01011001011000010000000000010100 +01011001011000010000000000010000 +11100000000000000000000000001110 +00101001011000010000000000001000 +01001100001000100000000000000011 +00110100010000101111111111111111 +01011001011000100000000000000000 +00101001011000100000000000000000 +01011100010000010000000000000111 +00110100000000010000000000000001 +01011001011000010000000000010100 +01011001011000000000000000000000 +01011001011000000000000000010000 +00110100000000011111111111111111 +11100000000000000000000000000010 +00101001011000010000000000010000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +01011000001000000000000000010000 +01011000001000000000000000000000 +01011000001000000000000000010100 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111100001010001000 +00101000011001000000000000000000 +01001000100000010000000000010011 +01111000000000110000000000000001 +00111000011000111011111110101000 +11001000001001000000100000000000 +01000100010000000000000000000111 +00101000011000100000000000000000 +00110100000001000000000000000001 +10111100100000010000100000000000 +00101000010000110000000000101000 +10111000001000110000100000000000 +11100000000000000000000000000111 +00101000011000100000000000000000 +00110100000001000000000000000001 +10111100100000010000100000000000 +00101000010000110000000000101000 +10100100001000000000100000000000 +10100000001000110000100000000000 +01011000010000010000000000101000 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111011111110101000 +01000100010000000000000000000111 +00101000011000100000000000000000 +00110100000001000000000000000001 +10111100100000010000100000000000 +00101000010000110000000000100100 +10111000001000110000100000000000 +11100000000000000000000000000111 +00101000011000100000000000000000 +00110100000001000000000000000001 +10111100100000010000100000000000 +00101000010000110000000000100100 +10100100001000000000100000000000 +10100000001000110000100000000000 +01011000010000010000000000100100 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101011111110101000 +00101000010000100000000000000000 +10111000001000000001100000000000 +00110100000000010000000000000000 +00101000010001000000000000001000 +00100000100001000000000000000010 +01000100100000000000000000001100 +00110100000001000000000000000010 +01011000010001000000000000001000 +01111000000001100000000000000001 +00101000010000100000000000010000 +00111000110001101000111101010000 +00101000110001000000000000000000 +00110100010001011111111110011011 +01010100101001000000000000000100 +00001000010000100000000001100100 +00110100000000010000000000000001 +01011000011000100000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +10111000001000000110000000000000 +01111000000000010000000000000001 +00111001011010111100001010001000 +00111000001000011100001010000000 +00101000001000010000000000000000 +00101001011011010000000000000000 +10110100001011010110100000000000 +00101001100000010000000000000000 +10111001101000000001000000000000 +11111000000000000000000100010000 +00101001100000010000000000000100 +00101001011000110000000000000000 +10111001101000000001000000000000 +11111000000000000000000110001111 +01011001100000000000000000001100 +01011001100000000000000000001000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +11111000000000000000000101100111 +01111000000000010000000000000001 +00111000001000011011111110101000 +00101000001000010000000000000000 +00110100000000100000000000000001 +00110100000000110000000000001001 +01011000001000100000000000000100 +01011001011000110000000000001100 +01111000000000110000000000000001 +00111000011000111000111101010100 +01011001011000100000000000001000 +00101000011000100000000000000000 +01011000001000100000000001001100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +10111000001000000001000000000000 +00101000001000010000000000000000 +00101000001000110000000001001000 +00110100000000010000000000000000 +01000100011000000000000000010110 +00101000010000110000000000000100 +00101000011000110000000000111000 +01000100011000000000000000010011 +01111000000000110000000000000001 +00111000011000111011111110101000 +00101000011000110000000000000000 +00101000011001000000000000000100 +00100000100001000000000000000100 +01000100100000000000000000001101 +00101000011000110000000000000100 +00100000011000110000000000001000 +01011100011000000000000000001010 +00101000010000100000000000001100 +00110100000000110000000000001010 +00110100000000010000000000000001 +01010100010000110000000000000110 +01111000000000010000000000000001 +00111100010000100000000000000010 +00111000001000011001010001001000 +10110100001000100000100000000000 +00101000001000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00101000001000100000000000001100 +10111000001000000101100000000000 +00110100000000010000000000001001 +00110100010000101111111111111111 +00110100000011000000000000000000 +01010100010000010000000010100101 +01111000000000010000000000000001 +00111100010000100000000000000010 +00111000001000011001010000100000 +10110100001000100000100000000000 +00101000001000010000000000000000 +11000000001000000000000000000000 +01111000000000010000000000000001 +00111000001000011011111110101000 +00101000001000010000000000000000 +00110100000011000000000000000000 +00101000001000100000000000000100 +00100000010000100000000000001000 +01011100010000000000000010011000 +00101000001000110000000000000100 +01111000000000101000000000000000 +10111000011000100001000000000000 +01011000001000100000000000000100 +00110100000000010000000000001010 +11100000000000000000000010010000 +01111000000000010000000000000001 +00111000001000011011111110101000 +00101000001000010000000000000000 +01111000000001000000000000000001 +00111000100001001000111011000100 +00101000001000110000000000000100 +00101000100000100000000000000000 +10100000011000100001000000000000 +01011000001000100000000000000100 +00101000001000100000000000000100 +00100000010000100000000000001000 +01011100010000000000000010000011 +00101000001000010000000000000100 +00110100000011000000000000000001 +00100000001000010000000000000100 +01000100001000100000000010000010 +01011001011011000000000000001100 +11100000000000000000000010000000 +00101001011000010000000000000000 +00110100000011000000000000000000 +00101000001000010000000001001000 +01000100001000000000000001111100 +11111011111111111011000110001111 +00101001011000010000000000000100 +11111000000000000000000101000110 +11111011111111111011000110010101 +00110100000000010000000000001000 +11100000000000000000000001110100 +01111000000000010000000000000001 +00111000001000011011111110101000 +00101000001000010000000000000000 +00110100000000100000000000000010 +00110100000011000000000000000000 +01011000001000100000000000001000 +00101001011000010000000000000000 +00101000001000010000000001001000 +01000100001000000000000001101101 +00101001011000010000000000000100 +00101000001000010000000000111000 +01000100001000000000000001101010 +01111000000000010000000000000001 +00111000001000011011111110111100 +00101000001000010000000000000000 +00110100000000110000000010100010 +01011000001000110000000000000000 +00110100000000110000000000000011 +01011000001000110000000000010000 +00110100000000110000000000000001 +01011000001000110000000000011100 +01011001011000100000000000001100 +11100000000000000000000001011110 +01111000000000010000000000000001 +00111000001000011011111110111100 +00101000001000010000000000000000 +00110100000011000000000000000000 +00101000001000100000000000011100 +00100000010000100000000000000001 +01000100010000000000000001011000 +00110100000000100000000000000100 +01011000001000100000000000011100 +11111011111111111110111100000001 +00110100001000010000011111010000 +01011001011000010000000000010000 +00110100000000010000000000000011 +11100000000000000000000001001111 +11111011111111111110111011111100 +00101001011000100000000000010000 +00110100000011000000000000000000 +11001000001000100000100000000000 +01001000000000010000000001001100 +00110100000000010000000000000111 +01011001011000010000000000001100 +01011001011000000000000000011100 +11100000000000000000000001000111 +00110111100000010000000000010000 +11111011111111111111111100110111 +00110100000011000000000000000000 +01000100001000000000000001000100 +01111000000000110000000000000001 +00111000011000111000111101011000 +00101000011000100000000000000000 +00101011100000010000000000010000 +11111000000000000000100000110010 +00111000000000101100001101001111 +11101000001000100001000000000000 +01100100001000010000000000000000 +10111000010000010000100000000000 +01000100001000000000000000000101 +00110100000000010000000001100100 +01011001011000010000000000010100 +00110100000000011111111110011100 +11100000000000000000000000000011 +01011001011000000000000000010100 +00110100000000010000000001100100 +01011001011000010000000000011000 +00110100000000010000000000000100 +11100000000000000000000000101111 +00101001011000010000000000000100 +00110100000011000000000000000000 +11111000000000000000000111001110 +01011100001000000000000000101101 +00110111100000010000000000010000 +11111011111111111111111100011100 +01000100001011000000000000101010 +01111000000001000000000000000001 +00111000100001001000111101011000 +00101011100000010000000000010000 +00101000100000100000000000000000 +11111000000000000000100000011000 +00101001011000100000000000010100 +01011011100000010000000000010000 +01000100001000100000000000001001 +00101001011000010000000000011100 +00101001011000100000000000011000 +10110100010000010000100000000000 +01011001011000010000000000011100 +00101001011000010000000000000100 +00101001011000100000000000011100 +11111000000000000000000110011100 +11100000000000000000000000011001 +00101001011000100000000000010100 +00110100000011000000000000000001 +01011100001000100000000000010111 +00101001011000010000000000011100 +00110100001000010111010100110000 +01011001011000010000000000011100 +00101001011000010000000000000100 +00101001011000100000000000011100 +11111000000000000000000110010010 +00110100000000010000000000000101 +01011001011000010000000000001100 +11100000000000000000000000001110 +00101001011000010000000000000100 +00110100000011000000000000000000 +11111000000000000000000110101011 +01011100001000000000000000001010 +00110100000000010000000000000110 +11100000000000000000000000000110 +10111001011000000000100000000000 +11111011111111111111111100111101 +00110100000011000000000000000000 +01011100001000000000000000000100 +00110100000000010000000000001001 +01011001011000010000000000001100 +00110100000011000000000000000001 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +01111000000001000000000000000001 +00111000100001001011111110101000 +00101000100001010000000000000000 +00110100000001000000000000000000 +01000100011000000000000000000010 +01111000000001001000000000000000 +01111000000001100000000000000001 +00111000110001101000111101011100 +00101000110000110000000000000000 +00111100001000010000000000011000 +10100000010000110001000000000000 +10111000010000010000100000000000 +10111000001001000010000000000000 +01011000101001000000000001001100 +11000011101000000000000000000000 +01111000000001000000000000000001 +00111000100001001011111110101000 +00101000100001010000000000000000 +00110100000001000000000000000000 +01000100011000000000000000000010 +01111000000001001000000000000000 +01111000000001100000000000000001 +00111000110001101000111101011100 +00101000110000110000000000000000 +00111100001000010000000000011000 +10100000010000110001000000000000 +10111000010000010000100000000000 +10111000001001000010000000000000 +01011000101001000000000001001100 +11000011101000000000000000000000 +00110100000000110000000000000101 +01011000001000110000000000101000 +00111000000000111111111111111011 +01011000001000110000000000101100 +00110100000000111111111101101010 +01011000001000110000000000011000 +00110100000000111111111111111110 +01011000001000110000000000010100 +00110100000000110000000000000001 +01011000001000110000000000100100 +00110100000000110000000011001000 +01011000001000110000000001000100 +00110100000000110010011100010000 +01011000001000110000000000111100 +00110100000000110000000001100100 +01011000001000110000000001000000 +01011000001000100000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000001100 +10111000010000000110100000000000 +00110100000011000000000000000000 +01011100011000010000000001000111 +00110100000000010000000000100010 +00110100000000110000000000000000 +11111011111111111111111111000100 +00101001011000100000000000000100 +00110100000000010000000000100101 +00110100000000110000000000000000 +11111011111111111111111111000000 +00101001011000010000000000001000 +01001100001000000000000000000100 +01011001011011010000000000000100 +01011001011011010000000000001000 +11100000000000000000000000111011 +01001101101000010000000000000101 +00101001011000100000000000000000 +01111000000000010000000001000000 +10110100010000010000100000000000 +01011001011000010000000000000000 +00101001011000110000000000000000 +01111000000001010000000000000001 +00101001011000100000000000000100 +00111000101001011000111101100000 +00101000101000010000000000000000 +10110101101000110010000000000000 +11001000100000100110000000000000 +01001000001011000000000000000110 +01111000000001010000000000000001 +00111000101001011000111101100100 +00101000101000010000000000000000 +01001001100000010000000000000010 +11100000000000000000000000000010 +10111000001000000110000000000000 +01111000000001010000000000000001 +00111000101001011000111101101000 +00101000101000010000000000000000 +01001100001001000000000000000110 +01001100001000100000000000000101 +11001000011000010001100000000000 +11001000010000010000100000000000 +01011001011000110000000000000000 +01011001011000010000000000000100 +00101001011000010000000000000100 +10111001100000000001000000000000 +01011001011011010000000000001000 +00110100001000010100000000000000 +01011001011000010000000000000100 +00110101011000010000000000010100 +11111011111111111111111000010010 +01111000000000110000000000000001 +00111000011000111011111110101000 +00101001011000100000000000010000 +10111000001000000110100000000000 +00101000011000010000000000000000 +00110100000000110000000000000000 +01011000001011010000000001000000 +00110100010000010000000000000001 +01011001011000010000000000010000 +00110100000000010000000000100110 +11111011111111111111111110001101 +00110100000000010000000000100000 +10111001101000000001000000000000 +00110100000000110000000000000000 +11111011111111111111111110001001 +10111001100000000001000000000000 +00110100000000010000000000100001 +00110100000000110000000000000001 +11111011111111111111111110000101 +10111001100000000001000000000000 +00110101011000010000000000111000 +11111011111111111111111000011101 +01111100001011000000000000000000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000101000 +01011001011000000000000000000100 +01011001011000000000000000000000 +01011001011000010000000000100000 +00110100000000011111111111111111 +01011001011000010000000000001000 +01011001011000000000000000010000 +00110101011000010000000000010100 +11111011111111111111111000000100 +00110101011000010000000000111000 +11111011111111111111111000101011 +00101001011000010000000000001100 +00110100000000100000000000000001 +11111011111111111111111000101100 +00110100000000010000000000100100 +00110100000000100000000000000001 +00110100000000110000000000000001 +11111011111111111111111101100100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00110100000000010000000000000101 +01011001011000010000000000011000 +00111000000000011111111111111010 +01011001011000010000000000011100 +00110100000000010000000000000001 +01011001011000010000000000010100 +00110100000000010111010100110000 +01011001011000010000000000010000 +00110100000000011111101110110100 +01011001011000010000000000001000 +00110100000000011111111111100010 +01011001011000010000000000000100 +00110100000000010000010010110000 +01011001011000010000000000110100 +00110100000000010000001111101000 +01011001011000010000000000101100 +00110100000000010000000001100100 +01011001011000010000000000110000 +01111000000000010000000000000001 +00111000001000011100001010001000 +00101000001000010000000000000000 +01011001011000110000000001100100 +01011001011000100000000001100000 +11001000011000010001100000000000 +01011001011000110000000001101100 +00110101011000010000000000000100 +01011001011000000000000001110000 +11111011111111111111110111010111 +00110101011000010000000000101000 +11111011111111111111110111111110 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +01011000001000000000000001000100 +01011000001000000000000001000000 +00110100000000011111111111111111 +01011001011000010000000001001000 +01011001011000010000000001001100 +01011001011000010000000001010000 +01011001011000010000000001010100 +00110100000000010000000000000001 +01011001011000010000000001110000 +01011001011000000000000001011000 +00110101011000010000000000000100 +01011001011000000000000001011100 +01011001011000000000000001101000 +11111011111111111111110110111111 +00110101011000010000000000101000 +11111011111111111111110111100110 +00101001011000010000000001100000 +00110100000000100000000000000001 +11111011111111111111110111100111 +00101001011000010000000001100100 +00110100000000100000000000000001 +11111011111111111111110111100100 +00110100000000010000000000000100 +00110100000000100000000000000001 +00110100000000110000000000000001 +11111011111111111111111100101011 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000001100100 +00110100000000100000000000000000 +11111011111111111111110111010101 +01011001011000000000000001110000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001001000000000001110000 +10111000001000000101100000000000 +00110100000000010000000000000001 +01000100100000000000000001111000 +00101001011000010000000001100000 +01011100011000010000000000000010 +01011001011000100000000001001000 +00101001011000010000000001100100 +01011100011000010000000000000010 +01011001011000100000000001001100 +00101001011000010000000001001000 +01001000000000010000000000001001 +00101001011000100000000001010000 +01001000000000100000000000000110 +01001100001000100000000000000101 +00101001011000110000000001000000 +01111000000000100000000001000000 +10110100011000100001000000000000 +01011001011000100000000001000000 +01011001011000010000000001010000 +00101001011000010000000001001100 +01001000000000010000000000001001 +00101001011000100000000001010100 +01001000000000100000000000000110 +01001100001000100000000000000101 +00101001011000110000000001000100 +01111000000000100000000001000000 +10110100011000100001000000000000 +01011001011000100000000001000100 +01011001011000010000000001010100 +00101001011000110000000001001000 +00110100000000010000000000000000 +01001000000000110000000001011011 +00101001011000100000000001001100 +01001000000000100000000001011001 +00101001011011000000000001000000 +00101001011000010000000000111000 +10110100011011000001100000000000 +00101001011011000000000001000100 +11001000011000100001000000000000 +11001000010011000110000000000000 +01000100001000000000000000000110 +00100001100011000011111111111111 +00100001100000010010000000000000 +01000100001000000000000000000011 +00110100000000011100000000000000 +10111001100000010110000000000000 +10111001100000000001000000000000 +00110101011000010000000000000100 +11111011111111111111110101001111 +00101001011000100000000001101100 +01111000000000110000000000000001 +00111000011000111011111110101000 +00100000010000100000000000001111 +10111000001000000110100000000000 +00111100010000100000000000010000 +00101000011000010000000000000000 +00100001101000111111111111111111 +10111000011000100001000000000000 +01011000001000100000000001000100 +00101001011000110000000001000000 +00101001011000100000000001001000 +00110100000000010000000000000101 +10110100011000100001000000000000 +00110100000000110000000000000000 +11111011111111111111111011010100 +00101001011000110000000001000100 +00101001011000100000000001001100 +00110100000000010000000000000010 +10110100011000100001000000000000 +00110100000000110000000000000000 +11111011111111111111111011001110 +00110100000000010000000000000001 +10111001100000000001000000000000 +00110100000000110000000000000000 +11111011111111111111111011001010 +00101001011000100000000001101000 +00110100000000110000000000000000 +00110100010000010000000000000001 +01011001011000010000000001101000 +00110100000000010000000000000110 +11111011111111111111111011000100 +00110100000000010000000000000000 +10111001101000000001000000000000 +00110100000000110000000000000001 +11111011111111111111111011000000 +01111000000000100000000000000001 +00110100000000011111111111111111 +00111000010000101000111101101100 +01011001011000010000000001001100 +01011001011000010000000001001000 +00101001011000110000000001000000 +00101000010000010000000000000000 +01001100001000110000000000001010 +00101001011000100000000001000100 +01001100001000100000000000001000 +01111000000001000000000000000001 +00111000100001001000111101110000 +00101000100000010000000000000000 +10110100011000010001100000000000 +10110100010000010000100000000000 +01011001011000110000000001000000 +01011001011000010000000001000100 +00101001011000010000000000111000 +01000100001000000000000000001111 +00101001011000010000000001011100 +00101001011000100000000001011000 +01001100001000100000000000000110 +00110100001000010000000000000001 +01011001011000010000000001011100 +00101001011000010000000001000000 +00110100001000011111111111111111 +11100000000000000000000000000110 +01001100010000010000000000000110 +00110100001000011111111111111111 +01011001011000010000000001011100 +00101001011000010000000001000000 +00110100001000010000000000000001 +01011001011000010000000001000000 +00110101011000010000000000101000 +10111001100000000001000000000000 +11111011111111111111110100101000 +01111100001000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00010100010000110000000000011111 +00110111100000010000000000001100 +01001000000000100000000000001011 +00000000010001000000000000010010 +00111100011000110000000000001110 +00111100010000100000000000001110 +10111000011001000001100000000000 +01011011100000100000000000010000 +00110100000000100011111010000000 +01011011100000110000000000001100 +11111011111111111011011110000001 +00101011100000100000000000010000 +11100000000000000000000000001001 +00001000010000101100000000000000 +01011011100000100000000000010000 +00010100010000100000000000011111 +01011011100000100000000000001100 +00110100000000100011111010000000 +11111011111111111011011101111001 +00101011100000100000000000010000 +11001000000000100001000000000000 +00110100000000010000000000000000 +01011001011000100000000001011000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101000001000100000000001011000 +00101000001000010000000001011100 +11111100010000010000100000000000 +11000011101000000000000000000000 +01011000001000100000000000000100 +01011000001000000000000000011100 +01011000001000110000000000001000 +01011000001000000000000000001100 +01011000001000000000000000010000 +01011000001000000000000000000000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000100000000000000001 +01011000001000100000000000000000 +01011000001000000000000000010100 +01011000001000000000000000011100 +01011000001000000000000000001100 +01011000001000000000000000010000 +00101000001000010000000000000100 +11111011111111111111110100010110 +01111000000000010000000000000001 +00111000001000011100001010001000 +00101000001000010000000000000000 +00110100000000100000000000000001 +11111011111111111111110100010001 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111110110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000110000000000000 +10111000011000000110100000000000 +00110111100000010000000000010100 +00110100000000100000000000000000 +00110100000000110000000001000000 +11111000000000000000011100101010 +00110100000000011100000000000000 +01111000000001000000000000000001 +01011011100000010000000000100000 +00111000100001001100001010001000 +00110100000000010100000000000000 +01011011100000010000000001000100 +00101000100000010000000000000000 +01011101101000010000000000000101 +01111000000000110000000000000001 +00111000011000111010110101101100 +01011000011011000000000000000000 +11100000000000000000000000100111 +00111101101011010000000000000101 +10110101011011010101100000000000 +00101001011000010000000000000000 +01000100001000000000000000100011 +01111000000000110000000000000001 +00111000011000111010110101101100 +00101000011000010000000000000000 +00101001011000100000000000010000 +11001001100000010000100000000000 +00100000001000010011111111111111 +00010100001000110000000000001100 +01011100010000000000000000000111 +00111100011000110000000000000010 +01011001011000010000000000001100 +00110100000000010000000000000001 +01011001011000110000000000010100 +01011001011000010000000000010000 +11100000000000000000000000010101 +00101001011001000000000000001100 +00110100010000100000000000000001 +10110100001001000000100000000000 +00101001011001000000000000010100 +10110100011001000001100000000000 +00111100011000110000000000000010 +00110111100001000000000001010000 +10110100100000110001100000000000 +00101000011000111111111111000100 +01011001011000100000000000010000 +10110100001000110000100000000000 +00101001011000110000000000001000 +01011001011000010000000000001100 +01011100010000110000000000000111 +11111000000000000000010111010001 +01011001011000010000000000011000 +00110100000000010000000000000001 +01011001011000010000000000011100 +01011001011000000000000000001100 +01011001011000000000000000010000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000001010000 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111011111110101000 +01011100010000000000000000001010 +00110100000001000000000000000001 +00101000011000100000000000000000 +10111100100000010000100000000000 +00100000001000010000000011111111 +00101000010000110000000000100000 +00111100001000010000000000010000 +10100100001000000000100000000000 +10100000001000110000100000000000 +11100000000000000000000000001000 +00101000011000100000000000000000 +00110100000001000000000000000001 +10111100100000010000100000000000 +00101000010000110000000000100000 +00100000001000010000000011111111 +00111100001000010000000000010000 +10111000001000110000100000000000 +01011000010000010000000000100000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00110100000000100000000000000001 +01000100001000100000000000001001 +00110100000000100000000000000010 +01000100001000100000000000001100 +01011100001000000000000000010111 +01111000000000010000000000000001 +00111000001000011011111110101000 +00101000001010110000000000000000 +00110101011010110000000000011000 +11100000000000000000000000001010 +01111000000000010000000000000001 +00111000001000011011111110101000 +00101000001010110000000000000000 +00110101011010110000000000010100 +11100000000000000000000000000101 +01111000000000010000000000000001 +00111000001000011011111110101000 +00101000001010110000000000000000 +00110101011010110000000000011100 +00110100000000010000011111010000 +11111011111111111110110010000011 +01111000000000110000000000000001 +00111000011000111000111100011000 +00101001011000100000000000000000 +00101000011000010000000000000000 +10100000010000010000100000000000 +11100000000000000000000000000010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +10111000010000000101100000000000 +00111000011000111100000001010000 +01000100001000000000000000000111 +00110100001000011111111111111111 +00001000001000110000000001111100 +01111000000000010000000000000001 +00111000001000011011111111001000 +10110100011000010000100000000000 +00110100001000110000000100000100 +10111000011000000000100000000000 +10111001011000000001000000000000 +11111011111111111111111100111000 +01111000000000010000000000000001 +00111000001000011011111111001000 +01011000001010110000000000010100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000011000000000000000001 +01111000000011010000000000000001 +10111000001000000111000000000000 +00110100000010110000000000000000 +00111001100011001100001010001000 +00111001101011011011111110001000 +11100000000000000000000000001010 +00101001101000010000000000000000 +10010100001010110000100000000000 +00100000001000010000000000000001 +01000100001000000000000000000101 +00111101011000100000000000000101 +10110101110000100001000000000000 +00110100010000010000000111110100 +11111011111111111111111101000110 +00110101011010110000000000000001 +00101001100000010000000000000000 +01001000001010111111111111110110 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111110111100 +01011011100010110000000001000100 +01011011100011000000000001000000 +01011011100011010000000000111100 +01011011100011100000000000111000 +01011011100011110000000000110100 +01011011100100000000000000110000 +01011011100100010000000000101100 +01011011100100100000000000101000 +01011011100100110000000000100100 +01011011100101000000000000100000 +01011011100101010000000000011100 +01011011100101100000000000011000 +01011011100101110000000000010100 +01011011100110000000000000010000 +01011011100110010000000000001100 +01011011100110110000000000001000 +01011011100111010000000000000100 +01111000000110110000000000000001 +01111000000010110000000000000001 +01111000000110010000000000000001 +01111000000011010000000000000001 +01111000000100010000000000000001 +01111000000100000000000000000001 +01111000000011000000000000000001 +01111000000101110000000000000001 +01111000000011110000000000000001 +00111011011110111011111110101000 +00111001011010111011111111001000 +00110100000101000000000000001001 +00111011001110011001010001110100 +00110100000110000000000000000001 +00110100000100110000000000000011 +00111001101011011100000000110000 +00110100000100100000000000001000 +00111010001100011100000001010000 +00111010000100001011111111100000 +00111001100011001100001010001000 +00111010111101111100000110111100 +00111001111011111100001010000000 +11100000000000000000000010000001 +00101010101101100000000001111100 +01111000000000010000000011111111 +00111000001000011111111111111111 +00000010110011100000000000011000 +10100010110000011011000000000000 +00101001011000010000000000000100 +00100001110011100000000001111111 +00110100001000011111111111111111 +01010100001101000000000001011000 +00111100001000010000000000000010 +10110111001000010000100000000000 +00101000001000010000000000000000 +11000000001000000000000000000000 +00101001011000010000000001000100 +00110100000000100000000000000011 +11111000000000000000010100011110 +00111100001000010000000000000001 +01011010101000010000000001000000 +00101001011000010000000010100100 +00101001011000100000000010100000 +10110100010000010000100000000000 +00000000001000100000000000011111 +10110100010000010000100000000000 +00010100001000010000000000000001 +00110100000000100000000000000001 +01011010101000010000000001000100 +00101001100000010000000000000000 +11111011111111111111110000010110 +11111011111111111110101111110111 +00110100001000010000000000110010 +01011001011000010000000000001000 +00110100000000010000000000001010 +11100000000000000000000000010001 +00101001011101010000000000001000 +11111011111111111110101111110001 +11001010101000010000100000000000 +01001100001000000000000000111100 +00101001011000010000000000000000 +01011100001110000000000000000011 +01011001011110000000000000000100 +11100000000000000000000000111000 +01011001011100110000000000000100 +11100000000000000000000000110110 +00101001100000010000000000000000 +00110100000000100000000000000000 +11111011111111111111110000000100 +10111001101000000000100000000000 +11111011111111111111110001011001 +00110100000000010000000000000010 +01011001011000010000000000000100 +11100000000000000000000000101110 +10111001101000000000100000000000 +11111011111111111111110001101010 +11100000000000000000000000010010 +10111010000000000000100000000000 +11111011111111111111110110111101 +00110100000000010000000000000100 +11100011111111111111111111111000 +00101001011000010000000001100000 +01000100001000000000000000100101 +00101001011000010000000001100100 +01000100001000000000000000100011 +00101001011000010000000000000000 +01011100001100110000000000001001 +00110100000000010000000000000101 +11100011111111111111111111110000 +10111010001000000000100000000000 +11111011111111111111110111110001 +00110100000000010000000000000110 +11100011111111111111111111101100 +00101001011000010000000011000000 +01000100001000000000000000011001 +10111001011000000000100000000000 +11111011111111111111111101101111 +01011001011100100000000000000100 +00101001011000010000000011101000 +00110100000000100000000000000001 +11100000000000000000000000010010 +00101001011000010000000000000000 +01011100001110000000000000000100 +10111001101000000000100000000000 +11111011111111111111110001001101 +01000100001000000000000000000111 +00101001011000010000000001100000 +01000100001000000000000000000101 +00101001011000010000000000000000 +01011100001100110000000000001010 +00101001011000010000000011000000 +01011100001000000000000000001000 +00101001011000010000000000001100 +00110100000000100000000000000000 +00110100001000010000000000000001 +01011001011000010000000000001100 +01011001011101000000000000000100 +00101001011000010000000011101000 +11111011111111111111111100001010 +10111010000000000000100000000000 +10111010110000000001000000000000 +10111001110000000001100000000000 +11111011111111111111110100111010 +00101001011000010000000001100000 +01000100001000000000000000011011 +10111010001000000000100000000000 +10111010110000000001000000000000 +10111001110000000001100000000000 +11111011111111111111110111111001 +00101001011000010000000000000100 +01011100001100100000000000010101 +00101001011000010000000000000000 +00110100000101010000000000000000 +01011100001100110000000000001100 +11100000000000000000000000001000 +00001010101000010000000001111100 +10111010110000000001000000000000 +10111001110000000001100000000000 +10110101011000010000100000000000 +00110100001000010000000100000100 +11111011111111111111110111101101 +00110110101101010000000000000001 +00101001111000010000000000000000 +00110100001000011111111111111111 +01001000001101011111111111110111 +00101001100000010000000000000000 +01001001110000010000000000000101 +10111010111000000000100000000000 +10111010110000000001000000000000 +10111001110000000001100000000000 +11111011111111111111111010100101 +00101011011101010000000000000000 +01111000000000100000000000000010 +00101010101000010000000010000000 +10100000001000100000100000000000 +01000100001000001111111101111100 +00101001011000010000000000010000 +00110100001000010000000000000001 +01011001011000010000000000010000 +00110100000000010000000000000001 +11010000010000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000001000100 +00101011100011000000000001000000 +00101011100011010000000000111100 +00101011100011100000000000111000 +00101011100011110000000000110100 +00101011100100000000000000110000 +00101011100100010000000000101100 +00101011100100100000000000101000 +00101011100100110000000000100100 +00101011100101000000000000100000 +00101011100101010000000000011100 +00101011100101100000000000011000 +00101011100101110000000000010100 +00101011100110000000000000010000 +00101011100110010000000000001100 +00101011100110110000000000001000 +00110111100111000000000001000100 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011011111111000100 +00101000001000100000000000000000 +01111000000000110000000000000001 +01111000000000010000000000000001 +00111000001000011011111110111100 +00111000011000111000111101110100 +01011000001000100000000000000000 +00101000011000010000000000000000 +01011000010000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111010100 +01011011100010110000000000101000 +01011011100011000000000000100100 +01011011100011010000000000100000 +01011011100011100000000000011100 +01011011100011110000000000011000 +01011011100100000000000000010100 +01011011100100010000000000010000 +01011011100100100000000000001100 +01011011100100110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000001000000000000000 +10111000011000001001000000000000 +11111011111111111010110111000101 +01111000000000010000000000000001 +00111000001000011100001010110100 +00101000001001000000000000000000 +01111000000000010000000000000001 +00111000001000011011111110101000 +01011000001001000000000000000000 +01111000000000010000000000000001 +00101000100001010000000000000000 +00111000001000011011111111000100 +00101000001000010000000000000000 +01111000000000100000000000000001 +00111000010000101011111110111100 +00000000101001100000000000010000 +01011000010000010000000000000000 +01111000000000100000000000000001 +00111000010000101100001010001000 +00100000110001100000000000111111 +00000000101001010000000000011000 +01011000010001100000000000000000 +01111000000000100000000000000001 +00111000010000101100001010000000 +00100000101001010000000000000111 +01011000010001010000000000000000 +01111000000001010000000000000001 +00111000101001011011111111001000 +01011000101010110000000000000000 +01011000101000000000000000001100 +01011000100000000000000001000000 +01011000100000000000000001000100 +01011000100000000000000000000000 +01011000100000000000000000101000 +01011000100000000000000000100100 +01011000100000000000000000000100 +01111000000000110000000000000001 +01011000100000000000000000100000 +00110100000000100000001111101000 +00111000011000111000111100100100 +01011000100000100000000001001000 +00101000011000100000000000000000 +01011000001000000000000000011100 +01011000001000100000000000000000 +00110100000000010000000000000100 +01011101011000010000000000000100 +00110100000000010000000000000111 +01011000101000010000000000000100 +11100000000000000000000000000110 +00110100000000010000000000001001 +01011000101000010000000000000100 +00110100000000010000000000000011 +01011101011000010000000000000010 +10111010000000000011000000000000 +01111000000000010000000000000001 +10111000110000000001000000000000 +00111000001000011011111111100000 +01111000000011010000000000000001 +11111011111111111111110010011101 +00111001101011011100001010001000 +00101001101000110000000000000000 +01111000000000010000000000000001 +00111000001000011100000001010000 +10111010000000000001000000000000 +01111000000011110000000000000001 +01111000000011100000000000000001 +11111011111111111111110100011000 +00110100000011000000000000000000 +00111001111011111100001010000000 +00111001110011101011111111001000 +00110100000100110000000000000001 +11100000000000000000000000001100 +00001001100100010000000001111100 +00101001101001000000000000000000 +10111010000000000001000000000000 +10110101110100010000100000000000 +00110100100001000000000000000001 +10110100100011000001100000000000 +00110100001000010000000100000100 +10110101110100011000100000000000 +11111011111111111111110100001010 +00110101100011000000000000000001 +01011010001100110000000011111100 +00101001111000010000000000000000 +00110100001000011111111111111111 +01001000001011001111111111110011 +00110100000000010000000000000010 +01011101011000010000000000000110 +01111000000000010000000000000001 +00111000001000011011111110111100 +00101000001000010000000000000000 +00110100000000100000000000001100 +01011000001000100000000000011100 +01111000000011100000000000000001 +01111000000011010000000000000001 +00110100000011000000000000000000 +00111001110011101100001010001000 +00111001101011011011111111001000 +11100000000000000000000000001000 +00111101100000010000000000000101 +10111001100000000001000000000000 +10110101101000010000100000000000 +00110100001000010000000111110100 +00110100000000110000001000000000 +11111011111111111111110111101111 +00110101100011000000000000000001 +00101001110000100000000000000000 +01001000010011001111111111111000 +00110100000000010000000000000001 +01011101011000010000000000010111 +01111000000000010000000000000001 +00111000001000011011111110101000 +00101000001000010000000000000000 +00101000001000010000000000000100 +00100000001000010000000000000010 +01000100001000000000000000100001 +01111000000000010000000000000001 +01111000000001000000000000000001 +00111000001000011011111111001000 +00111000100001001011111111100000 +01011000001001000000000001101000 +01111000000001000000000000000001 +00111000100001001100000001010000 +01011000001001000000000001101100 +01111000000000010000000000000001 +00111000001000011100001010000000 +00101000001001000000000000000000 +01111000000000010000000000000001 +00111000001000011100000000110000 +10110100010001000001000000000000 +10111010010000000001100000000000 +11111011111111111111101100110101 +01111000000000010000000000000001 +00111000001000011011111110101000 +00101000001000010000000000000000 +01111000000000100000000000000010 +11100000000000000000000000000011 +00101000001000110000000001111100 +01011011100000110000000000101100 +00101000001000110000000010000000 +10100000011000100001100000000000 +01000100011000001111111111111100 +00110100000000100000000000000001 +01011000001000100000000001100100 +00101000001000100000000000101000 +00111000010000100000000000000001 +01011000001000100000000000101000 +11111011111111111010110100111101 +00101011100111010000000000000100 +00101011100010110000000000101000 +00101011100011000000000000100100 +00101011100011010000000000100000 +00101011100011100000000000011100 +00101011100011110000000000011000 +00101011100100000000000000010100 +00101011100100010000000000010000 +00101011100100100000000000001100 +00101011100100110000000000001000 +00110111100111000000000000101100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01111000000000100000000000000001 +00111000010000101011111111001000 +00101000010000110000000000000100 +01100100001001000000000000000000 +01111100011000110000000000001000 +10111000100000110001100000000000 +01011100011000000000000000000110 +00110100001000011111111111111111 +00001000001000010000000001111100 +10110100010000010000100000000000 +00110100001000010000000100000100 +11111011111111111111110011010011 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01000100001000000000000000001000 +00110100001000011111111111111111 +00001000001000010000000001111100 +01111000000000100000000000000001 +00111000010000101011111111001000 +10110100001000100000100000000000 +00110100001000010000000100000100 +11111011111111111111110011101000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +01111000000000100000000000000001 +10111000001000000001100000000000 +00111000010000101011111111001000 +01011100001000000000000000000100 +00101000010000010000000000000100 +01100100001000010000000000001000 +11000011101000000000000000000000 +00101000010001010000000000000100 +00110100000001000000000000001000 +00110100000000010000000000000000 +01011100101001000000000000000110 +00110100011000111111111111111111 +00001000011000110000000001111100 +10110100010000110001000000000000 +00101000010000010000000100111100 +01111100001000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00110100000000111111111111111111 +10111000010000000111100000000000 +01011100001000110000000000010110 +00110100000000010000000000000000 +01111000000011000000000000000001 +01111000000011010000000000000001 +11111011111111111111111000010001 +00110100000010110000000000000000 +00111001100011001100001010000000 +00111001101011011011111111001000 +00110100000011100000000000000100 +11100000000000000000000000001001 +00001001011000010000000001111100 +10110101101000010000100000000000 +00101000001000010000000011111100 +01011100001011100000000000000100 +00110101011000010000000000000001 +10111001111000000001000000000000 +11111011111111111111111000000101 +00110101011010110000000000000001 +00101001100000010000000000000000 +00110100001000011111111111111111 +01001000001010111111111111110110 +11100000000000000000000000000010 +11111011111111111111110111111111 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +10111000010000000110100000000000 +10111000011000000110000000000000 +00111001011010111100000001010000 +01000100001000000000000000000111 +00110100001000011111111111111111 +00001000001010110000000001111100 +01111000000000010000000000000001 +00111000001000011011111111001000 +10110101011000010000100000000000 +00110100001010110000000100000100 +01000101101000000000000000001010 +00101001011000100000000001011100 +00110100000001000011111010000000 +00110100000000110000000000000000 +00010100010000010000000000011111 +11111000000000000000001100101000 +00111100001000010000000000010010 +00000000010001000000000000001110 +10111000001001000010000000000000 +01011001101001000000000000000000 +01000101100000000000000000001010 +00101001011000100000000001011000 +00110100000000110000000000000000 +00110100000001000011111010000000 +00010100010000010000000000011111 +11111000000000000000001100011110 +00111100001000010000000000010010 +00000000010000100000000000001110 +10111000001000100001000000000000 +01011001100000100000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000110100000000000 +01111000000000010000000000000001 +00111101011000100000000000000101 +00111000001000011011111111001000 +10110100001000100000100000000000 +00101000001000100000001000001100 +10111000011000000110000000000000 +01001100010000000000000000000011 +00110100010000100100000000000000 +11100000000000000000000000000100 +00110100000000010011111111111111 +01001100001000100000000000000010 +00110100010000101100000000000000 +00010100010000010000000000011111 +00110100000001000011111010000000 +00110100000000110000000000000000 +11111000000000000000001011111101 +00111100001000010000000000010010 +00000000010001000000000000001110 +10111000001001000010000000000000 +01011001101001000000000000000000 +01000101100000000000000000001100 +01111000000000010000000000000001 +00111000001000011011111110001000 +00101000001000100000000000000000 +00111101011000110000000000000101 +01111000000000010000000000000001 +00111000001000011011111111001000 +10110100001000110000100000000000 +00101000001000010000000111111000 +10010100010000010000100000000000 +00100000001000010000000000000001 +01011001100000010000000000000000 +00111101011010110000000000000101 +01111000000000100000000000000001 +00111000010000101011111111001000 +10110100010010110001000000000000 +00101000010000010000001000010000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +01000100001000000000000000000101 +01111000000000110000000000000001 +00111000011000111100001010001000 +00101000011000110000000000000000 +01011000001000110000000000000000 +01000100010000000000000000000101 +01111000000000010000000000000001 +00111000001000011100001010000000 +00101000001000010000000000000000 +01011000010000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100111010000000000001100 +01111000000000010000000000000001 +00111000001000011011111111001000 +00101000001000110000000000000100 +01111000000000100000000000000001 +00111000010000101001010010011100 +00111100011000110000000000000010 +10110100010000110001000000000000 +00101000010000110000000000000000 +00101000001000100000000000000100 +00110100000000010000000000001010 +01010100010000010000000000000010 +11100000000000000000000000000011 +01111000000000110000000000000001 +00111000011000111000110111100100 +01111000000000010000000000000001 +00111000001000011011111111001000 +00101000001000100000000000000000 +01001100000000100000000000001110 +00101000001000100000000000010000 +00101000001001000000000000000000 +00101000001001010000000001110100 +00101000001001100000000001100000 +00101000001001110000000011000000 +00101000001010000000000001001100 +00101000001010010000000010101100 +00101000001000010000000000001100 +01011011100010010000000000000100 +01011011100000010000000000001000 +01111000000000010000000000000001 +00111000001000011000110111110000 +11111011111111111110001111110101 +00101011100111010000000000001100 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01011100001000000000000000000100 +01111000000000010000000000000001 +00111000001000011100000001010000 +11100000000000000000000000000111 +00110100001000011111111111111111 +00001000001000010000000001111100 +01111000000000100000000000000001 +00111000010000101011111111001000 +10110100001000100000100000000000 +00110100001000010000000100000100 +11111011111111111111110011000101 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000011010000000000000001 +01111000000010110000000000000001 +10111000001000000110000000000000 +00111001101011011011111111001000 +00111001011010111011111110001000 +01000100010000000000000000001101 +00110100000000100000000000000001 +11111011111111111111100111011111 +00111101100000010000000000000101 +10110101101000010110100000000000 +00110101101000010000000111110100 +11111011111111111111110010111100 +00101001011000010000000000000000 +00110100000000100000000000000001 +10111100010011000110000000000000 +10111001100000010110000000000000 +01011001011011000000000000000000 +11100000000000000000000000001010 +00110100000000110000000000000001 +00101001011001000000000000000000 +10111100011000010001100000000000 +10100100011000000001100000000000 +10100000011001000001100000000000 +01011001011000110000000000000000 +00101001101000110000000011101000 +01000100001000110000000000000010 +11111011111111111111100111001100 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00001000001000010000000001111100 +01111000000000100000000000000001 +00111000010000101011111111001000 +10110100010000010001000000000000 +00101000010000010000000011111100 +00101000010000110000000011111100 +00110100000000100000000000000100 +01111100001000010000000000000001 +01011100011000100000000000000010 +00111000001000010000000000000010 +11000011101000000000000000000000 +01001100001000000000000000000101 +01111000000000010000000000000001 +00111000001000011011111111001000 +00101000001000010000000001001100 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101011111111001000 +01011100001000000000000000000011 +00101000010000010000000010101100 +11000011101000000000000000000000 +00110100001000011111111111111111 +00001000001000010000000001111100 +10110100010000010001000000000000 +00101000010000010000000100101000 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111011111110101000 +01001100001000000000000000000111 +01111000000000010000000000000001 +00111000001000011011111111001000 +01011000001000100000000001001100 +00101000011000010000000000000000 +01011000001000100000000001000000 +11000011101000000000000000000000 +00100000001001000000000000001111 +00101000011000110000000000000000 +00111100100001000000000000010000 +00100000010001011111111111111111 +10111000101001000010000000000000 +01011000011001000000000001000100 +01111000000000110000000000000001 +00111000011000111011111111001000 +01011100001000000000000000000011 +01011000011000100000000010101100 +11000011101000000000000000000000 +00110100001000011111111111111111 +00001000001000010000000001111100 +10110100011000010001100000000000 +01011000011000100000000100101000 +11000011101000000000000000000000 +00110111100111001111111111001100 +01011011100010110000000000110100 +01011011100011000000000000110000 +01011011100011010000000000101100 +01011011100011100000000000101000 +01011011100011110000000000100100 +01011011100100000000000000100000 +01011011100100010000000000011100 +01011011100100100000000000011000 +01011011100100110000000000010100 +01011011100101000000000000010000 +01011011100101010000000000001100 +01011011100101100000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011011111111001000 +00101000001000100000000000000000 +00110100000000010000000000000001 +00110100000101000000000000000000 +01011100010000010000000000000101 +01111000000000010000000000000001 +00111000001000011100000000110000 +11111011111111111111101000000100 +10111000001000001010000000000000 +01111000000100010000000000000001 +01111000000010110000000000000001 +01111000000011100000000000000001 +00110100000011010000000000000000 +00110100000011000000000000000001 +00111010001100011100001010000000 +00111001011010111011111111001000 +00110100000011110000000000000001 +00111001110011101011111110101000 +00110100000100100000000000000010 +00110100000101100000000000000011 +00110100000101010000000000000100 +11100000000000000000000001000111 +00110101100100111111111111111111 +00001010011100000000000001111100 +10110101011100001000000000000000 +00101010000000010000000011111100 +01000100001011110000000000001111 +00101001110000010000000000000000 +10111101111011000001000000000000 +00101000001000010000000000100000 +00000000001000010000000000001000 +00100000001000010000000011111111 +10100000001000100000100000000000 +01011100001000000000000000001000 +10111001100000000000100000000000 +11111011111111111111111010010100 +10111001100000000000100000000000 +00110100000000100000000000000000 +11111011111111111111110010010101 +00110101101011010000000000000001 +01011010000011110000000011111100 +00001010011000010000000001111100 +10110101011000011000000000000000 +00101010000000100000000011111100 +01000100010100100000000000010100 +01001000010100100000000000000011 +01011100010011110000000000101101 +11100000000000000000000000000100 +01000100010101100000000000010111 +01011100010101010000000000101010 +11100000000000000000000000011110 +00101001011000010000000011000000 +01000100001000000000000000100111 +00101001110000010000000000000000 +10111101111011000001000000000000 +00101000001000010000000000100000 +00000000001000010000000000001000 +00100000001000010000000011111111 +10100000001000100000100000000000 +01000100001000000000000000100000 +10111001100000000000100000000000 +11111011111111111111111001101001 +01011010000100100000000011111100 +11100000000000000000000000011011 +00101010000000010000000100111100 +01000100001000000000000000011010 +00101001011000100000000000010100 +10111001100000000000100000000000 +11111011111111111111110010101111 +01011010000101100000000011111100 +11100000000000000000000000010100 +10110101011000010000100000000000 +00110100001000010000000100000100 +11111011111111111111110000010000 +01011100001000000000000000010001 +10111001100000000000100000000000 +00110100000000100000000000000001 +11111011111111111111110001101110 +01011010000101010000000011111100 +11100000000000000000000000001011 +00101001011000010000000011000000 +01000100001000000000000000000011 +00101010000000010000000100111100 +01011100001000000000000000001000 +00001010011100110000000001111100 +10111001100000000000100000000000 +00110100000000100000000000000000 +10110101011100111001100000000000 +11111011111111111111110001100011 +01011010011011110000000011111100 +00110101101011010000000000000001 +00110101100011000000000000000001 +00101010001000010000000000000000 +01001000001011001111111110111001 +00101001011000110000000000000000 +01111000000000100000000000000001 +00111000010000101010110101110100 +01011000010000110000000000001100 +00101001011000110000000000010000 +00101000010000010000000000001000 +01111101101011010000000000000000 +01011000010000110000000000010000 +00101001011000110000000000000100 +00110100001000010000000000000010 +10110101101101001010000000000000 +01011000010000110000000000010100 +00101001011000110000000001110100 +01011000010000010000000000001000 +01111110100000010000000000000000 +01011000010000110000000000011000 +00101001011000110000000001100000 +01011000010000110000000000011100 +00101001011000110000000011000000 +01011000010000110000000000100000 +00101001011000110000000001001100 +01011000010000110000000000100100 +00101001011000110000000010101100 +01011000010000110000000000101000 +00101001011000110000000000001100 +01011000010000110000000000101100 +00101011100111010000000000000100 +00101011100010110000000000110100 +00101011100011000000000000110000 +00101011100011010000000000101100 +00101011100011100000000000101000 +00101011100011110000000000100100 +00101011100100000000000000100000 +00101011100100010000000000011100 +00101011100100100000000000011000 +00101011100100110000000000010100 +00101011100101000000000000010000 +00101011100101010000000000001100 +00101011100101100000000000001000 +00110111100111000000000000110100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +11111011111111111010101101000011 +00110100000000100000000000000000 +00110100000000011111111111111111 +11111011111111111111111101001011 +00110100000000010000000000000001 +11111011111111111111110001000001 +00111000000010111111111111111111 +10111001011000000001000000000000 +00110100000000011111111111111111 +11111011111111111111111101000101 +00110100000000010000000000000001 +11111011111111111111110000111011 +00110100000000100000000000000000 +00110100000000010000000000000000 +11111011111111111111111101000000 +00110100000000010000000000000000 +11111011111111111111110000110110 +10111001011000000001000000000000 +00110100000000010000000000000000 +11111011111111111111111100111011 +00110100000000010000000000000000 +11111011111111111111110000110001 +00110100000000010000000000000010 +11111011111111111111110000101111 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +11000011101000000000000000000000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00101000001001000000000000010100 +10111000001000000001100000000000 +10111000010000000011000000000000 +01000100100000000000000000010101 +00101000001001010000000000010000 +00100000101001010000000000000010 +01011100101000000000000000000111 +10110100100001100010000000000000 +10111000100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110100011010110000000000110000 +10110100100001100001000000000000 +10111001011000000000100000000000 +00110100000000110000000001000000 +11111000000000000000001001110001 +10111001011000000010000000000000 +10111000100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00101000001001010000000000010000 +00100000101001110000000000000100 +01011100111001001111111111101011 +00101000001001010000000000011100 +00110100000001000000000000000000 +01000100101001111111111111101011 +00110100001010110000000000110000 +00110100000001000000000001000000 +10111001011000000001100000000000 +11011000101000000000000000000000 +10111001011000000010000000000000 +11100011111111111111111111110000 +00110111100111001111111111110100 +01011011100010110000000000001000 +01011011100111010000000000000100 +00101000001000100000000000010100 +10111000001000000101100000000000 +01000100010000000000000000010011 +00101001011000010000000000001100 +10110100010000010001000000000000 +00101000010000110000000000000000 +01111000000001000000000000000001 +00111000100001001000111100111000 +00101000100000100000000000000000 +00110100000000011111111111101100 +01011100011000100000000000000111 +01111000000000100000000000000001 +00111000010000101011111110001100 +00101000010000110000000000000000 +00110100000000010000000000000000 +01011000010010110000000000000000 +01011001011000110000000001111100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00101000001000110000000000010000 +00100000011000110000000000000100 +01011100011000101111111111101100 +00101000001001010000000000011100 +00101000001000100000000000001100 +00110111100000110000000000001100 +00110100000001000000000000000100 +11011000101000000000000000000000 +00101011100000110000000000001100 +11100011111111111111111111101000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +01000100010000000000000001000111 +00101000001000100000000000001100 +01011000001000000000000010000000 +01011000001000000000000010110000 +01011000001000100000000010010000 +00110100000011000000000000000000 +10111001011000000000100000000000 +11111011111111111111111110101010 +01011001011000010000000000101000 +01000000001000100000000000111111 +01011100010000000000000000000110 +01111000000001000000000000000001 +00111000100001001000111100111000 +00101000001000110000000000000000 +00101000100000100000000000000000 +01000100011000100000000001011101 +00110100000000010000000000000000 +01000101100000000000000000110000 +00110101100000111111111111111111 +00110100011011000000000000101000 +10110101100011000000100000000000 +10110100001000010000100000000000 +10110101011000010000100000000000 +00101000001000100000000000000000 +01011100010000000000000000001111 +00110100000000010000000000000000 +01000100011000100000000000100111 +00110100011000100000000000100111 +10110100010000100001000000000000 +10110100010000100001000000000000 +10110101011000100001000000000000 +11100000000000000000000000000010 +01000100011000010000000001000100 +00101000010000010000000000000000 +00110100011000111111111111111111 +00110100010000101111111111111100 +01000100001000001111111111111100 +01011001011000110000000010110000 +00110100011011000000000000101000 +00110100011011010000000000100100 +10110101101011010110100000000000 +10110101101011010110100000000000 +10110101011011010110100000000000 +00101001101000100000000000000000 +10111001011000000000100000000000 +10110101100011000110000000000000 +11111011111111111111111110000011 +10110101100011000110000000000000 +10110101011011000001000000000000 +00101001101001000000000000000000 +00101000010000110000000000000000 +00101001011011000000000010110000 +00110100100001000000000001000000 +00110100011000111111111111111111 +01011001011000010000000000101000 +01011001101001000000000000000000 +01011000010000110000000000000000 +00110101100000110000000000100000 +10110100011000110001100000000000 +10110100011000110001100000000000 +10110101011000110001100000000000 +00101000001001000000000000001100 +00101000011000100000000000000000 +10110100010001000001000000000000 +01011001011000100000000001110100 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101000001000010000000000101000 +00101001011000110000000010110000 +00110100000001010000000000000010 +01000000001001000000000000111111 +11101100101000110010100000000000 +01100100100001000000000000000010 +10100000100001010010000000000000 +01000100100000101111111111000101 +00110100011000100000000000100000 +10110100010000100001000000000000 +10110100010000100001000000000000 +10110101011000100001000000000000 +00101000010001010000000000000000 +00110100011001000000000000100101 +00101000001000100000000000000100 +10110100100001000010000000000000 +10110100100001000010000000000000 +10110100101000100001000000000000 +10110101011001000010000000000000 +01011000100000100000000000000000 +00101000001001000000000000001100 +00110100011000010000000000100001 +10110100001000010000100000000000 +10110100001000010000100000000000 +10110101011000010000100000000000 +10110100100001010010100000000000 +00110100011011000000000000000001 +01011000001001010000000000000000 +11100011111111111111111110100011 +00110100000000010000000000000000 +01011001011000000000000010110000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110101100000100000000000100100 +10110100010000100001000000000000 +10110100010000100001000000000000 +10110101011000100001100000000000 +00101100001001010000000000000100 +00101000011001000000000000000000 +00110101100000100000000000101000 +10110100010000100001000000000000 +10110100010000100001000000000000 +10110101011000100001000000000000 +00110100101001011111111111111111 +00110100100001000000000001000000 +01011000010001010000000000000000 +01011000011001000000000000000000 +01011001011011000000000010110000 +11100011111111111111111110111110 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000110000000000000 +00110100000000100000000000000001 +10111000001000000101100000000000 +10111000011000000111000000000000 +10111000100000000110100000000000 +11111011111111111111111101110011 +10111001011000000000100000000000 +00110100000000100000000000000000 +11111011111111111111111101110000 +10111000001000000010100000000000 +01000100001000000000000000011110 +00101000101000010000000000011000 +01011100001011001111111111111010 +00101000101000010000000000011100 +01011100001011101111111111111000 +00101000101000010000000000100000 +01011100001011011111111111110110 +00101001011000010000000010110000 +01011001011001010000000000101000 +00101000101000100000000000001100 +00110100001000010000000000100000 +10110100001000010000100000000000 +10110100001000010000100000000000 +10110101011000010000100000000000 +00101000001000110000000000000000 +00110100000000010000000000000000 +10110100010000110001100000000000 +01011001011000110000000001110100 +00101000101000110000000000010100 +01011001011000000000000001111000 +00110100011000110000000000000001 +11001000011000100001000000000000 +01011001011000100000000001110000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110100000000011111111111111110 +11100011111111111111111111111000 +01011000001000000000000000101000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +11111011111111111111111111001001 +01001100001000000000000000000101 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00101001011000010000000001110100 +01011001011000000000000000101000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001001010000000000101000 +10111000001000000101100000000000 +10111000010000000110000000000000 +10111000100000000110100000000000 +00110100000000011111111111111110 +01000100101000000000000000010010 +01001100010000000000000000000010 +00101001011011000000000001111000 +00101001011000010000000001110000 +10110101100011010001000000000000 +01010100010000010000000000010011 +00101001011001000000000000010100 +01000100100000000000000000010100 +00101001011000100000000001110100 +10111000011000000000100000000000 +10111001101000000001100000000000 +10110101100000100001000000000000 +10110100100000100001000000000000 +11111000000000000000000101100000 +10111001101000000000100000000000 +01001100000000010000000000000011 +10110100001011000110000000000000 +01011001011011000000000001111000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101001011001000000000000010100 +11001000001011000110100000000000 +01011100100000001111111111101110 +00101001011000100000000001110100 +00101001011001010000000000011100 +10111001011000000000100000000000 +10110101100000100001000000000000 +10111001101000000010000000000000 +11011000101000000000000000000000 +11100011111111111111111111101110 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001001010000000000101000 +10111000001000000101100000000000 +10111000010000000110000000000000 +10111000100000000110100000000000 +00110100000000011111111111111110 +01000100101000000000000000010010 +01001100010000000000000000000010 +00101001011011000000000001111000 +00101001011000010000000001110000 +10110101100011010001000000000000 +01010100010000010000000000010011 +00101001011001000000000000010100 +01000100100000000000000000010100 +00101001011000010000000001110100 +10111000011000000001000000000000 +10111001101000000001100000000000 +10110101100000010000100000000000 +10110100100000010000100000000000 +11111000000000000000000100110100 +10111001101000000000100000000000 +01001100000000010000000000000011 +10110100001011000110000000000000 +01011001011011000000000001111000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101001011001000000000000010100 +11001000001011000110100000000000 +01011100100000001111111111101110 +00101001011000100000000001110100 +00101001011001010000000000100000 +10111001011000000000100000000000 +10110101100000100001000000000000 +10111001101000000010000000000000 +11011000101000000000000000000000 +11100011111111111111111111101110 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001001000000000000101000 +10111000001000000101100000000000 +10111000010000000110000000000000 +10111000011000000110100000000000 +00110100000000011111111111111110 +01000100100000000000000000010010 +01001100010000000000000000000010 +00101001011011000000000001111000 +00101001011000010000000001110000 +10110101100011010001000000000000 +01010100010000010000000000010011 +00101001011001000000000000010100 +01000100100000000000000000010100 +00101001011000010000000001110100 +00110100000000100000000011111111 +10111001101000000001100000000000 +10110101100000010000100000000000 +10110100100000010000100000000000 +11111000000000000000000110000110 +10111001101000000000100000000000 +01001100000000010000000000000011 +10110100001011000110000000000000 +01011001011011000000000001111000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101001011001000000000000010100 +11001000001011000110100000000000 +01011100100000001111111111101110 +00101001011000100000000001110100 +00101001011001000000000000100100 +10111001011000000000100000000000 +10110101100000100001000000000000 +10111001101000000001100000000000 +11011000100000000000000000000000 +11100011111111111111111111101110 +00100000010001011111111111111111 +00000000010001100000000000010000 +00100000100010001111111111111111 +00000000100010010000000000010000 +10001001000001010011100000000000 +10001001000001100100000000000000 +10001001001001010010100000000000 +00000000111010100000000000010000 +10001001001001100011000000000000 +10110101000001010010100000000000 +10110100101010100010100000000000 +01010000101010000000000000000011 +01111000000010000000000000000001 +10110100110010000011000000000000 +10001000010000110001000000000000 +10001000100000010010000000000000 +00000000101000010000000000010000 +00111100101001010000000000010000 +10110100110000010011000000000000 +00100000111001111111111111111111 +10110100010001000000100000000000 +10110100001001100000100000000000 +10110100101001110001000000000000 +11000011101000000000000000000000 +01000100011000000000000000001000 +00110100000001000000000000100000 +11001000100000110010000000000000 +01001000100000000000000000000110 +11001000000001000001000000000000 +00110100000000110000000000000000 +10000000001000100001000000000000 +10111000011000000000100000000000 +11000011101000000000000000000000 +10111100001001000010000000000000 +10000000010000110001000000000000 +10000000001000110001100000000000 +10111000100000100001000000000000 +10111000011000000000100000000000 +11100011111111111111111111111010 +01000100011000000000000000001000 +00110100000001000000000000100000 +11001000100000110010000000000000 +01001000100000000000000000000110 +11001000000001000000100000000000 +00110100000000110000000000000000 +10111100010000010000100000000000 +10111000011000000001000000000000 +11000011101000000000000000000000 +10000000010001000010000000000000 +10111100001000110000100000000000 +10111100010000110001100000000000 +10111000100000010000100000000000 +10111000011000000001000000000000 +11100011111111111111111111111010 +01000100011000000000000000001000 +00110100000001000000000000100000 +11001000100000110010000000000000 +01001000100000000000000000000110 +00010100001000110000000000011111 +11001000000001000001000000000000 +10010100001000100001000000000000 +10111000011000000000100000000000 +11000011101000000000000000000000 +10111100001001000010000000000000 +10000000010000110001000000000000 +10010100001000110001100000000000 +10111000100000100001000000000000 +10111000011000000000100000000000 +11100011111111111111111111111010 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01000100010000000000000000100010 +10111000010000010010000000000000 +00110100000000110000000000001111 +01010100100000110000000000001011 +01111000000000110000000000000001 +00111000011000111001010011001000 +00111100001000010000000000000100 +10110100011000100001000000000000 +10110100010000010000100000000000 +01000000001000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110100000010110000000000000000 +01001100001000000000000000000011 +11001000000000010000100000000000 +00110100000010110000000000000001 +01001100010000000000000000000011 +11001000000000100001000000000000 +00011001011010110000000000000001 +10010000110000000001100000000000 +00100000011000110000000000000010 +01000100011000000000000000001000 +10001100001000100000100000000000 +01000101011000000000000000000010 +11001000000000010000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110100000000110000000000000000 +11111000000000000000000001001010 +11100011111111111111111111111000 +10010000000000000000100000000000 +00100000001000010000000000000001 +00111100001000010000000000000001 +11010000000000010000000000000000 +10010000111000000000100000000000 +10111011101000001111000000000000 +00110100001000010000000010100000 +11000000001000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01000100010000000000000000010101 +00110100000010110000000000000000 +01001100001000000000000000000011 +11001000000000010000100000000000 +00110100000010110000000000000001 +00010100010000110000000000011111 +10010000110000000010000000000000 +10011000011000100001000000000000 +00100000100001000000000000000010 +11001000010000110001000000000000 +01000100100000000000000000001000 +11000100001000100000100000000000 +01000101011000000000000000000010 +11001000000000010000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110100000000110000000000000001 +11111000000000000000000000101010 +11100011111111111111111111111000 +10010000000000000000100000000000 +00100000001000010000000000000001 +00111100001000010000000000000001 +11010000000000010000000000000000 +10010000111000000000100000000000 +10111011101000001111000000000000 +00110100001000010000000010100000 +11000000001000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01000100010000000000000000000110 +00110100000000110000000000000000 +11111000000000000000000000011100 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +10010000000000000000100000000000 +00100000001000010000000000000001 +00111100001000010000000000000001 +11010000000000010000000000000000 +10010000111000000000100000000000 +10111011101000001111000000000000 +00110100001000010000000010100000 +11000000001000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01000100010000000000000000000110 +00110100000000110000000000000001 +11111000000000000000000000001100 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +10010000000000000000100000000000 +00100000001000010000000000000001 +00111100001000010000000000000001 +11010000000000010000000000000000 +10010000111000000000100000000000 +10111011101000001111000000000000 +00110100001000010000000010100000 +11000000001000000000000000000000 +11110100001000100010000000000000 +01000100100000000000000000011000 +00110100000001000000000000000001 +01001100010000000000000000001011 +00110100000001010000000000000000 +01010100010000010000000000000011 +11001000001000100000100000000000 +10111000101001000010100000000000 +00000000100001000000000000000001 +00000000010000100000000000000001 +01011100100000001111111111111011 +01011100011000000000000000000010 +10111000101000000000100000000000 +11000011101000000000000000000000 +00111100010000100000000000000001 +00111100100001000000000000000001 +11110100001000100010100000000000 +01111100100001100000000000000000 +10100000110001010010100000000000 +01000100101000000000000000000010 +01001100010000001111111111111010 +00110100000001010000000000000000 +01000100100000001111111111110101 +00110100000001010000000000000000 +11100011111111111111111111101101 +00110100000001000000000000000001 +00110100000001010000000000000000 +11100011111111111111111111101010 +00010100001000100000000000011111 +10011000010000010000100000000000 +11001000001000100000100000000000 +11000011101000000000000000000000 +00110100000001100000000000000011 +10111000001000000010000000000000 +10111000010000000010100000000000 +01010000110000110000000000001100 +10111000010000010011000000000000 +00100000110001100000000000000011 +01011100110000000000000000001011 +00110100000000010000000000000011 +00101000100001100000000000000000 +00101000101000100000000000000000 +01011100110000100000000000000101 +00110100011000111111111111111100 +00110100100001000000000000000100 +00110100101001010000000000000100 +01010100011000011111111111111010 +00110100000000010000000000000000 +01000100011000000000000000001110 +01000000100001100000000000000000 +01000000101000010000000000000000 +00110100011000101111111111111111 +01000100110000010000000000000110 +11100000000000000000000000001010 +01000000100001100000000000000000 +01000000101000010000000000000000 +00110100010000101111111111111111 +01011100110000010000000000000110 +00110100100001000000000000000001 +00110100101001010000000000000001 +01011100010000001111111111111010 +00110100000000010000000000000000 +11000011101000000000000000000000 +11001000110000010000100000000000 +11000011101000000000000000000000 +00110100000001000000000000001111 +10111000001000000011100000000000 +10111000010000000011000000000000 +01010000100000110000000000101101 +10111000010000010010000000000000 +00100000100001000000000000000011 +01011100100000000000000000101011 +10111000010000000010000000000000 +10111000001000000010100000000000 +10111000011000000011000000000000 +00110100000001110000000000001111 +00101000100010000000000000000000 +00110100110001101111111111110000 +01011000101010000000000000000000 +00101000100010000000000000000100 +01011000101010000000000000000100 +00101000100010000000000000001000 +01011000101010000000000000001000 +00101000100010000000000000001100 +00110100100001000000000000010000 +01011000101010000000000000001100 +00110100101001010000000000010000 +01010100110001111111111111110101 +00110100011000111111111111110000 +00000000011001100000000000000100 +00100000011000110000000000001111 +00110100110001100000000000000001 +00111100110001100000000000000100 +10110100001001100011100000000000 +10110100010001100011000000000000 +00110100000000100000000000000011 +01010000010000110000000000010001 +00110100000000100000000000000000 +00110100000010000000000000000011 +10110100110000100010000000000000 +00101000100001010000000000000000 +10110100111000100010000000000000 +00110100010000100000000000000100 +01011000100001010000000000000000 +11001000011000100010000000000000 +01010100100010001111111111111010 +00110100011000111111111111111100 +00000000011000100000000000000010 +00100000011000110000000000000011 +00110100010000100000000000000001 +00111100010000100000000000000010 +10110100111000100011100000000000 +10110100110000100011000000000000 +01000100011000000000000000001000 +00110100000000100000000000000000 +10110100110000100010000000000000 +01000000100001010000000000000000 +10110100111000100010000000000000 +00110100010000100000000000000001 +00110000100001010000000000000000 +01011100010000111111111111111011 +11000011101000000000000000000000 +10111000001000000011100000000000 +10111000010000000011000000000000 +01010000010000010000000000001100 +10110100010000110010000000000000 +01010000001001000000000000001010 +01000100011000000000000000111111 +10110100001000110001000000000000 +00110100100001001111111111111111 +01000000100001010000000000000000 +00110100010000101111111111111111 +00110100011000111111111111111111 +00110000010001010000000000000000 +01011100011000001111111111111011 +11000011101000000000000000000000 +00110100000001000000000000001111 +01010000100000110000000000101101 +10111000010000010010000000000000 +00100000100001000000000000000011 +01011100100000000000000000101011 +10111000010000000010000000000000 +10111000001000000010100000000000 +10111000011000000011000000000000 +00110100000001110000000000001111 +00101000100010000000000000000000 +00110100110001101111111111110000 +01011000101010000000000000000000 +00101000100010000000000000000100 +01011000101010000000000000000100 +00101000100010000000000000001000 +01011000101010000000000000001000 +00101000100010000000000000001100 +00110100100001000000000000010000 +01011000101010000000000000001100 +00110100101001010000000000010000 +01010100110001111111111111110101 +00110100011000111111111111110000 +00000000011001100000000000000100 +00100000011000110000000000001111 +00110100110001100000000000000001 +00111100110001100000000000000100 +10110100001001100011100000000000 +10110100010001100011000000000000 +00110100000000100000000000000011 +01010000010000110000000000010001 +00110100000000100000000000000000 +00110100000010000000000000000011 +10110100110000100010000000000000 +00101000100001010000000000000000 +10110100111000100010000000000000 +00110100010000100000000000000100 +01011000100001010000000000000000 +11001000011000100010000000000000 +01010100100010001111111111111010 +00110100011000111111111111111100 +00000000011000100000000000000010 +00100000011000110000000000000011 +00110100010000100000000000000001 +00111100010000100000000000000010 +10110100111000100011100000000000 +10110100110000100011000000000000 +01000100011000000000000000001000 +00110100000000100000000000000000 +10110100110000100010000000000000 +01000000100001010000000000000000 +10110100111000100010000000000000 +00110100010000100000000000000001 +00110000100001010000000000000000 +01011100010000111111111111111011 +11000011101000000000000000000000 +00100000001001010000000000000011 +10111000001000000010000000000000 +01000100101000000000000000001011 +01000100011000000000000000101100 +00110100011000111111111111111111 +00100000010001100000000011111111 +11100000000000000000000000000011 +01000100011000000000000000101000 +00110100011000111111111111111111 +00110000100001100000000000000000 +00110100100001000000000000000001 +00100000100001010000000000000011 +01011100101000001111111111111011 +00110100000001010000000000000011 +01010000101000110000000000011010 +00100000010001010000000011111111 +00111100101001100000000000001000 +00110100000010100000000000001111 +10111000110001010010100000000000 +00111100101001100000000000010000 +10111000100000000100000000000000 +10111000110001010011000000000000 +10111000011000000011100000000000 +10111000100000000010100000000000 +00110100000010010000000000001111 +01010100011010100000000000010111 +00110100000001000000000000000000 +00110100000001110000000000000011 +10110101000001000010100000000000 +00110100100001000000000000000100 +01011000101001100000000000000000 +11001000011001000010100000000000 +01010100101001111111111111111100 +00110100011000111111111111111100 +00000000011001000000000000000010 +00100000011000110000000000000011 +00110100100001000000000000000001 +00111100100001000000000000000010 +10110101000001000100000000000000 +10111001000000000010000000000000 +01000100011000000000000000000111 +00100000010000100000000011111111 +00110100000001010000000000000000 +10110100100001010011000000000000 +00110000110000100000000000000000 +00110100101001010000000000000001 +01011100011001011111111111111101 +11000011101000000000000000000000 +01011000101001100000000000000000 +01011000101001100000000000000100 +01011000101001100000000000001000 +01011000101001100000000000001100 +00110100111001111111111111110000 +00110100101001010000000000010000 +01010100111010011111111111111010 +00110100011000111111111111110000 +00000000011010000000000000000100 +00100000011000110000000000001111 +00110101000010000000000000000001 +00111101000010000000000000000100 +10110100100010000100000000000000 +00110100000001000000000000000011 +01010100011001001111111111011100 +10111001000000000010000000000000 +11100011111111111111111111101000 +01111000000000110000000000000001 +00111000011000111010110101110000 +00101000011001110000000000000000 +10111000001000000100100000000000 +00110100000000110000000000000000 +00110100000001100000000000000001 +11100000000000000000000000001001 +01000000100001000000000000000000 +10110100111001000100000000000000 +01000001000010000000000000000001 +00100001000010000000000000000011 +01000101000001100000000000010010 +11001000101001000000100000000000 +01011100001000000000000000010011 +01000100100000010000000000010010 +10110101001000110010100000000000 +01000000101001010000000000000000 +10110100010000110010000000000000 +00110100011000110000000000000001 +10110100111001010100000000000000 +01000001000010000000000000000001 +00100001000010000000000000000011 +01011101000001101111111111110001 +01000000100001000000000000000000 +00110100101001010000000000100000 +10110100111001000100000000000000 +01000001000010000000000000000001 +00100001000010000000000000000011 +01011101000001101111111111110000 +00110100100001000000000000100000 +11001000101001000000100000000000 +01000100001000001111111111101111 +11000011101000000000000000000000 +10111000010000010001100000000000 +00100000011000110000000000000011 +01011100011000000000000000011101 +10111000001000000010000000000000 +00101000010000110000000000000000 +00101000001000010000000000000000 +01011100001000110000000000011000 +01111000000000110000000000000001 +00111000011000111001010111001000 +00101000011001110000000000000000 +01111000000000110000000000000001 +00111000011000111001010111001100 +00101000011001100000000000000000 +10100100001000000001100000000000 +10110100001001110000100000000000 +10100000001000110001100000000000 +10100000011001100001100000000000 +00110100000000010000000000000000 +01000100011000000000000000000011 +11100000000000000000000000011100 +01011100011000000000000000011001 +00110100100001000000000000000100 +00101000100000010000000000000000 +00110100010000100000000000000100 +00101000010010000000000000000000 +10110100001001110010100000000000 +10100100001000000001100000000000 +10100000101000110001100000000000 +10100000011001100001100000000000 +01000100001010001111111111110111 +10111000100000000000100000000000 +01000000001000110000000000000000 +01011100011000000000000000000110 +11100000000000000000000000001001 +00110100001000010000000000000001 +01000000001000110000000000000000 +00110100010000100000000000000001 +01000100011000000000000000000101 +01000000010001000000000000000000 +01000100011001001111111111111011 +11001000011001000000100000000000 +11000011101000000000000000000000 +01000000010001000000000000000000 +11001000011001000000100000000000 +11000011101000000000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +11000011101000000000000000000000 +10111000010000010010100000000000 +00100000101001010000000000000011 +10111000010000000011100000000000 +10111000001000000010000000000000 +01011100101000000000000000011000 +01111000000001000000000000000001 +00111000100001001001010111001000 +00101000010000110000000000000000 +00101000100010000000000000000000 +01111000000001000000000000000001 +00111000100001001001010111001100 +00101000100001110000000000000000 +10100100011000000011000000000000 +10110100011010000010000000000000 +10100000110001000011000000000000 +10100000110001110011000000000000 +10111000001000000010000000000000 +01011100110001010000000000001010 +01011000100000110000000000000000 +00110100010000100000000000000100 +00101000010000110000000000000000 +00110100100001000000000000000100 +10100100011000000011000000000000 +10110100011010000010100000000000 +10100000110001010010100000000000 +10100000101001110010100000000000 +01000100101000001111111111111000 +10111000010000000011100000000000 +00110100000000110000000000000000 +10110100111000110010100000000000 +01000000101001010000000000000000 +10110100100000110011000000000000 +00110100011000110000000000000001 +00110000110001010000000000000000 +01011100101000001111111111111011 +11000011101000000000000000000000 +00100000001000100000000000000011 +01000100010000000000000000101100 +01000000001000110000000000000000 +00110100000000100000000000000000 +01000100011000000000000000100111 +10111000001000000001000000000000 +11100000000000000000000000000011 +01000000010000110000000000000000 +01000100011000000000000000100010 +00110100010000100000000000000001 +00100000010000110000000000000011 +01011100011000001111111111111100 +01111000000001000000000000000001 +00111000100001001001010111001000 +00101000010000110000000000000000 +00101000100001100000000000000000 +01111000000001000000000000000001 +00111000100001001001010111001100 +00101000100001010000000000000000 +10100100011000000010000000000000 +10110100011001100001100000000000 +10100000011001000001100000000000 +10100000011001010001100000000000 +01011100011000000000000000010001 +00110100010000100000000000000100 +00101000010000110000000000000000 +10110100011001100010000000000000 +10100100011000000001100000000000 +10100000100000110001100000000000 +10100000011001010001100000000000 +01011100011000000000000000001010 +00110100010000100000000000000100 +00101000010000110000000000000000 +10110100011001100010000000000000 +10100100011000000001100000000000 +10100000100000110001100000000000 +10100000011001010001100000000000 +01000100011000001111111111110011 +11100000000000000000000000000010 +00110100010000100000000000000001 +01000000010000110000000000000000 +01011100011000001111111111111110 +11001000010000010001000000000000 +10111000010000000000100000000000 +11000011101000000000000000000000 +10111000001000000001000000000000 +11100011111111111111111111011110 +00110100000001100000000000000000 +01000100011000000000000000010111 +10111000010000010011100000000000 +00100000111001110000000000000011 +00110100011001001111111111111111 +01000100111000000000000000010101 +01000000001000110000000000000000 +01000000010001010000000000000000 +01011100011001010000000000001111 +00110100000001100000000000000000 +01000100100000000000000000001110 +00110100001000010000000000000001 +00110100010000100000000000000001 +01011100011000000000000000000100 +11100000000000000000000000001010 +01000100100000000000000000110011 +01000100011000000000000000110010 +01000000001000110000000000000000 +01000000010001010000000000000000 +00110100100001001111111111111111 +00110100001000010000000000000001 +00110100010000100000000000000001 +01000100011001011111111111111001 +11001000011001010011000000000000 +10111000110000000000100000000000 +11000011101000000000000000000000 +10111000001000000010100000000000 +00110100000000010000000000000011 +10111000010000000010000000000000 +01010000001000110000000000101000 +00101000101000010000000000000000 +00101000010000100000000000000000 +01011100001000100000000000100101 +00110100011000111111111111111100 +10111000111000000011000000000000 +01000100011000001111111111110101 +01111000000000100000000000000001 +00111000010000101001010111001000 +00101000010010010000000000000000 +01111000000000100000000000000001 +00111000010000101001010111001100 +00101000010010000000000000000000 +10100100001000000001000000000000 +10110100001010010000100000000000 +10100000001000100000100000000000 +10100000001010000000100000000000 +00110100000001110000000000000011 +01011100001000001111111111101001 +00110100101001010000000000000100 +00110100100001000000000000000100 +01010100011001110000000000000110 +10111000101000000000100000000000 +10111000100000000001000000000000 +01000100011000000000000000010100 +00110100011001001111111111111111 +11100011111111111111111111001111 +00101000101000010000000000000000 +00101000100010100000000000000000 +10110100001010010011000000000000 +10100100001000000001000000000000 +10100000110000100001000000000000 +10100000010010000001000000000000 +01011100001010100000000000000111 +00110100011000111111111111111100 +01000100011000000000000000000010 +01000100010000001111111111101111 +00110100000001100000000000000000 +10111000110000000000100000000000 +11000011101000000000000000000000 +10111000100000000001000000000000 +10111000101000000000100000000000 +00110100011001001111111111111111 +11100011111111111111111110111110 +01000000101000110000000000000000 +01000000100001010000000000000000 +11001000011001010011000000000000 +11100011111111111111111111001100 +10111000010000010010000000000000 +00100000100001000000000000000011 +01110100011001010000000000000011 +01100100100001000000000000000000 +10111000010000000011000000000000 +10100000100001010010000000000000 +10111000001000000010100000000000 +01000100100000000000000000010101 +01111000000001000000000000000001 +00111000100001001001010111001000 +00101000100010010000000000000000 +01111000000001000000000000000001 +00111000100001001001010111001100 +00101000100010000000000000000000 +00110100000010100000000000000011 +11100000000000000000000000000110 +01011000101001000000000000000000 +00110100011000111111111111111100 +00110100101001010000000000000100 +00110100010000100000000000000100 +01010001010000110000000000000111 +00101000010001000000000000000000 +10100100100000000011100000000000 +10110100100010010011000000000000 +10100000111001100011000000000000 +10100000110010000011000000000000 +01000100110000001111111111110110 +10111000010000000011000000000000 +01000100011000000000000000010100 +01000000110000100000000000000000 +00110100011000111111111111111111 +00110100101001000000000000000001 +00110000101000100000000000000000 +01000100010000000000000000001001 +00110100110000100000000000000001 +01000100011000000000000000001110 +01000000010001010000000000000000 +00110100011000111111111111111111 +00110100010000100000000000000001 +00110000100001010000000000000000 +00110100100001000000000000000001 +01011100101000001111111111111010 +00110100000000100000000000000000 +01000100011000000000000000000111 +10110100100000100010100000000000 +00110000101000000000000000000000 +00110100010000100000000000000001 +01011100011000101111111111111101 +11000011101000000000000000000000 +11000011101000000000000000000000 +11000011101000000000000000000000 +00110100000000110000000000000000 +01000100010000000000000000001100 +01000000001001000000000000000000 +01000100100000000000000000001010 +00110100010000101111111111111111 +10111000001000000001100000000000 +11100000000000000000000000000100 +01000000011001000000000000000000 +00110100010000101111111111111111 +01000100100000000000000000000011 +00110100011000110000000000000001 +01011100010000001111111111111100 +11001000011000010001100000000000 +10111000011000000000100000000000 +11000011101000000000000000000000 +01010111010100100010000001000011 +01101111011100100110010100111010 +00100000011100110111010001100001 +01110010011101000110100101101110 +01100111001000000111010101110000 +00101110001011100010111000001010 +00000000000000000000000000000000 +01010101011011100110000101100010 +01101100011001010010000001110100 +01101111001000000110010001100101 +01110100011001010111001001101101 +01101001011011100110010100100000 +01001101010000010100001100100000 +01100001011001000110010001110010 +01100101011100110111001100001010 +00000000000000000000000000000000 +01001100011011110110001101100001 +01101100001000000100110101000001 +01000011001000000110000101100100 +01100100011100100110010101110011 +01110011001110100010000000100101 +00110000001100100111100000111010 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000001110100010010100110000 +00110010011110000011101000100101 +00110000001100100111100000111010 +00100101001100000011001001111000 +00001010000000000000000000000000 +01001110011001010111011100100000 +01101101011000010111100000100000 +01110010011101010110111000100000 +01110100011010010110110101100101 +00100000011001100110111101110010 +00100000011000010010000001110100 +01100001011100110110101100100000 +00100101011100110010110000100000 +01101111011011000110010000100000 +00100101011011000110010000101100 +00100000011011100110010101110111 +00100000001001010110010000001010 +00000000000000000000000000000000 +01110100011000010111001101101011 +00100000001001010111001100101100 +00100000011100100111010101101110 +00100000011001100110111101110010 +00100000001001010110010000100000 +01101101011100110000101000000000 +01110011011100000110110001101100 +00101101011000100110100000000000 +01110011011010000110010101101100 +01101100001010110110011101110101 +01101001000000000000000000000000 +01110000011101000111000000000000 +01110101011100000111010001101001 +01101101011001010000000000000000 +01100011011010000110010101100011 +01101011001011010110110001101001 +01101110011010110000000000000000 +01101001011001000110110001100101 +00000000000000000000000000000000 +01100100011010010110000101100111 +00101101011001100111001101101101 +00101101001100010010110100100101 +01110011001110100010000000100101 +00110000001110010110010000101110 +00100101001100000011001101100100 +00111010001000000000000000000000 +01000101010011100101010001000101 +01010010001000000010010101110011 +00101100001000000111000001100001 +01100011011010110110010101110100 +00100000011011000110010101101110 +00100000001001010110100100001010 +00000000000000000000000000000000 +00100101011100110011101000100000 +01110010011001010110010101101110 +01110100011001010111001000100000 +01101001011011100010000000100101 +01101001001000000110110101110011 +00001010000000000000000000000000 +01001100010001010100000101010110 +01000101001000000010010101110011 +00100000001010000110111001100101 +01111000011101000011101000100000 +00100101001100110110100100101001 +00001010000010100000000000000000 +01010010010001010100001101010110 +00100000001001010011000000110010 +01100100001000000110001001111001 +01110100011001010111001100100000 +01100001011101000010000000100101 +00111001011001000010111000100101 +00110000001110010110010000101110 +00100101001100000011001101100100 +00100000001010000111010001111001 +01110000011001010010000000100101 +01111000001011000010000000100101 +01110011001010010000101000000000 +01100110011100110110110100111010 +00100000010101010110111001101011 +01101110011011110111011101101110 +00100000011100110111010001100001 +01110100011001010010000001100110 +01101111011100100010000001110000 +01101111011100100111010000100000 +00100101011100110000101000000000 +01010111011100100110111101101110 +01100111001000000110010001101111 +01101101011000010110100101101110 +00100000001001010110100100111010 +00100000011001000110100101110011 +01100011011000010111001001100100 +00001010000000000000000000000000 +01000001011011000111010001100101 +01110010011011100110000101110100 +01100101001000000110110101100001 +01110011011101000110010101110010 +00111010001000000110010001101001 +01110011011000110110000101110010 +01100100000010100000000000000000 +01001100011011110110111101110000 +01101001011011100110011100100000 +01100110011100100110000101101101 +01100101001110100010000001100100 +01101001011100110110001101100001 +01110010011001000000101000000000 +01100110011100110110110100100000 +01100110011011110111001000100000 +00100101011100110011101000100000 +01000101011100100111001001101111 +01110010001000000010010101101001 +00100000011010010110111000100000 +00100101011100110000101000000000 +01110000011100000111001101101001 +00000000000000000000000000000000 +00100101011100110010110100100101 +01101001001011010010010101110011 +00111010001000000000000000000000 +00100101011100110011101000100000 +01100101011100100111001001101111 +01110010001000000111000001100001 +01110010011100110110100101101110 +01100111001000000010001000100101 +01110011001000100000101000000000 +01100100011010010110000101100111 +00101101011000110110111101101110 +01100110011010010110011100000000 +01100100011010010110000101100111 +00101101011001010111100001110100 +01100101011011100111001101101001 +01101111011011100000000000000000 +01100100011010010110000101100111 +00101101011000100110110101100011 +00000000000000000000000000000000 +01100100011010010110000101100111 +00101101011100110110010101110010 +01110110011011110000000000000000 +01100100011010010110000101100111 +00101101011001100111001001100001 +01101101011001010111001100000000 +01100100011010010110000101100111 +00101101011101000110100101101101 +01100101000000000000000000000000 +01100100011010010110000101100111 +00101101011001100111001101101101 +00000000000000000000000000000000 +01101110011001010111011100100000 +01110100011010010110110101100101 +01101111011101010111010000100000 +01100110011011110111001000100000 +00100101011100110011101000100000 +00100101011010010000101000000000 +01110100011010010110110101100101 +01101111011101010111010000100000 +01100101011110000111000001101001 +01110010011001010110010000111010 +00100000001001010111001100001010 +00000000000000000000000000000000 +01010010010001010101000101010101 +01000101010100110101010000000000 +01010011010110010100111001000011 +01011111010100110100010101001110 +01000100000000000000000000000000 +01000001010011100100111001011111 +01010010010001010100001101000101 +01001001010100000101010000000000 +01000001010011100100111001011111 +01010011010001010100111001000100 +00000000000000000000000000000000 +01000110010000010101010101001100 +01010100000000000000000000000000 +01010001010101010100000101001100 +00000000000000000000000000000000 +01110011011110010110111001100011 +00000000000000000000000000000000 +01100100011001010110110001100001 +01111001010111110111001001100101 +01110001000000000000000000000000 +01110000011001000110010101101100 +01100001011110010101111101110010 +01100101011100010000000000000000 +01110000011001000110010101101100 +01100001011110010101111101110010 +01100101011100110111000000000000 +01100100011001010110110001100001 +01111001010111110111001001100101 +01110011011100000000000000000000 +01110000011001000110010101101100 +01100001011110010101111101110010 +01100101011100110111000001011111 +01100110011011110110110001101100 +01101111011101110101111101110101 +01110000000000000000000000000000 +01100001011011100110111001101111 +01110101011011100110001101100101 +00000000000000000000000000000000 +01110011011010010110011101101110 +01100001011011000110100101101110 +01100111000000000000000000000000 +01101101011000010110111001100001 +01100111011001010110110101100101 +01101110011101000000000000000000 +01010000010100000101001101101001 +00100000011001100110111101110010 +00100000010101110101001001010000 +01000011001011100010000001000011 +01101111011011010110110101101001 +01110100001000000010010101110011 +00101100001000000110001001110101 +01101001011011000111010000100000 +01101111011011100010000001000001 +01110000011100100010000000100000 +00110100001000000011001000110000 +00110001001110000000101000000000 +01110000011100000111001101101001 +00101101011101100011001000110000 +00110001001101100010111000110001 +00110010001011010011100000111001 +00101101011001110110001101100010 +00110101001110010011001100110100 +01100101000000000000000000000000 +01010000010101000101000000100000 +01110011011101000110000101110010 +01110100000010100000000000000000 +01010000010101000101000000100000 +01110011011101000110111101110000 +00001010000000000000000000000000 +01001100011011110110001101101011 +01101001011011100110011100100000 +01010000010011000100110000000000 +00001010010011000110111101100011 +01101011001000000111010001101001 +01101101011001010110111101110101 +01110100001011100000000000000000 +00101110000000000000000000000000 +01110111011100100011000100000000 +00100000011010010110111001110110 +01100001011011000110100101100100 +00000000000000000000000000000000 +00100101011100110101010001001001 +01001101010001010011101000100000 +00101000001001010110110001101001 +00100000001011010010000000110000 +01111000001001010110110001111000 +00101001001000000010010101101100 +01101001001011100010010100110000 +00110110011011000110100100100101 +01110011000010100000000000000000 +00100101011100110010010101110011 +00100101001100000011001001111000 +00101101001001010011000000110010 +01111000001011010010010100110000 +00110010011110000010110100100101 +00110000001100100111100000101101 +00100101001100000011001001111000 +00101101001001010011000000110010 +01111000001011010010010100110000 +00110010011110000010110100100101 +00110000001100100111100000101101 +00100101001100000011001001111000 +00101101001001010011000000110010 +01111000000010100000000000000000 +00100101011100110010010101110011 +00100101011100110010000000101000 +01110011011010010111101001100101 +00100000001001010110100100101001 +00001010000000000000000000000000 +00100101011100110010010101110011 +00000000000000000000000000000000 +00100101001100000011001001111000 +00000000000000000000000000000000 +00100101011100110101011001000101 +01010010010100110100100101001111 +01001110001110100010000001110101 +01101110011100110111010101110000 +01110000011011110111001001110100 +01100101011001000010000000101000 +00100101011010010010100100001010 +00000000000000000000000000000000 +00100101011100110101011001000101 +01010010010100110100100101001111 +01001110001110100010000000100101 +01101001001000000010100001110100 +01111001011100000110010100100000 +00100101011010010010110000100000 +01101100011001010110111000100000 +00100101011010010010110000100000 +01100100011011110110110101100001 +01101001011011100010000000100101 +01101001001010010000101000000000 +00100101011100110100011001001100 +01000001010001110101001100111010 +00100000001100000111100000100101 +00110000001101000111100000100000 +00101000011000110110111101110010 +01110010011001010110001101110100 +01101001011011110110111000100000 +00110000011110000010010100110000 +00111000011110000011101000100101 +00110000001110000111100000100000 +00100101001100000011100001110101 +00101001000010100000000000000000 +01010000010011110101001001010100 +00111010001000000000000000000000 +00100101011100110101001001000101 +01010011010101000011101000100000 +01110011011001010111000100100000 +00100101011010010010110000100000 +01100011011101000111001001101100 +00100000001001010110100100101100 +00100000011011000110111101100111 +00101101011010010110111001110100 +01100101011100100111011001100001 +01101100001000000010010101101001 +00001010000000000000000000000000 +00100101011100110100110101000101 +01010011010100110100000101000111 +01000101001110100010000000101000 +01000101001010010010000001010011 +01011001010011100100001100001010 +00000000000000000000000000000000 +00100101011100110010010101110011 +00100101011011000111010100101110 +00100101001100000011100101101001 +00001010000000000000000000000000 +01001101010100110100011100101101 +01010011010110010100111001000011 +00111010001000000000000000000000 +00100101011100110100110101000101 +01010011010100110100000101000111 +01000101001110100010000000101000 +01000101001010010010000001000100 +01000101010011000100000101011001 +01011111010100100100010101010001 +00001010000000000000000000000000 +01001101010100110100011100101101 +01000100010001010100110001000001 +01011001010111110101001001000101 +01010001001110100010000000000000 +00100101011100110100110101000101 +01010011010100110100000101000111 +01000101001110100010000000101000 +01000111001010010010000001000110 +01001111010011000100110001001111 +01010111010111110101010101010000 +00001010000000000000000000000000 +01001101010100110100011100101101 +01000110010011110100110001001100 +01001111010101110101111101010101 +01010000001110100010000000000000 +00100101011100110100110101000101 +01010011010100110100000101000111 +01000101001110100010000000101000 +01000111001010010010000001000100 +01000101010011000100000101011001 +01011111010100100100010101010011 +01010000000010100000000000000000 +01001101010100110100011100101101 +01000100010001010100110001000001 +01011001010111110101001001000101 +01010011010100000011101000100000 +00000000000000000000000000000000 +00100101011100110100110101000101 +01010011010100110100000101000111 +01000101001110100010000000101000 +01000111001010010010000001000001 +01001110010011100100111101010101 +01001110010000110100010100001010 +00000000000000000000000000000000 +01001101010100110100011100101101 +01000001010011100100111001001111 +01010101010011100100001101000101 +00111010001000000111001101110100 +01100001011011010111000000100000 +00000000000000000000000000000000 +00100101011100110010010101110011 +00100101001100000011001001111000 +00101101001001010011000000110010 +01111000001011010010010100110000 +00110100011110000000101000000000 +01001101010100110100011100101101 +01000001010011100100111001001111 +01010101010011100100001101000101 +00111010001000000110011101110010 +01100001011011100110010001101101 +01100001011100110111010001100101 +01110010001011010111000101110101 +01100001011011000110100101110100 +01111001001000000000000000000000 +00100101011100110100110101010011 +01000111001011010100000101001110 +01001110010011110101010101001110 +01000011010001010011101000100000 +01100111011100100110000101101110 +01100100011011010110000101110011 +01110100011001010111001000101101 +01110000011100100110100101101111 +00100000001001010110100100100000 +00100101011010010000101000000000 +00100101011100110010010101110011 +00100101001100000011001001111000 +00101101001001010011000000110010 +01111000001011010010010100110000 +00110010011110000010110100100101 +00110000001100100111100000101101 +00100101001100000011001001111000 +00101101001001010011000000110010 +01111000001011010010010100110000 +00110010011110000010110100100101 +00110000001100100111100000001010 +00000000000000000000000000000000 +01001101010100110100011100101101 +01000001010011100100111001001111 +01010101010011100100001101000101 +00111010001000000110011101110010 +01100001011011100110010001101101 +01100001011100110111010001100101 +01110010001011010110100101100100 +00100000000000000000000000000000 +00100101011100110100110101000101 +01010011010100110100000101000111 +01000101001110100010000000101000 +01000111001010010010000001010011 +01001001010001110100111001000001 +01001100010010010100111001000111 +00001010000000000000000000000000 +01001101010100110100011100101101 +01010011010010010100011101001110 +01000001010011000100100101001110 +01000111001110100010000001110100 +01100001011100100110011101100101 +01110100001011010111000001101111 +01110010011101000010000000000000 +00100101011100110101010001001100 +01010110001110100010000001110100 +01101111011011110010000001110011 +01101000011011110111001001110100 +00100000001010000010010101101001 +00100000001011010010000000100101 +01101001001000000011110100100000 +00100101011010010010100100001010 +00000000000000000000000000000000 +00100101011100110101010001001100 +01010110001110100010000001110100 +01111001011100000110010100100000 +00100101001100000011010001111000 +00100000011011000110010101101110 +00100000001001010110100100100000 +01101111011101010110100100100000 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000001110100010010100110000 +00110010011110000010000001110011 +01110101011000100010000000100101 +00110000001100100111100000111010 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000000010100000000000000000 +00100101011100110101010001001100 +01010110001110100010000001110100 +01101111011011110010000001110011 +01101000011011110111001001110100 +00100000001010000110010101111000 +01110000011001010110001101110100 +01100101011001000010000000100101 +01101001001011000010000001110100 +01101111011101000110000101101100 +00100000001001010110100100101001 +00001010000000000000000000000000 +01010100010011000101011000111010 +00100000000000000000000000000000 +01110100011011000111011000101101 +01100011011011110110111001110100 +01100101011011100111010000000000 +01000100010101010100110101010000 +00111010001000000000000000000000 +01110000011000010111100101101100 +01101111011000010110010000000000 +00100101011100110101011001001100 +01000001010011100010000000100101 +01101001000010100000000000000000 +00100101011100110100010101010100 +01001000001110100010000000100101 +00110000001101000111100000100000 +00101000001001010011000000110010 +01111000001110100010010100110000 +00110010011110000011101000100101 +00110000001100100111100000111010 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000001110100010010100110000 +00110010011110000010000000101101 +00111110001000000010010100110000 +00110010011110000011101000100101 +00110000001100100111100000111010 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000001110100010010100110000 +00110010011110000011101000100101 +00110000001100100111100000101001 +00001010000000000000000000000000 +00100101011100110100100101010000 +00111010001000000010010101101001 +00100000001010000010010101101001 +00101110001001010110100100101110 +00100101011010010010111000100101 +01101001001000000010110100111110 +00100000001001010110100100101110 +00100101011010010010111000100101 +01101001001011100010010101101001 +00101001001000000110110001100101 +01101110001000000010010101101001 +00001010000000000000000000000000 +00100101011100110101010101000100 +01010000001110100010000000101000 +00100101011010010010000000101101 +00111110001000000010010101101001 +00101001001000000110110001100101 +01101110001000000010010101101001 +00001010000000000000000000000000 +00100101011100110011101000100000 +00100101011011000110100100001010 +00000000000000000000000000000000 +01010111011000010111001001101110 +01101001011011100110011100111010 +00100000001001010111001100111010 +00100000011000110110000101101110 +00100000011011100110111101110100 +00100000011000010110010001101010 +01110101011100110111010000100000 +01100110011100100110010101110001 +01011111011100000111000001100010 +00100000001001010110110001101001 +00001010000000000000000000000000 +00100101011100110011101000100000 +00100101001110010110110001110101 +00101110001001010011000000111001 +01101100011010010000101000000000 +00100101011100110011101000100000 +01110011011011100111010000111101 +00100101011001000010110000100000 +01110011011001010110001100111101 +00100101011011000110010000101100 +00100000011011100111001101100101 +01100011001111010010010101101100 +01100100000010100000000000000000 +00100101001100000011100101100100 +00100000001001010011000000111001 +01100100001000000010010100110000 +00110011011001000010000000000000 +01110011011001010110111001100100 +00111010001000000000000000000000 +01110010011001010110001101110110 +00111010001000000000000000000000 +00100101001100000011100101100100 +00100000001001010011000000111001 +01100100001000000010010100110000 +00110011011001000000000000000000 +00100000001000000010000000100101 +00111001011001000010111000100101 +00110011011001000000101000000000 +01101001011011100110100101110100 +01101001011000010110110001101001 +01111010011010010110111001100111 +00000000000000000000000000000000 +01100110011000010111010101101100 +01110100011110010000000000000000 +01100100011010010111001101100001 +01100010011011000110010101100100 +00000000000000000000000000000000 +01101100011010010111001101110100 +01100101011011100110100101101110 +01100111000000000000000000000000 +01110000011100100110010100101101 +01101101011000010111001101110100 +01100101011100100000000000000000 +01110000011000010111001101110011 +01101001011101100110010100000000 +01110101011011100110001101100001 +01101100011010010110001001110010 +01100001011101000110010101100100 +00000000000000000000000000000000 +01110011011011000110000101110110 +01100101000000000000000000000000 +01110101011011100110001101100001 +01101100011010010110001001110010 +01100001011101000110010101100100 +00101111011101110111001000101101 +01110000011100100110010101110011 +01100101011011100111010000000000 +01101101011000010111001101110100 +01100101011100100010111101110111 +01110010001011010110110100101101 +01101100011011110110001101101011 +00000000000000000000000000000000 +01110101011011100110001101100001 +01101100011010010110001001110010 +01100001011101000110010101100100 +00101111011101110111001000101101 +01110011001011010110110001101111 +01100011011010110000000000000000 +01110101011011100110001101100001 +01101100011010010110001001110010 +01100001011101000110010101100100 +00101111011101110111001000101101 +01101100011011110110001101101011 +01100101011001000000000000000000 +01110111011100100010110101100011 +01100001011011000110100101100010 +01110010011000010111010001101001 +01101111011011100000000000000000 +01110111011100100010110101100011 +01100001011011000110100101100010 +01110010011000010111010001100101 +01100100000000000000000000000000 +01110111011100100010110101110010 +01100101011100110111000000101101 +01100011011000010110110001101001 +01100010001011010111001001100101 +01110001000000000000000000000000 +01110111011100100010110101101100 +01101001011011100110101100101101 +01101111011011100000000000000000 +01100001011000100111001101101111 +01101100011101010111010001100101 +00101101011000110110000101101100 +01101001011000100111001001100001 +01110100011010010110111101101110 +00000000000000000000000000000000 +01101000011011110110111101101011 +00111010001000000010010101110011 +00001010000000000000000000000000 +01010100001100100010000001101111 +01110010001000000101010000110011 +00100000011010010110111001100011 +01101111011100100111001001100101 +01100011011101000010110000100000 +01100100011010010111001101100011 +01100001011100100110010001101001 +01101110011001110010000001110100 +01110101011100000110110001100101 +00001010000000000000000000000000 +01010100001100110010000001101111 +01110010001000000101010000110110 +00100000011010010110111001100011 +01101111011100100111001001100101 +01100011011101000010110000100000 +01100100011010010111001101100011 +01100001011100100110010001101001 +01101110011001110010000001110100 +01110101011100000110110001100101 +00001010000000000000000000000000 +01001000011000010110111001100100 +01110011011010000110000101101011 +01100101001000000110011001100001 +01101001011011000111010101110010 +01100101001110100010000001101110 +01101111011101110010000001101110 +01101111011011100010110101110111 +01110010001000000010010101110011 +00001010000000000000000000000000 +01010010011001010111010001110010 +01111001001000000110111101101110 +00100000011101000110100101101101 +01100101011011110111010101110100 +00001010000000000000000000000000 +00100101011100110011101000100000 +01110011011101010110001001110011 +01110100011000010111010001100101 +00100000001001010110100100001010 +00000000000000000000000000000000 +01010100011110000011110100111110 +00111110011100110110001101100001 +01101100011001010110010001010000 +01101001011000110110111101110011 +01100101011000110110111101101110 +01100100011100110010111001101101 +01110011011000100010000000111101 +00100000001100000111100000100101 +01111000000010100000000000000000 +01010100011110000011110100111110 +00111110011100110110001101100001 +01101100011001010110010001010000 +01101001011000110110111101110011 +01100101011000110110111101101110 +01100100011100110010111001101100 +01110011011000100010000000111101 +00100000001100000111100000100101 +01111000000010100000000000000000 +01010010011110000010000001100110 +01101001011110000110010101100100 +00100000011001000110010101101100 +01100001011110010010000000111101 +00100000001001010110010000001010 +00000000000000000000000000000000 +01010010011110000011110100111110 +00111110011100110110001101100001 +01101100011001010110010001010000 +01101001011000110110111101110011 +01100101011000110110111101101110 +01100100011100110010111001101101 +01110011011000100010000000111101 +00100000001100000111100000100101 +01111000000010100000000000000000 +01010010011110000011110100111110 +00111110011100110110001101100001 +01101100011001010110010001010000 +01101001011000110110111101110011 +01100101011000110110111101101110 +01100100011100110010111001101100 +01110011011000100010000000111101 +00100000001100000111100000100101 +01111000000010100000000000000000 +00100011001000110010001100100000 +01110100001101000010111001110000 +01101000011000010111001101100101 +00100000011010010111001100100000 +01100001011011000111001001100101 +01100001011001000111100100100000 +01100011011011110111001001110010 +01100101011000110111010001100101 +01100100001000000110011001101111 +01110010001000000110001001101001 +01110100011100110110110001101001 +01100100011001010000101000000000 +01110100001100010011101000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +01110100001101000011101000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000011000100110100101110100 +01110011011011000110100101100100 +01100101001110100010000000100101 +01100100000010100000000000000000 +00100000001000000010000000100000 +00100000001000000111001101100101 +01100011001011100010000000100000 +00100000001000000010000000100000 +00100000011011100111001100101110 +01110000011010000110000100100000 +00100000001000000010000000100000 +00100000001000000111001101100101 +01100011001011100010000000100000 +00100000001000000010000000100000 +00100000011011100111001100101110 +01110000011010000110000100001010 +00000000000000000000000000000000 +01000101010100100101001001001111 +01010010001110100010000001001110 +01100101011101110010000001100011 +01101100011000010111001101110011 +00100000001001010110100100001010 +00000000000000000000000000000000 +01000010010101010100011100111010 +00100000010101000111001001111001 +01101001011011100110011100100000 +01110100011011110010000001110011 +01100101011011100110010000100000 +01101001011011100111011001100001 +01101100011010010110010000100000 +01110111011100100101111101101101 +01110011011001110010000001101101 +01101111011001000110010100111101 +00100101011110000010000001101001 +01100100001111010010010101111000 +00000000000000000000000000000000 +01101000011000010110111001100100 +01101100011001010010000001010011 +01101001011001110110111001100001 +01101100011010010110111001100111 +00100000011011010111001101100111 +00101100001000000110011001100001 +01101001011011000110010101100100 +00101100001000000101010001101000 +01101001011100110010000001101001 +01110011001000000110111001101111 +01110100001000000110111101110010 +01100111011000010110111001101001 +01111010011000010111010001101001 +01101111011011100010000001100101 +01111000011101000110010101101110 +01110011011010010110111101101110 +00100000010101000100110001010110 +00100000001111010010000000110000 +01111000001001010111100000001010 +00000000000000000000000000000000 +01101000011000010110111001100100 +01101100011001010010000001010011 +01101001011001110110111001100001 +01101100011010010110111001100111 +00100000011011010111001101100111 +00101100001000000110011001100001 +01101001011011000110010101100100 +00101100001000000110111001101111 +01110100001000000100001101000101 +01010010010011100010011101110011 +00100000010011110101010101001001 +00100000001111010010000000110000 +01111000001001010111100000001010 +00000000000000000000000000000000 +01101000011000010110111001100100 +01101100011001010010000001010011 +01101001011001110110111001100001 +01101100011010010110111001100111 +00100000011011010111001101100111 +00101100001000000110011001100001 +01101001011011000110010101100100 +00101100001000000110111001101111 +01110100001000000101011101101000 +01101001011101000110010100100000 +01010010011000010110001001100010 +01101001011101000010000001101101 +01100001011001110110100101100011 +00100000011011100111010101101101 +01100010011001010111001000100000 +00111101001000000011000001111000 +00100101011110000000101000000000 +01101000011000010110111001100100 +01101100011001010010000001010011 +01101001011001110110111001100001 +01101100011010010110111001100111 +00100000011011010111001101100111 +00101100001000000110011001100001 +01101001011011000110010101100100 +00101100001000000110111001101111 +01110100001000000111001101110101 +01110000011100000110111101110010 +01110100011001010110010000100000 +01110110011001010111001001110011 +01101001011011110110111000100000 +01101110011101010110110101100010 +01100101011100100010000000111101 +00100000001100000111100000100101 +01111000000010100000000000000000 +00100101011100110010000000111101 +00100000001001010110110001100100 +00111010001001010011000000111001 +01101100011001000011101000100101 +00110000001100110110110001100100 +00001010000000000000000000000000 +01010101011011100110100101101110 +01101001011101000110100101100001 +01101100011010010111101001100101 +01100100000000000000000000000000 +01000101010100100101001001001111 +01010010001110100010000000100101 +01110011001110100010000001010100 +01101001011011010110010101110011 +01110100011000010110110101110000 +01110011010010010110111001100011 +01101111011100100111001001100101 +01100011011101000011101000100000 +00100101011001000010000000100101 +01100100001000000010010101100100 +00100000001001010110010000001010 +00000000000000000000000000000000 +01110011011001010111001001110110 +01101111001110100111010000110001 +00000000000000000000000000000000 +01110011011001010111001001110110 +01101111001110100111010000110010 +00000000000000000000000000000000 +01110011011001010111001001110110 +01101111001110100111010000110011 +00000000000000000000000000000000 +01110011011001010111001001110110 +01101111001110100111010000110100 +00000000000000000000000000000000 +01110011011001010111001001110110 +01101111001110100111010000110101 +00000000000000000000000000000000 +01110011011001010111001001110110 +01101111001110100111010000110110 +00000000000000000000000000000000 +00101101001111100110110101100100 +01100101011011000110000101111001 +00000000000000000000000000000000 +01000101010100100101001001001111 +01010010001110100010000000100101 +01110011001110100010000001010100 +01101001011011010110010101110011 +01110100011000010110110101110000 +01110011010010010110111001100011 +01101111011100100111001001100101 +01100011011101000011101000100000 +00100101011001000010000000100101 +01100100001000000000101000000000 +00100000001010000111011101100001 +01101001011101000010000001100110 +01101111011100100010000001101000 +01110111001010010000000000000000 +01101111011001100110011001110011 +01100101011101000101111101101000 +01110111001110100010000000100101 +01101100011010010010111000100101 +00110000001110010110110001101001 +00100000001010000010101100100101 +01101100011010010010100100001010 +00000000000000000000000000000000 +01010000010011000100110000100000 +01001111011101010111010001001111 +01100110010011000110111101100011 +01101011001011000010000001110011 +01101000011011110111010101101100 +01100100001000000111001001100101 +01110011011101000110000101110010 +01110100001000000111001101111001 +01101110011000110000101000000000 +01110011011001010111001001110110 +01101111001110100110001001110101 +01110011011110010000101000000000 +01110111011100100101111101110011 +01100101011100100111011001101111 +00100000011100110111010001100001 +01110100011001010011101000100000 +00100101011100110010010101110011 +00001010000000000000000000000000 +01101111011011000110010001110011 +01100101011101000111000000100000 +00100101011010010010110000100000 +01101111011001100110011001110011 +01100101011101000010000000100101 +01101001001110100010010100110000 +00110100011010010000101000000000 +01100001011001000110101001110101 +01110011011101000010000001110000 +01101000011000010111001101100101 +00100000001001010110100100001010 +00000000000000000000000000000000 +01010011010110010100111001000011 +01011111010011100101001101000101 +01000011000000000000000000000000 +01010011010110010100111001000011 +01011111010100110100010101000011 +00000000000000000000000000000000 +01010011010110010100111001000011 +01011111010100000100100001000001 +01010011010001010000000000000000 +01010100010100100100000101000011 +01001011010111110101000001001000 +01000001010100110100010100000000 +01010111010000010100100101010100 +01011111010011110100011001000110 +01010011010001010101010001011111 +01010011010101000100000101000010 +01001100010001010000000000000000 +01100011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000111001101100101 +01101110011001000010000001110011 +01111001011011100110001100001010 +00000000000000000000000000000000 +01100011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000111001101100101 +01101110011001000010000001100001 +01101110011011100110111101110101 +01101110011000110110010100001010 +00000000000000000000000000000000 +01100011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000111001101100101 +01101110011001000010000001110010 +01100101011100010111010101100101 +01110011011101000000101000000000 +01001110011001010111011100100000 +01100110011011110111001001100101 +01101001011001110110111000100000 +01001101011000010111001101110100 +01100101011100100010000000100101 +01101001001000000110000101100100 +01100100011001010110010000001010 +00000000000000000000000000000000 +00100101011100110011101000100000 +01100011011000010110111000100111 +01110100001000000110100101101110 +01101001011101000010000001100101 +01111000011101000110010101101110 +01110011011010010110111101101110 +00001010000000000000000000000000 +01100011011011000110111101100011 +01101011001000000110001101101100 +01100001011100110111001100100000 +00111101001000000010010101100100 +00001010000000000000000000000000 +01100011011011000110111101100011 +01101011001000000110000101100011 +01100011011101010111001001100001 +01100011011110010010000000111101 +00100000001001010110010000001010 +00000000000000000000000000000000 +01001001011001110110111001101111 +01110010011001010110010000100000 +01100110011100100110000101101101 +01100101001000000010010101101001 +00001010000000000000000000000000 +01110000011100000101111101110011 +01101100011000010111011001100101 +00100000001110100010000001000100 +01100101011011000110000101111001 +00100000010100100110010101110011 +01110000001000000110010001101111 +01100101011100110110111000100111 +01110100001000000110110101100001 +01110100011000110110100000100000 +01000100011001010110110001100001 +01111001001000000101001001100101 +01110001001000000010100001100110 +00100000001001010111100000101001 +00001010000000000000000000000000 +01110000011100000101111101110000 +01100011011011000110111101100011 +01101011001000000011101000100000 +01010000010001000110010101101100 +01100001011110010010000001010010 +01100101011100110111000000100000 +01100100011011110110010101110011 +01101110001001110111010000100000 +01101101011000010111010001100011 +01101000001000000101000001000100 +01100101011011000110000101111001 +00100000010100100110010101110001 +00001010000000000000000000000000 +00100101011100110011101000100000 +01010000010001000110010101101100 +01100001011110010010000001010010 +01100101011100110111000000100000 +01000110001011010111010101110000 +00100000011001000110111101100101 +01110011011011100010011101110100 +00100000011011010110000101110100 +01100011011010000010000001010000 +01000100011001010110110001100001 +01111001001000000101001001100101 +01110001000010100000000000000000 +01000101010100100101001001001111 +01010010001110100010000000100101 +01110011001110100010000001000110 +01101111011011000110110001101111 +01110111001000000111010101110000 +00100000011011010110010101110011 +01110011011000010110011101100101 +00100000011010010111001100100000 +01101110011011110111010000100000 +01100110011100100110111101101101 +00100000011000110111010101110010 +01110010011001010110111001110100 +00100000011100000110000101110010 +01100101011011100111010000001010 +00000000000000000000000000000000 +01000101010100100101001001001111 +01010010001110100010000000100101 +01110011001110100010000001010011 +01101100011000010111011001100101 +00100000011101110110000101110011 +00100000011011100110111101110100 +00100000011101110110000101101001 +01110100011010010110111001100111 +00100000011000010010000001100110 +01101111011011000110110001101111 +01110111001000000111010101110000 +00100000011011010110010101110011 +01110011011000010110011101100101 +00001010000000000000000000000000 +01000101010100100101001001001111 +01010010001110100010000000100101 +01110011001110100010000001010011 +01100101011100010111010101100101 +01101110011000110110010101001001 +01000100001000000010010101100100 +00100000011001000110111101100101 +01110011011011100010011101110100 +00100000011011010110000101110100 +01100011011010000010000001101100 +01100001011100110111010000100000 +01010011011110010110111001100011 +00100000011011010110010101110011 +01110011011000010110011101100101 +00100000001001010110010000001010 +00000000000000000000000000000000 +00100101011100110010100000100101 +01100100001010010010000001001101 +01100101011100110111001101100001 +01100111011001010010000001100011 +01100001011011100010011101110100 +00100000011000100110010100100000 +01110011011001010110111001110100 +00001010000000000000000000000000 +01010011010001010100111001010100 +00100000001001010011000000110010 +01100100001000000110001001111001 +01110100011001010111001100100000 +01100001011101000010000000100101 +01100100001011100010010100110000 +00111001011001000010111000100101 +00110000001100110110010000100000 +00101000001001010111001100101001 +00001010000000000000000000000000 +00100101011100110011101000100101 +01101001001110100010000001000101 +01110010011100100110111101110010 +00100000001100010000101000000000 +00100101011100110011101000100101 +01101001001110100010000001000101 +01110010011100100110111101110010 +00100000001100100000101000000000 +01110000011100100110010100101101 +00000000000000000000000000000000 +01000010011001010111001101110100 +00100000011001100110111101110010 +01100101011010010110011101101110 +00100000011011010110000101110011 +01110100011001010111001000100000 +01101001011100110010000000100101 +01101001001011110010010101101001 +00001010000000000000000000000000 +00100101011100110011101000100000 +01100101011100100111001001101111 +01110010000010100000000000000000 +00100101011100110011101000100000 +01110000011000010111001101110011 +01101001011101100110010100001010 +00000000000000000000000000000000 +00100101011100110011101000100000 +00100101011100110110110101100001 +01110011011101000110010101110010 +00001010000000000000000000000000 +01001110011001010111011100100000 +01010101010101000100001100100000 +01101111011001100110011001110011 +01100101011101000011101000100000 +00100101011010010000101000000000 +00100101011100110011101000100000 +01110011011011000110000101110110 +01100101000010100000000000000000 +00101101000000000000000000000000 +00100101011100110010010101100100 +00101110001001010011000000111001 +01100100000000000000000000000000 +01010100011100100110100101101101 +00100000011101000110111101101111 +00101101011011000110111101101110 +01100111001000000110110101110000 +01100100001110100010000000100101 +01101001000010100000000000000000 +01000001011001100111010001100101 +01110010001000000110000101110110 +01100111001010000010010101101001 +00101001001011000010000001101101 +01100101011000010110111001010000 +01100001011101000110100001000100 +01100101011011000110000101111001 +00111010001000000010010101101001 +00001010000000000000000000000000 +01100101011100100111001001101111 +01110010001000000110100101101110 +00100000011101000101111101101111 +01110000011100110010110100111110 +01110011011001010111001001110110 +01101111010111110110100101101110 +01101001011101000000000000000000 +01001001011011100110100101110100 +01101001011000010110110001101001 +01111010011001010110010000111010 +00100000011011110110001001110011 +01011111011001000111001001101001 +01100110011101000010000000100101 +01101100011011000110100100001010 +00000000000000000000000000000000 +01001111011001100110011001110011 +01100101011101000010000001100110 +01110010011011110110110100100000 +01101101011000010111001101110100 +01100101011100100011101000100000 +00100000001000000010000000100000 +00100101011100110000101000000000 +01010100001100010011101000100000 +00100101011100110000101000000000 +01010100001100100011101000100000 +00100101011100110000101000000000 +01001111011000100111001101100101 +01110010011101100110010101100100 +00100000011001000111001001101001 +01100110011101000011101000100000 +00100101001110010110100100001010 +00000000000000000000000000000000 +01100100011010010111001101100011 +01100001011100100110010000100000 +01010100001100110010111101010100 +00110100001110100010000001110111 +01100101001000000110110101101001 +01110011011100110010000001010100 +00110001001011110101010000110010 +00001010000000000000000000000000 +01010100001100110011101000100000 +00100101011100110000101000000000 +01010100001101000011101000100000 +00100101011100110000101000000000 +01001101011000010111001101110100 +01100101011100100010000001110100 +01101111001000000111001101101100 +01100001011101100110010100111010 +00100000001001010111001100001010 +00000000000000000000000000000000 +01010011011011000110000101110110 +01100101001000000111010001101111 +00100000011011010110000101110011 +01110100011001010111001000111010 +00100000001001010111001100001010 +00000000000000000000000000000000 +01101101011001010110000101101110 +01010000011000010111010001101000 +01000100011001010110110001100001 +01111001001110100010000000100101 +01110011000010100000000000000000 +01010100001101010011101000100000 +00100101011100110000101000000000 +01010100001101100011101000100000 +00100101011100110000101000000000 +01010011011011000110000101110110 +01100101001000000100111101101110 +01101100011110010010110000100000 +01100011011011000110111101100011 +01101011001000000110001101101100 +01100001011100110111001100100000 +01110011011001010111010000100000 +01110100011011110010000000100101 +01100100000010100000000000000000 +00100101001100100011000001110101 +00000000000000000000000000000000 +00100101011101010000000000000000 +00100101001100010011000101110101 +00100101001100000011100101110101 +00000000000000000000000000000000 +00100101011101010010010100110000 +00111001011101010000000000000000 +01101100011011100110101100111010 +00100101011001000010000001110010 +01111000001110100010010101100100 +00100000011101000111100000111010 +00100101011001000010000000000000 +01101100011011110110001101101011 +00111010001001010110010000100000 +00000000000000000000000000000000 +01110000011101000111000000111010 +00100101011100110010000000000000 +01110011011101100011101000100101 +01100100001000000000000000000000 +01110011011100110011101000100111 +00100101011100110010011100100000 +00000000000000000000000000000000 +01100001011101010111100000100101 +01100100001110100010010101111000 +00100000000000000000000000000000 +01110011011001010110001100111010 +00100101011001000010000001101110 +01110011011001010110001100111010 +00100101011001000010000000000000 +01101101011101010011101000100101 +01110011001000000000000000000000 +01100100011011010111001100111010 +00100101011100110010000000000000 +01100100011101000111100001101101 +00111010001001010110010000100000 +01100100011100100111100001101101 +00111010001001010110010000100000 +00000000000000000000000000000000 +01100100011101000111100001110011 +00111010001001010110010000100000 +01100100011100100111100001110011 +00111010001001010110010000100000 +00000000000000000000000000000000 +01100001011100110111100101101101 +00111010001001010110010000100000 +00000000000000000000000000000000 +01100011011100100111010001110100 +00111010001001010111001100100000 +00000000000000000000000000000000 +01100011011010110110111100111010 +00100101011001000010000000000000 +01110011011001010111010001110000 +00111010001001010110010000100000 +00000000000000000000000000000000 +01110101011000110110111001110100 +00111010001001010110010000100000 +00000000000000000000000000000000 +01101000011001000011101000100101 +01100100001000000110110101100100 +00111010001001010110010000100000 +01100001011001000011101000100101 +01100100001000000000000000000000 +01110000011000110110001000000000 +01110100011001010110110101110000 +00111010001000000010010101100100 +00101110001001010011000000110100 +01100100001000000100001100000000 +00001010000010100101000001010100 +01010000001000000111001101110100 +01100001011101000111010101110011 +00111010001000000000000000000000 +00100101011100110000000000000000 +00001010000010100101001101111001 +01101110011000110010000001101001 +01101110011001100110111100100000 +01101110011011110111010000100000 +01110110011000010110110001101001 +01100100000010100000000000000000 +00001010000010100101001101111001 +01101110011000110110100001110010 +01101111011011100110100101111010 +01100001011101000110100101101111 +01101110001000000111001101110100 +01100001011101000111010101110011 +00111010000010100000000000000000 +01010111010100100010000001010000 +01010100010100000010000001000011 +01101111011100100110010100100000 +01010011011110010110111001100011 +00100000010011010110111101101110 +01101001011101000110111101110010 +00100000001001010111001100000000 +00001010010001010111001101100011 +00100000001111010010000001100101 +01111000011010010111010000000000 +00001010000010100101010001000001 +01001001001000000101010001101001 +01101101011001010011101000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000000000000000000000000000 +00001010000010100100110001101001 +01101110011010110010000001110011 +01110100011000010111010001110101 +01110011001110100000000000000000 +00001010001001010111001100111010 +00100000000000000000000000000000 +01110111011100100111010100110001 +00000000000000000000000000000000 +01001100011010010110111001101011 +00100000011101010111000000100000 +00100000001000000000000000000000 +01001100011010010110111001101011 +00100000011001000110111101110111 +01101110001000000000000000000000 +00101000010100100101100000111010 +00100000001001010110010000101100 +00100000010101000101100000111010 +00100000001001010110010000101001 +00000000000000000000000000000000 +00100000010010010101000001110110 +00110100001110100010000000000000 +01000010010011110100111101010100 +01010000001000000111001001110101 +01101110011011100110100101101110 +01100111000000000000000000000000 +00100101011100110010000000101000 +01100110011100100110111101101101 +00100000011000100110111101101111 +01110100011100000010100100000000 +00100101011100110010000000101000 +01110011011101000110000101110100 +01101001011000110010000001100001 +01110011011100110110100101100111 +01101110011011010110010101101110 +01110100001010010000000000000000 +00001010010011010110111101100100 +01100101001110100010000000000000 +01010111010100100010000001001111 +01100110011001100000000000000000 +00001010010000110110110001101111 +01100011011010110010000001101111 +01100110011001100111001101100101 +01110100001110100010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000000000 +00100101001100100110100100101110 +00100101001100000011100101101001 +00100000011100110000000000000000 +00100101011010010010111000100101 +00110000001110010110100100100000 +01110011000000000000000000000000 +00100101001110010110100100100000 +01101110011100110000000000000000 +00001010010011110110111001100101 +00101101011101110110000101111001 +00100000011001000110010101101100 +01100001011110010010000001100001 +01110110011001010111001001100001 +01100111011001010110010000111010 +00100000001000000010000000100000 +00100000001000000010000000000000 +00001010010011110110001001110011 +01100101011100100111011001100101 +01100100001000000110010001110010 +01101001011001100111010000111010 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000000000 +01010111010100100010000001001101 +01100001011100110111010001100101 +01110010001000000010000000000000 +01010111010100100010000001010011 +01101100011000010111011001100101 +00100000001000000010000000000000 +01010111010100100010000001010101 +01101110011010110110111001101111 +01110111011011100010000000000000 +01001100011011110110001101101011 +01100101011001000010000000000000 +01001110011011110100110001101111 +01100011011010110010000000000000 +01000011011000010110110001101001 +01100010011100100110000101110100 +01100101011001000000000000000000 +01010101011011100110001101100001 +01101100011010010110001001110010 +01100001011101000110010101100100 +00000000000000000000000000000000 +01010011011001010111001001110110 +01101111001000000111001101110100 +01100001011101000110010100111010 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000000000 +01010000011010000110000101110011 +01100101001000000111010001110010 +01100001011000110110101101101001 +01101110011001110011101000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000000000 +01001111010011100000101000000000 +01001111010001100100011000001010 +00000000000000000000000000000000 +01000001011101010111100000100000 +01100011011011000110111101100011 +01101011001000000010010101100100 +00100000011100110111010001100001 +01110100011101010111001100111010 +00100000001000000010000000100000 +00100000001000000010000000100000 +00000000000000000000000000000000 +01100101011011100110000101100010 +01101100011001010110010000000000 +00101100001000000110110001101111 +01100011011010110110010101100100 +00000000000000000000000000000000 +00001010010101000110100101101101 +01101001011011100110011100100000 +01110000011000010111001001100001 +01101101011001010111010001100101 +01110010011100110011101000001010 +00000000000000000000000000000000 +01010010011011110111010101101110 +01100100001011010111010001110010 +01101001011100000010000001110100 +01101001011011010110010100100000 +00101000011011010111010100101001 +00111010001000000000000000000000 +00100101011100110010000001110000 +01110011000010100000000000000000 +01001101011000010111001101110100 +01100101011100100010110101110011 +01101100011000010111011001100101 +00100000011001000110010101101100 +01100001011110010011101000100000 +00100000001000000000000000000000 +01001101011000010111001101110100 +01100101011100100010000001010000 +01001000010110010010000001100100 +01100101011011000110000101111001 +01110011001110100010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000000000000000000000000000 +01010100010110000011101000100000 +00100101001110010110010000100000 +01110000011100110010110000100000 +01010010010110000011101000100000 +00100101001110010110010000100000 +01110000011100110000101000000000 +01010011011011000110000101110110 +01100101001000000101000001001000 +01011001001000000110010001100101 +01101100011000010111100101110011 +00111010001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000000000000000000000000000 +01010100011011110111010001100001 +01101100001000000110110001101001 +01101110011010110010000001100001 +01110011011110010110110101101101 +01100101011101000111001001111001 +00111010000000000000000000000000 +00100101001100100011000101100100 +00100000011100000111001100001010 +00000000000000000000000000000000 +01000011011000010110001001101100 +01100101001000000111001001110100 +01110100001000000110010001100101 +01101100011000010111100100111010 +00100000001000000010000000100000 +00100000001000000000000000000000 +01000011011011000110111101100011 +01101011001000000110111101100110 +01100110011100110110010101110100 +00111010000000000000000000000000 +00100101001100100011100101100100 +00100000011100000111001100001010 +00000000000000000000000000000000 +01010000011010000110000101110011 +01100101001000000111001101100101 +01110100011100000110111101101001 +01101110011101000011101000000000 +00100101001100100011011101100100 +00100000011100000111001100001010 +00000000000000000000000000000000 +01010011011010110110010101110111 +00111010001000000010000000100000 +00100000001000000000000000000000 +00100101001100110011001001100100 +00100000011100000111001100001010 +00000000000000000000000000000000 +01010101011100000110010001100001 +01110100011001010010000001100011 +01101111011101010110111001110100 +01100101011100100011101000000000 +00100101001100100011011101100100 +00001010000000000000000000000000 +01110101011011100110101101101110 +01101111011101110110111000000000 +01100100011010010110000101100111 +01110011000000000000000000000000 +01110011011101000110000101110100 +01110011000000000000000000000000 +00011011010110110011000100100101 +01100011000000000000000000000000 +01000011011011110110110101101101 +01100001011011100110010000100000 +00100010001001010111001100100010 +00111010001000000110010101110010 +01110010011011110111001000100000 +00100101011001000000101000000000 +01010101011011100111001001100101 +01100011011011110110011101101110 +01101001011110100110010101100100 +00100000011000110110111101101101 +01101101011000010110111001100100 +00100000001000100010010101110011 +00100010001011100000101000000000 +01110111011100100110001100100011 +00100000000000000000000000000000 +00100101011000110000000000000000 +01100101011110000110010101100011 +01110101011101000110100101101110 +01100111001110100010000000100101 +01110011000010100000000000000000 +01000101011011010111000001110100 +01111001001000000110100101101110 +01101001011101000010000001110011 +01100011011100100110100101110000 +01110100001011100010111000101110 +00001010000000000000000000000000 +00101101001011010010000001100010 +01110101011010010110110001110100 +00101101011010010110111000100000 +01110011011000110111001001101001 +01110000011101000010000000101101 +00101101000010100000000000000000 +00101000011001010110110101110000 +01110100011110010010100100001010 +00000000000000000000000000000000 +01010111010100100010000001000011 +01101111011100100110010100100000 +01100010011101010110100101101100 +01100100001110100010000000100101 +01110011001001010111001100001010 +00000000000000000000000000000000 +01000010011101010110100101101100 +01110100001110100010000000100101 +01110011001000000010010101110011 +00100000011000100111100100100000 +00100101011100110000101000000000 +01000010011101010110100101101100 +01110100001000000110011001101111 +01110010001000000010010101100100 +00100000011010110100001000100000 +01010010010000010100110100101100 +00100000011100110111010001100001 +01100011011010110010000001101001 +01110011001000000010010101100100 +00100000011000100111100101110100 +01100101011100110000101000000000 +01010111010000010101001001001110 +01001001010011100100011100111010 +00100000011010000110000101110010 +01100100011101110110000101110010 +01100101001000000111001101100001 +01111001011100110010000000100101 +01101001011010110100001000100000 +00111100001111010010000001010010 +01000001010011010010000000111100 +00100000001001010110100101101011 +01000010000010100000000000000000 +01110110011001010111001000000000 +00100101011100110011101100100000 +00100101011100110010000000100101 +01110011000010100000000000000000 +01010101011011100110101101101110 +01101111011101110110111000100000 +01110011011101010110001001100011 +01101111011011010110110101100001 +01101110011001000010000000100010 +00100101011100110010001000001010 +00000000000000000000000000000000 +01110011011101000110000101110010 +01110100000000000000000000000000 +01110011011101000110111101110000 +00000000000000000000000000000000 +01100101001100100110010100000000 +01100100011001010110110001100001 +01111001000000000000000000000000 +01100111011011010000000000000000 +01100001011000100111001101100011 +01100001011011000000000000000000 +01101101011011110110010001100101 +00000000000000000000000000000000 +01110011011101000110111101110000 +01110000011001010110010000000000 +01110010011101010110111001101110 +01101001011011100110011100000000 +01110000001100100111000000000000 +01000001011101100110000101101001 +01101100011000010110001001101100 +01100101001000000110001101101111 +01101101011011010110000101101110 +01100100011100110011101000001010 +00000000000000000000000000000000 +00100000001000000010010101110011 +00001010000000000000000000000000 +01101000011001010110110001110000 +00000000000000000000000000000000 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000001110100010010100110000 +00110010011110000011101000100101 +00110000001100100111100000111010 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000000000000000000000000000 +01100111011001010111010000000000 +01100111011001010111010001110000 +00000000000000000000000000000000 +01110011011001010111010000000000 +01110011011001010111010001110000 +00000000000000000000000000000000 +01001101010000010100001100101101 +01100001011001000110010001110010 +01100101011100110111001100111010 +00100000001001010111001100001010 +00000000000000000000000000000000 +01101101011000010110001100000000 +01110010011001010111001101100101 +01110100000000000000000000000000 +01101101011000010111100000000000 +01110000011100100110100101101110 +01110100010111110111010001100001 +01110011011010110101111101110100 +01101001011011010110010101011111 +01110100011010000111001001100101 +01110011011010000110111101101100 +01100100001000000010010101100100 +00001010000000000000000000000000 +00100000011010010111010001100101 +01110010011000010111010001101001 +01101111011011100111001100100000 +00100000001000000010000000100000 +01110011011001010110001101101111 +01101110011001000111001100101110 +01101101011010010110001101110010 +01101111011100110010000000100000 +00100000001000000110110101100001 +01111000010111110110110101110011 +00100000011011100110000101101101 +01100101000010100000000000000000 +00100000001000000010010100111001 +01101100011010010010000000100000 +00100000001001010011100101101100 +01101001001011100010010100110000 +00110110011011000110100100100000 +00100101001110010110110001100100 +00100000001001010111001100001010 +00000000000000000000000000000000 +01110000011100110000000000000000 +00100101011101010000101000000000 +01010101011100110110000101100111 +01100101001110100010000001110010 +01100101011001100111001001100101 +01110011011010000010000000111100 +01110011011001010110001101101111 +01101110011001000111001100111110 +00001010000000000000000000000000 +01110010011001010110011001110010 +01100101011100110110100000000000 +01110011011101000110000101110100 +01101001011100110111010001101001 +01100011011100110010000001101110 +01101111011101110010000001101111 +01100110011001100000101000000000 +01100010011101000111001100000000 +01101111011001100110011000000000 +01110011011101000110000101110100 +00000000000000000000000000000000 +01010111011100100110111101101110 +01100111001000000111000001100001 +01110010011000010110110101100101 +01110100011001010111001000001010 +00000000000000000000000000000000 +01100101011100100110000101110011 +01100101000000000000000000000000 +01000011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000110010101110010 +01100001011100110110010100100000 +01000100010000100000101000000000 +01100001011001000110010000000000 +01010011010001100101000000100000 +01000100010000100010000001101001 +01110011001000000110011001110101 +01101100011011000000101000000000 +01001001001100100100001100100000 +01100101011100100111001001101111 +01110010000010100000000000000000 +01010011010001100101000000100000 +01100100011000010111010001100001 +01100010011000010111001101100101 +00100000011001010111001001110010 +01101111011100100010000000101000 +00100101011001000010100100001010 +00000000000000000000000000000000 +00100101011001000010000001010011 +01000110010100000111001100100000 +01101001011011100010000001000100 +01000010000010100000000000000000 +01110011011010000110111101110111 +00000000000000000000000000000000 +01010011010001100101000000100000 +01100100011000010111010001100001 +01100010011000010111001101100101 +00100000011001010110110101110000 +01110100011110010000101000000000 +00100101011001000011101000100000 +01010000010011100011101000000000 +00100000011001000101010001111000 +00111010001000000010010100111000 +01100100001000000110010001010010 +01111000001110100010000000100101 +00111000011001000010000001100001 +01101100011100000110100001100001 +00111010001000000010010100111000 +01100100000010100000000000000000 +01101101011000010111010001100011 +01101000000000000000000000000000 +01001110011011110010000001010011 +01000110010100000010111000001010 +00000000000000000000000000000000 +01010011010001100101000000100000 +01110010011001010110000101100100 +00100000011001010111001001110010 +01101111011100100000101000000000 +01000011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000110110101100001 +01110100011000110110100000100000 +01110100011011110010000001000100 +01000010000010100000000000000000 +01010011010001100101000000100000 +01101101011000010111010001100011 +01101000011001010110010000101100 +00100000011001000101010001111000 +00111101001001010110010000100000 +01100100010100100111100000111101 +00100101011001000010000001100001 +01101100011100000110100001100001 +00111101001001010110010000001010 +00000000000000000000000000000000 +01100101011011100110000100000000 +01110011011001100111000000000000 +01101001011011100110100101110100 +00000000000000000000000000000000 +01100011011011000000000000000000 +01110011011100000111001100000000 +01100111011100000111001100000000 +00100101011001000010000000100101 +01100100000010100000000000000000 +01110011011001000110000101100011 +00000000000000000000000000000000 +01100111011001000110000101100011 +00000000000000000000000000000000 +01100011011010000110010101100011 +01101011011101100110001101101111 +00000000000000000000000000000000 +01110000011011000110110000000000 +01100110011011110111001001100011 +01100101000000000000000000000000 +01000110011011110111010101101110 +01100100001000000111000001101000 +01100001011100110110010100100000 +01110100011100100110000101101110 +01110011011010010111010001101001 +01101111011011100010000001101001 +01101110001000000100010101000101 +01010000010100100100111101001101 +00111010001000000010010101100100 +01110000011100110000101000000000 +01001101011001010110000101110011 +01110101011100100110100101101110 +01100111001000000111010000110010 +00101111011101000011010000100000 +01110000011010000110000101110011 +01100101001000000111010001110010 +01100001011011100111001101101001 +01110100011010010110111101101110 +00101110001011100010111000001010 +00000000000000000000000000000000 +01100011011000010110110001101001 +01100010011100100110000101110100 +01101001011011110110111000000000 +01110011011001010111010001110011 +01100101011000110000000000000000 +01110011011001010111010001101110 +01110011011001010110001100000000 +01110010011000010111011100000000 +00100101011100110010000000101011 +00100101011001000010000001101110 +01100001011011100110111101110011 +01100101011000110110111101101110 +01100100011100110010111000001010 +00000000000000000000000000000000 +01110100011010010110110101100101 +00000000000000000000000000000000 +01100111011101010110100100000000 +01100110011100110000000000000000 +01100110011100110110010100000000 +01110011011001000110001000000000 +01001111010011100000000000000000 +01001111010001100100011000000000 +01100101011011100110000101100010 +01101100011001010000000000000000 +01100100011010010111001101100001 +01100010011011000110010100000000 +01110000011010000110000101110011 +01100101001000000111010001110010 +01100001011000110110101101101001 +01101110011001110010000000100101 +01110011000010100000000000000000 +01110000011101000111001001100001 +01100011011010110000000000000000 +00100101011001000010111000100101 +01100100001011100010010101100100 +00101110001001010110010000000000 +01001001010100000010110101100001 +01100100011001000111001001100101 +01110011011100110011101000100000 +01101001011011100010000001110100 +01110010011000010110100101101110 +01101001011011100110011100001010 +00000000000000000000000000000000 +01001001010100000010110101100001 +01100100011001000111001001100101 +01110011011100110011101000100000 +00100101011100110010000000101000 +01100110011100100110111101101101 +00100000011000100110111101101111 +01110100011100000010100100001010 +00000000000000000000000000000000 +01001001010100000010110101100001 +01100100011001000111001001100101 +01110011011100110011101000100000 +00100101011100110010000000101000 +01110011011101000110000101110100 +01101001011000110010000001100001 +01110011011100110110100101100111 +01101110011011010110010101101110 +01110100001010010000101000000000 +01101001011100000000000000000000 +01010000010100000101001101001001 +00100000011101100110010101110010 +01100010011011110111001101101001 +01110100011110010011101000100000 +00100101001100000011100001101100 +01111000000010100000000000000000 +01110110011001010111001001100010 +01101111011100110110010100000000 +01000011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000110010101110010 +01100001011100110110010100100000 +01101001011011100110100101110100 +00100000011100110110001101110010 +01101001011100000111010000001010 +00000000000000000000000000000000 +01000011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000110000101100100 +01100100001000000111010001101000 +01100101001000000110001101101111 +01101101011011010110000101101110 +01100100000010100000000000000000 +01001111010010110010111000001010 +00000000000000000000000000000000 +01100010011011110110111101110100 +00000000000000000000000000000000 +00100101011010010010000000101000 +00100010001001010111001100100010 +00101001001000000110111101110101 +01110100001000000110111101100110 +00100000011100100110000101101110 +01100111011001010000101000000000 +01100011011101010111001001110010 +01100101011011100111010000100000 +01110110011011000110000101101110 +00111010001000000010010101101001 +00100000001010000011000001111000 +00100101011110000010100100001010 +00000000000000000000000000000000 +01110110011011000110000101101110 +00000000000000000000000000000000 +01000001011101010111100000100000 +01100100011010010110000101100111 +01101110011011110111001101110100 +01101001011000110111001100100000 +01101001011011100110011001101111 +00111010000010100000000000000000 +01101001011001000011101000100000 +00100101011001000010111000100101 +01100100001011000010000001110010 +00101111011101110010000001110111 +01101111011100100110010001110011 +00111010001000000010010101100100 +00101100001000000111001000101111 +01101111001000000111011101101111 +01110010011001000111001100111010 +00100000001001010110010000001010 +00000000000000000000000000000000 +01110010011011110000000000000000 +01010111011011110111001001100100 +00100000001001010110010000100000 +01101001011100110010000000110000 +01111000001001010011000000111000 +01111000000010100000000000000000 +01110010011101110000000000000000 +01110111000000000000000000000000 +01010110011000010110110001110101 +01100101001000000011000001111000 +00100101001100000011100001111000 +00100000011101110111001001101001 +01110100011101000110010101101110 +00100000011101000110111100100000 +01110100011010000110010100100000 +01110111011011110111001001100100 +00100000001001010110010000001010 +00000000000000000000000000000000 +01100100011010010110000101100111 +00000000000000000000000000000000 +00100101011100110010110000100000 +00100101011100110010000000100101 +01100100001011000010000000100101 +01100100001011000010000000100101 +00110000001100100110010000111010 +00100101001100000011001001100100 +00111010001001010011000000110010 +01100100000000000000000000000000 +00100101011100110010000000100101 +00110010011001000010000000100101 +00110000001100100110010000111010 +00100101001100000011001001100100 +00111010001001010011000000110010 +01100100000000000000000000000000 +00100101001101000110010000101101 +00100101001100000011001001100100 +00101101001001010011000000110010 +01100100001011010010010100110000 +00110010011001000011101000100101 +00110000001100100110010000111010 +00100101001100000011001001100100 +00000000000000000000000000000000 +00011011010110110011000000100101 +01100100001110110011001100100101 +01100100011011010000000000000000 +00011011010110110110110100000000 +00011011010110110010010101100100 +00111011001001010110010001100110 +00000000000000000000000000000000 +00011011010110110011001001001010 +00011011010110110011000100111011 +00110001010010000000000000000000 +01010011011101010110111000000000 +01001101011011110110111000000000 +01010100011101010110010100000000 +01010111011001010110010000000000 +01010100011010000111010100000000 +01000110011100100110100100000000 +01010011011000010111010000000000 +01001010011000010110111000000000 +01000110011001010110001000000000 +01001101011000010111001000000000 +01000001011100000111001000000000 +01001101011000010111100100000000 +01001010011101010110111000000000 +01001010011101010110110000000000 +01000001011101010110011100000000 +01010011011001010111000000000000 +01001111011000110111010000000000 +01001110011011110111011000000000 +01000100011001010110001100000000 +01001100011011110110111101110000 +01110011001000000111000001100101 +01110010001000000110101001101001 +01100110011001100111100100111010 +00100000001001010110100100001010 +00000000000000000000000000000000 +00100101011100110011101000100000 +01101110011011110010000001110011 +01101111011000110110101101100101 +01110100001000000111001101101100 +01101111011101000111001100100000 +01101100011001010110011001110100 +00001010000000000000000000000000 +01110111011100100011000000000000 +01101110011001010111010000101101 +01100010011010000000000000000000 +01101001011100000111011000110100 +00000000000000000000000000000000 +01100001011100100111000000000000 +01000100011010010111001101100011 +01101111011101100110010101110010 +01100101011001000010000001001001 +01010000001000000110000101100100 +01100100011100100110010101110011 +01110011001000000010100000100101 +01100100001011100010010101100100 +00101110001001010110010000101110 +00100101011001000010100100100001 +00001010000000000000000000000000 +01010011010011100100110101010000 +00111010001000000101001101000110 +01010000001000000111010101110000 +01100100011000010111010001100101 +01100100001000000110100101101110 +00100000011011010110010101101101 +01101111011100100111100100101100 +00100000011100100110010101110011 +01110100011000010111001001110100 +00100000010100000101010001010000 +00001010000000000000000000000000 +01001001010011100101011001000001 +01001100010010010100010000000000 +00100101011001000010111000100101 +00110000001101000110010000000000 +01110011011011100110110101110000 +00000000000000000000000000000000 +01000001011100000111001000100000 +00100000001101000010000000110010 +00110000001100010011100000100000 +00110001001100010011101000110010 +00110000001110100011001100111000 +00000000000000000000000000000000 +01101100011011000110010001110000 +00100000011101010111000001100100 +01100001011101000110010100001010 +00000000000000000000000000000000 +01101100011011000110010001110000 +00000000000000000000000000000000 +00110000001100010011001000110011 +00110100001101010011011000110111 +00111000001110010110000101100010 +01100011011001000110010101100110 +00000000000000000000000000000000 +01001001010001000011101000100000 +00100101011110000000101000000000 +01101110011011110010000001110000 +01100110011010010110110001110100 +01100101011100100010000001110010 +01110101011011000110010100101101 +01110011011001010111010000100001 +00001010000000000000000000000000 +01110000011001100110100101101100 +01110100011001010111001000111010 +00100000011101110111001001101111 +01101110011001110010000001101101 +01100001011001110110100101100011 +00100000011011100111010101101101 +01100010011001010111001000100000 +00101000011001110110111101110100 +00100000001100000111100000100101 +01111000001010010000101000000000 +01110000011001100110100101101100 +01110100011001010111001000111010 +00100000011101110111001001101111 +01101110011001110010000001110010 +01110101011011000110010100101101 +01110011011001010111010000101100 +00100000011000110110000101101110 +00100111011101000010000001100001 +01110000011100000110110001111001 +00001010000000000000000000000000 +01000101011100100111001001101111 +01110010001110100010000001001101 +01101001011011100110100101100011 +00100000010010000100010001001100 +00100000011101100110010101110010 +01110011011010010110111101101110 +00100000001001010110010000100000 +01101110011011110111010000100000 +01110011011101010111000001110000 +01101111011100100111010001100101 +01100100001000000110001001111001 +00100000011100110111011100001010 +00000000000000000000000000000000 +01010111011000010111001001101110 +01101001011011100110011100111010 +00100000010011010110100101101110 +01101001011000110010000001110010 +01100101011000110110010101101001 +01110110011001010110010000100000 +01100101011100100111001001101111 +01101110011001010110111101110101 +01110011001000000110011001110010 +01100001011011010110010100001010 +00000000000000000000000000000000 +01010111011000010111001001101110 +01101001011011100110011100111010 +00100000010011010110100101101110 +01101001011000110010000001010010 +01111000001000000110011001101001 +01100110011011110010000001100110 +01110101011011000110110000101100 +00100000011001010111100001110000 +01100101011000110111010000100000 +01110111011100100110111101101110 +01100111001000000110011001110010 +01100001011011010110010101110011 +00001010000000000000000000000000 +01010111011000010111001001101110 +01101001011011100110011100111010 +00100000011101000111100000100000 +01101110011011110111010000100000 +01110100011001010111001001101101 +01101001011011100110000101110100 +01100101011001000010000001101001 +01101110011001100110100101101110 +01101001011101000110010100100000 +01101101011000110111001000111101 +00110000011110000010010101111000 +00001010000000000000000000000000 +01010111011000010111001001101110 +01101001011011100110011100111010 +00100000011101000111100000100000 +01110100011010010110110101100101 +01110011011101000110000101101101 +01110000001000000110111001100101 +01110110011001010111001000100000 +01100010011001010110001101100001 +01101101011001010010000001100001 +01110110011000010110100101101100 +01100001011000100110110001100101 +00001010000000000000000000000000 +01100110011001010111010001100011 +01101000011010010110111001100111 +00100000011001000110100101100001 +01100111010111110111001001110111 +01011111011101110110111101110010 +01100100011100110000101000000000 +01100110011001010111010001100011 +01101000011010010110111001100111 +00100000011001000110100101100001 +01100111010111110111001001101111 +01011111011101110110111101110010 +01100100011100110000101000000000 +01100100011001010111011000100000 +00100000001100000111100000100101 +00110000001110000110110001111000 +00100000010000000010000000100101 +00110000001101100110110001111000 +00101100001000000010010101110011 +00001010000000000000000000000000 +01100110011100000110011101100001 +00101101011000010111001001100101 +01100001000000000000000000000000 +01000101011100100111001001101111 +01110010001000000010010101100100 +00100000011101110110100001101001 +01101100011001010010000001110010 +01100101011000010110010001101001 +01101110011001110010000001110100 +00110010001101000111000000100000 +01100110011100100110111101101101 +00100000011100110111010001101111 +01110010011000010110011101100101 +00001010000000000000000000000000 +01110100001100100011010001110000 +00100000011100100110010101100001 +01100100001000000110011001110010 +01101111011011010010000001110011 +01110100011011110111001001100001 +01100111011001010011101000100000 +00100101011001000010000001110000 +01110011000010100000000000000000 +01010111011000010110100101110100 +01101001011011100110011100100000 +01100110011011110111001000100000 +01101100011010010110111001101011 +00101110001011100010111000001010 +00000000000000000000000000000000 +01001100011011110110001101101011 +01101001011011100110011100100000 +01010000010011000100110000101110 +00101110001011100000101000000000 +01000011011000010110110001101001 +01100010011100100110000101110100 +01101001011011100110011100100000 +01010010010110000010000001110100 +01101001011011010110010101110011 +01110100011000010110110101110000 +01100101011100100010111000101110 +00101110000010100000000000000000 +01000110011000010110100101101100 +01100101011001000000000000000000 +01010011011101010110001101100011 +01100101011100110111001100000000 +01010111011100100110111101110100 +01100101001000000110111001100101 +01110111001000000111010000110010 +00110100011100000010000001110110 +01100001011011000111010101100101 +00111010001000000010010101100100 +00100000011100000111001100100000 +00101000001001010111001100101001 +00001010000000000000000000000000 +00100000010001010100111001001111 +01010011010100000100001100000000 +00100101011100110010010101110011 +00111010000000000000000000000000 +01110100011001010110110101110000 +00000000000000000000000000000000 +01110100011001010110110101110000 +01100101011100100110000101110100 +01110101011100100110010100000000 +01110011011001100111000000111010 +00100000011000110110111101110010 +01110010011101010111000001110100 +01100101011001000010000001100011 +01101000011001010110001101101011 +01110011011101010110110100001010 +00000000000000000000000000000000 +01110011011001000110001001100110 +01110011001110100010000001100110 +01101111011101010110111001100100 +00100000011000010111010000100000 +00100101011010010010000001101001 +01101110001000000100011001101100 +01100001011100110110100000001010 +00000000000000000000000000000000 +01110011011001000110001001100110 +01110011001110100010000001100110 +01101111011101010110111001100100 +00100000011000010111010000100000 +00100101011010010010000001101001 +01101110001000000101011100110001 +00001010000000000000000000000000 +01110011011001000110001001100110 +01110011001110100010000001100110 +01101111011101010110111001100100 +00100000011000010111010000100000 +00100101011010010010000001101001 +01101110001000000100100100110010 +01000011001010000011000001111000 +00100101001100100101100000101001 +00001010000000000000000000000000 +01100110011010010110110001100101 +00100000001100000111100000100101 +00110000001110000111100000100000 +01000000001000000010010100110100 +01101001001011000010000001101110 +01100001011011010110010100100000 +00100101011100110000101000000000 +00100101011100110011101000100000 +01010011010001000100001000100000 +01100101011100100111001001101111 +01110010000010100000000000000000 +00100101011100110011101000100000 +01010011010001000100001000100000 +01100110011010010110110001100101 +00100000011010010111001100100000 +01100101011011010111000001110100 +01111001000010100000000000000000 +00100101011100110011101000100000 +01010101011100110110100101101110 +01100111001000000101011100110001 +00100000011100110110010101110010 +01101001011000010110110000100000 +01101110011101010110110101100010 +01100101011100100000101000000000 +00100101011100110011101000100000 +01100110011000010110100101101100 +01110101011100100110010100001010 +00000000000000000000000000000000 +00100101011100110011101000100000 +01010011010001000100001000100000 +01100101011100100111001001101111 +01110010001011000010000001100011 +01100001011011100010011101110100 +00100000011100110110000101110110 +01100101000010100000000000000000 +01000001011001000110010001101001 +01101110011001110010000001101110 +01100101011101110010000001010011 +01000110010100000010000001100101 +01101110011101000111001001111001 +00001010000000000000000000000000 +01010101011100000110010001100001 +01110100011001010010000001100101 +01111000011010010111001101110100 +01101001011011100110011100100000 +01010011010001100101000000100000 +01100101011011100111010001110010 +01111001000010100000000000000000 +00101101001011010010000001110101 +01110011011001010111001000101101 +01100100011001010110011001101001 +01101110011001010110010000100000 +01110011011000110111001001101001 +01110000011101000010000000101101 +00101101000010100000000000000000 +01000101011100100110000101110011 +01101001011011100110011100100000 +01000110011011000110000101110011 +01101000001010000011000001111000 +00100101011110000010100100101110 +00101110001011100000101000000000 +01000101011100100110000101110011 +01101001011011100110011100100000 +01000101010001010101000001010010 +01001111010011010010000000100101 +01100100001000000010100000110000 +01111000001001010111100000101001 +00101110001011100010111000001010 +00000000000000000000000000000000 +01000101011100100110000101110011 +01101001011011100110011100100000 +00110001001011010101011100100000 +01000101010001010101000001010010 +01001111010011010010000000101000 +00110000011110000010010101111000 +00101001001011100010111000101110 +00001010000000000000000000000000 +01100110011010010110110001100101 +01101110011000010110110101100101 +00111010001000000010010101110011 +00111011001000000110011001101001 +01110010011100110111010000111010 +00100000001001010111100000111011 +00100000011011000110000101110011 +01110100001110100010000000100101 +01111000000010100000000000000000 +01000110011011110111001001101101 +01100001011101000111010001101001 +01101110011001110010000001010011 +01000100010000100100011001010011 +00100000011010010110111000100000 +01000110011011000110000101110011 +01101000001010000011000001111000 +00100101011110000010100100101110 +00101110001011100000101000000000 +01001001001100100100001100100000 +01000101010001010101000001010010 +01001111010011010010000001101110 +01101111011101000010000001100110 +01101111011101010110111001100100 +00001010000000000000000000000000 +01000110011011110111001001101101 +01100001011101000111010001101001 +01101110011001110010000001010011 +01000100010000100100011001010011 +00100000011010010110111000100000 +01001001001100100100001100100000 +01000101010001010101000001010010 +01001111010011010010000000100101 +01100100001000000010100000110000 +01111000001001010111100000101001 +00101110001011100010111000001010 +00000000000000000000000000000000 +00110001001011010101011101101001 +01110010011001010010000001000101 +01000101010100000101001001001111 +01001101001000000110111001101111 +01110100001000000110011001101111 +01110101011011100110010000001010 +00000000000000000000000000000000 +01000110011011110111001001101101 +01100001011101000111010001101001 +01101110011001110010000001010011 +01000100010000100100011001010011 +00100000011010010110111000100000 +00110001001011010101011100100000 +01000101010001010101000001010010 +01001111010011010010000000101000 +00110000011110000010010101111000 +00101001001011100010111000101110 +00001010000000000000000000000000 +01100101011001010111000001110010 +01101111011011010000000000000000 +01101111011001100110011001110011 +01100101011101000010000000100101 +00110100011010010010000000101000 +00110000011110000010010100110000 +00110011011110000010100100111010 +00100000001001010011001101101001 +00100000001010000011000001111000 +00100101001100000011001001111000 +00101001000010100000000000000000 +01110111011100100110100101110100 +01100101001010000011000001111000 +00100101011110000010110000100000 +00100101011010010010100100111010 +00100000011100100110010101110011 +01110101011011000111010000100000 +00111101001000000010010101101001 +00001010000000000000000000000000 +01110010011001010110000101100100 +00101000001100000111100000100101 +01111000001011000010000000100101 +01101001001010010011101000100000 +01110010011001010111001101110101 +01101100011101000010000000111101 +00100000001001010110100100001010 +00000000000000000000000000000000 +01100100011001010111011001101001 +01100011011001010010000000100101 +01101001001110100010000000100101 +00110000001110000111100000100101 +00110000001110000111100000001010 +00000000000000000000000000000000 +01110100011001010110110101110000 +00111010001000000010010101100100 +00101110001001010011000000110100 +01100100000010100000000000000000 +01110111001100010000000000000000 +01110111001100010111001000000000 +01110111001100010111011100000000 +00111100010101010110111001101011 +01101110011011110111011101101110 +00111110000000000000000000000000 +01110011011011110110011001110100 +01110000011011000110110000111010 +00100000011010010111001001110001 +01110011001000000010010101100100 +00100000011100110110010101110001 +00100000001001010111001100100000 +01101101011011110110010001100101 +00100000001001010110010000100000 +01100001011011000110100101100111 +01101110011011010110010101101110 +01110100010111110111001101110100 +01100001011101000110010100100000 +00100101011001000010000001001000 +01001100001001010110010000100000 +01001101010011000010010101100100 +00100000010010000101100100111101 +00100101011001000010000001001101 +01011001001111010010010101100100 +00100000010001000110010101101100 +01000011011011100111010000111101 +00100101011001000000101000000000 +01110011011101000110000101110010 +01110100001011010110010101111000 +01110100000000000000000000000000 +01110111011000010110100101110100 +00101101011001010111100001110100 +00000000000000000000000000000000 +01110011011101000110000101110010 +01110100001011010110100001100101 +01101100011100000110010101110010 +00000000000000000000000000000000 +01110111011000010110100101110100 +00101101011010000110010101101100 +01110000011001010111001000000000 +01110011011101000110000101110010 +01110100001011010110110101100001 +01101001011011100000000000000000 +01110111011000010110100101110100 +00101101011011010110000101101001 +01101110000000000000000000000000 +01110010011001010110000101100100 +01111001000000000000000000000000 +01100011011011000110010101100001 +01110010001011010110010001100001 +01100011011100110000000000000000 +01110111011000010110100101110100 +00101101011000110110110001100101 +01100001011100100010110101100100 +01100001011000110111001100000000 +10111010110111000000111111111110 +00111011100110101100101000000000 +00000000000011110100001001000000 +01000001110001100100111001101101 +01111111111111111111111111111111 +00000000000010000000000000110000 +11000100011001010011011000000000 +11111111111100001011110111000000 +00000000000001111101000000000000 +00111011100110101100100111111111 +00000000000000010000000001000011 +00000000000000010000000001000100 +00000000000000010101000110000000 +10000011101010100111111010000000 +01111111111111111111111111111110 +10000000000000000000000000000001 +00000000000001100010000000000000 +00000000010111101110000000000000 +00000001000000000000000000000001 +00010001001000100011001101000100 +11100000000000000001111111111111 +00000000001001000110000000000000 +00000001010101010100000000000000 +00000010010001101000000000000000 +00010011010101111000000000000000 +00001111111111111111111111111111 +00000010110010110100000101111000 +00001110111001101011001001111111 +00000001001100010010110100000010 +00000001001100010010110100001010 +01000110011010010110110001100101 +01000100011000010111010001100001 +01110011011001100111000000101101 +01010011010001000100001000101101 +01101101011000010110001100101101 +01100011011000010110110001101001 +01110111011100100010110101101001 +00000000001111010000000100110111 +10000000000000000000000000011111 +00000000100110001001010110110110 +11000100000000000000000000000001 +00000000000000011000011010100000 +00000000111111111111111111111111 +11111111111111011011011000010000 +00000000000000100100100111110000 +00000101111101011110000100000000 +00001011111010111100001000000000 +11111010000010100001111100000000 +00000001001100010010110100000011 +00000001000110110001100100000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000001100000001100001000000000 +00000000000011100000000000000000 +00000000000000000000000000101100 +00000000000000000000000000101100 +00000000000000000000000000110110 +00000000000000000000000000110110 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000101100 +00000000000000000000000000110110 +00000000000000000000000000110110 +00000000000000000000000001000000 +00000000000000000000000000100010 +00000000000000000000000000110000 +01110000011100000101111101100100 +01101001011000010110011101011111 +01110000011000010111001001110011 +01100101000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110100101010100 +00000000000000010110100101100000 +00000000000000010110100101110000 +00000000000000010110100101111100 +00000000000000010110100110001000 +00000000000000010110100110010100 +00000000000000010110100110100000 +00000000000000000001110010000100 +00000000000000000001110011110100 +00000000000000000010000000001100 +00000000000000000010000000001100 +00000000000000000010000000001100 +00000000000000000010000000001100 +00000000000000000010000000001100 +00000000000000000010000000001100 +00000000000000000001110101110000 +00000000000000000001110111100000 +00000000000000000010000000001100 +00000000000000000001111001110100 +00000000000000000001111111100000 +01110111011100100111000001100011 +01011111011101000110100101101101 +01100101010111110110000101100100 +01101010011101010111001101110100 +01011111011011110110011001100110 +01110011011001010111010000000000 +01110111011100100101111101110011 +00110001000000000000000000000000 +01110111011100100111000001100011 +01011111011101000110100101101101 +01100101010111110110000101100100 +01101010011101010111001101110100 +00000000000000000000000000000000 +01110111011100100111000001100011 +01011111011101000110100101101101 +01100101010111110111001101100101 +01110100000000000000000000000000 +01110111011100100111000001100011 +01011111011101000110100101101101 +01100101010111110110011101100101 +01110100000000000000000000000000 +01110111011100100111000001100011 +01011111011011100110010101110100 +01011111011100110110010101101110 +01100100000000000000000000000000 +00000001000110110001100100000000 +00000000000000000000000110000000 +11000010000000000000000000001110 +01110111011100100101111101110101 +01101110011100000110000101100011 +01101011010111110110000101101110 +01101110011011110111010101101110 +01100011011001010000000000000000 +01110111011100100101111101110000 +01100001011000110110101101011111 +01100001011011100110111001101111 +01110101011011100110001101100101 +00000000000000000000000000000000 +01100111011001010111010001011111 +01110000011001010111001001110011 +01101001011100110111010001100101 +01101110011101000101111101101101 +01100001011000110000000000000000 +01110111011100100101111101101000 +01100001011011100110010001101100 +01100101010111110110011001101111 +01101100011011000110111101110111 +01110101011100000000000000000000 +01110111011100100101111101101000 +01100001011011100110010001101100 +01100101010111110110000101101110 +01101110011011110111010101101110 +01100011011001010000000000000000 +01110111011100100101111101100101 +01111000011001010110001101110101 +01110100011001010101111101110011 +01101100011000010111011001100101 +00000000000000000000000000000000 +01110111011100100101111101101000 +01100001011011100110010001101100 +01100101010111110111001001100101 +01110011011100000000000000000000 +01110111011100100101111101101110 +01100101011101110101111101110011 +01101100011000010111011001100101 +00000000000000000000000000000000 +01110111011100100101111101101101 +01100001011100110111010001100101 +01110010010111110110110101110011 +01100111000000000000000000000000 +01110111011100100101111101101100 +01101001011100110111010001100101 +01101110011010010110111001100111 +00000000000000000000000000000000 +01110111011100100101111101101111 +01110000011001010110111000000000 +01110111011100100101111101101001 +01101110011010010111010000000000 +00000000000000000011010110010100 +00000000000000000011010110111100 +00000000000000000011010111011100 +00000000000000000011011001001100 +00000000000000000011011001101100 +00000000000000000011011010001000 +00000000000000000011011010101000 +00000000000000000011011100110100 +00000000000000000011011101010100 +01110111011100100101111101100011 +01100001011011000110100101100010 +01110010011000010111010001101001 +01101111011011100000000000000000 +00000000000000000100110000001000 +00000000000000000100101111110000 +00000000000000000100110000110000 +00000000000000000100110011101000 +00000000000000000100110010000100 +00000000000000010111010010011100 +00000000000000010111011000000000 +00000000000000010111011000001100 +00000000000000010111011000011000 +00000000000000010111011000100100 +00000000000000010111011000110000 +01110111011100100101111101100101 +00110010011001010101111101101111 +01100110011001100111001101100101 +01110100000000000000000000000000 +01110000011100000101111101101001 +01101110011010010111010001101001 +01100001011011000110100101111010 +01101001011011100110011100000000 +00000000000000000101111011110000 +00000000000000000101011011110100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000101000111101100 +00000000000000000101110100000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000101110111101000 +00000000000000000101100101010000 +00000000000000000000000000000000 +00000000000000000101000111101100 +01110011011101000101111101100011 +01101111011011010101111101110011 +01101100011000010111011001100101 +01011111011010000110000101101110 +01100100011011000110010101011111 +01100110011011110110110001101100 +01101111011101110111010101110000 +00000000000000000000000000000000 +01100010011011010110001101011111 +01100100011000010111010001100001 +01110011011001010111010001011111 +01100011011011010111000000000000 +01100010011011010110001101011111 +01110011011101000110000101110100 +01100101010111110110010001100101 +01100011011010010111001101101001 +01101111011011100000000000000000 +00000000000000011000000100000100 +00000000000000011000000100001100 +00000000000000011000000011100100 +00000000000000011000000100010100 +00000000000000000000000000000000 +00000000000000011000000011110000 +00000000000000010111000001011100 +00000000000000010111000001111100 +00000000000000011000000011110100 +00000000000000000000000000011111 +00000000000000000000000000011100 +00000000000000000000000000011111 +00000000000000000000000000011110 +00000000000000000000000000011111 +00000000000000000000000000011110 +00000000000000000000000000011111 +00000000000000000000000000011111 +00000000000000000000000000011110 +00000000000000000000000000011111 +00000000000000000000000000011110 +00000000000000000000000000011111 +00000000000000000000000000011111 +00000000000000000000000000011101 +00000000000000000000000000011111 +00000000000000000000000000011110 +00000000000000000000000000011111 +00000000000000000000000000011110 +00000000000000000000000000011111 +00000000000000000000000000011111 +00000000000000000000000000011110 +00000000000000000000000000011111 +00000000000000000000000000011110 +00000000000000000000000000011111 +00000000000000011000011011001100 +00000000000000011000011011010000 +00000000000000011000011011010100 +00000000000000011000011011011000 +00000000000000011000011011011100 +00000000000000011000011011100000 +00000000000000011000011011100100 +00000000000000011000011011101000 +00000000000000011000011011101100 +00000000000000011000011011110000 +00000000000000011000011011110100 +00000000000000011000011011111000 +00000000000000011000011011111100 +00000000000000011000011100000000 +00000000000000011000011100000100 +00000000000000011000011100001000 +00000000000000011000011100001100 +00000000000000011000011100010000 +00000000000000011000011100010100 +01110000011101000111000001100100 +01011111011011100110010101110100 +01101001011001100101111101100011 +01110010011001010110000101110100 +01100101010111110111001101101111 +01100011011010110110010101110100 +00000000000000000000000000000000 +00000000000000001100100110001100 +00000000000000001100100110011100 +00000000000000001100101000000000 +00000000000000001100101000000000 +00000000000000001100100110101100 +00000000000000001100101000000000 +00000000000000001100101000000000 +00110000111111110000001000000001 +11111010000001000000011001110000 +01110101011000100110110001101001 +01100011111111011111111100000010 +11111001000000100000000111111100 +00000010000000011111101100110000 +11111111001100001111111100000110 +00000000000000001101101011110100 +00000000000000001101101100000100 +00000000000000001101101100101000 +00000000000000001101101101011100 +00000000000000001101101110001100 +00000000000000001101101111001000 +00000000000000001101110010000100 +00000000000000001101110110110000 +00000000000000001101110100100000 +01110011011001010111010001011111 +01110000011001010111001001110011 +01101001011100110111010001100101 +01101110011101000101111101101101 +01100001011000110000000000000000 +00000000000000000000000000000000 +00000000000000000000000100000000 +00000000000000000000001000000000 +00000000000000000000001100000000 +00000000000101110000000000000000 +00000000001011100000000000000000 +00000000011000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000001000000 +00000000000000000000000010000000 +00000000000000000000000100000000 +00000000000000000000001000000000 +00000000000000000000010000000000 +00000000000000000000000011001000 +00000000000000000011100111010000 +00000000000000010011101101111100 +00000000000000010011110000000000 +00000000000000010011110000111000 +00000000000000010011110010111000 +00000000000000010011110101000100 +00000000000000010011110101011100 +00000000000000010011110001011100 +00000000000000010011101110100100 +00000000000000010011101100000000 +00000000000000010011101100110100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010100100010001000 +00000000000000010100100010101000 +00000000000000010100100010110100 +00000000000000010100100011000100 +00000000000000010100100011100100 +00000000000000010100100011110100 +00000000000000010100100101011100 +00000000000000010100100100010100 +00000000000000010100100000010000 +00000000000000010100100001100000 +00000000000000000000000000000000 +00000000000000011000111001000100 +00000000000000011000111001010000 +00000000000000011000111001011100 +00000000000000011000111001101100 +00000000000000011000111001111000 +00000000000000011000111010000100 +00000000000000010111000001000000 +00000000000000011000111010010000 +00000000000000011000111010011000 +00000000000000011000111010100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000100000000100000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000110000000100000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000001000000001000000001 +00000001000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000001010000001000000001 +00000001000000010000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000001100000001100000010 +00000001000000010000000100000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000001110000001100000010 +00000001000000010000000100000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000010000000010000000010 +00000010000000010000000100000001 +00000001000000000000000000000000 +00000000000000000000000000000000 +00000000000010010000010000000011 +00000010000000010000000100000001 +00000001000000010000000000000000 +00000000000000000000000000000000 +00000000000010100000010100000011 +00000010000000100000000100000001 +00000001000000010000000100000000 +00000000000000000000000000000000 +00000000000010110000010100000011 +00000010000000100000000100000001 +00000001000000010000000100000001 +00000000000000000000000000000000 +00000000000011000000011000000100 +00000011000000100000001000000001 +00000001000000010000000100000001 +00000001000000000000000000000000 +00000000000011010000011000000100 +00000011000000100000001000000001 +00000001000000010000000100000001 +00000001000000010000000000000000 +00000000000011100000011100000100 +00000011000000100000001000000010 +00000001000000010000000100000001 +00000001000000010000000100000000 +00000000000011110000011100000101 +00000011000000110000001000000010 +00000001000000010000000100000001 +00000001000000010000000100000001 +11111110111111101111111011111111 +10000000100000001000000010000000 +00000000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010100000101000 +00101000001010000010100000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000100010000001000000010000 +00010000000100000001000000010000 +00010000000100000001000000010000 +00010000000100000001000000010000 +00010000000001000000010000000100 +00000100000001000000010000000100 +00000100000001000000010000010000 +00010000000100000001000000010000 +00010000000100000100000101000001 +01000001010000010100000101000001 +00000001000000010000000100000001 +00000001000000010000000100000001 +00000001000000010000000100000001 +00000001000000010000000100000001 +00000001000000010000000100000001 +00010000000100000001000000010000 +00010000000100000100001001000010 +01000010010000100100001001000010 +00000010000000100000001000000010 +00000010000000100000001000000010 +00000010000000100000001000000010 +00000010000000100000001000000010 +00000010000000100000001000000010 +00010000000100000001000000010000 +00100000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011010110110101000 +00000000000000011010110111001000 +00000000000000011010110111011000 +00000000000000011010110111101000 +00000000000000000000001111101000 +00000000000000000000000000000001 +00000000000000000000100101010101 +00000000000000000000000000000001 +00000000000000010110100111011100 +00000000000000000000000000000010 +00000000000000000000000000000000 +00000000000000010110100111100100 +00000000000000000000000000000001 +00000000000000000000000000000000 +00000000000000010110100111110000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110100111111100 +00000000000000000000000000000001 +00000000000000000000000000000000 +00000000000000010110101000001000 +00000000000000000000000000000000 +00000000000000000000111110100000 +00000000000000010110101000010000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110101000011000 +00000000001011000000000100000000 +00000000000000010000000000000000 +00000000000000010110101000100000 +00000000001011000000000100000000 +00000001011111110000000000000000 +00000000000000010110101000101100 +00000000001101100000000100000001 +00000101011111110000000000000000 +00000000000000010110101000111000 +00000000001101100000000100000001 +00000101011111110000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110101001011100 +00000000001011000000000000000000 +00000010000000010000000000000000 +00000000000000010110101001000100 +00000000001101100000000000000000 +00000011000000100000000000000000 +00000000000000010110101001010000 +00000000001101100000000000000001 +00000101011111110000000000000000 +00000000000000010110101001101000 +00000000010000000000000000000000 +00000101000000000000000000000000 +00000000000000010110101001110100 +11111111111111110000000000000000 +00000101011111110000000000000000 +00000000000000010110101010000000 +11111111111111110000000000000000 +00000100011111110000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011001110000110000 +00000000000000011001110101010000 +00000000000000011001110100110100 +00000000000000011011000011010100 +00000000000000011011000101010100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011001110001111000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110101100010000 +00000000000000010110101100010000 +00000000000000000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011001100000011000 +00000000000000011011000111011000 +00000000000000000000000000000000 +00000000000000011011001000011000 +00000000000000011011001001000000 +00000000000000011011001001110000 +00000000000000011011001010011000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011011001010111000 +00000000000000000000001111101000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011001110010001100 +00000000000000011001110011111000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000001000011110000 +00000000000000000001000100101000 +00000000000000000001000110111000 +00000000000000000001000111000000 +00000000000000000001001000011000 +00000000000000000001001001000100 +00000000000000000001001010011100 +00000000000000000001001011000000 +00000000000000000001001110000100 +00000000000000000001001110001100 +00000000000000000001001110010100 +00000000000000000001001111111000 +00000000000000000001010000010100 +00000000000000000001000111100100 +00000000000000000000000000000000 +00000000000000000010010001100000 +00000000000000000010001111011000 +00000000000000000010001101111100 +00000000000000000010001100100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000010001011111100 +00000000000000000010100011010000 +00000000000000000010100010110000 +00000000000000000010011010101000 +00000000000000000010010011110100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000001000000000 +00000000000000000000000000000000 +00000000000000011011001111011000 +00000000000000000000000000000001 +00000000000000010111000000101000 +00000000000000000101001111001000 +00000000000000000000000000000010 +00000000000000010111000000111000 +00000000000000000101010111010100 +00000000000000000000000000000011 +00000000000000010111000001000000 +00000000000000000101011000100000 +00000000000000000000000000000100 +00000000000000010111000001001100 +00000000000000000101011000110000 +00000000000000000000000000000101 +00000000000000010111000001011000 +00000000000000000101011100100000 +00000000000000000000000000000110 +00000000000000010111000001011100 +00000000000000000101011100100000 +00000000000000000000000000000111 +00000000000000010111000001100100 +00000000000000000101100010001100 +00000000000000000000000000001000 +00000000000000010111000001101100 +00000000000000000101100011100000 +00000000000000000000000000001001 +00000000000000010111000001111100 +00000000000000000101101001101100 +00000000000000000000000001100100 +00000000000000010111000010000100 +00000000000000000011000101001100 +00000000000000000000000001100110 +00000000000000010111000010011100 +00000000000000000011001000110100 +00000000000000000000000001100101 +00000000000000010111000010110000 +00000000000000000011001100001000 +00000000000000000000000001100111 +00000000000000010111000011001000 +00000000000000000011001111101100 +00000000000000000000000001101000 +00000000000000010111000011100000 +00000000000000000011010011000000 +00000000000000000000000001101001 +00000000000000010111000011110000 +00000000000000000011011110010100 +00000000000000000000000001101010 +00000000000000010111000100000000 +00000000000000000011100001101000 +00000000000000000000000001101011 +00000000000000010111000100010100 +00000000000000000011100110100000 +00000000000000000000000001110101 +00000000000000010111000100100000 +00000000000000000100111100011000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000001 +00000000000000010111000000101000 +00000000000000000101001111001000 +00000000000000000000000000000010 +00000000000000010111000000111000 +00000000000000000101010111010100 +00000000000000000000000000000011 +00000000000000010111000001000000 +00000000000000000101011000100000 +00000000000000000000000000000100 +00000000000000010111000001001100 +00000000000000000101011000110000 +00000000000000000000000000000101 +00000000000000010111000001011000 +00000000000000000101011100100000 +00000000000000000000000000000110 +00000000000000010111000001011100 +00000000000000000101011100100000 +00000000000000000000000000000111 +00000000000000010111000001100100 +00000000000000000101100010001100 +00000000000000000000000000001000 +00000000000000010111000001101100 +00000000000000000101100011100000 +00000000000000000000000000001001 +00000000000000010111000001111100 +00000000000000000101101001101100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000010101101000100 +00000000000000000010101001100100 +00000000000000000000000000000000 +00000000000000000010101000011100 +00000000000000000010111101010000 +00000000000000000010111100001000 +00000000000000000010111000011100 +00000000000000000010100110001100 +00000000000000000010110110101000 +00000000000000000010110100101100 +00000000000000000010110010111000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000010110001010000 +00000000000000000010101111100100 +00000000000000000000000000000001 +00000000000000000000000010111011 +00000000000000000000000011111110 +11111111111111111111000001100000 +00000000000000000000000000000001 +00000000000000000000000000000000 +00000000000010100000001111101000 +00000000000001100000000100000000 +00000000000000000000000000000000 +00000000000000000000000010000000 +00000000000000000000000010000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011001100000011000 +01110110011011000110000101101110 +00100000011011110110011001100110 +00111011011100000111010001110000 +00100000011100110111010001101111 +01110000001110110111001101100110 +01110000001000000110110101100001 +01110100011000110110100000111011 +01101101011011110110010001100101 +00100000011100110110110001100001 +01110110011001010011101101110000 +01110100011100000010000001110011 +01110100011000010111001001110100 +00000000000000000000000000000000 +00000000000000011001111101101000 +00000000000000011000000011010100 +00000000000000000001011111011000 +00000000000000000000000000000001 +00000000000000011000000011011100 +00000000000000000001011111011000 +00000000000000000000000000000000 +00000000000000011000000011100100 +00000000000000000001010001110100 +00000000000000000000000000000000 +00000000000000011000000011101000 +00000000000000000001010001110100 +00000000000000000000000000000000 +00000000000000011000000011110000 +00000000000000000001010110110100 +00000000000000000000000000000001 +00000000000000010111000001011100 +00000000000000000001010110110100 +00000000000000000000000000000010 +00000000000000010111000001111100 +00000000000000000001010110110100 +00000000000000000000000000000011 +00000000000000011000000011110100 +00000000000000000001010110110100 +00000000000000000000000000000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000001000000000 +00000000000000000000000000000000 +00000000000000011011100100000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000001100000 +00000000000000000000000000000000 +00000000000000011011101100000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000010000000 +00000000000000000000000000000000 +00000000000000011011101101100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000010000000 +00000000000000000000000000000000 +00000000000000011011101111101000 +00000000000000011010000111001100 +00000000000000001100111011011100 +00000000000000011010000111011000 +00001001000000000000000000000000 +00000000000000011010001000111100 +00000000000000001100111011011100 +00000000000000011010001001001000 +00001001000000000000000000000000 +00000000000000011010001010011000 +00000000000000001100110011001100 +00000000000000011010001010100100 +00001010000000000000000000000000 +00000000000000011010001011100000 +00000000000000001100111011011100 +00000000000000011010001011101100 +00001001000000000000000000000000 +00000000000000011010001110110100 +00000000000000001100111011011100 +00000000000000011010001111000000 +00001001000000000000000000000000 +00000000000000011010010100101000 +00000000000000001100111011011100 +00000000000000011010010100110100 +00001001000000000000000000000000 +00000000000000011010010111000000 +00000000000000001100111011011100 +00000000000000011010010111001100 +00001001000000000000000000000000 +00000000000000011010011001000100 +00000000000000001100110011001100 +00000000000000011010011001010000 +00001010000000000000000000000000 +00000000000000011010000110000000 +00000000000000001100011000011100 +00000000000000011010011010110100 +00001100000000000000000000000000 +00000000000000011010000110001100 +00000000000000001100011000011100 +00000000000000011010011011011100 +00001100000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00101011000001100000000100000100 +00000001011000000110010100000010 +00000000000000000000000100000001 +00101011000001100000000100000100 +00000001011000000110010100000010 +00000000000000000000001000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000100000000 +00000000000000000000000000000000 +00000000000000011011110010011000 +00101011000001100000000100000100 +00000001011000000110010100000001 +00000001000000000000000000000000 +00000000000000011010011100000100 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011100001001110100 +00000010000001000000000000000101 +00000000000000011010011100001000 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011001011011011000 +00000010000001000000000000000100 +00000000000000011010011100001100 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011001011011100100 +00000010000001000000000000000100 +00000000000000011010011100010000 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011010011100010100 +00000010000001000000000000000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00101011000001100000000100000100 +00000001011000000110010100000001 +00000010000000000000000000000000 +00000000000000011010011100011000 +00000000000000001101100101000100 +00000000000000000000000000000000 +00000000000000000000000000000100 +00000010010001100000000000000001 +00000000000000011010011100011100 +00000000000000001101100101000100 +00000000000000000000000000000000 +00000000000000000000000000000101 +00000010000001000000000000000001 +00000000000000011010011100100000 +00000000000000001101100101000100 +00000000000000000000000000000000 +00000000000000000000000000000010 +00000010010000110000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00101011000001100000000100000100 +00000001011000000110010100000001 +00000011000000010000000000000000 +00000000000000011010011100100100 +00000000000000001101100000010100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000001000001000000000000000001 +00000000000000011010011100101000 +00000000000000001101100000010100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000001000001000000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00101011000001100000000100000100 +00000001011000000110010100000001 +00000100000000000000000000000000 +00000000000000011010011100101100 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011010110110000000 +00000010000000100000000000000100 +00000000000000011010011100110000 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011010110110000100 +00000010010000010000000000000100 +00000000000000011010011100110100 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011010110110001000 +00000010000000100000000000000100 +00000000000000011010011100111000 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011010110110001100 +00000010000000100000000000000100 +00000000000000011010011100111100 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011010110110010000 +00000010010000010000000000000100 +00000000000000011010011101000000 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011010110110010100 +00000010010000010000000000000100 +00000000000000011010011101000100 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011010110110011000 +00000010000000100000000000000100 +00000000000000011010011101001000 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011010110110011100 +00000010000000100000000000000100 +00000000000000011010011101001100 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011010110110100000 +00000010010000010000000000000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00101011000001100000000100000100 +00000001011000000110010100000001 +00000101000000000000000000000000 +00000000000000011010011101010000 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001101100 +00000010000000100001010000000100 +00000000000000011010011101010100 +00000000000000001101001111000100 +00000000000000000000000000000000 +00000000000000011011110001101100 +00000010000000101000100000001000 +00000000000000011010011101011000 +00000000000000001101001111000100 +00000000000000000000000000000000 +00000000000000011011110001101100 +00000010000000101000000000001000 +00000000000000011010011101011100 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001101100 +00000010010001100100000000001000 +00000000000000011010011101100000 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001101100 +00000010010000010101100000000100 +00000000000000011010011101100100 +00000000000000001101001010110000 +00000000000000000000000000000000 +00000000000000000000000000000001 +00000010010001100000000000000001 +00000000000000011010011101101000 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001101100 +00000010000000100001100000000100 +00000000000000011010011101101100 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001101100 +00000010000000100001110000000100 +00000000000000011010011101110000 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001101100 +00000010000000100010000000000100 +00000000000000011010011101110100 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001101100 +00000010000000100010010000000100 +00000000000000011010011101111000 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001101100 +00000010010000011001000000000100 +00000000000000011010011101111100 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001101100 +00000010010000011001010000000100 +00000000000000011010011110000000 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001101100 +00000010010000011001100000000100 +00000000000000011010011110000100 +00000000000000001101001010110000 +00000000000000000000000000000000 +00000000000000000000000000000010 +00000010010001100000000000000001 +00000000000000011010011110001000 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011001110000101000 +00000010010000010000000000000100 +00000000000000011010011110001100 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011001110000101100 +00000010010000010000000000000100 +00000000000000011010011110010000 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001101100 +00000010000000100010100000000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00101011000001100000000100000100 +00000001011000000110010100000001 +00000110000000000000000000000000 +00000000000000011010011110010100 +00000000000000001101010001111100 +00000000000000001101011000110100 +00000000000000011011110110011000 +00000010000000100000000000000100 +00000000000000011010011110011000 +00000000000000001101010001111100 +00000000000000001101011010010100 +00000000000000011011110110011100 +00000010000000100000000000000100 +00000000000000011010011110011100 +00000000000000001101010001111100 +00000000000000001100110010101000 +00000000000000011011110001110000 +00000010000001000000000000010000 +00000000000000011010011110100000 +00000000000000001101010001111100 +00000000000000001100110010101000 +00000000000000011011110010000100 +00000010000000100000000000000100 +00000000000000011010011110100100 +00000000000000001101010001111100 +00000000000000001100110010101000 +00000000000000011011110010001000 +00000010000000100000000000000100 +00000000000000011010011110101000 +00000000000000001101010001111100 +00000000000000001100110010101000 +00000000000000011011110010000000 +00000010000000100000000000000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00101011000001100000000100000100 +00000001011000000110010100000001 +00000111000000000000000000000000 +00000000000000011010011110101100 +00000000000000001101010111010100 +00000000000000000000000000000000 +00000000000000000000000000000001 +00000010000000100000000000000001 +00000000000000011010011110110000 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011011111110101100 +00000010000001000000000000010000 +00000000000000011010011110110100 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011011111100111000 +00000010000000100000000000000100 +00000000000000011010011110111000 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011100001001101100 +00000010010000010000000000000100 +00000000000000011010011110111100 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011100001001110000 +00000010010000010000000000000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00101011000001100000000100000100 +00000001011000000110010100000001 +00001000000000010000000000000000 +00000000000000011010011111000000 +00000000000000001101010010100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000001000001000000000000000001 +00000000000000011010011111000100 +00000000000000001101010010100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000001000000100000000000000001 +00000000000000011010011111001000 +00000000000000001101010010100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000001000000100000000000000001 +00000000000000011010011111001100 +00000000000000001101010010100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000001000000100000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001101001010010100 +00000000000000000000000000000000 +00000000000000000000000000000001 +00000100010000100000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001101001010010100 +00000000000000001101001001111000 +00000000000000000000000000000000 +00000100010000100000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000001000000000000000000000000 +00000010000000000000000000000000 +00000011000000000000000000000000 +00000100000000000000000000000000 +00000000000000011000011111010000 +00000001000000000000000000000000 +00000010000000000000000000000000 +00000011000000000000000000000000 +00000010000000000000000000000000 +00000011000000000000000000000000 +00000001000000000000000000000000 +00000010000000000000000000000000 +00000011000000000000000000000000 +00000100000000000000000000000000 +00000101000000000000000000000000 +00000110000000000000000000000000 +00000111000000000000000000000000 +00001000000000000000000000000000 +00001001000000000000000000000000 +00000101000000000000000000000000 +00001000000000000000000000000000 +00001001000000000000000000000000 +00001010000000000000000000000000 +00001100000000000000000000000000 +00001101000000000000000000000000 +00001110000000000000000000000000 +00001111000000000000000000000000 +00010000000000000000000000000000 +00010001000000000000000000000000 +00010010000000000000000000000000 +00010011000000000000000000000000 +00010100000000000000000000000000 +00010110000000000000000000000000 +00010111000000000000000000000000 +00011000000000000000000000000000 +00011010000000000000000000000000 +00000001000000000000000000000000 +00000010000000000000000000000000 +00000011000000000000000000000000 +00000100000000000000000000000000 +00000101000000000000000000000000 +00000110000000000000000000000000 +00000001000000000000000000000000 +00000010000000000000000000000000 +00000011000000000000000000000000 +00000100000000000000000000000000 +00000101000000000000000000000000 +00000010000000000000000000000000 +00000011000000000000000000000000 +00000100000000000000000000000000 +00000101000000000000000000000000 +00000000000000011010101001001100 +00000000000000011010101101001000 +00000000000000011010101101001000 +00000000000000011010110000101100 +00000000000000000000000000000100 +00000000000000000000000000001000 +00000000000000000000000000001111 +00000000000000000000000100000000 +00000000000000000000001000000000 +00000000000000000000000100101100 +00000100011000110110001010100000 +00000000000000000000000000000000 +00000000000000011100001010101100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001100111001000010 +10101011001010000110001100111010 +00000000000000000000000000000000 +00000000000000011011111110010000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001100111001000010 +01100101000011000010110101001111 +00000000000000000000000000000000 +00000000000000011100001010110100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001100111001000010 +01100101000101011000110111000000 +00000000000000000000000000000000 +00000000000000011011111111000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001100111001000010 +11011110000011011000110011101101 +00000000000000000000000000000000 +00000000000000011100001010110000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001100111001000010 +11111111000001111111110001000111 +00000000000000000000000000000000 +00000000000000011100001001111100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001100111001000010 +11100010110100010011110100000100 +00000000000000000000000000000000 +00000000000000011100001001101000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001100111001000010 +01110111100111000101010001000011 +00000000000000000000000000000000 +00000000000000011100001010101000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000011001010001 +01101000001000000010101100100010 +00000000000000000000000000000000 +00000000000000011000100111000100 +00000000000000000000000000000000 +00000000000000000000000000000001 +00000000000000110000000000000000 +00000000000000000000000000000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011000110101000100 +00000000000000011011111101101000 +00000000000000000000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010000110101011100 +00000000000000010000111100011000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010010101011110100 +00000000000000010010101100101000 +00000000000000010010101101011000 +00000000000000010111101110101000 +10000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +01000100001100110010001000010001 +00000000000000000000000000000000 +00000100000000000000000000000000 +00010011100000000100011011100010 +00000001000000000000000000000000 +10010000000000001100111111101010 +00000001000000000000000000000000 +00010000100000010101011111110011 +00000001000000000000000000000000 +00001011111000001111111111111111 +00000001000000000000000000000000 +10001000111000001111111111111111 +00000001000000000000000000000000 +00001000111000011111111111111111 +00000001000000000000000000000000 +00011011000000000010000011100000 +00000001000000000000000000000000 +10011000000000001100000011101011 +00000001000000000000000000000000 +01101011001000010011000011100000 +00000001000000000000000000000000 +01101001011000010000110111100000 +00000001000000000000000000000000 +00010000101000111000100100000000 +00000100000000000000000000000000 +01101011000000110010000011110000 +00000001000000000000000000000000 +10111011000011011000000000000001 +00000100000000000000000000000000 +00110011111000110001111011110001 +00000001000000000000000000000000 +00110001110000110101111111111001 +00000001000000000000000000000000 +00101011000000110000000011100001 +00000001000000000000000000000000 +01000011110000110000000011100001 +00000001000000000000000000000000 +01111001010000010001010000000000 +00000100000000000000000000000000 +11001011001001010000000001100000 +00000000000000000000000000000000 +11010011001001010000001001100000 +00000000000000000000000000000000 +01010000111010101000000100000001 +00000100000000000000000000000000 +10000001110010001000000000000001 +00000100000000000000000000000000 +10000000001011111100000100000000 +00000100000000000000000000000000 +01011011000010010000000010000000 +00000001000000000000000000000000 +01011001000010010010000010000000 +00000001000000000000000000000000 +11000000011010101100000100000000 +00000100000000000000000000000000 +01100011000010010111101011111101 +00000001000000000000000000000000 +11111000100010101000000100000001 +00000100000000000000000000000000 +11110100100010101000000100000001 +00000100000000000000000000000000 +00000000000000000000000000000000 +00001000000000000000000000000000 +01000100001100110010001000010001 +00000000000000000000000000000000 +00000100000000000000000000000000 +00010011100000000100011011100010 +00000001000000000000000000000000 +10010000000000001100111111101010 +00000001000000000000000000000000 +00010000100000010101011111110011 +00000001000000000000000000000000 +00001011111000001111111111111111 +00000001000000000000000000000000 +10001000111000001111111111111111 +00000001000000000000000000000000 +00001000111000011111111111111111 +00000001000000000000000000000000 +00011011000000000010000011100000 +00000001000000000000000000000000 +10011000000000001100000011101011 +00000001000000000000000000000000 +01101011001000010011000011100000 +00000001000000000000000000000000 +01101001011000010000110111100000 +00000001000000000000000000000000 +00010000101000111000100100000000 +00000100000000000000000000000000 +01101011000000110010000011110000 +00000001000000000000000000000000 +10111111000011011000000000000001 +00000100000000000000000000000000 +10100011010000110101010111100001 +00000000000000000000000000000000 +00110011111001000001111011110001 +00000001000000000000000000000000 +00110001110001000101111111111001 +00000001000000000000000000000000 +00101011000001000000000011100001 +00000001000000000000000000000000 +01000011110001000000000011100001 +00000001000000000000000000000000 +10000001001000101001100000000000 +00000100000000000000000000000000 +11000000100100001000000000000001 +00000100000000000000000000000000 +01101001001000101000000000000001 +00000100000000000000000000000000 +10100011010000110000000111100000 +00000000000000000000000000000000 +10100001011000110000000111100000 +00000000000000000000000000000000 +11111000100011011000000000000001 +00000100000000000000000000000000 +10100011100000110000001011100000 +00000000000000000000000000000000 +11110000100011011000000000000001 +00000100000000000000000000000000 +00000000000000000000000000000000 +00001000000000000000000000000000 +01010011010001000100001000101101 +00000000000001010000000100000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000001101111111 +01000110011010010110110001100101 +01000100011000010111010001100001 +00101110001000000010000000100000 +00000000000000000000000000000001 +00000000000000000000000000000000 +00101110001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000000000 +00000000000000000000000000000000 +00000000000000000000000000000110 +00000000000000000000000000000000 +00000000000000000000000101000000 +00000000000000000000000000000000 +00000000000000000000001000111111 +01000110011010010110110001100101 +01000100011000010111010001100001 +01110111011100100010110101101001 +00000000000000000000000000000001 +00000000000000000000000000000000 +01110111011100100010110101101001 +01101110011010010111010000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000000001 +00000000000000000000000000000000 +00000000000000000000000000000110 +00000000000000000000000000000000 +00000000000000000000001001000000 +00000000000000000000000000000000 +00000000000000000000001010111111 +01000110011010010110110001100101 +01000100011000010111010001100001 +01100011011000010110110001101001 +00000000000000000000000000000001 +00000000000000000000000000000000 +01100011011000010110110001101001 +01100010011100100110000101110100 +01101001011011110110111000100000 +00100000001000000010000000100000 +00100000001000000010000000000001 +00000000000000000000000000000000 +00000000000000000000000000000110 +00000000000000000000000000000000 +00000000000000000000001011000000 +00000000000000000000000000000000 +00000000000000000000001011000101 +01000110011010010110110001100101 +01000100011000010111010001100001 +01101101011000010110001100101101 +00000000000000000000000000000001 +00000000000000000000000000000000 +01101101011000010110001100101101 +01100001011001000110010001110010 +01100101011100110111001100100000 +00100000001000000010000000100000 +00100000001000000010000000000001 +00000000000000000000000000000000 +00000000000000000000000000000110 +00000000000000000000000000000000 +00000000000000000000001100000000 +00000000000000000000000000000000 +00000000000000000000001101111111 +01000110011010010110110001100101 +01000100011000010111010001100001 +01110011011001100111000000101101 +00000000000000000000000000000001 +00000000000000000000000000000000 +01110011011001100111000000101101 +01100100011000010111010001100001 +01100010011000010111001101100101 +00100000001000000010000000100000 +00100000001000000010000000000001 +11111111111111111111111111111111 +00000000000000011001010111010000 +01011011000100010101011110100111 +00000000000000000000000000000011 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +01110111011100100111000001100011 +00101101011101100011010000101110 +00110010001011010011001000101101 +01100111001110010011011101100110 +00110100001100010011100001100101 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +01000001011100000111001000100000 +00100000001101000010000000110010 +00110000001100010011100000000000 +00000000000000000000000000000000 +00110001001100010011101000110010 +00110110001110100011001000111000 +00000000000000000000000000000000 +00000000000000000000000000000000 +01001101011011110111001001101001 +01110100011110100010000001000110 +01101001011100110110001101101000 +01100101011100100000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011000000010101000 +00000000000000001001011001000000 +00000000000000011000000011111100 +00000000000000001001011100000000 +00000000000000010110011111100100 +00000000000000001001011100000000 +00000000000000011000000100111000 +00000000000000001001100000111100 +00000000000000011000000110001100 +00000000000000001001100101010100 +00000000000000011000001000001100 +00000000000000001001101001100100 +00000000000000010110011111101000 +00000000000000001001101110011100 +00000000000000011000001000110000 +00000000000000001001101111001100 +00000000000000011000001001010100 +00000000000000001001110000101100 +00000000000000011000001110000100 +00000000000000001001110100110000 +00000000000000011000001111000000 +00000000000000001010000011001000 +00000000000000011000010000011100 +00000000000000001010001100110000 +00000000000000011000010001010100 +00000000000000001010010000001000 +00000000000000011000010001011100 +00000000000000001010010101101000 +00000000000000011000010001101000 +00000000000000001010010110000000 +00000000000000011000010010011000 +00000000000000001010011100101000 +00000000000000011000010100001100 +00000000000000001010100001111000 +00000000000000011000010100101000 +00000000000000001010100101101000 +00000000000000011000001110001000 +00000000000000001010100110110000 +00000000000000011000010110110000 +00000000000000001010101010010100 +00000000000000011000011001000100 +00000000000000001010101101111000 +00000000000000011000101010101000 +00000000000000010000101010100100 +00000000000000011000110111011000 +00000000000000010010110110100100 +00000000000000011000110111011100 +00000000000000010010110010101000 +00000000000000011000110111100000 +00000000000000010010101110101100 +00000000000000010011011010100000 +00000000000000000000000000000000 +00000000000000011010101000111100 +00000000000000010110011111111100 +00000000000000000000000000000000 +00000000000000000000001010100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110011111010000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010101001001011000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110011111011000 +00000000000000000000000000000000 +00000000000000001001010011000000 +00000000000000000000010011100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110011111100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000001100000011000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110011111101000 +00000000000000000000000000000000 +00000000000000000000001010000000 +00000000000000000000001000010100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110011111110000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000001111110100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010111111110000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001000001010100000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010111111110001100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000111111011101000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011000011101010000 +00000000000000011100001010010100 +00000000000000000000000000000000 +00000000000000001011001010011100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011000011101011000 +00000000000000011100001010010100 +00000000000000001011101000010000 +00000000000000001011101111111000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011000011101100000 +00000000000000011100001010010100 +00000000000000001011111111101100 +00000000000000001011111001100000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011000011111001000 +00000000000000011100001010010100 +00000000000000001101100111110000 +00000000000000001100100011000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011000011111111000 +00000000000000000000000000000000 +00000000000000001101111101100100 +00000000000000001101111001010100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011000101010110000 +00000000000000000000000000000000 +00000000000000010000011101111100 +00000000000000010000011111001000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8.bram b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8.bram new file mode 100644 index 000000000..d02bac529 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8.bram @@ -0,0 +1,32768 @@ +10011000000000000000000000000000 +11010000000000000000000000000000 +11010000001000000000000000000000 +01111000000000010000000000000000 +00111000001000010000000000000000 +11010000111000010000000000000000 +11111000000000000000000000111010 +00110100000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +01010111010100100101000001000011 +00101101001011010010110100101101 +00000001001000110100010101100111 +10001001101010111100110111101111 +00000000000000011011111111011000 +00000000000000000000000000000000 +00000000000000011001100000101000 +00000000000000011010110110000100 +00000000000000000000000000000000 +00000010000101000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +01011011100111010000000000000000 +11111000000000000000000000011110 +00110100000000010000000000000010 +11111000000000000101000110011110 +11100000000000000000000000101110 +00110100000000000000000000000000 +00110100000000000000000000000000 +00110100000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +10011000000000000000000000000000 +01111000000111000000000000000001 +00111011100111001111111111111100 +01111000000000010000000000000001 +00111000001000011011000010110000 +00110100000000100000000000000000 +01111000000000110000000000000001 +00111000011000111100001011001000 +11001000011000010001100000000000 +11111000000000000101100000001011 +00110100000000010000000000000000 +00110100000000100000000000000000 +00110100000000110000000000000000 +11111000000000000000000100001001 +11100000000000000000000000000000 +00110111100111001111111111000100 +01011011100000010000000000000100 +01011011100000100000000000001000 +01011011100000110000000000001100 +01011011100001000000000000010000 +01011011100001010000000000010100 +01011011100001100000000000011000 +01011011100001110000000000011100 +01011011100010000000000000100000 +01011011100010010000000000100100 +01011011100010100000000000101000 +01011011100111100000000000110100 +01011011100111110000000000111000 +00101011100000010000000000111100 +01011011100000010000000000110000 +10111011100000000000100000000000 +00110100001000010000000000111100 +01011011100000010000000000101100 +11000011101000000000000000000000 +00101011100000010000000000000100 +00101011100000100000000000001000 +00101011100000110000000000001100 +00101011100001000000000000010000 +00101011100001010000000000010100 +00101011100001100000000000011000 +00101011100001110000000000011100 +00101011100010000000000000100000 +00101011100010010000000000100100 +00101011100010100000000000101000 +00101011100111010000000000110000 +00101011100111100000000000110100 +00101011100111110000000000111000 +00101011100111000000000000101100 +00110100000000000000000000000000 +11000011110000000000000000000000 +10010000000000000001000000000000 +00110100000000011111111111111110 +10100000010000010000100000000000 +11010000000000010000000000000000 +10010000001000000001000000000000 +00110100000000011111111111111110 +10100000010000010000100000000000 +11010000001000010000000000000000 +11000011101000000000000000000000 +10010000000000000001000000000000 +00110100000000011111111111111110 +10100000010000010000100000000000 +11010000000000010000000000000000 +10010000001000000001000000000000 +00111000010000100000000000000001 +11010000001000100000000000000000 +00111000001000010000000000000001 +11010000000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +11111000000000000011110110000011 +01111000000000100000000000000001 +01111000000000110000000000000001 +00111000011000111011000011000100 +00111000010000101011000011001000 +00101000011001000000000000000000 +00101000010001010000000000000000 +01011000011000010000000000000000 +00110100000000110000001111101000 +11001000101001000010000000000000 +10110100100000010010000000000000 +01011000010001000000000000000000 +00110100000000010000000000000000 +01010000011001000000000000001001 +01111000000000010000000000000000 +00111000001000010000000010100000 +00110100100001001111110000011000 +01011000010001000000000000000000 +00101000001000100000000000000000 +00110100010000100000000000000001 +01011000001000100000000000000000 +00110100000000010000000000000001 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +11111000000000000011110101101000 +01111000000000100000000000000001 +00111000010000101011000011000100 +01011000010000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100111010000000000000100 +11111000000000000011111011011111 +11111000000000000011100001001101 +01111000000000010000000000000001 +00111000001000010110011100100000 +11111000000000000011011101101111 +00110100000000010000000000000001 +11111000000000000011110101000111 +01111000000000010000000000000001 +00111000001000011100001010000100 +11111000000000000011110100101001 +11111000000000000100100000001000 +11111000000000000100101000101101 +01111000000000010000000000000001 +00111000001000011100000111110000 +01011000001000000000000000000000 +11111000000000000100100101010011 +11111000000000000100000001010100 +00110100000000010000000000000000 +11111000000000000011101101101100 +00110100000000010000000000000000 +00110100000000100000000001010000 +11111000000000000100010000000011 +00110111100000100000000000001000 +00110100000000010000000000000000 +11111000000000000100010011001100 +00110100000000101111111111111111 +01011100001000100000000000000110 +01111000000000010000000000000001 +00111000001000010110011100111100 +11111000000000000011011101010110 +00110100000000010000000000100010 +00110011100000010000000000001000 +01000011100001000000000000001010 +01000011100001010000000000001011 +01000011100001100000000000001100 +01000011100001110000000000001101 +01000011100000110000000000001001 +01000011100000100000000000001000 +01111000000000010000000000000001 +00111000001000010110011101100000 +11111000000000000011011101001011 +11111000000000000011110110110101 +00110111100000010000000000001000 +11111000000000000011100101010000 +00110100000000010000000011001000 +11111000000000000011110100110111 +00110100000000100000000000000001 +00110100000000010000000000000001 +11111000000000000011100010011101 +11111000000000000011101110000000 +11111000000000000100000111100011 +11111000000000000000010000101110 +01111000000000100000000000000001 +00111000010000101001011100000000 +00110100000000010000000000000010 +11111000000000000011111110111001 +11111000000000000101000110110001 +11111000000000000010101101010001 +11111000000000000010001100100010 +01111000000000110000000000000001 +00111000011000111000111011000100 +01111000000000010000000000000001 +00101000011000100000000000000000 +00111000001000011011000010110000 +01011000001000000000000000000000 +01111000000000010000000000000001 +00111000001000011111100000000000 +01011000001000100000000000000000 +00110100000000010000000000000011 +11111000000000000000010001111101 +11111000000000000000010000110000 +01111000000000100000000000000001 +00111000010000101011000010111000 +00110100000000010000000000000000 +11111000000000000100001000011010 +11111000000000000011110100010100 +01111000000000100000000000000001 +00111000010000101011000010111100 +01011000010000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00110100000000010000000000000000 +11111000000000000011100010101001 +10111000001000000101100000000000 +01111000000000010000000000000001 +00111000001000011011000011000000 +00101000001001000000000000000000 +01111101011000100000000000000000 +01100100100000110000000000000000 +10100000010000110001100000000000 +01000100011000000000000000001101 +01111000000000010000000000000001 +00111000001000011100001010101100 +00101000001000010000000000000000 +00110100000000100000000000000010 +01011000001000100000000000000100 +11111000000000000011110111011100 +11111000000000000000010000010001 +01111000000000010000000000000001 +00111000001000011100001010100100 +00110100000000100000000000000001 +01011000001000100000000000000000 +11100000000000000000000000010100 +01100101011000010000000000000000 +01111100100001000000000000000000 +10100000001001000000100000000000 +01000100001000110000000000010010 +01111000000000010000000000000001 +00111000001000011100001010101100 +00101000001000010000000000000000 +00110100000000100000000000000010 +01011000001000100000000000001000 +01111000000000010000000000000001 +00111000001000011100001010100100 +01011000001000100000000000000000 +11111000000000000000010000100101 +00110100000000010000000000000010 +00110100000000100000000000000000 +00110100000000110000000000000001 +11111000000000000101000101111001 +00110100000000010000000000000000 +11111000000000000100001000010111 +00110100000000010000000000000001 +11100000000000000000000000001000 +11111100010000010001000000000000 +01111000000000010000000000000001 +11001000000000100001000000000000 +00111000001000011100001010100100 +00100000010000100000000000000011 +01011000001000100000000000000000 +00110100000000010000000000000000 +01111000000000100000000000000001 +00111000010000101011000011000000 +01011000010010110000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011011000010110000 +00101000001000100000000000000000 +00110100000000010000000000000001 +01011100010000010000000000001111 +11111000000000000001111111111100 +10111000001000000101100000000000 +11111000000000000011011111100100 +00110100000000100000000000011011 +01000100001000100000000000000101 +01111000000000100000000000000001 +00111000010000101001011011111000 +00101000010000010000000000000000 +01011100001000000000000000001000 +11111000000000000010001010111101 +01111000000000100000000000000001 +00111000010000101011000010110000 +01011000010000000000000000000000 +11100000000000000000000000000011 +11111000000000000010001011000010 +10111000001000000101100000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111001000 +01011011100010110000000000110100 +01011011100011000000000000110000 +01011011100011010000000000101100 +01011011100011100000000000101000 +01011011100011110000000000100100 +01011011100100000000000000100000 +01011011100100010000000000011100 +01011011100100100000000000011000 +01011011100100110000000000010100 +01011011100101000000000000010000 +01011011100101010000000000001100 +01011011100101100000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +01111000000011000000000000000001 +11111000000000000101001111101010 +00111001011010111010111011101100 +00111001100011001011000010101100 +11100000000000000000000000000101 +00101001011000010000000000001000 +01000100001000000000000000000010 +11011000001000000000000000000000 +00110101011010110000000000100000 +01010101100010111111111111111100 +01111000000010110000000000000001 +01111000000000010000000000000001 +00111001011010111010111011101100 +01111000000101000000000000000001 +01111000000100000000000000000001 +00111000001000011000111011001000 +01111000000011110000000000000001 +01111000000011100000000000000001 +01111000000100100000000000000001 +01111000000100010000000000000001 +00111010100101001011000010101100 +00111010000100001011000010111000 +00101000001100110000000000000000 +00111001111011111011000010111100 +00111001110011101011000010110100 +00111010010100100110011111001000 +00111010001100010110011110010100 +10111001011000001010100000000000 +11100000000000000000000000111100 +00101001011000010000000000001100 +01011100001000000000000000000101 +00101001011000010000000000010000 +00110100001000010000000000000001 +01011001011000010000000000010000 +11100000000000000000000000001011 +00101001011000100000000000000100 +01000100010000000000000000000011 +00101000010000100000000000000000 +01000100010000000000000000000111 +11011000001000000000000000000000 +00101001011000100000000000010000 +10111001011000000110000000000000 +10110100010000010001000000000000 +01011001011000100000000000010000 +01011100001000000000000000000010 +10111010101000000110000000000000 +00110111100000100000000000111000 +00110100000000010000000000000000 +11111000000000000100000101111010 +11111000000000000011110001110100 +10111000001000001011000000000000 +00101010000000100000000000000000 +00101011100000010000000000111000 +11001000001000100001000000000000 +01001100010000000000000000000010 +10110100010100110001000000000000 +00101001100000110000000000011000 +10110100010000110001000000000000 +01011001100000100000000000011000 +01010010011000100000000000000110 +11001000010100110001000000000000 +01011001100000100000000000011000 +00101001100000100000000000010100 +00110100010000100000000000000001 +01011001100000100000000000010100 +00101001111011010000000000000000 +01011010000000010000000000000000 +11001010110011010110100000000000 +01001101101000000000000000000010 +00110101101011010000001111101000 +00101001100000110000000000011100 +01010000011011010000000000001000 +00101001110000010000000000000000 +01000100001000000000000000000101 +00101001100000100000000000000000 +10111010001000000000100000000000 +10111001101000000010000000000000 +11111000000000000011011001101100 +01011001100011010000000000011100 +00101001110000010000000000000000 +01000100001000000000000000000110 +01010000001011010000000000000101 +00101001100000100000000000000000 +10111010010000000000100000000000 +10111001101000000001100000000000 +11111000000000000011011001100100 +01011001111101100000000000000000 +00110101011010110000000000100000 +01010110100010111111111111000101 +11111000000000000101001110010001 +10111010101000000101100000000000 +11100011111111111111111111111101 +00110111100111001111111111000000 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01011011100000110000000000101100 +01111000000000110000000000000001 +00111000011000111011000011001100 +01011011100000100000000000101000 +01011011100001000000000000110000 +01011011100001010000000000110100 +01011011100001100000000000111000 +01011011100001110000000000111100 +01011011100010000000000001000000 +00101000011011010000000000000000 +10111000001000000101100000000000 +10111000010000000111000000000000 +00110100000000110000000000000000 +01000100001000000000000000000010 +00101000001000110000000000011100 +10111000011011010001100000000000 +00000000011000110000000000011100 +01000100011000000000000000011110 +01111000000011000000000000000001 +00111001100011001011000011001100 +00111001101000010000000000000001 +01011001100000010000000000000000 +00101001011000010000000000111000 +00110111100000100000000000011000 +00101000001000110000000000000000 +10111001011000000000100000000000 +11011000011000000000000000000000 +01011001100011010000000000000000 +00101011100001000000000000100000 +00101111100000110000000000100100 +00101001011010110000001111010100 +00111100100001000000000000010000 +01111000000011000000000000000001 +10111000100000110000100000000000 +01111000000000110000000000000001 +00111000011000111000111011001100 +00101000011000100000000000000000 +00111001100011000110100000010100 +11111000000000000101010100111011 +00101011100000110000000000011100 +10111000001000000010000000000000 +10111001011000000001000000000000 +10111001100000000000100000000000 +11111000000000000011011000101100 +10111001110000000000100000000000 +00110111100000100000000000101100 +11111000000000000011011000000111 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000001000000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000010000000010100000000000 +01011100011000000000000000000101 +01111000000000100000000000000001 +00111000010000100110100000110000 +10111000101000000001100000000000 +11100000000000000000000000001100 +00110100000000100000000000000001 +01011100011000100000000000000110 +01111000000000100000000000000001 +00111000010000100110100001001100 +10111000101000000001100000000000 +00101000001001000000000000001000 +11100000000000000000000000000101 +00101000001001000000000000000100 +01111000000000100000000000000001 +00111000010000100110100001100100 +10111000101000000001100000000000 +11111011111111111111111110110001 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111011100 +01011011100010110000000000100100 +01011011100011000000000000100000 +01011011100011010000000000011100 +01011011100011100000000000011000 +01011011100011110000000000010100 +01011011100100000000000000010000 +01011011100111010000000000001100 +10111000001000000101100000000000 +10111000010000000111000000000000 +10111000011000000110100000000000 +01001100000000110000000010110110 +01000000010000110000000000000000 +00101000001010000000000100001100 +00101000001010010000000100001000 +00100000011000110000000000001111 +00101000001001100000000100000100 +01011011100000110000000000000100 +00001000011000110000000000001100 +01111000000000100000000000000001 +00000001000001110000000000010000 +00111000010000101001011101101000 +00100001000010001111111111111111 +10110100010000110001000000000000 +00001001000010000000001111101000 +00101000010000100000000000000000 +00111101001010010000000000010000 +01111000000001000000000000000001 +00000001000010000000000000010000 +01011011100000100000000000001000 +00110100000000110000000000000001 +00110100000000100000000000000101 +00111000100001000110100001111100 +10111001101000000010100000000000 +10111001001001110011100000000000 +11111000000000000000000010100010 +00110100000000010000000000100001 +01001100001011010000000010011100 +01000001110000010000000000000000 +00110100000000100000000000001101 +00100000001000010000000000001111 +01001000001000100000000000010000 +00111100001000010000000000000010 +01111000000000100000000000000001 +00111000010000101000111110100000 +10110100010000010001000000000000 +00101000010000010000000000000000 +01001000001011010000000000001010 +01000001110000100000000000000001 +00110100000000010000000000000010 +00100000010000100000000000001111 +01011100010000010000000000000110 +10111001011000000000100000000000 +10111001110000000001000000000000 +10111001101000000001100000000000 +11111000000000000001011111010010 +01000100001000000000000000000011 +00110100000011010000000000000000 +00110100000011100000000000000000 +00101001011011000000000000010000 +01011001011000000000000000001100 +00101001011000010000000000000000 +01000101100000000000000000000011 +00101001100000100000000000000000 +01000100010000010000000000010011 +00110100000000100000000000000001 +01111000000011000000000000000001 +01011001011000100000000000001100 +00111001100011001001110110101000 +11100000000000000000000000000110 +01011100010000010000000000000100 +01011001011011000000000000010000 +01011101100000000000000000001011 +11100000000000000000000000000100 +00110101100011000000000000001100 +00101001100000100000000000000000 +01011100010000001111111111111010 +00101001011000100000001111010100 +01111000000000010000000000000001 +00111000001000010110100010101100 +11111000000000000011010110111010 +00110100000000010010011100010000 +11100000000000000000000001100110 +01011001011000010000000000000100 +00101001011000010000000000001100 +01011001011000000000000000001000 +01000100001000000000000000000110 +00101001100000100000000000000100 +10111001011000000000100000000000 +00110100000000110000000000000000 +10111001101000000010000000000000 +11111011111111111111111110001110 +01000101110000000000000000110011 +00101001011000010000000000110000 +01000001011001010000001110100110 +00101000001000010000000000001100 +01000000001000010000000000011110 +01000100001001010000000000001000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000110100011001100 +11111000000000000000000001011110 +11100000000000000000000000100101 +01000001011100000000001110100111 +00100010000100000000000000000001 +01000110000000000000000000000111 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000110100011101000 +11100000000000000000000000001100 +00101001011000100000001101011000 +00110101011011110000001111000000 +10111001111000000000100000000000 +00110100000000110000000000001010 +11111000000000000101010100101011 +01011100001100000000000000001000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000110100100000100 +11111000000000000000000001001000 +11100000000000000000000000001111 +01000001011000100000001110100001 +00110100000000010000000000001011 +01011100010000010000000000001110 +00101001011000100000001101011000 +10111001111000000000100000000000 +00110100000000110000000000001000 +11111000000000000101010100011100 +01011100001000000000000000001001 +00101001011000010000001101011000 +00101101011000100000001111001000 +00101100001000010000000000001000 +01010000010000010000000000000011 +00110100000000010000000000000111 +01011001011000010000000000000100 +00110100000011010000000000000000 +00110100000011100000000000000000 +00101001011000010000000000000100 +00101001011000100000000000000000 +01011100010000010000000000010011 +01011101101000000000000000000011 +00110100000000010000000000001111 +00110001011000010000001110100001 +00101001100001000000000000001000 +10111001101000000001100000000000 +10111001011000000000100000000000 +10111001110000000001000000000000 +11011000100000000000000000000000 +10111000001000000001100000000000 +01000100001000000000000000000110 +00101001011000100000001111010100 +00101001100001000000000000000100 +01111000000000010000000000000001 +00111000001000010110100100011100 +11111000000000000011010101101010 +00101001011000010000000000000100 +00101001011000100000000000000000 +01000100010000010000000000001111 +01011001011000010000000000000000 +10111001011000000000100000000000 +11111000000000000000000011100110 +01000001011000010000000000100000 +00101001011000100000000000010000 +00110100000000110000000000000010 +00100000001000010000000011111001 +00110001011000010000000000100000 +00101000010000100000000000000100 +10111001011000000000100000000000 +00110100000001000000000000000000 +11111011111111111111111100111010 +00110100000000010000000000000000 +11100000000000000000000000000111 +00101001100000100000000000000100 +10111001011000000000100000000000 +00110100000000110000000000000001 +00110100000001000000000000000000 +11111011111111111111111100110011 +00101001011000010000000000001000 +00101011100111010000000000001100 +00101011100010110000000000100100 +00101011100011000000000000100000 +00101011100011010000000000011100 +00101011100011100000000000011000 +00101011100011110000000000010100 +00101011100100000000000000010000 +00110111100111000000000000100100 +11000011101000000000000000000000 +00110100000000010000000000000000 +00110100000011010000000000000000 +00110100000011100000000000000000 +11100011111111111111111101100110 +00110111100111001111111111100100 +01011011100010110000000000001000 +01011011100111010000000000000100 +01011011100001000000000000001100 +01011011100001010000000000010000 +10111000100000000101100000000000 +01011011100001100000000000010100 +01111000000001000000000000000001 +01011011100001110000000000011000 +01011011100010000000000000011100 +00111000100001000110100100111000 +00110100000001010000000000000000 +01000100001000000000000000000011 +00101000001001000000001111010100 +00101000001001010000000000011100 +01111000000001100000000000000001 +00111000110001101011000011001100 +00101000110000010000000000000000 +00111100010000100000000000000010 +10111000101000010010100000000000 +10000000101000100010100000000000 +00100000101001010000000000001111 +01010100011001010000000000001100 +01111000000001010000000000000001 +00111000101001011000111111101000 +10110100101000100010100000000000 +01111000000001100000000000000001 +00101000101000100000000000000000 +10111000110000000000100000000000 +00111000001000010110100101000000 +11111000000000000011010100100111 +10111001011000000000100000000000 +00110111100000100000000000010000 +11111000000000000011010100000010 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00110100000000100000000000011100 +10111000001000000001100000000000 +00110100000010110000000000000000 +00110100000001011111111111111100 +00110100000001000000000000000011 +11100000000000000000000000001001 +00110100001000011111111111010000 +00100000001001100000000011111111 +01010000100001100000000000000010 +11100000000000000000000000001000 +10111100001000100000100000000000 +00110100011000110000000000000001 +10111001011000010101100000000000 +00110100010000101111111111111100 +01000000011000010000000000000000 +01000100001000000000000000000111 +01011100010001011111111111110110 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000010110100101001100 +00111000010000101000111111011000 +11111000000000000011010100000111 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00101000001001000000001101011000 +01111000000000100000000000000001 +00111000010000101001011100001000 +00010000100000110000000000001010 +00110100000001010000000000000001 +00101000001000010000000000110000 +01011000010000110000000000001000 +00110100011000110000000000001100 +10111100101000110001100000000000 +00101000001000010000000000010000 +01011000010000110000000000111000 +00010000100000110000000000001101 +00101100001000010000000000000000 +01011000010000110000000000010100 +00010000100000110000000000001011 +01000000100001000000000000001100 +00110100001000010000000000000001 +01011000010000110000000000101100 +10111100100000110010000000000000 +00001000100001000000001111101000 +01011000010001000000000000100000 +00110100000001000000001111101000 +10111100100000110001100000000000 +10001000001000110001100000000000 +01011000010000110000000001000100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000110100000000000 +00101000001000100000000000111000 +10111000011000000110000000000000 +10111000001000000101100000000000 +00101000010000110000000000011000 +10111001100000000001000000000000 +11011000011000000000000000000000 +00110101101000100000000011010110 +00111100010000100000000000000010 +00001001101011010000000000001100 +10110101011000100001000000000000 +01011000010000010000000000000100 +01111000000000010000000000000001 +00111000001000011001011100001000 +10110100001011010110100000000000 +00101001101001010000000000000000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000110 +00110100000000110000000000000011 +00111000100001000110100110111100 +10111001100000000011000000000000 +11111011111111111111111110000111 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000110000000000000 +10111000001000000110100000000000 +00001001100000010000000000001100 +01111000000000100000000000000001 +01111000000000110000000000000001 +00111000010000101001011100001000 +00111000011000111011000011010000 +10110100010000010001000000000000 +00101000011000010000000000000000 +00101000010001000000000000001000 +01011100001000000000000000000101 +00101001101000010000000000110000 +00101000001000010000000000001100 +00101000001000010000000000001000 +01011000011000010000000000000000 +01111000000000110000000000000001 +01111000000000010000000000000001 +00111000011000111011000011010000 +00111000001000011000111011010000 +00101000011000100000000000000000 +00101000001001010000000000000000 +00110100000010110000000000011001 +10001000010001010001000000000000 +00110100010000100011000000111001 +00000000010000010000000000010000 +10001000010001010001000000000000 +00100000001000010000011111111111 +00110100010000100011000000111001 +01011000011000100000000000000000 +00111100001000110000000000001010 +00000000010000010000000000010000 +00110100100000100000000000000100 +00100000001000010000001111111111 +10011000001000110000100000000000 +00001001100000110000000000001100 +10111101011000100101100000000000 +01111000000000100000000000000001 +00111000010000101001011100001000 +10110100010000110001000000000000 +00101000010000100000000000000100 +00110100000000110000000000000001 +01000100010000110000000000000101 +00110100000000110000000000000010 +01000100010000110000000000001000 +01011100010000000000000000001100 +11100000000000000000000000001010 +10111001011000000001000000000000 +00111101011010110000000000000001 +11111000000000000101001111110111 +10110100001010110101100000000000 +11100000000000000000000000000110 +00001001011000100000000000000101 +11111000000000000101001111110011 +10111000001000000101100000000000 +11100000000000000000000000000010 +10111000100000000101100000000000 +10111001101000000000100000000000 +10111001100000000001000000000000 +10111001011000000001100000000000 +11111011111111111111111110011110 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00110100000010110000000000000000 +10111000001000000110000000000000 +00110100000011010000000000001000 +10111001011000000001000000000000 +10111001100000000000100000000000 +00110101011010110000000000000001 +11111011111111111111111110101110 +01011101011011011111111111111100 +10111001100000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000010100 +11111011111111111111111110000111 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000010000000110000000000000 +00101000001000100000000000111000 +10111000001000000101100000000000 +00101000010000110000000000011000 +00110100000000100000000000000000 +11011000011000000000000000000000 +00110101100000100000000011010110 +00111100010000100000000000000010 +10110101011000100001000000000000 +00101000010000100000000000000100 +11001000001000100001000000000000 +00110100000000010000000000000000 +01001000000000100000000000001101 +00001001100011000000000000001100 +01111000000000010000000000000001 +00111000001000011001011100001000 +10110100001011000110000000000000 +00101001100001010000000000000000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000110 +00110100000000110000000000000001 +00111000100001000110100111010100 +11111011111111111111111100000111 +00110100000000010000000000000001 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000010000000110000000000000 +00101000001000100000000000111000 +10111000001000000101100000000000 +00101000010000110000000000011000 +00110100000000100000000000000000 +11011000011000000000000000000000 +00110101100000100000000011010110 +00111100010000100000000000000010 +10110101011000100101100000000000 +00101001011000100000000000000100 +11001000010000010000100000000000 +10100100001000000001000000000000 +00010100010000100000000000011111 +10100000001000100000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000110100000000000 +00101000001000100000000000111000 +10111000001000000101100000000000 +10111000011000000110000000000000 +00101000010001000000000000011000 +00110100000000100000000000000000 +11011000100000000000000000000000 +00110101101000100000000011010110 +00110101100000110000000011010110 +00111100011000110000000000000010 +00111100010000100000000000000010 +10110101011000100001000000000000 +10110101011000110101100000000000 +00101000010000100000000000000100 +00101001011000110000000000000100 +11001000010000010001000000000000 +11001000011000010000100000000000 +01001100010000010000000000000010 +10111000010000000000100000000000 +10100100001000000001000000000000 +00010100010000100000000000011111 +10100000001000100000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000111000000000000 +00101000001000100000000000111000 +10111000001000000101100000000000 +10111000011000000110100000000000 +00101000010001010000000000011000 +00110100000000100000000000000000 +10111000100000000110000000000000 +11011000101000000000000000000000 +00110101110000100000000011010110 +00110101101000110000000011010110 +00111100010000100000000000000010 +00111100011000110000000000000010 +10110101011000100001000000000000 +10110101011000110001100000000000 +00101000010001010000000000000100 +00101000011000100000000000000100 +11001000101000010010100000000000 +11001000010000010001000000000000 +01001100101000100000000000000010 +10111000101000000001000000000000 +00110101100001000000000011010110 +00111100100001000000000000000010 +10110101011001000101100000000000 +00101001011000110000000000000100 +11001000011000010000100000000000 +01001100001000100000000000000010 +10111000001000000001000000000000 +10100100010000000000100000000000 +00010100001000010000000000011111 +10100000010000010000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000110000000000000001 +00110100000000010000000000000011 +00110100000000100000000000000000 +11111000000000000100111001011110 +00110100000000010000000000000000 +00110100000000100000000000000001 +11111000000000000100111111111101 +11111000000000000011101110000010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00110100000000010000000000000000 +10111000010000000110000000000000 +11111000000000000100111100011001 +01000101100000000000000000000101 +01100100001000100000000000000000 +11001000000000100001000000000000 +00111000010000100000000000000001 +11100000000000000000000000010011 +01111000000010110000000000000001 +00111001011010111011000011010100 +01011100001011000000000000000100 +01011001011000000000000000000000 +00110100000000101111111111111111 +11100000000000000000000000001101 +00101001011011000000000000000000 +00110100000000100000000000000001 +01011101100000000000000000001010 +01111000000000100000000000000001 +00111000010000101001011100000000 +00110100000000010000000000000011 +11111000000000000011110000111001 +00110100000000100000000000000010 +01001001100000010000000000000100 +00110100000000010000000000000001 +01011001011000010000000000000000 +00110100000000100000000000000001 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000010000000000000000 +00110100000000100000000000000001 +11111000000000000100111111001101 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000001000010000001101011000 +00101000001000010000000000010000 +00101000001000110000000000001100 +01000100010000110000000000000100 +01011000001000100000000000001100 +10111000010000000000100000000000 +11111000000000000011111010111110 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +11111000000000000011111010110000 +00110100000000100000000000000001 +01011100001000000000000000000011 +11111000000000000100111110100110 +01111100001000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000010100000000000 +10111000001000100000100000000000 +10111000010000000010000000000000 +10111000011000000101100000000000 +01000100001000000000000000000101 +00110100000000010000000000000001 +10111000101000000001000000000000 +10111000100000000001100000000000 +11111000000000000011111000110101 +01000101011000000000000000000101 +00010101011000100000000000011111 +00110100000000010000000000000010 +10111001011000000001100000000000 +11111000000000000011111000110000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000001000000001000000000000 +00110100000000011111111111111111 +11111000000000000100111011001111 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111100100100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000110000000000000 +00101000001000100000001111010000 +10111000100000000111000000000000 +00110111100000010000000000011000 +10111000011000000101100000000000 +10111000101000000110100000000000 +11111000000000000001111001100101 +01000101110000000000000000000101 +01111000000000010000000000000001 +00111000001000011010100000001000 +00101000001000010000000000000000 +01011001110000010000000000000000 +01000101101000000000000000000011 +00101011100000010000000011001100 +01011001101000010000000000000000 +00101011100000100000000001101100 +00110100000000011111111111111101 +01000100010000000000000000010011 +01000101100000000000000000000111 +00101011100000100000000001100000 +00101011100000010000000001011000 +10110100010000010000100000000000 +00101011100000100000000010100000 +10110100001000100000100000000000 +01011001100000010000000000000000 +00101011100000100000000001101000 +00110100000000011111111111111101 +01000100010000000000000000001001 +00110100000000010000000000000000 +01000101011000000000000000000111 +00101011100000110000000001100100 +00101011100000100000000001011100 +10110100011000100001000000000000 +00101011100000110000000010100100 +10110100010000110001000000000000 +01011001011000100000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000011011100 +11000011101000000000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00110100000001000000000000000000 +10111000010000000110000000000000 +10111000011000000101100000000000 +00110111100000100000000000010000 +00110111100000110000000000010100 +00110100000001010000000000000000 +01011011100000000000000000010100 +01011011100000000000000000010000 +11111011111111111111111110111111 +00110100000000010000000000000001 +01011101100000010000000000000011 +00101011100000010000000000010000 +11100000000000000000000000000010 +00101011100000010000000000010100 +01011001011000010000000000000000 +00110100000000010000000000000001 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +11111000000000000011010011101011 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +11111000000000000011010011101111 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +11111000000000000011101001111100 +11111000000000000011001111101010 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000010000100110101011001100 +00111000001000010110101010011100 +11111000000000000011001100001010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011011000011011000 +00101000001000010000000000000000 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011001100000101000 +00101000001000010000000000101100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000010110101011101000 +11111000000000000011001011111000 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000010000101001111101000100 +00111000001000011001110001000000 +01111000000010110000000000000001 +11111000000000000001100111111111 +00111001011010111001100000101000 +00110100000000110000000000000000 +10111001011000000000100000000000 +00110100000000100000000000000000 +11111011111111111111110011100011 +01111000000000100000000000000001 +00111000010000101001110010000100 +01011000010000010000000000000000 +11111000000000000011100011010101 +01111000000000100000000000000001 +00111000010000101011000011100000 +01011000010000010000000000000000 +00101001011000010000001101011000 +00101000001000010000000000010000 +01011000001000000000000001101000 +10111001011000000000100000000000 +11111000000000000000101100110001 +01111000000000010000000000000001 +00111000001000011011000011011100 +00110100000000100000000000000001 +01011000001000100000000000000000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111001100000101000 +00101001011000010000001101011000 +00101000001011000000000000010000 +01111000000000010000000000000001 +00111000001000010110101011110100 +11111000000000000011001011001101 +00101001100000010000000000000000 +00110100000000100000000000000000 +00101000001000110000000000110100 +10111001011000000000100000000000 +11011000011000000000000000000000 +01111000000000010000000000000001 +00110100000000100000000000000000 +00110100000000110000001000110000 +01011001100000000000000001000000 +00110001100000000000000000110101 +00111000001000011001100101010000 +11111000000000000101001011110111 +01111000000000010000000000000001 +00111000001000011011000011011100 +01011000001000000000000000000000 +10111001011000000000100000000000 +00001101011000000000000100100000 +11111000000000000000101100001011 +01111000000000010000000000000001 +00111000001000011001110001000000 +11111000000000000001101000010000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111001100000101000 +10111000001000000110000000000000 +00101001011000010000001101011000 +00101000001011010000000000010000 +01111000000000010000000000000001 +00111000001000011011000011011000 +01011000001000000000000000000000 +11111011111111111111111111001100 +00110100000000010000000000000010 +01000101100000010000000000011111 +01001001100000010000000000000011 +00110100000000010000000000000001 +11100000000000000000000000000100 +00110100000000100000000000000011 +01000101100000100000000000101111 +00110100000000010000000000000100 +01011101100000010000000000111001 +00110100000000010000000000000001 +01111000000010110000000000000001 +00111001011010111001100000101000 +00110001101000010000000000000100 +00110100000000010000000000000001 +01011001011000010000000000100100 +01111000000000010000000000000001 +00111000001000011001111101000100 +00110100000011100000000000000110 +00110100000000100000000000000000 +00110100000000110000000000000001 +01011000001011100000000000000000 +00110100000000010000000000000001 +11111000000000000100110100001101 +00110100000000010000000000000001 +11111000000000000011110110110111 +00101001011000010000000000110000 +00101000001000010000000000001100 +01011000001011100000000000010000 +10111001011000000000100000000000 +11111000000000000001001011101101 +00111000000010111110101001100000 +11100000000000000000000000100011 +00110100000000010000000000000001 +00110001101000010000000000000100 +00110100000000010000000000000001 +01011001011000010000000000100100 +01111000000000010000000000000001 +00111000001000011001111101000100 +00110100000011100000000010111011 +00110100000000100000000000000000 +00110100000000110000000000000001 +01011000001011100000000000000000 +00110100000000010000000000000010 +11111000000000000100110011111000 +00110100000000010000000000000001 +11111000000000000011110110100010 +00101001011000010000000000110000 +00101000001000010000000000001100 +01011000001011100000000000010000 +10111001011000000000100000000000 +11111000000000000001001011011000 +00110100000010110000111110100000 +11100000000000000000000000001110 +00110001101000010000000000000100 +01011001011000010000000000100100 +01111000000000010000000000000001 +00111000001000011001111101000100 +00110100000000100000000011111111 +01011000001000100000000000000000 +00110100000000110000000000000001 +00110100000000010000000000000011 +00110100000000100000000000000000 +11111000000000000100110011100101 +00110100000000010000000000000000 +11111000000000000011110110001111 +00110100000010110000000000000000 +11111000000000000011100001001100 +01111000000000100000000000000001 +10111000001000000111000000000000 +10111000010000000000100000000000 +00111000001000010110101100000000 +11111000000000000011001001011011 +00101001101000100000000000000000 +01111000000011010000000000000001 +00111001101011010110101100011100 +00101000010000110000000000110100 +01111000000000100000000000000001 +10111000010000000000100000000000 +00111000001000011001100000101000 +00110100000000100000000000000000 +11011000011000000000000000000000 +11100000000000000000000000001110 +11111000000000000100111011001100 +00110100000000010000001111101000 +11111000000000000011100000111111 +11111000000000000011100000111001 +11001000001011100001000000000000 +01010001011000100000000000000110 +01111000000000010000000000000001 +00111000001000010110101100001100 +11111000000000000011001001001000 +00110100000010111111111110001100 +11100000000000000000000000001000 +10111001101000000000100000000000 +11111000000000000011001001000100 +00110100000000010000000000000000 +11111000000000000100110110001101 +01011100001000000000000000000010 +01011101011000011111111111110000 +00110100000010110000000000000000 +01111000000000010000000000000001 +00111000001000011000011110011000 +11111000000000000011001000111100 +01111101011000100000000000000000 +01100101100000010000000000000001 +10100000010000010000100000000000 +01000100001000000000000000000101 +01111000000000010000000000000001 +00111000001000011001111101000100 +00110100000000100000000000110100 +01011000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011011000011011000 +01011000001011000000000000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01000100001000000000000000000100 +00110100000000100000000000000001 +01011100001000100000000000000110 +11100000000000000000000000000011 +11111011111111111111111101001011 +11100000000000000000000000000110 +11111011111111111111111100100011 +11100000000000000000000000000100 +01111000000000010000000000000001 +00111000001000011011000011011100 +00101000001000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011011000011011100 +00101000001000010000000000000000 +00110100000011100000000000000000 +01000100001000000000000000100100 +01111000000010110000000000000001 +00111001011010111001100000101000 +00101001011000010000000000110100 +00101001011000100000000001001000 +01111000000001000000000000000001 +00101000001001010000000000001000 +00110100000000110000000001111100 +10111001011000000000100000000000 +00111000100001001001100100101000 +11011000101000000000000000000000 +10111000001000000001100000000000 +01001100000000010000000000000101 +00101001011000010000010000010100 +00110100001000010000000000000001 +01011001011000010000010000010100 +11100000000000000000000000001100 +01011100001000000000000000001011 +01111000000011010000000000000001 +11111000000000000011011111100111 +00111001101011011011000011100000 +00101001101000100000000000000000 +01111000000011000000000000000001 +00111001100011001001110010000100 +11001000001000100000100000000000 +00101001100000100000000000000000 +01010100010000010000000000001010 +11100000000000000000000000010001 +01111000000000010000000000000001 +00111000001000011001100000101000 +00101000001000100000000001010000 +11111011111111111111101111100101 +01111000000000100000000000000001 +00111000010000101001110010000100 +01011000010000010000000000000000 +00110100000011100000000000000001 +10111001110000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +11111000000000000011011111001110 +01011001101000010000000000000000 +00110100000000100000000000000000 +10111001011000000000100000000000 +00110100000000110000000000000000 +11111011111111111111101111010011 +01011001100000010000000000000000 +11100011111111111111111111110000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000010001010000000000001000 +00101100010001000000000000001100 +00101000010011010000000000000000 +00111100101001010000000000010000 +10111000001000000110000000000000 +00101000010010110000000000000100 +10111000101001000000100000000000 +00110100000000100000001111101000 +11111000000000000101000011010111 +00010101101000100000000000011000 +10111000001000000011000000000000 +01111000000001110000000000000001 +00100000010000100000000011000000 +00110100000000010000000010000000 +00111000111001111000000011100000 +01011100010000010000000000000011 +01111000000001110000000000000001 +00111000111001110110101100100100 +01111000000001000000000000000001 +10111000100000000000100000000000 +10111001100000000001000000000000 +10111001011000000001100000000000 +10111001011000000010000000000000 +10111001011000000010100000000000 +00111000001000010110101100110000 +11111000000000000011000110111100 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100111010000000000011000 +10111000001000000101000000000000 +01000000011000010000000000000101 +01000000011001000000000000000000 +01000000011001010000000000000001 +01000000011001100000000000000010 +01000000011001110000000000000011 +01000000011010000000000000000100 +01011011100000010000000000000100 +01000000011000010000000000000110 +10111000010000000100100000000000 +10111001010000000001000000000000 +01011011100000010000000000001000 +01000000011000010000000000000111 +01011011100000010000000000001100 +01000000011000010000000000001000 +01011011100000010000000000010000 +01000000011000010000000000001001 +10111001001000000001100000000000 +01011011100000010000000000010100 +01111000000000010000000000000001 +00111000001000010110101101010100 +11111000000000000011000110011110 +00101011100111010000000000011000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111010000 +01011011100010110000000000110000 +01011011100011000000000000101100 +01011011100011010000000000101000 +01011011100011100000000000100100 +01011011100011110000000000100000 +01011011100100000000000000011100 +01011011100100010000000000011000 +01011011100100100000000000010100 +01011011100100110000000000010000 +01011011100101000000000000001100 +01011011100101010000000000001000 +01011011100111010000000000000100 +10111000011000000011000000000000 +10111000001000001001100000000000 +10111000010000001001000000000000 +01111000000000010000000000000001 +10111000100000001010100000000000 +00111000001000010110101110001100 +10111010011000000001000000000000 +10111010010000000001100000000000 +10111000110000000010000000000000 +10111000101000001010000000000000 +01111000000100010000000000000001 +11111000000000000011000110000010 +01111000000100000000000000000001 +01111000000011110000000000000001 +01111000000011100000000000000001 +01111000000011010000000000000001 +10111000001000000101100000000000 +00110100000011000000000000000000 +00111010001100010110101110100000 +00111010000100000110101110101000 +00111001111011110111110001011000 +00111001110011101000011110011000 +00111001101011010111111100100000 +11100000000000000000000000010111 +01011100110000000000000000000110 +10111010001000000000100000000000 +10111010011000000001000000000000 +10111010010000000001100000000000 +11111000000000000011000101110001 +10110101011000010101100000000000 +10110110101011000001000000000000 +01000000010000100000000000000000 +10111010000000000000100000000000 +00110101100011000000000000000001 +11111000000000000011000101101011 +00100001100000100000000000000011 +10110100001010110101100000000000 +10111001111000000011000000000000 +01011100010000000000000000000101 +00100001100000010000000000001111 +10111001110000000011000000000000 +01000100001000100000000000000010 +10111001101000000011000000000000 +10111000110000000000100000000000 +11111000000000000011000101100001 +10110101011000010101100000000000 +00100001100001100000000000001111 +01001010100011001111111111101001 +01000100110000000000000000000101 +01111000000000010000000000000001 +00111000001000011000011110011000 +11111000000000000011000101011010 +10110100001010110101100000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000110000 +00101011100011000000000000101100 +00101011100011010000000000101000 +00101011100011100000000000100100 +00101011100011110000000000100000 +00101011100100000000000000011100 +00101011100100010000000000011000 +00101011100100100000000000010100 +00101011100100110000000000010000 +00101011100101000000000000001100 +00101011100101010000000000001000 +00110111100111000000000000110000 +11000011101000000000000000000000 +00110111100111001111111110111000 +01011011100010110000000001001000 +01011011100011000000000001000100 +01011011100011010000000001000000 +01011011100011100000000000111100 +01011011100011110000000000111000 +01011011100100000000000000110100 +01011011100100010000000000110000 +01011011100100100000000000101100 +01011011100100110000000000101000 +01011011100101000000000000100100 +01011011100101010000000000100000 +01011011100101100000000000011100 +01011011100101110000000000011000 +01011011100110000000000000010100 +01011011100111010000000000010000 +10111000011000001000000000000000 +01000000010000110000000000000001 +10111000001000000110000000000000 +00110100000000010000000000000010 +00100000011000110000000000001111 +10111000010000000110100000000000 +01000000010011100000000000000000 +01000100011000010000000000000110 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000010110101110110000 +11111000000000000011000100101110 +11100000000000000000000101010000 +01000000010001010000000000000010 +01000000010001100000000000000011 +00100001110011100000000000001111 +00111100101001010000000000001000 +01111000000000010000000000000001 +10111000110001010010100000000000 +01000001101001100000000000000100 +00110100000000110000000000000010 +10111001110000000010000000000000 +00110100010010110000000000100010 +00111000001000010110101111010000 +10111001100000000001000000000000 +11111000000000000011000100100000 +01000001101000110000000000000110 +01000001101001000000000000000111 +00101001101001010000000000001100 +00111100011000110000000000001000 +01111000000000010000000000000001 +10111000100000110001100000000000 +00101001101001000000000000001000 +10111000101000000011000000000000 +10111001100000000001000000000000 +00111000001000010110101111111100 +11111000000000000011000100010101 +01111000000000100000000000000001 +10111001100000000000100000000000 +00111000010000100110110000101100 +00110101101000110000000000010100 +11111011111111111111111101011011 +01000001101000110000000000011110 +01000001101001000000000000011111 +01000001101001010000000000100001 +00111100011000110000000000001000 +01111000000000010000000000000001 +10111000100000110001100000000000 +01000001101001000000000000100000 +00111000001000010110110000110100 +10111001100000000001000000000000 +11111000000000000011000100000110 +00110100000000010000000000001100 +01010101110000010000000011101001 +01111000000000010000000000000001 +00111101110011100000000000000010 +00111000001000011001000000001000 +10110100001011100000100000000000 +00101000001000010000000000000000 +11000000001000000000000000000000 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000010110110001100000 +11111000000000000011000011111010 +01000001011000100000000000000010 +01000001011000010000000000000011 +01000001011001000000000000000100 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100100001000000000000001000 +10111000001000100000100000000000 +10111000100000010010000000000000 +01000001011000100000000000000110 +01000001011000010000000000000111 +01000001011001010000000000001000 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100101001010000000000001000 +10111000001000100000100000000000 +10111000101000010010100000000000 +01111000000000110000000000000001 +01111000000000010000000000000001 +01000001011001110000000000000101 +01000001011001100000000000001001 +00111000001000010110110001111000 +10111001100000000001000000000000 +00111000011000110110110010001000 +11100000000000000000000000011100 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000010110110010010100 +11111000000000000011000011011110 +01000001011000100000000000000010 +01000001011000010000000000000011 +01000001011001000000000000000100 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100100001000000000000001000 +10111000001000100000100000000000 +10111000100000010010000000000000 +01000001011000100000000000000110 +01000001011000010000000000000111 +01000001011001010000000000001000 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100101001010000000000001000 +10111000001000100000100000000000 +01000001011001110000000000000101 +01000001011001100000000000001001 +10111000101000010010100000000000 +01111000000000110000000000000001 +01111000000000010000000000000001 +00111000001000010110110001111000 +10111001100000000001000000000000 +00111000011000110110110010110000 +10111000111001000010000000000000 +10111000110001010010100000000000 +11111000000000000011000011000100 +11100000000000000000000010100110 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000010110110011000000 +11111000000000000011000010111111 +01000001011000100000000000000010 +01000001011000010000000000000011 +01000001011001000000000000000100 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100100001000000000000001000 +10111000001000100000100000000000 +10111000100000010010000000000000 +01000001011000100000000000000110 +01000001011000010000000000000111 +01000001011001010000000000001000 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100101001010000000000001000 +10111000001000100000100000000000 +10111000101000010010100000000000 +01111000000000110000000000000001 +01111000000000010000000000000001 +01000001011001110000000000000101 +01000001011001100000000000001001 +00111000001000010110110001111000 +10111001100000000001000000000000 +00111000011000110110110011011100 +11100011111111111111111111100001 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000010110110011101100 +11111000000000000011000010100011 +01000001011000100000000000000010 +01000001011000010000000000000011 +01000001011001000000000000000100 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100100001000000000000001000 +10111000001000100000100000000000 +10111000100000010010000000000000 +01000001011000100000000000000110 +01000001011000010000000000000111 +01000001011001010000000000001000 +00111100010000100000000000011000 +00111100001000010000000000010000 +01000001011001110000000000000101 +01000001011001100000000000001001 +00111100101001010000000000001000 +10111000001000100000100000000000 +01111000000011100000000000000001 +00111001110011100110110100001000 +10111000101000010010100000000000 +01111000000000010000000000000001 +10111001100000000001000000000000 +10111001110000000001100000000000 +10111000111001000010000000000000 +10111000110001010010100000000000 +00111000001000010110110001111000 +11111000000000000011000010001000 +00110101011000110000000000001010 +10111001100000000000100000000000 +10111001110000000001000000000000 +11111011111111111111111011001111 +00110100000010110000000000110110 +11100000000000000000000010011000 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000010110110100011100 +11111000000000000011000001111110 +01000001011000100000000000000010 +01000001011000010000000000000011 +01000001011001000000000000000100 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100100001000000000000001000 +10111000001000100000100000000000 +10111000100000010010000000000000 +01000001011000100000000000000110 +01000001011000010000000000000111 +01000001011001010000000000001000 +00111100010000100000000000011000 +00111100001000010000000000010000 +01000001011001110000000000000101 +01000001011001100000000000001001 +00111100101001010000000000001000 +10111000001000100000100000000000 +10111000101000010010100000000000 +01111000000000110000000000000001 +01111000000000010000000000000001 +10111000111001000010000000000000 +10111000110001010010100000000000 +10111001100000000001000000000000 +00111000011000110110110100111000 +00111000001000010110110001111000 +11111000000000000011000001100100 +01000001011000100000000000001110 +01000001011000010000000000001111 +01000001011001000000000000010000 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100100001000000000000001000 +10111000001000100000100000000000 +10111000100000010010000000000000 +01000001011000100000000000010010 +01000001011000010000000000010011 +01000001011001010000000000010100 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100101001010000000000001000 +10111000001000100000100000000000 +10111000101000010010100000000000 +01000001011000100000000000010110 +01000001011000010000000000010111 +01000001011001100000000000011000 +00111100010000100000000000011000 +00111100001000010000000000010000 +01000001011010010000000000010001 +01000001011010000000000000010101 +01000001011001110000000000011001 +00111100110001100000000000001000 +10111000001000100000100000000000 +10111000110000010011000000000000 +01111000000000110000000000000001 +01111000000000010000000000000001 +10111001001001000010000000000000 +10111001000001010010100000000000 +10111000111001100011000000000000 +10111001100000000001000000000000 +00111000011000110110110101100100 +00111000001000010110110101010000 +11111000000000000011000001000000 +01000001011000110000000000001101 +01000001011001000000000000011010 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000010110110110001000 +11111000000000000011000000111010 +01000001011000010000000000100000 +01000001011001000000000000011011 +01000001011001010000000000011100 +01000001011001100000000000011101 +01000001011001110000000000011110 +01000001011010000000000000011111 +01011011100000010000000000000100 +01000001011000010000000000100001 +01111000000000110000000000000001 +10111001100000000001000000000000 +01011011100000010000000000001000 +01000001011000010000000000100010 +00111000011000110110110111100000 +00110100000010110000000001000000 +01011011100000010000000000001100 +01111000000000010000000000000001 +00111000001000010110110110110000 +11111000000000000011000000101000 +11100000000000000000000000111101 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000010110111000000000 +11111000000000000011000000100011 +01111000000000100000000000000001 +10111001100000000000100000000000 +00111000010000100110111000011100 +10111001011000000001100000000000 +11111011111111111111111001101001 +00110100000010110000000000101100 +11100000000000000000000000110010 +00110100000010110000000000100010 +11100000000000000000000000110000 +01010101111101110000000000001001 +01111000000000010000000000000001 +10111001100000000001000000000000 +10111010000000000001100000000000 +10111001011000000010000000000000 +10111001111000000010100000000000 +00111000001000010110111000111000 +11111000000000000011000000010010 +11100000000000000000000000110100 +10110101101010110111000000000000 +01000001110101100000000000000010 +01000001110000010000000000000011 +01000001110000110000000000000000 +00111110110101100000000000001000 +01000001110001000000000000000001 +10111000001101101011000000000000 +01000001110000010000000000001000 +01000001110001010000000000000100 +01000001110001100000000000000101 +01000001110001110000000000000110 +01000001110010000000000000000111 +01011011100000010000000000000100 +01000001110000010000000000001001 +00111100011000110000000000001000 +00110110110100010000000000000100 +01011011100000010000000000001000 +10111000100000110001100000000000 +10111010101000000000100000000000 +10111001100000000001000000000000 +10111010001000000010000000000000 +11111000000000000010111111111011 +01001101111100010000000000000111 +10111010010000000000100000000000 +10111001100000000001000000000000 +10111010001000000001100000000000 +10111001111000000010000000000000 +11111000000000000010111111110101 +11100000000000000000000000001000 +10111001100000000000100000000000 +10111010100000000001000000000000 +10111010011000000001100000000000 +00110101110001000000000000001010 +00110110110001011111111111111010 +11111011111111111111111001010100 +10111010001000000111100000000000 +10110101011011110101100000000000 +11100000000000000000000000001011 +01111000000101010000000000000001 +01111000000101000000000000000001 +01111000000100110000000000000001 +01111000000100100000000000000001 +00110100000110000000000000000010 +00110100000101110000000000001001 +00111010101101010110111001011100 +00111010100101000110111011001000 +00111010011100110110111011010000 +00111010010100100110111010011100 +01001101011100000000000000000011 +11001010000010110111100000000000 +01001001111110001111111111000101 +01111000000000100000000000000001 +01111000000000110000000000000001 +10111001100000000000100000000000 +00111000010000100110111011011100 +00111000011000110110111011100100 +10111001101000000010000000000000 +10111010000000000010100000000000 +11111011111111111111111000111100 +00101011100111010000000000010000 +00101011100010110000000001001000 +00101011100011000000000001000100 +00101011100011010000000001000000 +00101011100011100000000000111100 +00101011100011110000000000111000 +00101011100100000000000000110100 +00101011100100010000000000110000 +00101011100100100000000000101100 +00101011100100110000000000101000 +00101011100101000000000000100100 +00101011100101010000000000100000 +00101011100101100000000000011100 +00101011100101110000000000011000 +00101011100110000000000000010100 +00110111100111000000000001001000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +10111000010000000101100000000000 +01000100100000000000000000000101 +10111000100000000001000000000000 +01011011100000110000000000010000 +11111011111111111111110111100001 +00101011100000110000000000010000 +10111001100000000000100000000000 +10111001011000000001000000000000 +11111011111111111111111001101110 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00101000001011010000000000000000 +10111000001000000111100000000000 +00101000001011100000000000000100 +10111000010000000110000000000000 +00110100000010110000000000000000 +00110100000000010000000000000000 +00110100000001000000000000000000 +01010100010011010000000000000110 +10111001101000000000100000000000 +11111000000000000100111011110111 +10001000001011000001000000000000 +10111001011000000010000000000000 +11001001101000100110100000000000 +00110100000000110000000000000000 +00110100000000100000000000000001 +11100000000000000000000000001011 +00111101100001010000000000000001 +00111101011010110000000000000001 +11110101100001010110000000000000 +00111100011000110000000000000001 +10110101100010110101100000000000 +10111000101000000110000000000000 +00111100010001010000000000000001 +11110100010001010001000000000000 +10110100010000110001100000000000 +10111000101000000001000000000000 +00010101011001010000000000011111 +11001000101011000011000000000000 +11110100110001010011000000000000 +11001000101010110010100000000000 +11001000101001100010100000000000 +00000000101001010000000000011111 +00110100000001100000000000000001 +01010101101010110000000000000100 +01011101101010110000000000000010 +01010101110011000000000000000010 +00110100000001100000000000000000 +10100000101001100011000000000000 +01011100110000001111111111101010 +01010101011011010000000000001101 +01011101011011010000000000000010 +01010101100011100000000000001011 +11001001110011000010100000000000 +11110100101011100111000000000000 +11001001101010110110100000000000 +11001001101011100110100000000000 +10111000101000000111000000000000 +10110100100000100010100000000000 +11110100100001010010000000000000 +10110100001000110000100000000000 +10110100100000010000100000000000 +10111000101000000010000000000000 +00111100011001010000000000011111 +00000000010000100000000000000001 +00000000011000110000000000000001 +10111000101000100001000000000000 +10111000011000100010100000000000 +01000100101000000000000000000110 +00111101011001010000000000011111 +00000001100011000000000000000001 +00000001011010110000000000000001 +10111000101011000110000000000000 +11100011111111111111111111101001 +01011001111000010000000000000000 +10111001110000000000100000000000 +01011001111001000000000000000100 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +11111000000000000011010101000111 +10110100001010110000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +10111000010000000101100000000000 +01111000000001010000000000000001 +00110100000000100000000000000110 +00110100000000110000000000000001 +00111000100001000110111110010100 +00111000101001011001000000111100 +10111001011000000011000000000000 +11111011111111111111101000000101 +01000101011000000000000000000101 +00010101011000100000000000011111 +00110100000000010000000000000010 +10111001011000000001100000000000 +11111000000000000011100111111000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +10111000010000000101100000000000 +10111000011000000011000000000000 +01000100011000000000000000001000 +01111000000001000000000000000001 +01111000000001010000000000000001 +00110100000000100000000000000110 +00110100000000110000000000000001 +00111000100001000110111110100000 +00111000101001011001000001011100 +11111011111111111111100111101100 +10111001100000000000100000000000 +10111001011000000001000000000000 +11111011111111111111111111011001 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000110100000000000 +01000100010000000000000000010101 +00101000010000010000000000001000 +00101100010010110000000000001100 +00101000010011000000000000000100 +00111100001000010000000000010000 +00110100000001000000000000000011 +10111000001010110101100000000000 +00101000010000010000000000000000 +10111001011000000001100000000000 +10111001100000000001000000000000 +11111000000000000011100111101001 +01111000000001000000000000000001 +01111000000001010000000000000001 +10111001101000000000100000000000 +00110100000000100000000000000110 +00110100000000110000000000000001 +00111000100001000110111111001100 +00111000101001011001000001110000 +10111001100000000011000000000000 +10111001011000000011100000000000 +11111011111111111111100111001001 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +10111000001000000110000000000000 +00110111100000100000000000011000 +00110111100000010000000000010000 +11111000000000000011100111101111 +00101011100001110000000000011000 +00101011100000010000000000010000 +00101011100001100000000000010100 +00000000111000100000000000010000 +01011001011000010000000000000000 +01011001011000100000000000001000 +00111100111000010000000000010000 +01111000000000100000000000000001 +00111000010000101011000011001100 +01011001011000010000000000001100 +00101000010000010000000000000000 +01011001011001100000000000000100 +00100000001000010000000000000001 +01011100001000000000000000001001 +01111000000001000000000000000001 +01111000000001010000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000110 +00110100000000110000000000000010 +00111000100001000110111111001100 +00111000101001011001000010000000 +11111011111111111111100110100011 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111110110000 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +00001000100001000000000000001100 +10111000001000000101100000000000 +00110100001011010000000100010000 +01111000000000010000000000000001 +00111000001000011001011101101000 +10110100001001000000100000000000 +10111000010000000111100000000000 +01000000001000100000000000000111 +01111000000001010000000000000001 +00110111100011000000000001000000 +00001000010000100000000000000110 +00111000101001011001000010100000 +00101001011100000000000001101000 +00110100000000011000100011110111 +10110100010001010001000000000000 +10111000011000000111000000000000 +00001111100000010000000001001100 +00110100000000110000000000000110 +10111001100000000000100000000000 +11111000000000000100111001111110 +10111001100000000001000000000000 +10111010000000000000100000000000 +10111001111000000001100000000000 +10111001110000000010000000000000 +00110111100001010000000000100000 +11111000000000000010010011110000 +10111000001000000110000000000000 +01000101101000000000000000011111 +00101011100000010000000000101000 +00101011100000100000000000100100 +00101011100000110000000000100000 +00010100001001010000000000011111 +00000000001001000000000000010000 +00111100101001010000000000010000 +00111100001000010000000000010000 +10111000100001010010100000000000 +00101011100001000000000000111100 +01011001011000110000000100010000 +01011001011000100000000100010100 +01011001011001010000000100011000 +01011001011000010000000100011100 +01011100100000000000000000000100 +01111000000001001000111100000000 +10111000011001000001100000000000 +01011001011000110000000100010000 +00111100101010010000000000010000 +00000000001010000000000000010000 +00101001011001110000000100010100 +01111000000001000000000000000001 +01111000000001010000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000010 +00111000100001000110111111011100 +00111000101001011001000010010000 +10111001100000000011000000000000 +10111001001010000100000000000000 +11111011111111111111100101011011 +01111000000000010000000000000001 +00111000001000011011000011011000 +00101000001000100000000000000000 +00110100000000010000000000000100 +01011100010000010000000000001101 +00101001011001000000000100011100 +00101001011001010000000100011000 +00101001011000100000000100010100 +00000000100000110000000000010000 +00100000100001001111111111111111 +00001000100001000000001111101000 +00111100101001010000000000010000 +01111000000000010000000000000001 +00000000100001000000000000010000 +00111000001000010110111111111100 +10111000101000110001100000000000 +11111000000000000010111010001111 +01001100000011000000000000010000 +01111000000000010000000000000001 +00111000001000011011000011001100 +00101000001000100000000000000000 +00101001011000010000000000011100 +10111000010000010000100000000000 +00000000001000010000000000010100 +00110100000000100000000000000001 +00100000001000010000000000001111 +01010000010000010000000000000111 +01111000000000010000000000000001 +00111000001000010111000000001100 +10111001111000000001000000000000 +10111001110000000001100000000000 +10111001101000000010000000000000 +11111011111111111111111010111011 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000001010000 +11000011101000000000000000000000 +00110111100111001111111110010000 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +00101000001000010000000001101000 +10111000011000000010100000000000 +10111000010000000111000000000000 +10111000100000000101100000000000 +00110111100000100000000001000000 +10111000101000000010000000000000 +10111001110000000001100000000000 +00110111100001010000000000100000 +11111000000000000010010000100000 +10111000001000000110100000000000 +01001100000000010000000001100101 +01000101011000000000000000100001 +00101011100000010000000000101100 +00101011100011110000000000100100 +00101011100100000000000000100000 +00111100001000010000000000010000 +00110100000000100000001111101000 +01011001011100000000000000000000 +01011001011011110000000000000100 +11111000000000000100110101100010 +00101011100001010000000000101000 +10111000001000000010000000000000 +00010100001000100000000000011111 +00010100101000010000000000011111 +00000000101000110000000000010000 +00111100101001010000000000010000 +00111100001000010000000000010000 +10110100100001010010100000000000 +10111000011000010000100000000000 +11110100100001010010000000000000 +10110100010000010000100000000000 +10110100100000010000100000000000 +01011001011000010000000000001000 +00101011100000010000000000111100 +01011001011001010000000000001100 +01011100001000000000000000001001 +01111000000000010000000000000001 +00111000001000011011000011011000 +00101000001000100000000000000000 +00110100000000010000000000000100 +01000100010000010000000000000100 +01111000000000011000111100000000 +10111010000000011000000000000000 +01011001011100000000000000000000 +01111000000000010000000000000001 +00111000001000011011000011001100 +00101001100000100000000000011100 +00101000001000010000000000000000 +10111000001000100000100000000000 +00000000001000010000000000010100 +00110100000000100000000000000001 +00100000001000010000000000001111 +01010000010000010000000000000111 +01111000000000010000000000000001 +00111000001000010111000000010100 +10111001110000000001000000000000 +10111001101000000001100000000000 +10111001011000000010000000000000 +11111011111111111111111001101101 +01111000000000010000000000000001 +00111000001000011011000011011000 +00101000001000100000000000000000 +00110100000000010000000000000100 +01011100010000010000000000110000 +00101001011001000000000000000000 +00101001011000110000000000000100 +00101001011000100000000000001000 +00101001011000010000000000001100 +01011011100001000000000001100100 +01011011100000110000000001101000 +01011011100000100000000001101100 +01011011100000010000000001110000 +11111000000000000010111111001101 +00111100001000010000000000010000 +00110100000000100000001111101000 +01011011100000000000000001011000 +01011011100000000000000001010100 +11111000000000000100110100101000 +00010100001000100000000000011111 +00110111100010110000000001100100 +01011011100000010000000001100000 +01011011100000100000000001011100 +10111001011000000000100000000000 +00110111100000100000000001010100 +11111000000000000001001001010101 +00101011100001000000000001110000 +00101011100001010000000001101100 +00101011100000100000000001101000 +00000000100000110000000000010000 +00100000100001001111111111111111 +00001000100001000000001111101000 +00111100101001010000000000010000 +01111000000000010000000000000001 +00000000100001000000000000010000 +10111000101000110001100000000000 +00111000001000010111000000011100 +11111000000000000010111000001011 +10111001011000000000100000000000 +00110101100000100000000100010000 +11111000000000000001001001000110 +00101011100000110000000001110000 +00101011100001000000000001101100 +01111000000000010000000000000001 +00000000011000100000000000010000 +00100000011000111111111111111111 +00001000011000110000001111101000 +00111100100001000000000000010000 +00111000001000010111000000101100 +00000000011000110000000000010000 +10111000100000100001000000000000 +11111000000000000010110111111101 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000001110000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000001000010000000001101000 +11111000000000000010001101010010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111010100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000001101000 +01000100001000000000000000000010 +11111000000000000010001101000101 +10111001011000000000100000000000 +11111000000000000000110010101111 +00110111100011000000000000010100 +00110100000000011000100011110111 +01111000000000100000000000000001 +00001111100000010000000000100000 +00111000010000101000111110001000 +10111001100000000000100000000000 +00110100000000110000000000000110 +11111000000000000100110110010000 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000011001110101110100 +00110100000000110000000000000001 +00110100000001000000000000000000 +11111000000000000010001011101100 +10111000001000000110000000000000 +01000100001000000000000000001110 +00110111100011010000000000101000 +10111001101000000001000000000000 +11111000000000000010001011010110 +10111001101000000001000000000000 +00110100000000110000000000000110 +00110101011000010000000001110000 +11111000000000000100110110000001 +00110101011000010000000001011100 +01011001011011000000000001101000 +10111001101000000001000000000000 +00110100000000110000000000000110 +11111000000000000100110101111100 +01011001011011000000000001010100 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000101100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +01111000000001010000000000000001 +10111000011000000110000000000000 +00110100000000100000000000000010 +00110100000000110000000000000010 +00111000100001000111000101001000 +00111000101001011001000001010100 +10111000001000000101100000000000 +11111011111111111111100001101010 +00101001100000100000000000101100 +00101001011000010000001101011000 +00100000010000110000000000000011 +00101000001000010000000000010000 +01111100011001000000000000000000 +01011000001001000000000000111000 +00100000010001000000000000001000 +00100000010000100000000000000100 +01111100100001000000000000000000 +01111100010000100000000000000000 +00110000001000110000000000110101 +01011000001000100000000001000100 +01011000001001000000000001000000 +00101001011000010000000000110000 +00101000001000100000000000010000 +00101001011000010000001101011000 +00101100001000010000000000001000 +00001100010000010000000000101000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00101000001000100000001101011000 +01111000000001000000000000000001 +01111000000001010000000000000001 +00101000010010110000000000010000 +00110100000000110000000000000010 +00110100000000100000000000000010 +00111000100001000111000101001000 +00111000101001011001000101010100 +11111011111111111111100001000111 +00110100000000010000000000000000 +00110001011000000000000000000101 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +01111000000001010000000000000001 +10111000001000000101100000000000 +00110100000000100000000000000010 +00110100000000010000000000000000 +00110100000000110000000000000010 +00111000100001000111000101001000 +00111000101001011001000101100100 +11111011111111111111100000110101 +00101001011000010000000000100100 +01000100001000000000000000000110 +00110100000000100000000000000000 +00110100000000110000000000000001 +00110100000001000000000000000010 +00110100000001100000000000000011 +11100000000000000000000000011111 +00101001011000010000000000000000 +00101001011000100000000001000000 +01011000001000100000000000011000 +11100000000000000000000000011101 +00101001011001010000000000000000 +00001000010000010000010000011000 +10110100101000010000100000000000 +00101001011001010000000001000000 +01011000001001010000000000011000 +00101000001001010000010000001000 +01011100101000110000000000010000 +00101000001001010000000000100100 +01000100101000110000000000000100 +00101000001000010000001101011000 +01011100101001000000000000001001 +11100000000000000000000000000101 +00101000001000010000001101011000 +00101000001000010000000000010000 +00110000001000110000000000000100 +11100000000000000000000000001010 +00101000001000010000000000010000 +00110000001001000000000000000100 +11100000000000000000000000000111 +00101000001000010000000000010000 +00110000001001100000000000000100 +11100000000000000000000000000100 +00101000001000010000001101011000 +00101000001000010000000000010000 +00110000001000000000000000000100 +00110100010000100000000000000001 +00101001011000010000000000100100 +01001000001000101111111111100101 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00101000001000100000001101011000 +01111000000001000000000000000001 +01111000000001010000000000000001 +00101000010010110000000000010000 +00110100000000110000000000000010 +00110100000000100000000000000010 +00111000100001000111000101001000 +00111000101001011001000101101100 +10111000001000000110000000000000 +11111011111111111111011111111011 +01000001011000110000000000000100 +00110100000000010000000100101100 +01011001011000010000000000101000 +00110100000000100000000000000001 +00110100000000010000101110111000 +01011001011000010000000000110000 +01011001011000000000000000001000 +00110001011000000000000000110101 +01011001011000000000000001000000 +01011001011000100000000000010100 +00100000011000110000000000000011 +00101001011000010000000000000000 +01011100011000100000000000000100 +00101000001000110000000000110100 +10111001100000000000100000000000 +11100000000000000000000000000100 +00101000001000110000000000110100 +00110100000000100000000000000000 +10111001100000000000100000000000 +11011000011000000000000000000000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +01111000000001010000000000000001 +00101100001011010000000000000010 +10111000001000000101100000000000 +10111000010000000110000000000000 +00110100000000010000000000000000 +00110100000000100000000000000010 +00110100000000110000000000000010 +00111000100001000111000101001000 +00111000101001011001000010101100 +11111011111111111111011111010001 +00110100000000010000000001000000 +01001100001011010000000000000100 +10111001011000000000100000000000 +10111001100000000001000000000000 +11111000000000000000001111101101 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +01111000000001010000000000000001 +00110100000000100000000000000010 +00110100000000110000000000000010 +00111000100001000111000101001000 +00111000101001011001000011000000 +10111000001000000101100000000000 +11111011111111111111011110111011 +00101001011000010000001101011000 +00110100000000100000000001000000 +00101000001000010000000000010000 +01000000001000010000000000000100 +01000100001000000000000000000110 +00110100000000110000000000000010 +01000100001000110000000000000100 +10111001011000000000100000000000 +11111000000000000000001110010001 +00110100000000100000000001001110 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +01111000000001010000000000000001 +00110100000000110000000000000010 +10111000010000000110000000000000 +00111000100001000111000101001000 +00110100000000100000000000000010 +00111000101001011001000011101000 +10111000001000000101100000000000 +11111011111111111111011110011111 +00101001011000010000001101011000 +00110100000000110000000000000000 +00101000001000010000000000010000 +00101000001000010000000000001000 +01000100001000000000000000000110 +00110101011000110000000010101000 +10111001011000000000100000000000 +10111001100000000001000000000000 +11111000000000000000010110110001 +00110100000000110000000000000001 +10111000011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +01111000000001010000000000000001 +00110100000000100000000000000010 +00110100000000110000000000000010 +00111000100001000111000101001000 +00111000101001011001000011111100 +10111000001000000101100000000000 +11111011111111111111011110000100 +00101001011000010000001101011000 +00101000001000100000000000010000 +01000000010000010000000000000100 +00100000001000010000000000000010 +01000100001000000000000000001011 +01000000010000010000000000110101 +00100000001000010000000000000001 +01000100001000000000000000001000 +00101000010000010000000000001000 +01000100001000000000000000000011 +00101000010000010000000001000000 +01011100001000000000000000000100 +10111001011000000000100000000000 +00110100000000100000000000001001 +11111000000000000000000010100101 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +01111000000001010000000000000001 +00110100000000100000000000000010 +00110100000000110000000000000010 +00111000100001000111000101001000 +00111000101001011001000100010000 +10111000001000000101100000000000 +11111011111111111111011101100101 +10111001011000000000100000000000 +00110100000000100000000000000100 +11111011111111111111100001000000 +01000100001000000000000000000011 +10111001011000000000100000000000 +11111000000000000000010011110100 +00101001011000010000001101011000 +00101000001000100000000000010000 +00110100000000010000000000000000 +00101000010000110000000001100100 +01000100011000000000000000000100 +00110100000000010000000000000001 +01011001011000010000000000000100 +01011000010000000000000001100100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001000100000000000110000 +01111000000001000000000000000001 +01111000000001010000000000000001 +00101000010011010000000000010000 +00101000001000100000001101011000 +00110100000000110000000000000010 +00111000100001000111000101001000 +00101000010011000000000000010000 +00111000101001011001000100100100 +00110100000000100000000000000010 +10111000001000000101100000000000 +11111011111111111111011101000010 +00101001100000010000000000001000 +01011100001000000000000000011110 +00010001011000100000000010101000 +00110100000000010000000010000000 +00100000010000100000000011000000 +01000100010000010000000000000100 +00010001011000100000000010111000 +00100000010000100000000011000000 +01011100010000010000000000001000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000100 +00110100000000110000000000000001 +00111000100001000111000101010100 +11111011111111111111011100110011 +11100000000000000000000000010100 +10111001011000000000100000000000 +11111000000000000001001011011000 +00101001101000100000000000001100 +00101001101000010000000000001000 +10111000001000100000100000000000 +00101001100000100000000000000000 +01000100001000000000000000000101 +00101000010000110000000000110100 +10111001011000000000100000000000 +00110100000000100000000000000000 +11100000000000000000000000000100 +00101000010000110000000000110100 +10111001011000000000100000000000 +00110100000000100000000000000001 +11011000011000000000000000000000 +10111001011000000000100000000000 +11111000000000000000010101010011 +10111001011000000000100000000000 +11111000000000000000011010011101 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +01111000000001010000000000000001 +00110100000000100000000000000010 +00110100000000110000000000000010 +00111000100001000111000101001000 +00111000101001011001000100110100 +10111000001000000101100000000000 +11111011111111111111011100001101 +10111001011000000000100000000000 +11111000000000000000010011000101 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000110100000000000 +00110100000000100000000000001111 +10111000001000000101100000000000 +10111000100000000110000000000000 +01000100100000100000000000100101 +01111000000001000000000000000001 +01111000000001010000000000000001 +00110100000000100000000000000010 +00110100000000110000000000000010 +00111000100001000111000101001000 +00111000101001011001000101000100 +11111011111111111111011011110101 +00110100000000010000000000000001 +01000101100000010000000000000100 +00110100000000010000000000001100 +01011101100000010000000000011010 +11100000000000000000000000000110 +10111001011000000000100000000000 +00110101011000100000000100000000 +11111000000000000000111111000001 +00110100000011000000000000001111 +11100000000000000000000000010100 +00101001011000010000001101011000 +10111001101000000001000000000000 +00110111100000110000000000010100 +00101000001001000000000000010000 +10111001011000000000100000000000 +00110100000011000000000000001111 +00110100100001000000000000111100 +11111000000000000000001110011010 +00101001011000010000001101011000 +00110100000000100001000000000000 +00101000001000010000000000010000 +00101100001000110000000000111100 +01011100011000100000000000000111 +01000000001000010000000000000100 +00100000001000010000000000000001 +01000100001000000000000000000100 +10111001011000000000100000000000 +00110100000000100000000000000110 +11111000000000000000000000001000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00101000001000110000001101011000 +00110100000001000000000000000110 +00101000011000110000000000010000 +01000100010001000000000000000100 +00110100000001000000000000001001 +01011100010001000000000000001000 +11100000000000000000000000000100 +00110100000000100000000000000001 +00110000011000100000000000000101 +11100000000000000000000000000111 +00110100000000100000000000000010 +00110000011000100000000000000101 +11100000000000000000000000000110 +01000000011000110000000000000101 +00110100000000100000000000000001 +01011100011000100000000000000011 +00110100000000100000000001100110 +11100000000000000000000000000010 +00110100000000100000000001100100 +01011000001000100000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000001101011000 +01111000000001010000000000000001 +00111000101001010111000010001100 +00101000001011000000000000010000 +00110100000000010000000000000001 +01000001100000100000000000000101 +01011100010000010000000000000011 +01111000000001010000000000000001 +00111000101001010111000001101100 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000010 +00110100000000110000000000000001 +00111000100001000111000110100100 +11111011111111111111011010101000 +01000001100000100000000000000101 +00110100000000010000000000000001 +01011100010000010000000000000011 +00110100000000010000000000000110 +11100000000000000000000000000010 +00110100000000010000000000001001 +01011001011000010000000000000100 +00110001100000000000000000000101 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000001000100000001101011000 +00101000010000100000000000010000 +01000000010000110000000000101100 +01000100011000000000000000001010 +00110100011000111111111111111111 +01111000000001000000000000000001 +00110000010000110000000000101100 +00111000100001000111000111001000 +00110100000000100000000000000010 +00110100000000110000000000000001 +11111011111111111111011010001110 +00110100000000010000000000000001 +11100000000000000000000000000011 +11111011111111111111111111010000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111011100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000111000000000000 +00101000001000100000001101011000 +10111000001000000101100000000000 +00101000010011010000000000010000 +00101000001000100000000000001100 +01000100010000000000000000000100 +00110100000000010000000000000011 +00110001101000010000000000101100 +11100000000000000000000000001000 +00110100000000100000000000000110 +11111011111111111111011101010100 +00110100000011000000000000000000 +01000100001011000000000000001100 +10111001011000000000100000000000 +11111011111111111111111111011000 +01000100001000000000000000011101 +10111001011000000000100000000000 +00110100000000100000000000000110 +00110100000000110000001111101000 +11111011111111111111011011001011 +10111001011000000000100000000000 +00110100000000100001000000000000 +11111000000000000000001110010001 +10111000001000000110000000000000 +01000001011000100000001110100001 +00110100000000010000000000001100 +01011100010000010000000000001011 +10111001011000000000100000000000 +10111001110000000001000000000000 +00110111100000110000000000011000 +00110101101001000000000000111100 +11111000000000000000001100011000 +00101101101000100000000000111100 +00110100000000010001000000000001 +01011100010000010000000000000011 +00110100000000010000000001100101 +01011001011000010000000000000100 +01011101100000000000000000000011 +10111001011000000000100000000000 +11111000000000000000101010010100 +00101001011000010000001101011000 +00101000001000010000000000010000 +00101000001000010000000000101000 +01011001011000010000000000001000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000100100 +11000011101000000000000000000000 +00110111100111001111111111011100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000111000000000000 +00101000001000100000001101011000 +10111000001000000101100000000000 +00101000010011000000000000010000 +00101000001000100000000000001100 +01000100010000000000000000000100 +00110100000000010000000000000011 +00110001100000010000000000101100 +11100000000000000000000000001000 +00110100000000100000000000000110 +11111011111111111111011100011010 +00110100000011010000000000000000 +01000100001011010000000000001100 +10111001011000000000100000000000 +11111011111111111111111110011110 +01000100001000000000000000011000 +00110100000000100001000000000001 +10111001011000000000100000000000 +11111000000000000000001101011011 +10111000001000000110100000000000 +00110100000000100000000000000110 +10111001011000000000100000000000 +00110100000000110011101010011000 +11111011111111111111011010001101 +01000001011000100000001110100001 +00110100000000010000000000001100 +01011100010000010000000000001011 +10111001011000000000100000000000 +10111001110000000001000000000000 +00110111100000110000000000011000 +00110101100001000000000000111100 +11111000000000000000001011011110 +00101101100000100000000000111100 +00110100000000010001000000000010 +01011100010000010000000000000011 +00110100000000010000000001101000 +01011001011000010000000000000100 +00101001100000010000000000101000 +01011001011000010000000000001000 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000100100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001000100000001101011000 +00101000001011010000000000001100 +10111000001000000101100000000000 +00101000010011000000000000010000 +01000101101000000000000000000100 +00110100000000010000000000000011 +00110001100000010000000000101100 +11100000000000000000000000001011 +00110100000000100000000000000110 +11111011111111111111011011100111 +01000100001011010000000000010000 +00101001100000010000000000000000 +00101000001000100000000000001000 +10111001011000000000100000000000 +11011000010000000000000000000000 +10111001011000000000100000000000 +11111011111111111111111101101000 +01000100001000000000000000011100 +00101001100000010000000000000000 +00101000001000100000000000000000 +10111001011000000000100000000000 +11011000010000000000000000000000 +10111001011000000000100000000000 +00110100000000100000000000000110 +00110100000000110011101010011000 +11111011111111111111011001010111 +00101001100000010000000000101000 +00110100000000100000000000000000 +01011001011000010000000000001000 +00101001100000010000000000000000 +00101000001000110000000000000100 +10111001011000000000100000000000 +11011000011000000000000000000000 +00110100000000100000000000000001 +01011100001000100000000000001000 +00110100000000010000000001100111 +01011001011000010000000000000100 +00101001100000010000000000000000 +00101000001000100000000000001000 +10111001011000000000100000000000 +11011000010000000000000000000000 +11100000000000000000000000000100 +00110100000000100000000000000010 +01011100001000100000000000000010 +01011001011000000000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111011100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000111000000000000 +00101000001000100000001101011000 +10111000001000000101100000000000 +00101000010011000000000000010000 +00101000001000100000000000001100 +01000100010000000000000000000100 +00110100000000010000000000000011 +00110001100000010000000000101100 +11100000000000000000000000001000 +00110100000000100000000000000110 +11111011111111111111011010101100 +00110100000011010000000000000000 +01000100001011010000000000001100 +10111001011000000000100000000000 +11111011111111111111111100110000 +01000100001000000000000000011000 +00101001100000110000000000101000 +10111001011000000000100000000000 +00110100000000100000000000000110 +11111011111111111111011000100011 +10111001011000000000100000000000 +00110100000000100001000000000010 +11111000000000000000001011101001 +10111000001000000110100000000000 +01000001011000100000001110100001 +00110100000000010000000000001100 +01011100010000010000000000001011 +10111001011000000000100000000000 +10111001110000000001000000000000 +00110111100000110000000000011000 +00110101100001000000000000111100 +11111000000000000000001001110000 +00101101100000100000000000111100 +00110100000000010001000000000011 +01011100010000010000000000000011 +00110100000000010000000001101010 +01011001011000010000000000000100 +00101001100000010000000000101000 +01011001011000010000000000001000 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000100100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001000100000001101011000 +00101000001011010000000000001100 +10111000001000000110000000000000 +00101000010010110000000000010000 +01000101101000000000000000000100 +00110100000000010000000000000011 +00110001011000010000000000101100 +11100000000000000000000000000111 +00110100000000100000000000000110 +11111011111111111111011001111001 +01000100001011010000000000010001 +10111001100000000000100000000000 +11111011111111111111111011111110 +01000100001000000000000010011100 +00101001011000110000000000110000 +10111001100000000000100000000000 +00110100000000100000000000000110 +11111011111111111111010111110001 +10111001100000000000100000000000 +00110100000000100001000000000011 +11111000000000000000001010110111 +00110100000000010000000001101100 +00110001011000010000000000010000 +00101001011000010000000000010100 +01000100001000000000000000000011 +00110100000000010000000001101110 +00110001011000010000000000010000 +01000001011001100000000000010000 +01111000000001000000000000000001 +01111000000001010000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000010 +00110100000000110000000000000001 +00111000100001000111000111011100 +00111000101001011001000110011000 +00110100110001101111111110010100 +11111011111111111111010110000000 +01000001011000100000000000010000 +00110100000000010000000000001000 +00110100010000101111111110010100 +00100000010000100000000011111111 +01010100010000010000000001111110 +01111000000000010000000000000001 +00111100010000100000000000000010 +00111000001000011001000101110100 +10110100001000100000100000000000 +00101000001000010000000000000000 +11000000001000000000000000000000 +00101001011000010000000000000000 +00110100000000100000000000000000 +00110100000000110000000000000000 +00101000001001010000000000101100 +00110100000001000000000000000000 +10111001100000000000100000000000 +11011000101000000000000000000000 +01011100001000000000000001110000 +00110100000000010000000001101101 +00110001011000010000000000010000 +00101001011000010000000000000000 +00110100000000100000000000000001 +00101000001000110000000000100100 +10111001100000000000100000000000 +11011000011000000000000000000000 +01011100001000000000000001101000 +00110100000000010000000001101110 +00110001011000010000000000010000 +00101001011000010000000000000000 +00110100000000100000000000000001 +00110111100000110000000000010100 +00101000001001000000000000101000 +10111001100000000000100000000000 +11011000100000000000000000000000 +00110100000000100000000000000001 +01011100001000100000000001011110 +00101011100000010000000000010100 +01111000000001000000000000000001 +00110100000000100000000000000010 +00000000001001010000000000010000 +00111100001000010000000000010000 +01011001011001010000000000011100 +01011001011000010000000000011000 +00110100000000110000000000000001 +10111001100000000000100000000000 +00111000100001000111000111110000 +11111011111111111111010101010000 +00101001011001010000000000011000 +01111000000001000000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000010 +00110100000000110000000000000001 +00111000100001000111001000010100 +11111011111111111111010101001001 +00110100000000010000000001101111 +00110001011000010000000000010000 +00101001011000010000000000000000 +00110100000000100000000000000001 +00101000001000110000000000100000 +10111001100000000000100000000000 +11011000011000000000000000000000 +01011100001000000000000001000100 +00110100000000010000000001110000 +00110001011000010000000000010000 +00101001011000010000000000000000 +00101000001000100000000000110000 +10111001100000000000100000000000 +11011000010000000000000000000000 +01011100001000000000000000111101 +00110100000000010000000001110001 +00110001011000010000000000010000 +00101001011000010000000000000000 +00110100000000100000000000000010 +00101000001000110000000000100100 +10111001100000000000100000000000 +11011000011000000000000000000000 +01011100001000000000000000110101 +00110100000000010000000001110010 +00110001011000010000000000010000 +00101001011000010000000000000000 +00110100000000100000000000000010 +00110111100000110000000000010100 +00101000001001000000000000101000 +10111001100000000000100000000000 +11011000100000000000000000000000 +00110100000000100000000000000001 +01011100001000100000000000101011 +00101011100001010000000000010100 +01111000000001000000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000010 +00110100000000110000000000000001 +00111000100001000111001000111000 +11111011111111111111010100100001 +00101011100000010000000000010100 +01111000000001000000000000000001 +00110100000000100000000000000010 +00000000001001010000000000010000 +00111100001000010000000000010000 +01011001011001010000000000100100 +01011001011000010000000000100000 +00110100000000110000000000000001 +10111001100000000000100000000000 +00111000100001000111001001010000 +11111011111111111111010100010110 +00101001011001010000000000100000 +01111000000001000000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000010 +00110100000000110000000000000001 +00111000100001000111001001110100 +11111011111111111111010100001111 +00110100000000010000000001110011 +00110001011000010000000000010000 +00101001011000010000000000000000 +00110100000000100000000000000010 +00101000001000110000000000100000 +10111001100000000000100000000000 +11011000011000000000000000000000 +01011100001000000000000000001010 +00110100000000010000000001110100 +00110001011000010000000000010000 +10111001100000000000100000000000 +00110100000000100001000000000100 +11111000000000000000001000101001 +00110100000000010000000001101001 +01011001100000010000000000000100 +00110100000000010000000000000001 +01011001011000010000000000010100 +00101001011000010000000000101000 +01011001100000010000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000110100000000000 +00101000001000100000001101011000 +10111000001000000101100000000000 +00101000010011000000000000010000 +00101000001000100000000000001100 +01000100010000000000000000000100 +00101001100000110000000000101000 +00110100000000100000000000000110 +11111011111111111111010101000101 +10111001011000000000100000000000 +00110100000000100000000000000110 +11111011111111111111010111000010 +01000100001000000000000000000100 +10111001011000000000100000000000 +11111011111111111111111000100110 +11100000000000000000000000011010 +01000001011000100000001110100001 +00110100000000010000000000001100 +01011100010000010000000000010101 +10111001011000000000100000000000 +10111001101000000001000000000000 +00110111100000110000000000010100 +00110101100001000000000000111100 +11111000000000000000000110001111 +00101101100000010000000000111100 +00110100000000100001000000000011 +01011100001000100000000000000110 +01000001100000100000000000000101 +00110100000000010000000000000001 +01011100010000010000000000001010 +00110100000000010000000001101010 +11100000000000000000000000000111 +00110100000000100001000000000101 +01011100001000100000000000000110 +01000001100000100000000000000101 +00110100000000010000000000000010 +01011100010000010000000000000011 +00110100000000010000000001101011 +01011001011000010000000000000100 +00101001100000010000000000101000 +01011001011000010000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111011000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +10111000010000000111100000000000 +00101000001000100000001101011000 +00101000001011100000000000001100 +10111000001000000110000000000000 +00101000010010110000000000010000 +00101101011011010000000001001000 +01111101101011010000000000000000 +01000101110000000000000000000100 +00110100000000010000000000000011 +00110001011000010000000000101100 +11100000000000000000000000001100 +00110100000000100000000000000110 +11111011111111111111010110001010 +01000100001011100000000000011000 +01000101101000000000000000000101 +00101001011000010000000000000000 +00101000001000110000000000110000 +10111001100000000000100000000000 +11011000011000000000000000000000 +10111001100000000000100000000000 +11111011111111111111111000001010 +01000100001000000000000000101001 +01000101101000000000000000001000 +00101001011000010000000000000000 +00110100000000100000000000000000 +00110100000000110000000000000000 +00101000001001010000000000101100 +00110100000001000000000000000000 +10111001100000000000100000000000 +11011000101000000000000000000000 +00101001011000010000000001001100 +00110100000000100000001111101000 +11111000000000000100100100110100 +10111000001000000001100000000000 +00110100000000100000000000000110 +10111001100000000000100000000000 +11111011111111111111010011110010 +01000001100000100000001110100001 +00110100000000010000000000001100 +01011100010000010000000000010101 +10111001100000000000100000000000 +10111001111000000001000000000000 +00110111100000110000000000011100 +00110101011001000000000000111100 +11111000000000000000000101000011 +00101101011000100000000000111100 +00110100000000010001000000000100 +01011100010000010000000000001101 +01000101101000000000000000000101 +00101001011000010000000000000000 +00101000001000100000000000110000 +10111001100000000000100000000000 +11011000010000000000000000000000 +01000001011000100000000000000101 +00110100000000010000000000000001 +01011100010000010000000000000011 +00110100000000010000000001101011 +11100000000000000000000000000010 +00110100000000010000000001101000 +01011001100000010000000000000100 +00101001011000010000000000101000 +01011001100000010000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000101000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001000100000001101011000 +00110100000011010000000000000001 +10111000001000000101100000000000 +00101000010011000000000000010000 +00101001100000100000000000000000 +01011001100011010000000000001000 +00101000010000100000000000001100 +11011000010000000000000000000000 +01000001100000100000000000000101 +00110100000000010000000000000000 +01011100010011010000000000000100 +10111001011000000000100000000000 +00110100000000100001000000000101 +11111000000000000000000110000110 +00110100000000100000000000000001 +01011001100000100000000001000000 +00110100000011011111111111111111 +01011100001000000000000000011011 +01000001100000100000000000000101 +00110100000000010000000000000010 +01011100010000010000000000000011 +00110100000000010000000000001001 +11100000000000000000000000000010 +00110100000000010000000000000110 +01011001011000010000000000000100 +01111000000000010000000000000001 +00111000001000011011000011011000 +00101000001000100000000000000000 +00110100000000010000000000000100 +00110100000011010000000000000000 +01011100010000010000000000001110 +00110100000000010000000001110101 +01011001011000010000000000000100 +01111000000000010000000000000001 +00111000001000010111001010011000 +11111000000000000010100110001110 +11111000000000000010101100110111 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000010111001011001000 +11111000000000000010100110001001 +01111000000000010000000000000001 +00111000001000010111001100000100 +11111000000000000010100110000110 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00000000010000110000000000011000 +00110000001000100000000000000011 +00110000001000110000000000000000 +00000000010000110000000000010000 +00110000001000110000000000000001 +00000000010000110000000000001000 +00110000001000110000000000000010 +11000011101000000000000000000000 +01000000001000100000000000000000 +01000000001000110000000000000011 +00111100010000100000000000011000 +10111000011000100001000000000000 +01000000001000110000000000000001 +01000000001000010000000000000010 +00111100011000110000000000010000 +00111100001000010000000000001000 +10111000010000110001000000000000 +10111000010000010000100000000000 +11000011101000000000000000000000 +01000000001000100000000000000000 +01000000001000010000000000000001 +00111100010000100000000000001000 +10111000010000010000100000000000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001000110000000000110000 +00101000001000100000001101011000 +10111000001000000101100000000000 +00101000011000110000000000001100 +00101000010000100000000000010000 +00101000001011000000000001001100 +00101000011001000000000000010000 +00110100000000110000000010111010 +01001000100000110000000000010111 +00101000010000100000000000000000 +00101000010000110000000000000100 +00110100000000100000000000000001 +11011000011000000000000000000000 +01111100001000010000000000000001 +11001000000000010110100000000000 +10111001011000000000100000000000 +11111000000000000000100110111001 +00101001011000010000000000110000 +00100001101011010000000000101110 +00110101101011010000000000000110 +00101000001000010000000000001100 +00101000001000010000000000010000 +01000101101000010000000000001001 +01111000000000010000000000000001 +00111000001000010111001100111000 +10111001101000000001000000000000 +11111000000000000010100101000111 +00101001011000010000000000110000 +00101000001000010000000000001100 +01011000001011010000000000010000 +00110001100011010000000000110000 +00110100000000010000000001001110 +00001101100000010000000000000010 +00110100000000010000000000000011 +00001101100000010000000001000000 +00110100000000010000000000001010 +00001101100000010000000001000010 +00110100000000010000100000000000 +00001101100000010000000001000100 +00110100000000010011000011011110 +00001101100000010000000001000110 +00110100000000011010110100000001 +00001101100000010000000001001000 +00110100000000010010000000000000 +00001101100000010000000001001010 +00101001011000010000001101011000 +00101000001000100000000000010000 +00101000010000110000000000010100 +01000000010000010000000000000100 +01000100011000000000000000000010 +00111000001000010000000000000100 +00101000010000100000000000001000 +01000100010000000000000000000010 +00111000001000010000000000001000 +00001101100000010000000001001100 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00110100001000010000000001000000 +10111000010000000110000000000000 +11111011111111111111111110110010 +00101101011001010000000001000100 +00101101011001000000000001000110 +01111000000001110000000000000001 +00111100101001010000000000001000 +00000000100001100000000000001000 +00111000111001111000111011011000 +10111000101001100010100000000000 +00101000111001100000000000000000 +01100100001000010000000000000011 +00101101011000110000000001001000 +11100100101001100010100000000000 +00101101011000100000000001001010 +10100000001001010000100000000000 +01000100001000000000000000010000 +00111100100001000000000000001000 +00000000011000010000000000001000 +00100000100001001111111111111111 +10111000100000010010000000000000 +00100000011000110000000011111111 +00111000000000011101111010101101 +11100100100000010010000000000000 +01100100011000110000000000000001 +10100000100000110001100000000000 +01000100011000000000000000000110 +00110100000000010010000000000000 +01011100010000010000000000000100 +00110101011000010000000001001100 +11111011111111111111111110010110 +01011001100000010000000000101100 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +00101000001000010000001101011000 +00100000010011011111111111111111 +00101000001000010000000000010000 +01000000001001010000000000000101 +01000100101000000000000000000011 +00110100000000010010000000000000 +01011101101000010000000000001010 +01111000000001000000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111001101010000 +10111001101000000011000000000000 +11111011111111111111001110100010 +00110100000000010000000000000000 +11100000000000000000000001010001 +00101001100010110000000001001100 +00110100000000110000000000001000 +01000001011000010000000000000000 +00100000001000010000000011110000 +00111000001000010000000000001100 +00110001011000010000000000000000 +00110100000000010000000000000101 +00110001011000010000000000100000 +00101001100000100000000000110000 +00110101011000010000000000100010 +00101000010000100000000000010100 +11111000000000000100100010010001 +00101001100000010000000000110000 +00101000001000010000000000010100 +00101100001000010000000000001000 +00001101011011010000000000110110 +00000000001000100000000000001000 +00110001011000010000000000101011 +00110100000000010000000000000011 +00001101011000010000000000101100 +00110100000000010000100000000000 +00001101011000010000000000110000 +00110100000000010011000011011110 +00001101011000010000000000110010 +00110100000000011010110100000001 +00001101011000010000000000110100 +00110001011000100000000000101010 +00110100000000010001000000000011 +01000101101000010000000000000101 +00110100000000010001000000000100 +00110100000000100000000000001000 +01011101101000010000000000101101 +11100000000000000000000000010111 +00101001100000010000001101011000 +00110101011000100000000000111000 +00101000001000010000000000010000 +00101000001000110000000000010100 +01000100011000000000000000000101 +01000000001000010000000000110100 +00110001011000010000000000111000 +00110000010000000000000000000001 +11100000000000000000000000000111 +01000000001000010000000000110100 +00111100001000010000000000001000 +00111000001000010000000000000001 +00000000001000110000000000001000 +00110001011000110000000000111000 +00110000010000010000000000000001 +00101001100000010000001101011000 +00101000001000100000000000010000 +00110101011000010000000000111010 +00101000010000100000000000110000 +11111011111111111111111100110010 +00110100000000100000000000010100 +11100000000000000000000000010110 +00101001100000010000001101011000 +00101000001000100000000000010000 +00110101011000010000000000111000 +00101000010000100000000000011100 +11111011111111111111111100101011 +00101001100000010000001101011000 +00101000001000100000000000010000 +00110101011000010000000000111100 +00101000010000100000000000011000 +11111011111111111111111100100110 +00101001100000010000001101011000 +00101000001000100000000000010000 +00110101011000010000000001000000 +00101000010000100000000000100100 +11111011111111111111111100100001 +00101001100000010000001101011000 +00101000001000100000000000010000 +00110101011000010000000001000100 +00101000010000100000000000100000 +11111011111111111111111100011100 +00110100000000100000000000011000 +00110100010000010000000000110000 +00110001011000000000000000000010 +00110001011000010000000000000011 +00001101011000100000000000101110 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +10111000011000000111000000000000 +00110100010000100000000000100010 +10111000001000000110000000000000 +10111000011000000000100000000000 +00110100000000110000000000001000 +10111000100000000110100000000000 +11111000000000000100100000111001 +00110101011000010000000000101010 +11111011111111111111111100010100 +00001101110000010000000000001000 +00110101011000010000000000101100 +11111011111111111111111100010001 +10111000001000000010100000000000 +00110100000001000000000000000011 +00101101011000110000000000110000 +00101101011000100000000000110010 +00101101011000010000000000110100 +01000100101001000000000000000111 +01111000000001000000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111001110000100 +11100000000000000000000000100010 +00111100011001010000000000001000 +01111000000001000000000000000001 +00000000010000110000000000001000 +00111000100001001000111011011000 +10111000101000110010100000000000 +00101000100000110000000000000000 +01000100101000110000000000000111 +01111000000001000000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111001111010100 +11100000000000000000000000010101 +00111100010001010000000000001000 +00000000001000110000000000001000 +00100000101001011111111111111111 +10111000101000110010100000000000 +00111000000000101101111010101101 +01000100101000100000000000000111 +01111000000001000000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111010000001100 +11100000000000000000000000001001 +00100000001001010000000011111111 +00110100000000010000000000000001 +01000100101000010000000000001000 +01111000000001000000000000000001 +10111001100000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111010001010000 +11111011111111111111001100001001 +11100000000000000000000000101000 +00101101011000010000000000110110 +01000101101000000000000000000010 +00001101101000010000000000000000 +00110100000000100001000000000011 +01000100001000100000000000000100 +00110100000000100001000000000100 +01011100001000100000000000100001 +11100000000000000000000000010010 +00101001100000010000001101011000 +00110101011011100000000000111000 +00101000001011010000000000010000 +10111001110000000000100000000000 +11111011111111111111111011010101 +00100000001000010000000011111111 +00001101101000010000000001001000 +10111001110000000000100000000000 +11111011111111111111111011010001 +00000000001000010000000000001000 +00110001101000010000000001010000 +00110101011000010000000000111010 +11111011111111111111111011000010 +00101001100000100000001101011000 +00101000010000100000000000010000 +01011000010000010000000001001100 +11100000000000000000000000001111 +00101001100000010000001101011000 +00101000001011000000000000010000 +00110101011000010000000000111000 +11111011111111111111111010111010 +01011001100000010000000001011000 +00110101011000010000000000111100 +11111011111111111111111010110111 +01011001100000010000000001010100 +00110101011000010000000001000000 +11111011111111111111111010110100 +01011001100000010000000001100000 +00110101011000010000000001000100 +11111011111111111111111010110001 +01011001100000010000000001011100 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00100000010000101111111111111111 +10111000001000000101100000000000 +11111011111111111111111100011111 +10111000001000000001000000000000 +00110100000000110000000000000000 +10111001011000000000100000000000 +11111000000000000000011110110101 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00100000110010001111111111111111 +00001001000010000000001111101000 +10111000010000000101000000000000 +00111000000000101000000000000000 +00111100101010110000000000010000 +00000000110001110000000000010000 +10110101000000100100000000000000 +10111000100000000100100000000000 +01011011100001000000000000010000 +00000001000010000000000000010000 +01111000000001000000000000000001 +01011011100000110000000000001100 +01011011100001010000000000010100 +01011011100001100000000000011000 +00110100000000100000000000000100 +00110100000000110000000000000010 +00111000100001000111010010010100 +10111001010000000010100000000000 +10111001001000000011000000000000 +10111001011001110011100000000000 +11111011111111111111001010110100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111011000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00010100001010110000000000011111 +10111000001000000010100000000000 +00111001011010110000000000000001 +00010101011011010000000000011111 +10111000010000000010000000000000 +10111000011000000110000000000000 +10111001101000000000100000000000 +10111000101000000001100000000000 +10111001011000000001000000000000 +11111000000000000100011010101001 +01011011100000010000000000011100 +01011011100000100000000000100000 +00110111100000010000000000011100 +00110100000000100000001111101000 +11111011111111111111100000101111 +10111000001000000111100000000000 +00101011100000010000000000011100 +01111000000000110000000000000001 +00111000011000111000111011001000 +01011011100000010000000000100100 +00101011100000010000000000100000 +00101000011000100000000000000000 +01011011100000010000000000101000 +00110111100000010000000000100100 +11111011111111111111100000100101 +10111000001000000111000000000000 +00111101111000010000000000010000 +00110100000000100000001111101000 +11111000000000000100011011011011 +00111101110000100000000000010000 +10111000001000000010000000000000 +00010100001000110000000000011111 +10110100100000100001000000000000 +00000001110000010000000000010000 +11110100100000100010000000000000 +10110100011000010000100000000000 +10110100100000010000100000000000 +10111001101000000001100000000000 +10111001011000000010000000000000 +11111000000000000100011010001011 +00101011100000110000000000100100 +00101011100001000000000000101000 +01011001100000010000000000001000 +01011001100000100000000000001100 +10111001101000000000100000000000 +10111001011000000001000000000000 +11111000000000000100011010000100 +01011001100000010000000000000000 +01011001100000100000000000000100 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000101000 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101001111101000000 +01011000010000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00101000001010110000000000011000 +10111000001000000110100000000000 +01000101011000000000000000010100 +01111000000011000000000000000001 +00111001100011001100001010101000 +00101001100000010000000000000000 +00110100000000100000000000000001 +11111000000000000001001011011011 +00110100000000100000000000000000 +00110001101000000000000000100000 +10111001011000000000100000000000 +00110100000000110000000100100000 +00101001011011110000000010010000 +00101001011011100000000010010100 +00101001011011010000000010011000 +11111000000000000100011111010000 +00101001100000010000000000000000 +01011001011011110000000010010000 +01011001011011100000000010010100 +01011001011011010000000010011000 +00110100000000100000000000000000 +11111000000000000001001011001101 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000110100000000000 +00101000001000010000001101011000 +00110100000000100000000000000001 +00101001101010110000000000011000 +00101000001011000000000000010000 +01111000000000010000000000000001 +00111000001000011100001010101000 +00101000001000010000000000000000 +11111000000000000001001010110111 +00101001100000010000000000000000 +00110100000000100000000000000000 +00110100000000110000000000000000 +00101000001001100000000000011100 +00110101011001000000000000101000 +10111001101000000000100000000000 +00110101011001010000000000101100 +11011000110000000000000000000000 +00110100000000101111111111111111 +01011100001000000000000001000011 +00101001100000010000000000000000 +00110100000000100000000000000000 +00101000001000110000000000110100 +10111001101000000000100000000000 +11011000011000000000000000000000 +00110101101000100000001111111000 +10111001011000000000100000000000 +00110100000000110000000000010000 +11111000000000000100100011010011 +00101001011000010000000001001000 +00101001011000100000000000101100 +01001100010000010000000000000011 +11111000000000000100011010011110 +01011001011000010000000001001000 +00101001100000010000000000000000 +00101000001000100000000000011000 +00101001011000010000000001001000 +11011000010000000000000000000000 +00101001100000010000000001011000 +00101101100000100000000001010100 +01011001011000000000000100011000 +00111100001000010000000000010000 +01011001011000000000000000010100 +10111000001000100000100000000000 +01011001011000010000000000011000 +00101001100000010000000001100000 +00101101100000100000000001011100 +00111100001000010000000000010000 +10111000001000100000100000000000 +01011001011000010000000000011100 +00101001100000010000000000011100 +00101101100000100000000000011000 +00111100001000010000000000010000 +10111000001000100000100000000000 +01011001011000010000000000100000 +00101001100000010000000000100100 +00101101100000100000000000100000 +00111100001000010000000000010000 +10111000001000100000100000000000 +01111000000000100000000000000001 +01011001011000010000000000100100 +00111000010000100111010010101100 +00110101011000010000000001100000 +11111000000000000100100000010000 +00101001011000010000000000010000 +00110101011000100000000010100000 +01011001011000000000000001011000 +00111000001000010000000000000001 +01011001011000010000000000010000 +00101001101000010000000000111000 +00101000001000110000000000000000 +10111001101000000000100000000000 +11011000011000000000000000000000 +01111000000000010000000000000001 +00111000001000011001111101000000 +00101000001000010000000000000000 +00110100000000100000000000000000 +01011001011000010000000001011100 +01111000000000010000000000000001 +00111000001000011011010111101000 +01011000001000000000000000000000 +01111000000000010000000000000001 +00111000001000011100001010101000 +00101000001000010000000000000000 +11111000000000000001001001101100 +00110100000000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101000010001010000000000000100 +00101000010001000000000000001000 +00101000010001100000000000000000 +00101000001000010000000000011000 +00101000010000100000000000001100 +01011000001001100000000010110000 +01011000001001010000000010110100 +01011000001001000000000010111000 +01011000001000100000000010111100 +00101000011000100000000000001000 +00101000011001010000000000000000 +00101000011001000000000000000100 +00101000011000110000000000001100 +01011000001000100000000011001000 +01011000001001010000000011000000 +01011000001001000000000011000100 +01011000001000110000000011001100 +01111000000000010000000000000001 +00111000001000011011010111101000 +00110100000000100000000000000001 +01011000001000100000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000011010000000000000001 +00111001101011011100001010101000 +00101000001011000000000000011000 +10111000001000000101100000000000 +00101001101000010000000000000000 +00110100000000100000000000000001 +11111000000000000001001001000001 +00101001011000010000000011000100 +00101001011001000000000010111000 +00101001011000110000000010111100 +00101001011000100000000011000000 +01011001100000010000000011011100 +00101001011000010000000011010100 +01011001100001000000000011010000 +01011001100000110000000011010100 +00101001011001000000000011001000 +00101001011000110000000011001100 +01011001100000100000000011011000 +00101001011000100000000011010000 +01011001100000010000000011101100 +00101001101000010000000000000000 +01011001100000100000000011101000 +01011001100001000000000011100000 +01011001100000110000000011100100 +00110100000000100000000000000000 +11111000000000000001001000101110 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111000000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +10111000001000000110000000000000 +10111000011000000110100000000000 +00101000001000010000001101011000 +00010001011000110000000010110000 +00101000001000100000000000010000 +00100000011000110000000011000000 +00110100000000010000000010000000 +01000100011000010000000000001010 +00010001011001000000000011000000 +00100000100001000000000011000000 +01000100100000010000000000000111 +00010001011001000000000011010000 +00100000100001000000000011000000 +01000100100000010000000000000100 +00010001011001000000000011100000 +00100000100001000000000011000000 +01011100100000010000000000011001 +01111000000000010000000000000001 +00111000001000011011010111101100 +00101000001000100000000000000000 +00110100000011000000000000000000 +00110100010000100000000000000001 +01011000001000100000000000000000 +00110100000000010000000000000101 +01001100001000100000000011111001 +00010001011001000000000011000000 +00010001011001010000000011010000 +00010001011001100000000011100000 +00100000100001000000000011000000 +00100000101001010000000011000000 +00100000110001100000000011000000 +01111000000000010000000000000001 +01111000000000100000000000000001 +01111100011000110000000010000000 +01111100100001000000000010000000 +01111100101001010000000010000000 +01111100110001100000000010000000 +00111000010000101001000111010100 +00111000001000010111010010111100 +11111000000000000010011010111100 +11100000000000000000000011101001 +00101000010000010000000000000000 +00101000001000110000000000111000 +01000100011000000000000000000100 +10111001011000000000100000000000 +00110100000000100000000000000000 +11011000011000000000000000000000 +01111000000000010000000000000001 +00111000001000011011010111101100 +01011000001000000000000000000000 +00101001011000010000000001011000 +00110101011000100000000010100000 +00110111100011100000000000110100 +00110100001000010000000000000001 +01011001011000010000000001011000 +00101001100000010000000000111000 +00110101011100010000000011000000 +00101000001000110000000000000000 +10111001100000000000100000000000 +11011000011000000000000000000000 +01111000000000010000000000000001 +00111000001000011011010111101000 +00101001011000100000000011101000 +01011000001000000000000000000000 +00101001011000010000000011101100 +00101001011001000000000011100000 +00101001011000110000000011100100 +01011011100000100000000000101100 +01011011100000010000000000110000 +00110101011000100000000010110000 +00110111100000010000000000100100 +01011011100001000000000000100100 +01011011100000110000000000101000 +11111000000000000000101011011000 +00101001011000100000000011011000 +00101001011000010000000011011100 +00101001011001000000000011010000 +00101001011000110000000011010100 +01011011100000100000000000111100 +01011011100000010000000001000000 +10111010001000000001000000000000 +10111001110000000000100000000000 +01011011100001000000000000110100 +01011011100000110000000000111000 +11111000000000000000101011001101 +00101011100000010000000000100100 +10111001110000000001000000000000 +01011001011000010000000000110000 +00101011100000010000000000101000 +01011001011000010000000000110100 +00101011100000010000000000101100 +01011001011000010000000000111000 +00101011100000010000000000110000 +01011001011000010000000000111100 +00110101011000010000000000110000 +11111000000000000000101011000010 +01111000000000010000000000000001 +00111000001000011011000011001100 +00101000001000010000000000000000 +00101001100000100000000000011100 +10111000001000100000100000000000 +00000000001000010000000000010000 +00100000001000010000000000001111 +01000100001000000000000000101001 +00101001011000110000000010110000 +00101001011001000000000010110100 +00101001011001010000000010111000 +00101001011001100000000010111100 +01111000000000100000000000000001 +10111001100000000000100000000000 +00111000010000100111010011101100 +11111011111111111111111001100100 +00101001011000110000000011000000 +00101001011001000000000011000100 +00101001011001010000000011001000 +00101001011001100000000011001100 +01111000000000100000000000000001 +10111001100000000000100000000000 +00111000010000100111010011111000 +11111011111111111111111001011100 +00101001011000110000000011010000 +00101001011001000000000011010100 +00101001011001010000000011011000 +00101001011001100000000011011100 +01111000000000100000000000000001 +10111001100000000000100000000000 +00111000010000100111010100000100 +11111011111111111111111001010100 +00101001011000110000000011100000 +00101001011001000000000011100100 +00101001011001010000000011101000 +00101001011001100000000011101100 +01111000000000100000000000000001 +10111001100000000000100000000000 +00111000010000100111010100010000 +11111011111111111111111001001100 +00101001011000110000000000110000 +00101001011001000000000000110100 +00101001011001010000000000111000 +00101001011001100000000000111100 +01111000000000100000000000000001 +10111001100000000000100000000000 +00111000010000100111010100110100 +11111011111111111111111001000100 +00101001011000010000000000111000 +00101001011000100000000000111100 +00110100000000110000000000000000 +00110100000001000000001111101000 +11111000000000000100010100010100 +00111000000011001000000000000000 +10110100010011000110000000000000 +11110100010011000001100000000000 +01111000000001010000000000000001 +10110100011000010000100000000000 +00111100001000100000000000010000 +00000001100011000000000000010000 +00111000101001011000111011001000 +10111000010011000110000000000000 +00101000101001000000000000000000 +00010100001011100000000000010000 +00101001011000100000000000110100 +00101001011000010000000000110000 +00110100000000110000000000000000 +11111000000000000100010100000101 +10110101100000100011000000000000 +11110101100001100110000000000000 +10110101110000010000100000000000 +00101001011001110000000000011000 +00101001011000110000000000100000 +10110101100000010110000000000000 +00101001011000010000000000011100 +00101001011001000000000000100100 +10110100111000110001100000000000 +10110100011000010001100000000000 +10110100011001000001100000000000 +00010100011001010000000000011111 +01011001011011000000000001000000 +01011001011001100000000001000100 +01001000101011000000000000000100 +01011100101011000000000000000101 +01010100011001100000000000000010 +11100000000000000000000000000011 +01011001011001010000000001000000 +01011001011000110000000001000100 +00101001011000100000000001000100 +00101001011000010000000001000000 +00010100100011110000000000011111 +11001000010000110001100000000000 +11110100011000100001000000000000 +11001000001001010000100000000000 +11001000001000100000100000000000 +10110100100001110010100000000000 +00010100111000100000000000011111 +11110100100001010010000000000000 +10110101111000100111100000000000 +00000000011011000000000000000001 +00111100001000100000000000011111 +10110100100011110111100000000000 +00101001011001000000000000101000 +10111000010011000110000000000000 +00000000001000100000000000000001 +10110100101011000110000000000000 +11110100101011000010100000000000 +10110101111000100111100000000000 +10111000011000000001000000000000 +00010100100000110000000000011111 +10110100101011110111100000000000 +11111000000000000100010011011001 +00010100001011100000000000001000 +00010100001000010000000000011111 +10110101100011100111000000000000 +11110101100011100110000000000000 +10110101111000010000100000000000 +10110101100000010111100000000000 +00101001011000100000000010111000 +00101001011000010000000010111100 +00101001011001000000000010110000 +00101001011000110000000010110100 +00110111100100000000000000110100 +01011011100000100000000000111100 +01011011100000010000000001000000 +10111010001000000001000000000000 +10111010000000000000100000000000 +01011011100001000000000000110100 +00110111100011000000000000100100 +01011011100000110000000000111000 +11111000000000000000101000111111 +10111001100000000001100000000000 +10111001111000000000100000000000 +10111001110000000001000000000000 +11111011111111111111111000001001 +10111010000000000000100000000000 +10111001100000000001000000000000 +11111000000000000000101000011110 +00101011100000010000000000111100 +00101011100100010000000000110100 +00101011100100000000000000111000 +00101011100000100000000001000000 +00110100000000110000000000000000 +01011001101100010000000000000000 +01011001101100000000000000000100 +01011001101000010000000000001000 +01011001101000100000000000001100 +00110100000001000000001111101000 +11111000000000000100010010110100 +00111000000011001000000000000000 +10110100010011000110000000000000 +11110100010011000001000000000000 +01111000000001010000000000000001 +10110100010000010001100000000000 +00111000101001011000111011001000 +00111100011000010000000000010000 +00000001100011000000000000010000 +00101000101001000000000000000000 +10111000001011000110000000000000 +00010100011011010000000000010000 +10111010001000000000100000000000 +00110100000000110000000000000000 +10111010000000000001000000000000 +11111000000000000100010010100101 +10110101100000100001000000000000 +11110101100000100110000000000000 +10110101101000010000100000000000 +01111000000000110000000000000001 +10110101100000010000100000000000 +00111000011000111001111101000000 +01011001011000010000000010001000 +00101000011000010000000000000000 +01011001011000100000000010001100 +01011001011011110000000001010000 +01011001011000010000000001011100 +01011001011011100000000001010100 +00110100000011000000000000000001 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000001000000 +11000011101000000000000000000000 +00110111100111001111111111001000 +01011011100010110000000000101000 +01011011100011000000000000100100 +01011011100011010000000000100000 +01011011100011100000000000011100 +01011011100011110000000000011000 +01011011100100000000000000010100 +01011011100100010000000000010000 +01011011100100100000000000001100 +01011011100100110000000000001000 +01011011100111010000000000000100 +10111000001000000111000000000000 +00101000001000010000001101011000 +00101001110010110000000000011000 +00101000001011010000000000010000 +01111000000000010000000000000001 +00111000001000011011010111101000 +00101000001000010000000000000000 +01000100001000000000000100111100 +01111000000000010000000000000001 +00111000001000011100001010101000 +00101000001000010000000000000000 +00110100000000100000000000000001 +11111000000000000001000011101001 +10111001110000000000100000000000 +10111001011000000001000000000000 +00110111100000110000000000101100 +00101001011100100000000001000000 +00101001011100000000000001000100 +11111011111111111111111010111101 +01000100001000000000000100100101 +00101001011000010000000000101100 +00110100000000100000001111101000 +11111000000000000100010010110000 +10111000001000001001100000000000 +00101011100000010000000000111000 +00101011100011000000000000110100 +00101011100100010000000000110000 +00100000001011111111111111111111 +00001001111011110000001111101000 +00111101100011000000000000010000 +00000000001000010000000000010000 +00010101111011110000000000010000 +10111001100000010110000000000000 +01001100000011000000000000001000 +10111001100000000000100000000000 +10111010011000000001000000000000 +11111000000000000100010011001111 +10111000001000000001100000000000 +00001000001000010000001111101000 +11001001100000110110000000000000 +10110101111000010111100000000000 +10111010001000000001100000000000 +01001101100000000000000000000110 +01111000000000100000000000000001 +00111000010000101000111011001000 +00101000010000010000000000000000 +00110110001000111111111111111111 +10110101100000010110000000000000 +01101001100000100000000000000000 +01100100011000011111111111111111 +10100000010000010000100000000000 +01000100001000000000000000000110 +01111000000000100000000000000001 +00111000010000101000111011011100 +00101000010000010000000000000000 +00110100000000110000000000000000 +10110101100000010110000000000000 +01100100011000110000000000000000 +00000001100000010000000000011111 +10100000011000010001100000000000 +01000100011000000000000000000110 +11001000000100111001100000000000 +01001010011011000000000000000100 +00001001100011000000001111101000 +10110101111011000111100000000000 +00110100000011000000000000000000 +01111000000001000000000000000001 +10111001110000000000100000000000 +00110100000000100000000000000100 +00110100000000110000000000000010 +00111000100001000111010101111000 +10111010001000000010100000000000 +10111001100000000011000000000000 +10111001111000000011100000000000 +11111011111111111111000000101101 +00101001101000010000000000000000 +00110100000000100000000000000000 +00101000001000110000000000000100 +10111001110000000000100000000000 +11011000011000000000000000000000 +00110100001000011111111111111111 +00110100000000100000000000000001 +01010000010000010000000000001100 +01111000000001000000000000000001 +10111001110000000000100000000000 +00110100000000100000000000000100 +00110100000000110000000000000001 +00111000100001000111010110011000 +11111011111111111111000000011111 +00101001101000010000000000000000 +00110100000000100000000000000000 +00101000001000110000000000110100 +10111001110000000000100000000000 +11011000011000000000000000000000 +00101001101000010000000000000000 +00101000001000010000000000010000 +11011000001000000000000000000000 +01011100001000000000000000001010 +00101001011000110000000000010000 +00110100000000101111111111111101 +10100000010000110001000000000000 +01011001011000100000000000010000 +00101011100000100000000000110000 +00101011100000110000000000101100 +10111000011000100001000000000000 +01011100010000010000000000001001 +11100000000000000000000000001010 +01111000000001000000000000000001 +10111001110000000000100000000000 +00110100000000100000000000000100 +00110100000000110000000000000001 +00111000100001000111010110111100 +11111011111111111111000000000111 +11100000000000000000000011000111 +00110100000000010000000000000010 +11100000000000000000000000000110 +00110100000000010000000000000001 +01011101100000100000000000000100 +00101001011000010000000000010100 +01011100001011000000000000000011 +00110100000000010000000000000011 +01011001011000010000000000010100 +00101001011000100000000000010100 +01111000000000010000000000000001 +00111000001000011001000110111100 +00111100010000100000000000000010 +01111000000001100000000000000001 +10110100001000100000100000000000 +00101000001001010000000000000000 +01111000000001000000000000000001 +00111000110001101000000011100000 +10111001110000000000100000000000 +00110100000000100000000000000100 +00110100000000110000000000000001 +00111000100001000111010111001000 +11111011111111111110111111110000 +00101001011000100000000000010100 +01111000000000010000000000000001 +00111000001000011001000110111100 +00111100010000100000000000000010 +10110100001000100001000000000000 +00101000010000100000000000000000 +00110101011000010000000001100000 +11111000000000000100010111110101 +00101001011000100000000000010100 +00110100000000010000000000000100 +00110100010000101111111111111111 +01010100010000010000000001101110 +01111000000000010000000000000001 +00111100010000100000000000000010 +00111000001000011001000110101000 +10110100001000100000100000000000 +00101000001000010000000000000000 +11000000001000000000000000000000 +00101001101000010000000000000000 +00101011100000100000000000110000 +00110100000000110000000000000000 +00101000001001000000000000010100 +00101011100000010000000000101100 +11100000000000000000000000000110 +00101001101000010000000000000000 +00110100000000100000000000000000 +10111001100000000001100000000000 +00101000001001000000000000010100 +00110100000000010000000000000000 +11011000100000000000000000000000 +00101001011000010000000000010000 +00111000001000010000000000000010 +01011001011000010000000000010000 +11100000000000000000000001000010 +00101001011001010000000001001000 +01111000000001000000000000000001 +10111001110000000000100000000000 +00110100000000100000000000000100 +00110100000000110000000000000010 +00111000100001000111010111100000 +10111001100000000011000000000000 +10111001111000000011100000000000 +11111011111111111110111111000101 +00101001101000100000000000000000 +00101001011000010000000001001000 +00101000010000100000000000011000 +10110101111000010000100000000000 +01011001011000010000000001001000 +11011000010000000000000000000000 +00101001011000010000000000010000 +00111000001000010000000000000010 +01011001011000010000000000010000 +00110100000000010000000000000101 +01011001011000010000000000010100 +11100000000000000000000001000011 +00010101111000010000000000011111 +00110100000000100000000000111011 +10011000001011110111100000000000 +11001001111000010000100000000000 +01001000001000100000000000001101 +00101001101000010000000000000000 +00110100000000100000000000000001 +00101000001000110000000000110100 +10111001110000000000100000000000 +11011000011000000000000000000000 +00101001011000010000000001010000 +01011001011000010000000100010000 +00101001011000010000000001010100 +01011001011000010000000100010100 +00110100000000010000000000000100 +01011001011000010000000000010100 +11100000000000000000000000000100 +00101001011000010000000100011000 +00110100001000010000000000000001 +01011001011000010000000100011000 +00101001011000100000000100011000 +00110100000000010000000000001001 +01001100001000100000000000101100 +01011001011000000000000100011000 +11100000000000000000000000010100 +00101001011000110000000001010100 +00101001011000010000000100010100 +00101001011001000000000001010000 +00101001011000100000000100010000 +11001000011000010000100000000000 +11110100001000110001100000000000 +01011001011000010000000010000100 +01111000000000010000000000000001 +00111000001000011001111101000000 +11001000100000100001000000000000 +00101000001000010000000000000000 +11001000010000110001000000000000 +01011001011000100000000010000000 +01000100001000000000000000011100 +00010101111000010000000000011111 +00110100000000110000000001111000 +10011000001011110001000000000000 +11001000010000010001000000000000 +01001100011000100000000000000011 +00110100000000010000000000000011 +11100011111111111111111111010001 +00000000001000010000000000011110 +00101001101000100000000000000000 +10110100001011110111100000000000 +00101001011000010000000001001000 +00010101111011110000000000000010 +00101000010000100000000000011000 +10110101111000010000100000000000 +01011001011000010000000001001000 +11011000010000000000000000000000 +00101001011001010000000001001000 +01111000000001000000000000000001 +10111001110000000000100000000000 +00110100000000100000000000000110 +00110100000000110000000000000001 +00111000100001000111010111111100 +11111011111111111110111101111011 +00101001011000010000000001010000 +01011001011000010000000100010000 +00101001011000010000000001010100 +01011001011000010000000100010100 +00101001011000100000000000010100 +00110100000000010000000000000100 +01000100010000010000000000000100 +00101001011000010000000010010000 +00110100001000010000000000000001 +01011001011000010000000010010000 +00101001011001000000000010001000 +00101001011000110000000010001100 +00010100100000010000000000011111 +10011000011000010001100000000000 +11001000011000010001000000000000 +10011000100000010010000000000000 +11110100010000110001100000000000 +11001000100000010000100000000000 +11001000001000110000100000000000 +01001000001000000000000000000101 +01011100001000000000000000000111 +00110100000000010000000111110100 +01010100010000010000000000000010 +11100000000000000000000000000100 +00101001011000010000000010010100 +00110100001000010000000000000001 +01011001011000010000000010010100 +00101001011001010000000001000100 +00101001011001000000000001000000 +11001010000001010001100000000000 +11110100011100000000100000000000 +11001010010001000001000000000000 +11001000010000010001000000000000 +01001000000000100000000000000111 +00110100000000010000000000000001 +01001000010000000000000000010011 +01011100010000000000000000010001 +00110100000000100000001111101000 +01010100011000100000000000010000 +11100000000000000000000000001110 +11001000000100000000100000000000 +01111100001000100000000000000000 +11001000000100100001100000000000 +11001000011000100001100000000000 +11001000001001010001000000000000 +11110100010000010000100000000000 +11001000011001000001100000000000 +11001000011000010001100000000000 +00110100000000010000000000000001 +01001000011000000000000000000101 +01011100011000000000000000000011 +00110100000000110000001111101000 +01010100010000110000000000000010 +00110100000000010000000000000000 +00100000001000010000000011111111 +01000100001000000000000000000100 +00101001011000010000000010011000 +00110100001000010000000000000001 +01011001011000010000000010011000 +01111000000000010000000000000001 +00111000001000011100001010101000 +00101000001000010000000000000000 +00110100000000100000000000000000 +11111000000000000000111110111001 +00101001101000010000000000000000 +00101000001000110000000000111000 +01000100011000000000000000000100 +10111001011000000000100000000000 +00110100000000100000000000000001 +11011000011000000000000000000000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000101000 +00101011100011000000000000100100 +00101011100011010000000000100000 +00101011100011100000000000011100 +00101011100011110000000000011000 +00101011100100000000000000010100 +00101011100100010000000000010000 +00101011100100100000000000001100 +00101011100100110000000000001000 +00110111100111000000000000111000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00101000001000110000000000111000 +10111000010000000101100000000000 +00101000011000110000000000000000 +11011000011000000000000000000000 +00101001011000100000000000001000 +00101101011000010000000000001100 +01111000000000110000000000000001 +00111100010000100000000000010000 +00111000011000111000111011100000 +10111000010000010000100000000000 +00101000011000100000000000000000 +11111000000000000100001101101000 +00110100001000010000001111101000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111011100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +00101000001011010000000000001100 +10111000001000000101100000000000 +00110111100011000000000000011000 +01000101101000000000000000001000 +10111001100000000001000000000000 +11111011111111111111111111100001 +00110100001000110000001111011110 +00110100000000100000000000000110 +10111001011000000000100000000000 +11111011111111111110111101100010 +11100000000000000000000000110010 +10111001100000000001000000000000 +11111011111111111111111111011010 +10111000001000000111000000000000 +00110100000000100000000000000110 +10111001011000000000100000000000 +11111011111111111110111111011011 +01000100001011010000000000100110 +00101011100011100000000000011100 +00101011100011010000000000011000 +00101001011000010000000000111000 +10111001100000000001000000000000 +00101000001000110000000000000000 +10111001011000000000100000000000 +11011000011000000000000000000000 +00101011100000100000000000011000 +00101011100000010000000000011100 +01011100010011010000000000000010 +01000100001011101111111111111000 +00101001011000010000000000111000 +00110111100011000000000000011000 +10111001100000000001000000000000 +00101000001000110000000000000000 +10111001011000000000100000000000 +11011000011000000000000000000000 +10111001100000000001000000000000 +10111001011000000000100000000000 +11111000000000000000011010001100 +10111000001000000001000000000000 +00110100000000110000000000000001 +10111001011000000000100000000000 +11111000000000000000001111001001 +10111001100000000001000000000000 +10111001011000000000100000000000 +11111011111111111111111110111010 +00110100001000111111111111110110 +00110100000000100000000000000110 +10111001011000000000100000000000 +11111011111111111110111100111011 +10111001011000000000100000000000 +10111001100000000001000000000000 +11111011111111111111111110110011 +00110100001000011111111111110110 +01011001011000010000000000001000 +11100000000000000000000000000110 +00110101110000101111111111110110 +11101100010000010000100000000000 +11001000000000010000100000000000 +10100000010000010001000000000000 +01011001011000100000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000100100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00110100000000100000000000000001 +10111000001000000101100000000000 +11111011111111111110111110100001 +00110100000011000000000000000000 +01000100001000000000000000010100 +10111001011000000000100000000000 +00110100000000100000000000000001 +11111011111111111110111100111110 +00101001011000110000001111100100 +00110100000000100000000000000001 +00110100000000010000000000000000 +01011100011000100000000000000010 +00101001011000010000001111100000 +00001101011000010000000010010010 +10111001011000000000100000000000 +11111000000000000000011100111001 +10111000001000000110000000000000 +01000100001000000000000000000111 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111011001010100 +11111011111111111110111010101110 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00110100000000100000000000000011 +10111000001000000101100000000000 +11111011111111111110111101111111 +00110100000011000000000000000000 +01000100001000000000000000010100 +10111001011000000000100000000000 +00110100000000100000000000000011 +11111011111111111110111100011100 +00101001011000110000001111100100 +00110100000000100000000000000001 +00110100000000010000000000000000 +01011100011000100000000000000010 +00101001011000010000001111100000 +00001101011000010000000010010010 +10111001011000000000100000000000 +11111000000000000000011010110010 +10111000001000000110000000000000 +01000100001000000000000000000111 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111011001101100 +11111011111111111110111010001100 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00110100000000100000000000000000 +10111000001000000101100000000000 +11111011111111111110111101011101 +00110100000011000000000000000000 +01000100001000000000000000011001 +00110100000000100000000000000000 +10111001011000000000100000000000 +11111011111111111110111011111010 +10111001011000000000100000000000 +11111000000000000000011100101000 +10111000001000000110000000000000 +00101001011001000000000100010000 +00101001011000010000000100011100 +00101001011000110000000100010100 +00101001011000100000000100011000 +01011001011000010000000011000100 +01011001011001000000000010111000 +01011001011000110000000010111100 +01011001011000100000000011000000 +00110100000000011111111111111111 +01011101100000010000000000001000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111011010001000 +11111011111111111110111001100111 +11100000000000000000000000000010 +00110100000011000000000000000000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +00110100000011000000000000000000 +10111000001000000101100000000000 +10111000010000000111000000000000 +00110100001011110000001110100000 +00110100001100000000001111000000 +11100000000000000000000000010010 +00001001100011010000000001110000 +10111010000000000000100000000000 +00110100000000110000000000001010 +00110101101000100000000100101000 +10110101011000100001000000000000 +11111000000000000100001100100111 +01011100001000000000000000001010 +00110101101000010000000101101000 +10111001111000000001000000000000 +10110101011000010000100000000000 +11111000000000000000001001010011 +10110101011011010001000000000000 +10111001110000000000100000000000 +00110100010000100000000100110100 +11111000000000000000011000010000 +11100000000000000000000000011111 +00110101100011000000000000000001 +00101101011000110000000100100000 +01001000011011001111111111101110 +00110100000000010000000000000100 +01010100011000010000000000000011 +00110100011000110000000000000001 +00001101011000110000000100100000 +00101101011011010000000100100000 +00110100000000110000000000001010 +00110101011000100000001111000000 +00110101101011011111111111111111 +00001001101011000000000001110000 +00110101100000010000000100101000 +10110101011000010000100000000000 +11111000000000000100001100101111 +00110101100000010000000101101000 +10111001111000000001000000000000 +10110101011000010000100000000000 +11111000000000000000001000111011 +10110101011011000001000000000000 +10111001110000000000100000000000 +00110100010000100000000100110100 +11111000000000000000010111111000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111011010100000 +10111001101000000010100000000000 +11111011111111111110111000100011 +10111001011000000000100000000000 +11111000000000000000010000000010 +01011001011000010000000000000100 +00110100000000100000000000000010 +10111001011000000000100000000000 +11111011111111111110111010011101 +01111000000000010000000000000001 +00111000001000011001111100000100 +00101000001000100000000000100100 +00110100000000010000000000000000 +01000100010000000000000000000011 +10111001011000000000100000000000 +11011000010000000000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00101000001000100000000000000000 +01111000000001010000000000000001 +00111000101001011000111011010100 +00101000010000110000000000010100 +00101000010000100000000000001100 +00101000010001000000000000000100 +01011000011001000000000000000000 +00101000010000100000000000001000 +00110100000001001111111111111111 +01011000011000100000000000000100 +00101000001000110000000000000000 +00101000011000100000000000010100 +00101000011000110000000000001100 +00001100010001000000000000001010 +00101000101001000000000000000000 +01011000010001000000000000001100 +00101000011001000000000000000100 +01011000010001000000000000010000 +00101000011000110000000000001000 +01011000010000110000000000010100 +00101000001000100000000000000000 +00101000010000110000000000010100 +00101000010000100000000000001100 +00101000010001100000000000010000 +00101000010001010000000000010100 +00101000010001000000000000011000 +01011000011001100000000000011000 +01011000011001010000000000011100 +01011000011001000000000000100000 +01000000010000100000000000011100 +00110000011000100000000000100100 +00101000001000010000000000000000 +00101000001000100000000000010100 +00101000001000010000000000001100 +01000000001000010000000000011101 +00110000010000010000000000100101 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +10111000010000001000000000000000 +00101000001000100000000000110000 +10111000001000000101100000000000 +10111000011000000111100000000000 +00101000010011010000000000001000 +00101000001000100000000000110100 +00101000001011000000001101011000 +00101000010001000000000000000000 +11011000100000000000000000000000 +01001000000000010000000001100110 +00110101011011100000000000110000 +10111001110000000000100000000000 +11111011111111111111111111000111 +00101001011000010000000000110000 +00101000001001000000000000001100 +01000001011000010000000001011100 +00110000100000010000000000000100 +01000001011000010000000001011101 +00110000100000010000000000000101 +01000001011000010000000001011110 +00110000100000010000000000000110 +00110100000000011111111111111111 +00110000100000010000000000000111 +00110100000000011111111111111110 +00110000100000010000000000001000 +01000001011000010000000001011111 +00110000100000010000000000001001 +01000001011000010000000001100000 +00110000100000010000000000001010 +01000001011000010000000001100001 +00110000100000010000000000001011 +10111001110000000000100000000000 +11111011111111111111111110110011 +00101001011000010000000000110000 +00110100000000110000000000001000 +00101000001001000000000000001100 +10111001100000000000100000000000 +00110100100000100000000000000100 +11111000000000000100001010110110 +00101001011000010000000000110000 +00110101011000100000010000011000 +00101000001000010000000000000000 +00110001100000000000000000001010 +11001000010000010000100000000000 +00010100001000010000000000000011 +00001000001000010100111000101011 +00001101100000010000000000001000 +01000001101000010000000000011010 +00110001100000010000000000001011 +00110100000000010000000000010100 +00110001100000010000000000001100 +00101001101000010000000000011100 +00110001100000010000000000001101 +00110100000000010000000000000010 +00110001100000010000000000001110 +10111001011000000000100000000000 +11111011111111111110110111101011 +01111000000000010000000000000001 +00111000001000011001111100000100 +00101000001001000000000000000000 +01000100100000000000000000001111 +10111001011000000000100000000000 +10111010000000000001000000000000 +10111001111000000001100000000000 +11011000100000000000000000000000 +01000100001000000000000000001010 +01111000000001000000000000000001 +01111000000001010000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000010 +00110100000000110000000000000001 +00111000100001000111011011000000 +00111000101001011001000111100100 +11111011111111111110110110010110 +11100000000000000000000000100101 +00101001011000010000000000110000 +01111000000001000000000000000001 +00110100000000100000000000000011 +00101000001001010000000000001100 +00110100000000110000000000000001 +10111001011000000000100000000000 +00101000101001010000000000010000 +00111000100001000111011011011100 +11111011111111111110110110001100 +00101001011000010000000000110000 +01111000000001000000000000000001 +00110100000000100000000000000011 +00101000001001010000000000001100 +00110100000000110000000000000001 +10111001011000000000100000000000 +00101000101001010000000000010100 +00111000100001000111011011110000 +11111011111111111110110110000011 +00101001011000100000000001001100 +10111001011000000000100000000000 +11111000000000000000010100000111 +00101001011000100000000000100100 +00110100000000010000000000000001 +01000100010000010000000000000011 +00110100000000010000000000000100 +11100000000000000000000000000010 +00110100000000010000000000000110 +01011001011000010000000000000100 +01111000000000010000000000000001 +00111000001000011011000011011000 +00101000001000100000000000000000 +00110100000000010000000000000100 +01011100010000010000000000000110 +00110100000000010000000001101011 +01011001011000010000000000000100 +11100000000000000000000000000011 +00110100000000010000001111101000 +01011001011000010000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00110100000000100000000000000100 +10111000001000000101100000000000 +11111011111111111110111000111101 +01000100001000000000000000000100 +00110100000000010000000000000001 +01011001011000010000000000000100 +11100000000000000000000000000101 +10111001011000000000100000000000 +00110100000000100000000000000100 +11111011111111111110111001011000 +01011001011000010000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110100000000100000001111101000 +01011000001000100000000000001000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000110100000000000 +00110100000000100000000000000100 +10111000001000000101100000000000 +10111000011000000110000000000000 +11111011111111111110110111000100 +01111000000000010000000000000001 +00111000001000011001111100000100 +00101000001001000000000000001100 +01000100100000000000000000000110 +10111001011000000000100000000000 +10111001101000000001000000000000 +10111001100000000001100000000000 +11011000100000000000000000000000 +01011100001000000000000000010010 +01000001011000010000001110100001 +01000100001000000000000000001000 +00110100000000100000000000001011 +01011100001000100000000000001011 +10111001011000000000100000000000 +10111001101000000001000000000000 +10111001100000000001100000000000 +11111011111111111111111011010101 +11100000000000000000000000000101 +10111001011000000000100000000000 +10111001101000000001000000000000 +10111001100000000001100000000000 +11111000000000000000001000010001 +01011100001000000000000000000100 +10111001011000000000100000000000 +11111000000000000000000101100110 +01000100001000000000000000000011 +00110100000000010000000000000010 +01011001011000010000000000000100 +10111001011000000000100000000000 +00110100000000100000000000000010 +11111011111111111110111000100101 +01011001011000010000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000001001000000000000000000 +00110100000000110000000000000110 +01011100100000110000000000000011 +00110100001000100000000100000000 +11111000000000000000010111101010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000011000000110000000000000 +00101000001000110000000000000000 +10111000010000000110100000000000 +00110100000000100000000000000101 +10111000001000000101100000000000 +01011100011000100000000000000111 +11111011111111111110110111100100 +01000100001000000000000000001000 +00110100000000010000000000000110 +01011001011000010000000000000100 +00110100000011000000000000000000 +11100000000000000000000001000100 +11111011111111111111111000110111 +10111001011000000000100000000000 +11111011111111111111111001010111 +10111001011000000000100000000000 +00110100000000100000000000000000 +11111011111111111110110101111011 +01111000000000010000000000000001 +00111000001000011001111100000100 +00101000001001100000000000010000 +01000001011001010000001110100001 +01000100110000000000000000001000 +10111000101000000010000000000000 +10111001011000000000100000000000 +10111001101000000001000000000000 +10111001100000000001100000000000 +11011000110000000000000000000000 +10111000001000000010100000000000 +01001000000000010000000000101011 +00110100000000010000000000001011 +01010100101000010000000000001110 +01111000000000010000000000000001 +00111100101000100000000000000010 +00111000001000011001000111110100 +10110100001000100000100000000000 +00101000001001000000000000000000 +01000100100000000000000000001000 +10111001100000000001100000000000 +10111001011000000000100000000000 +10111001101000000001000000000000 +11011000100000000000000000000000 +10111000001000000110000000000000 +01011100001000000000000000001101 +11100000000000000000000000010001 +01111100101000010000000000001111 +01111101100011000000000000000000 +10100000001011000110000000000000 +01000101100000000000000000001101 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111011100001000 +11111011111111111110110011010110 +11100000000000000000000000000110 +00110100000000010000000000000001 +01000101100000010000000000001111 +00110100000000011111111111111111 +01011101100000010000000000001110 +11100000000000000000000000001100 +00101001011000010000000000110000 +00101000001000010000000000001100 +00101000001000100000000000010000 +00110100000000010000000011111111 +01000100010000010000000000000101 +00101001011000100000000000100100 +00110100000000010000000000000010 +00110100000011000000000000000000 +01011100010000010000000000000100 +00110100000000010000000000000100 +01011001011000010000000000000100 +00110100000011000000000000000000 +10111001011000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00110100000001000000000000000000 +11111011111111111110110111110111 +01011001011000010000000000001000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01000000001001000000001110100001 +10111000001000000101100000000000 +01000100100000000000000000000101 +00110100000001010000000000001011 +01011100100001010000000000000101 +11111011111111111111111001010000 +11100000000000000000000000000010 +11111000000000000000000110001111 +01011100001000000000000000000011 +10111001011000000000100000000000 +11111000000000000000000011100100 +00110100000000010000001111101000 +01011001011000010000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01000000001001000000001110100001 +10111000001000000101100000000000 +01000100100000000000000000000111 +00110100000001010000000000001000 +01000100100001010000000000000111 +00110100000001010000000000001011 +01011100100001010000000000000111 +11111011111111111111111000111001 +11100000000000000000000000000100 +11111000000000000000000011111101 +11100000000000000000000000000010 +11111000000000000000000100110100 +01011100001000000000000000000100 +10111001011000000000100000000000 +11111000000000000000000011001011 +01000100001000000000000000000011 +00110100000000010000000000000010 +01011001011000010000000000000100 +00110100000000010000001111101000 +01011001011000010000000000001000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111010100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000000100000000000 +00110111100000100000000000010000 +11111000000000000000010010000010 +00101001011000010000001101011000 +00110111100000100000000000100000 +00110100000000110000000000001000 +11111000000000000100000101010110 +01011100001000000000000000001011 +00101101011000100000001110000000 +00101101011000010000001111001010 +01011100010000010000000000001000 +00101001011000010000001101011000 +00101100001000100000000000001000 +00101111100000010000000000101000 +01011100010000010000000000000100 +01000001011000010000000000100000 +00100000001000010000000000000001 +01011100001000000000000000001010 +01000001011001010000000000100000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111011100011100 +11111011111111111110110001101000 +00110100000011000000000000000000 +11100000000000000000000000100010 +00101011100000010000000000010000 +00110101011000100000001110110000 +01011001011000010000000011001000 +00101011100000010000000000010100 +01011001011000010000000011001100 +00101011100000010000000000011000 +01011001011000010000000011010000 +00101011100000010000000000011100 +01011001011000010000000011010100 +00110101011000010000000011001000 +11111000000000000000010111000100 +10111001011000000000100000000000 +00110100000000100000000000000100 +11111011111111111110110011011000 +01111000000000010000000000000001 +00111000001000011001111100000100 +00101000001000100000000000011000 +01000100010000000000000000000110 +10111001011000000000100000000000 +11011000010000000000000000000000 +10111000001000000110000000000000 +01000100001000000000000000000100 +11100000000000000000000000001011 +10111001011000000000100000000000 +11111000000000000000011111110101 +00101001011000010000001101011000 +00010001011000100000001111001100 +00110100000011000000000000000000 +00010000001000110000000000001010 +01000100011000100000000000000100 +00110000001000100000000000001010 +10111001011000000000100000000000 +11111011111111111110110010001001 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000101100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000001100 +10111000010000000111000000000000 +10111000011000000110100000000000 +01000100001000000000000000010001 +00110100000000100000000000000000 +00110100000000110000000000010000 +00110101011000010000000010011000 +11111000000000000100000110101011 +10111001011000000000100000000000 +11111000000000000000011101001100 +01111000000000010000000000000001 +00111000001000011001111100000100 +00101000001001000000000000010100 +01000100100000000000000000000111 +10111001011000000000100000000000 +10111001110000000001000000000000 +10111001101000000001100000000000 +11011000100000000000000000000000 +10111000001000000110000000000000 +01011100001000000000000000011011 +10111001011000000000100000000000 +11111011111111111111110110011101 +01000001011001010000001110100001 +00110100000000010000000000001011 +01010100101000010000000000001100 +01111000000000010000000000000001 +00111100101000100000000000000010 +00111000001000011001001000100100 +10110100001000100000100000000000 +00101000001001000000000000000000 +01000100100000000000000000000110 +10111001011000000000100000000000 +10111001110000000001000000000000 +10111001101000000001100000000000 +11011000100000000000000000000000 +11100000000000000000000000001000 +01000101101000000000000000000111 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111011100001000 +11111011111111111110110000001101 +10111001011000000000100000000000 +11111000000000000000000001000110 +10111000001000000110000000000000 +01111101100000010000000000000001 +00101001011000100000000000000100 +11001000000000010000100000000000 +10100001100000010110000000000000 +00101001011000010000000000000000 +01000100010000010000000000000100 +10111001011000000000100000000000 +11111000000000000000011100100000 +11100000000000000000000000000110 +10111001011000000000100000000000 +00110100000000100000000000000010 +00110100000000110000000000000000 +11111011111111111110110100010100 +01011001011000010000000000001000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000110000000000110000 +11111000000000000100000011101101 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00101000001000100000000000101000 +00110100000000110000000000000001 +01000100010000110000000000001010 +00110100000000110000000000000010 +01000100010000110000000000000011 +01011100010000000000000000001001 +11100000000000000000000000000110 +00110100000000100000000000010010 +01011000001000100000000010000100 +00110100000000100000000000001110 +01011000001000100000000010001000 +11100000000000000000000000000011 +01011000001000000000000010000100 +01011000001000000000000010001000 +00101000001001000000000010000100 +00101000001001010000000000111100 +00110100000000100000000000000000 +10110100101001000010100000000000 +00100000101000110000000000000011 +01000100011000000000000000000011 +00110100000000100000000000000100 +11001000010000110001000000000000 +10110100101000100010100000000000 +00101000001001100000000001000000 +00101000001000100000000010001000 +01011000001001010000000001001100 +00110100000000110000000000000000 +10110100110000100011000000000000 +00100000110001110000000000000011 +01000100111000000000000000000011 +00110100000000110000000000000100 +11001000011001110001100000000000 +10110100110000110001100000000000 +11001000101001000010000000000000 +11001000011000100001000000000000 +01011000001000110000000001010000 +01011000001001000000000001000100 +01011000001000100000000001001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000100000000000000001 +00111000010000101001111100000100 +00101000010000100000000000100000 +10111000001000000101100000000000 +01000100010000000000000000000110 +11011000010000000000000000000000 +10111000001000000001000000000000 +00110100000000010000000000000001 +01000100010000010000000000011100 +01001000000000100000000000011100 +10111001011000000000100000000000 +00110100000000100000000000000010 +11111011111111111110110010010100 +01011100001000000000000000000110 +00110100000000100000000000000100 +10111001011000000000100000000000 +11111011111111111110110010010000 +00110100000000100000000000000000 +01000100001000100000000000010011 +00101001011000010000000000110000 +00001101011000000000000100100000 +00101000001000010000000000001100 +00101000001000100000000000010000 +00110100000000010000000011111111 +01000100010000010000000000000111 +00101001011000100000000000100100 +00110100000000010000000000000010 +01000100010000010000000000000100 +00110100000000010000000000000110 +01011001011000010000000000000100 +11100000000000000000000000000110 +00110100000000010000000000000100 +01011001011000010000000000000100 +00110100000000100000000000000010 +10111001011000000000100000000000 +11111011111111111110110000011111 +00110100000000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000000100000000000 +01000001011000100000000000100000 +00100000010000100000000000000001 +01000100010000000000000000101101 +00101001011000100000000100001100 +00101001011001010000000100000000 +00101001011001000000000100000100 +00101001011000110000000100001000 +01011001011000100000000010110100 +01011001011001010000000010101000 +00110111100000100000000000001100 +01011001011001000000000010101100 +01011001011000110000000010110000 +11111000000000000000001101001011 +01000001011000100000001110100111 +01000001011000010000000000100000 +00100000010000100000000000000010 +01000100010000000000000000001110 +00111000001000010000000000000010 +00110001011000010000000000100000 +00101101011000010000001111001010 +00101001011001000000001110110000 +00101001011000110000001110110100 +00001101011000010000001101111100 +00101001011000100000001110111000 +00101001011000010000001110111100 +01011001011001000000000010011000 +01011001011000110000000010011100 +01011001011000100000000010100000 +01011001011000010000000010100100 +11100000000000000000000000010010 +00100000001000010000000011111101 +00110001011000010000000000100000 +00101011100000010000000000001100 +00110101011000100000001110110000 +01011001011000010000000010011000 +00101011100000010000000000010000 +01011001011000010000000010011100 +00101011100000010000000000010100 +01011001011000010000000010100000 +00101011100000010000000000011000 +01011001011000010000000010100100 +00110101011000010000000010011000 +11111000000000000000010011010010 +10111001011000000000100000000000 +01011001011000000000000011111000 +01011001011000000000000011111100 +11111000000000000000011011111011 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000000100000000000 +01000001011000100000000000100000 +00100000010000110000000000000001 +01011100011000000000000000000100 +01111000000000010000000000000001 +00111000001000010111011110111000 +11100000000000000000000000000101 +00100000010000100000000000000010 +01011100010000000000000000000111 +01111000000000010000000000000001 +00111000001000010111011111110100 +01111000000000100000000000000001 +00111000010000101001001001010100 +11111000000000000010000010010001 +11100000000000000000000000100111 +00101101011001000000001101111100 +00101101011000110000001111001010 +01000100100000110000000000000111 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000010000101001001001010100 +00111000001000010111100000101100 +11111000000000000010000010001000 +11100000000000000000000000011110 +00110111100011010000000000010100 +10111001101000000001000000000000 +11111000000000000000001100111001 +01000001011000010000000000100000 +00110101011011000000000010011000 +10111001101000000001000000000000 +00100000001000010000000011111101 +00110001011000010000000000100000 +10111001100000000000100000000000 +11111000000000000000010010100001 +10111001100000000000100000000000 +00110101011000100000001110110000 +11111000000000000000010010011110 +00101001011000010000001110111000 +01011001011000010000000011111000 +00101001011000010000001110111100 +01011001011000010000000011111100 +01111000000000010000000000000001 +00111000001000011001111100000100 +00101000001000110000000000101000 +01000100011000000000000000000111 +10111001100000000001000000000000 +10111001011000000000100000000000 +11011000011000000000000000000000 +00110100000000100000000000000001 +01000100001000100000000000000100 +01001000000000010000000000000100 +10111001011000000000100000000000 +11111000000000000000011010111011 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100111010000000000001000 +10111000010000000110000000000000 +00101000001000100000000001001100 +10111000011000000111000000000000 +00101000001000110000000010000100 +01000000010011010000000000000000 +00101000001000100000000000110100 +10110101100000110001100000000000 +00100001101011010000000000001111 +00101000010001010000000000001100 +00101000001000100000000001000100 +10111001101000000010000000000000 +10111000001000000101100000000000 +11011000101000000000000000000000 +10111000001000000001000000000000 +00110100000000111111111111111110 +00110100000000010000000000000000 +01000100010000110000000000101111 +01111000000010010000000000000001 +00111001001010011001011101101000 +00001001101000010000000000001100 +01001100010011000000000000001100 +10110101001000010100100000000000 +00101001001001010000000000000000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000001 +00111000100001000111100001101100 +10111001101000000011000000000000 +11111011111111111110101011111000 +00110100000000011111111111111111 +11100000000000000000000000100000 +00101001011010000000000100011100 +00101001011010100000000100011000 +10110101001000010100100000000000 +00000001000001110000000000010000 +00100001000010001111111111111111 +00001001000010000000001111101000 +00101001001000010000000000000000 +00111101010010100000000000010000 +00101001011001100000000100010100 +01111000000001000000000000000001 +00000001000010000000000000010000 +01011011100000010000000000000100 +00110100000000100000000000000101 +10111001011000000000100000000000 +00110100000000110000000000000001 +00111000100001000111100010001100 +10111001100000000010100000000000 +10111001010001110011100000000000 +11111011111111111110101011100011 +00110100000000010000000000000001 +01011101110000010000000000000101 +00010001011000100000000100010000 +00110100000000010000000010000000 +00100000010000100000000011000000 +01000100010000010000000000000110 +00101001011000010000010000010000 +00110100001000010000000000000001 +01011001011000010000010000010000 +00110100000000010000000000000000 +11100000000000000000000000000010 +00110100000000010000000000000001 +00101011100111010000000000001000 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000110000000000001000 +11111000000000000011111110101000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +01111000000011100000000000000001 +00111001110011101001001001110100 +01111000000001000000000000000001 +10111000010000000110100000000000 +10111000011000000110000000000000 +00110100000000100000000000000011 +00110100000000110000000000000010 +00111000100001000111100111101000 +10111001110000000010100000000000 +10111000001000000111100000000000 +00110101101100010000000000101001 +11111011111111111110101010110100 +00110101100100000000000000101001 +10111010001000000000100000000000 +10111010000000000001000000000000 +11111011111111111111111111100001 +01011100001000000000000000110011 +00101101100000010000000000110010 +00101101101010110000000000110010 +11001001011000010101100000000000 +00110101011000100000000000000001 +00110100000000010000000000000010 +01010100010000010000000001000011 +00101001111000100000000000110000 +00110100000000110000000000000001 +00110101101000010000000001100000 +00101000010000100000000000010100 +01011101011000110000000000001011 +11111011111111111111111111010100 +01011100001000000000000000111100 +01111000000001000000000000000001 +10111001111000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111100010110100 +10111001110000000010100000000000 +00110100000001100000000010010000 +11100000000000000000000000001110 +00110100000000111111111111111111 +00110101100011000000000001100000 +01011101011000110000000000001110 +10111001100000000000100000000000 +11111011111111111111111111000110 +01011100001000000000000000101110 +01111000000001000000000000000001 +10111001111000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111100010110100 +10111001110000000010100000000000 +00110100000001100000000010011001 +11111011111111111110101010001100 +00110100000010110000000000000000 +11100000000000000000000000100100 +10111001100000000001000000000000 +11111011111111111111111110111001 +10111000001000000101100000000000 +01011100001000000000000000100000 +01111000000001000000000000000001 +10111001111000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111100011000100 +10111001110000000010100000000000 +00110100000001100000000010100001 +11111011111111111110101001111110 +11100000000000000000000000010111 +01000001101010110000000000011010 +01000001100000010000000000011010 +01011101011000010000000000001110 +00101001101010110000000000011100 +00101001100000010000000000011100 +01011101011000010000000000001011 +00101001101010110000000000100000 +00101001100000010000000000100000 +01011101011000010000000000001000 +00101001101000100000000000100100 +00101001100000010000000000100100 +00110100000010110000000000000000 +01011100010000010000000000001010 +01000001101010110000000000101000 +01000001100000010000000000101000 +01000101011000010000000000000011 +11001001011000010101100000000000 +11100000000000000000000000000101 +10111010001000000000100000000000 +10111010000000000001000000000000 +11111011111111111111111110011001 +10111000001000000101100000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000100000000000000000 +00110100000000110000000000010000 +11111000000000000011111111010010 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000110100000000000 +00101000001000010000000000110000 +00101000001011000000000000010100 +00101000001010110000000000001100 +00101000001000010000000000010000 +00001100001000000000000000000000 +00110100001000010000000000001000 +11111011111111111111111111101100 +00101001101000010000000000110000 +00101000001000010000000000010000 +00110100001000010000000000011000 +11111011111111111111111111101000 +10111001100000000000100000000000 +00110100000000100000000000000000 +00110100000000110000000000101000 +11111000000000000011111110111010 +00101001011000010000000000000100 +01011001100000010000000000000000 +00101001011000010000000000001000 +00001101100000000000000000001000 +01011001100000010000000000000100 +00101001011000010000000000000100 +01011001100000010000000000010000 +00101001011000010000000000001000 +01011001100000010000000000010100 +00101001011000100000000000010100 +00101001011000010000000000011000 +00101001011000110000000000010000 +01011001100000100000000000011100 +01011001100000010000000000100000 +01011001100000110000000000011000 +01000001011000010000000000011100 +00110100000000100000000000000001 +00110001100000010000000000100100 +01000001011000010000000000011101 +00110001100000010000000000100101 +00101001101000010000000000110000 +00101000001000010000000000011000 +01011000001000100000000000011000 +00110100000000101111111110100000 +00110000001000100000000000011100 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111101110100 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00101100001000100000000100100000 +10111000001000000101100000000000 +00110100000011010000000000000000 +00110100000011000000000000000001 +01011100010000000000000000010100 +00101000001000110000000000000000 +10111000010000000110100000000000 +00110100000000100000000000000110 +01011100011000100000000000010000 +11111011111111111111111110111100 +00101001011011000000000000000000 +11100000000000000000000100010011 +00001001100000100000000001110000 +00001001101000110000000001110000 +10111001011000000000100000000000 +00110100010000100000000100101000 +00110100011000110000000100101000 +10110101011000100001000000000000 +10110101011000110001100000000000 +11111011111111111111111100111101 +01001000000000010000000000000010 +11100000000000000000000000000010 +10111001100000000110100000000000 +00110101100011000000000000000001 +00101101011001100000000100100000 +01001000110011001111111111110011 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111100011011100 +10111001101000000010100000000000 +11111011111111111110100111111000 +00011101011000010000000100100010 +01000100001011010000000000100010 +00001101011011010000000100100010 +00101001011011000000000000110000 +00110100000011110000000000000000 +00110100000011100000000000000001 +11100000000000000000000000010101 +00101001100000100000000000000000 +00001001110000010000010000011000 +10110100010000010000100000000000 +00101100001000110000000100100000 +01000100011000000000000000001111 +00001001111001000000010000011000 +00011100001000110000000100100010 +10110100010001000010000000000000 +00011100100000100000000100100010 +00001000011000110000000001110000 +00001000010000100000000001110000 +00110100011000110000000100101000 +10110100001000110001100000000000 +00110100010000100000000100101000 +10110100100000100001000000000000 +11111011111111111111111100011001 +01001000000000010000000000000010 +11100000000000000000000000000010 +10111001110000000111100000000000 +00110101110011100000000000000001 +00101001100000010000000000001100 +00101100001000010000000000001100 +01001000001011101111111111101010 +00101001100000010000000000011100 +01000100001011110000000000000100 +00110100000000010000000000000001 +01011001100011110000000000011100 +01011001100000010000000000100000 +00101001011000100000000000100100 +00110100000000010000000000000010 +01000100010000010000000001101100 +00101101011000010000000100100000 +01011100001000000000000000000100 +00101001011000010000000000000000 +00110100000011000000000000000100 +01000100001011000000000011010011 +00101001011000010000000000110000 +00001001101011000000000001110000 +00101000001000010000000000001100 +01000000001001000000000000001001 +01000000001000110000000000001010 +01000000001000100000000000001011 +01000000001010010000000000000100 +01000000001010000000000000000101 +01000000001001110000000000000110 +01000000001001100000000000000111 +01000000001001010000000000001000 +00110011100010010000000001001001 +00110011100010000000000001001010 +00110011100001110000000001001011 +00110011100001100000000001001100 +00110011100001010000000001001101 +00110011100001000000000001001110 +00110011100000110000000001001111 +00110011100000100000000001010000 +00101000001000100000000000011000 +00101000001001000000000000010000 +00101000001000110000000000010100 +01011011100000100000000001000100 +01000000001000100000000000011100 +01011011100000110000000001000000 +00110101100000110000000100101000 +00110011100000100000000000111010 +01000000001000100000000000011101 +10110101011000110001100000000000 +01011011100001000000000000111100 +00110011100000100000000001001000 +00101000001000100000000000000100 +00001111100000000000000001010010 +01011011100000100000000010000000 +00101000001000010000000000001000 +00110111100000100000000000100000 +01011011100000010000000010000100 +10111001011000000000100000000000 +11111011111111111111111011011110 +00101001011000100000000000100100 +00110100000001000000000000000001 +01000100010001000000000000101010 +00101001011000100000000000110000 +01111000000001010000000000000001 +00110100000001100000000001111111 +00101000010000110000000000001100 +00111000101001011001001010000100 +00101000011001110000000000010000 +01001000111001100000000000000100 +01001000000000010000000000100011 +01011100001000000000000000011001 +11100000000000000000000000000110 +01001000000000010000000000100000 +01000100001000000000000000000100 +00101100011000010000000000001100 +01011100001001000000000000001010 +11100000000000000000000000101110 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111100011111100 +11111011111111111110100110001110 +00110100000011000000000000000010 +11100000000000000000000010010010 +00101001011000110000001111011000 +00101000010000010000000000011100 +01000100011000010000000000100011 +10110101011011000001000000000000 +00110111100000010000000001001001 +00110100010000100000000101010001 +01011011100001010000000000011100 +11111011111111111111111010110101 +00101011100001010000000000011100 +01011100001000000000000000010000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111100100001000 +11111011111111111110100101111100 +00110100000011000000000000000111 +11100000000000000000000010000000 +01001100001000000000000000000111 +10111001011000000000100000000000 +11111011111111111111111100100100 +01111000000001100000000000000001 +00110100000011000000000000000110 +00111000110001101000000011100000 +11100000000000000000000000000100 +01111000000001100000000000000001 +00110100000011000000000000000101 +00111000110001100111100011010100 +01111000000001000000000000000001 +01111000000001010000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111100100011000 +00111000101001011001001010000100 +11111011111111111110100101101000 +11100000000000000000000001101101 +00001001101000110000000001110000 +00101001011000100000000000110000 +10110101011000110001100000000000 +00101100011001000000000101011010 +00101000010000010000000000010100 +00101000010011000000000000011000 +00101000010000100000000000010000 +00110100100001000000000000000001 +00001100010001000000000000000000 +00110100011000100000000110001000 +00101000010001000000000000000100 +00101000011001010000000110001000 +01011000001001000000000000000100 +01011000001001010000000000000000 +00101100010000100000000000001000 +00001100001000100000000000001000 +00110100011000100000000101001000 +01000000010011100000000000001001 +01000000010001100000000000001110 +01000000010001010000000000001111 +01000000010001000000000000010000 +01000000010010100000000000001010 +01000000010010010000000000001011 +01000000010010000000000000001100 +01000000010001110000000000001101 +00110000001011100000000000010000 +00110000001001000000000000010111 +00110000001010100000000000010001 +00110000001010010000000000010010 +00110000001010000000000000010011 +00110000001001110000000000010100 +00110000001001100000000000010101 +00110000001001010000000000010110 +00110100011001000000000101000000 +00101000100001010000000000001000 +00101000100001100000000000000100 +00101000100001000000000000001100 +00110100011011100000000100111000 +01011000001001010000000000011100 +01011000001001100000000000011000 +01011000001001000000000000100000 +01000001110001000000000000001010 +00110000001001000000000000100100 +01000000010000100000000000001000 +00110000001000100000000000100101 +01000000011000010000000101011100 +00110001100000010000000000011100 +00011101110001010000000000001000 +00011101100000010000000000000000 +01000100001001010000000000001110 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111100100101000 +11111011111111111110100100101111 +00101101110000010000000000001000 +00110100000000100000000000000000 +00001101100000010000000000000000 +00101001011000010000000000111000 +00101000001000110000000000000100 +10111001011000000000100000000000 +11011000011000000000000000000000 +00001001101011010000000001110000 +10110101011011010000100000000000 +00110100001000010000000101101001 +01000000001000100000000000000111 +00100000010000100000000000000100 +01111100010000100000000000000000 +01011001100000100000000000000100 +01000000001000100000000000000111 +00100000010000100000000000000010 +01111100010000100000000000000000 +01011001100000100000000000001000 +01000000001000100000000000000111 +00100000010000100000000000000001 +01011001100000100000000000001100 +01000000001000100000000000000111 +00100000010000100000000000010000 +01111100010000100000000000000000 +01011001100000100000000000010000 +01000000001000100000000000000111 +00100000010000100000000000100000 +01111100010000100000000000000000 +01011001100000100000000000010100 +01000000001000010000000000000111 +00100000001000010000000000001000 +01111100001000010000000000000000 +01011001100000010000000000011000 +01111000000000010000000000000001 +00111000001000011001111100000100 +00101000001001000000000000011100 +01000100100000000000000000000111 +00110101101000100000000101101000 +10110101011011010110100000000000 +10111001011000000000100000000000 +10110101011000100001000000000000 +00110101101000110000000100110100 +11011000100000000000000000000000 +01111000000001000000000000000001 +01111000000001010000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000011 +00110100000000110000000000000001 +00111000100001000111100100111100 +00111000101001011001001010000100 +11111011111111111110100011111100 +00110100000011000000000000001001 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000010001100 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +10111000001000000110100000000000 +00101000001010110000000001001100 +00110100000000010000000000001111 +00110100000011110000000000000000 +01010100010000010000000000100001 +00001000010011100000000000001100 +01111000000000010000000000000001 +00111000001000011001011101101000 +10110100001011100111000000000000 +00101101110011110000000000000100 +01000001110011000000000000001001 +00110101011000010000000000001000 +00110001011000100000000000000000 +00001101011011110000000000000010 +00110100000000100000000000000000 +00110100000000110000000000001000 +11111000000000000011111001010101 +00001101011000000000000000000110 +01000001110000010000000000001000 +00110001011000010000000000100000 +00110100000000010000000000000001 +01000101100000010000000000001000 +01000101100000000000000000000100 +00110100000000010000000000000010 +01011101100000010000000000001100 +11100000000000000000000000001000 +00101001101000010000001101011000 +01000000001000010000000000001011 +11100000000000000000000000000011 +00101001101000010000001101011000 +01000000001000010000000000001101 +00110001011000010000000000100001 +11100000000000000000000000000101 +00101001101000010000001101011000 +01000000001000010000000000001010 +11100011111111111111111111111100 +00110001011011000000000000100001 +10111001111000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +01000000010000010000000000000000 +10111000010000000110000000000000 +00110100000000110000000000000010 +00000000001000010000000000000100 +00110101011011010000001111000000 +00110001011000010000001110100000 +01000000010000010000000000000000 +00100000001000010000000000001111 +00110001011000010000001110100001 +01000000010000010000000000000001 +00100000001000010000000000001111 +00110001011000010000001110100010 +00101100010000010000000000000010 +00001101011000010000001110100100 +01000000010000010000000000000100 +00110100010000100000000000000110 +00110001011000010000001110100110 +00110101011000010000001110100111 +11111000000000000011110110100001 +00101001100000100000000000001000 +00101001100000010000000000001100 +00110100000000110000000000001000 +01011001011000100000001110111000 +01011001011000010000001110111100 +00110101100000100000000000010100 +01011001011000000000001110110000 +01011001011000000000001110110100 +10111001101000000000100000000000 +11111000000000000011110110010111 +00101101100000010000000000011100 +00001101011000010000001111001000 +00101101100000010000000000011110 +00001101011000010000001111001010 +01000001100000010000000000100001 +00110001011000010000001111001100 +00101001011000010000000000110000 +00101000001000010000000000010100 +00101100001000100000000000001000 +01000100010000000000000000001010 +10111001101000000001000000000000 +00110100000000110000000000001000 +11111000000000000011110101101001 +01011100001000000000000000001001 +00101001011000010000000000110000 +00101000001000010000000000010100 +00101100001000100000000000001000 +00101101011000010000001111001000 +01011100010000010000000000000100 +01000001011000010000000000100000 +00111000001000010000000000000001 +11100000000000000000000000000011 +01000001011000010000000000100000 +00100000001000010000000011111110 +00110001011000010000000000100000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00110100000000110000000000100010 +10111000001000000101100000000000 +10111000010000000110000000000000 +10111000010000000000100000000000 +00110100000000100000000000000000 +11111000000000000011110111101011 +00101001011000010000001101011000 +00110100000000110000000000001000 +01000000001000010000000000001110 +00110001100000010000000000000001 +00101001011000010000000000110000 +00101000001000010000000000001100 +01000000001000010000000000011110 +00110001100000010000000000000100 +00101001011000100000001101011000 +00110101100000010000000000010100 +11111000000000000011110101100010 +00101001011000010000001101011000 +00101100001000010000000000001000 +00001101100000010000000000011100 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +00110100000000100000000000000000 +00101000001011010000000001001100 +10111000001000000110000000000000 +11111011111111111111111101100010 +00101101100000100000001101111110 +00110100010000100000000000000001 +00001101100000100000001101111110 +00110100000000100000000000000010 +00110001101000100000000000000110 +00101101100000100000001101111110 +00001101101000100000000000011110 +00101001011000110000000000000000 +00101001011000100000000000000100 +00001101101000110000000000100010 +01011001101000100000000000100100 +00101001011000110000000000001000 +00101101011000100000000000001100 +00111100011000110000000000010000 +10111000011000100001000000000000 +01011001101000100000000000101000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101000001000110000000000101000 +00101100001001000000000000100010 +00101000001000010000000000100100 +01011000010001000000000000000000 +01011000010000010000000000000100 +00000000011000010000000000010000 +00111100011000110000000000010000 +01011000010000010000000000001000 +01011000010000110000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101100001000010000000000100010 +10111000010000000110000000000000 +00110100000000110000000000001000 +00001100010000010000000000000100 +00101001011000010000000000100100 +01011000010000010000000000000000 +00101001011000010000000000101000 +01011000010000010000000000001000 +00101101011000010000000000101100 +00001100010000010000000000001100 +01000001011000010000000000101111 +00110000010000010000000000001110 +01000001011000010000000000110000 +01011000010000010000000000010000 +01000001011000010000000000110001 +01011000010000010000000000010100 +00101101011000010000000000110010 +01011000010000010000000000011000 +01000001011000010000000000110100 +00110000010000010000000000011100 +00110100010000010000000000011101 +00110101011000100000000000110101 +11111000000000000011110100010100 +00101101011000010000000000111101 +00001101100000010000000000100110 +01000001011000010000000000111111 +00110001100000010000000000101000 +01111000000000010000000000000001 +00111000001000011001111100000100 +00101000001000110000000000111000 +01000100011000000000000000000100 +10111001011000000000100000000000 +10111001100000000001000000000000 +11011000011000000000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00101000001000110000000000101000 +00101100001001000000000000100010 +00101000001000010000000000100100 +01011000010001000000000000000000 +01011000010000010000000000000100 +00000000011000010000000000010000 +00111100011000110000000000010000 +01011000010000010000000000001000 +01011000010000110000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000010000000110000000000000 +10111000001000000101100000000000 +00101100001000100000000000100010 +00101000001000010000000000101000 +00101001011000110000000000100100 +01011001100000100000000000000000 +00000000001000100000000000010000 +00111100001000010000000000010000 +01011001100000110000000000000100 +01011001100000100000000000001000 +01011001100000010000000000001100 +00110101011000100000000000101100 +00110101100000010000000000010000 +00110100000000110000000000001000 +11111000000000000011110011100111 +00101101011000010000000000110100 +00001101100000010000000000011000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111011000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00110100000000100000000000001011 +10111000001000000101100000000000 +00101000001011000000000001001100 +11111011111111111111111011101001 +10111000001000000110100000000000 +00101101011000010000001110010100 +00110101100001010000000000000111 +00110111100001000000000000010100 +00110100001000010000000000000001 +00001101011000010000001110010100 +00101001011000010000000000110000 +00110100000000100000000000000001 +00101000001000110000000000011000 +00110100011000010000000000001100 +01011011100000010000000000010100 +00110100011000010000000000001000 +01011011100000010000000000011000 +00110100011000010000000000000100 +01011011100000010000000000011100 +00110100011000010000000000011000 +01011011100000010000000000100000 +00110100011000010000000000010000 +00110100011000110000000000010100 +01011011100000010000000000100100 +01011011100000110000000000101000 +00110001100000000000000000000110 +00110001100000000000000000000111 +00110100000000110000000000000000 +00110100000000010000000000000110 +00101000100001100000000000000000 +00101000110001100000000000000000 +01000100110000000000000000000101 +01000000101001110000000000000000 +10111100010000110011000000000000 +10111000110001110011000000000000 +00110000101001100000000000000000 +00110100011000110000000000000001 +00110100100001000000000000000100 +01011100011000011111111111110111 +00101101011000010000001110010100 +00110100000000100000000000000000 +00110100000000110000000000001010 +00001101100000010000000000011110 +00110101100000010000000000100010 +11111000000000000011110100101100 +00101001011000010000000000110000 +00101000001000100000000000011000 +00101000001000010000000000010100 +00101100010000100000000000000000 +00001101100000100000000000101100 +01000000001000010000000000100100 +00110001100000010000000000101111 +00101001011000010000000000110000 +00101000001000010000000000010100 +00101000001000010000000000011000 +00110001100000010000000000110000 +00101001011000010000000000110000 +00101000001000010000000000010100 +00101000001000010000000000011100 +00110001100000010000000000110001 +00101001011000010000000000110000 +00101000001000110000000000010100 +00101000011000010000000000100000 +00001101100000010000000000110010 +01000000011000010000000000100101 +00110100000000110000000000001000 +00110001100000010000000000110100 +00101001011000010000000000110000 +00101000001000100000000000010100 +00110101100000010000000000110101 +00110100010000100000000000010000 +11111000000000000011110010010011 +00101001011000010000000000110000 +01111000000000110000000000000001 +00111000011000111001111100000100 +00101000001000100000000000010000 +00101000001000010000000000011000 +00101100010000100000000000000000 +00001101100000100000000000111101 +01000000001000010000000000011100 +00110001100000010000000000111111 +00101000011000110000000000110100 +01000100011000000000000000000100 +10111001011000000000100000000000 +11011000011000000000000000000000 +10111000001000000110100000000000 +10111001011000000000100000000000 +10111001101000000001000000000000 +00110100000000110000000000000000 +11111011111111111111110001101001 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000101000 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00101000001000100000000000111000 +00110111100011000000000000010000 +10111000001000000101100000000000 +00101000010000110000000000000000 +10111001100000000001000000000000 +11011000011000000000000000000000 +10111001100000000001000000000000 +10111001011000000000100000000000 +11111011111111111111111100010101 +10111000001000000001000000000000 +00110100000000110000000000000001 +10111001011000000000100000000000 +11111011111111111111110001010010 +01011100001000000000000000010111 +00110100000000100000000000001000 +10111001011000000000100000000000 +00101001011011000000000001001100 +11111011111111111111111001110111 +10111000001000000001000000000000 +00101101011000010000001101111110 +00001101100000010000000000011110 +00101001011000110000000100010000 +00101001011000010000000100010100 +00001101100000110000000000100010 +01011001100000010000000000100100 +00101001011000010000000100011100 +00101001011001000000000100011000 +00000000001000110000000000010000 +00111100100001000000000000010000 +00100000001000011111111111111111 +10111000100000110001100000000000 +01011001100000110000000000101000 +01011001100000010000000000001100 +00110100000000110000000000000000 +10111001011000000000100000000000 +11111011111111111111110000111011 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00101000001000100000000000111000 +10111000001000000101100000000000 +00101000010000110000000000000000 +00110111100000100000000000010000 +11011000011000000000000000000000 +10111001011000000000100000000000 +00110100000000100000000000000001 +00101001011011000000000001001100 +11111011111111111111111001010011 +10111000001000000001000000000000 +00101101011000010000001110000000 +00110100001000010000000000000001 +00100000001000011111111111111111 +00001101011000010000001110000000 +00001101100000010000000000011110 +00101011100000010000000000010100 +00101011100000110000000000010000 +01011001100000010000000000100100 +00001101100000110000000000100010 +00101011100000010000000000011000 +00101111100000110000000000011100 +00111100001000010000000000010000 +10111000001000110001100000000000 +01011001100000110000000000101000 +10111001011000000000100000000000 +00110100000000110000000000000001 +11111011111111111111110000010111 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +00101000001010110000000001001100 +10111000010000000110100000000000 +00110100000000100000000000001001 +10111000001000000110000000000000 +11111011111111111111111000110001 +01011001011000000000000000001000 +00101001101000110000000000001100 +10111000001000000111000000000000 +00101001101000010000000000001000 +00100000011000101111111111111111 +01011001011000100000000000001100 +00101101100000100000001111001010 +00111100001000010000000000010000 +00000000011000110000000000010000 +00001101011000100000000000011110 +00101001101000100000000000000000 +00101001101001000000000000000100 +10111000001000110001100000000000 +00001101011000100000000000100010 +01011001011001000000000000100100 +01011001011000110000000000101000 +00110101100000100000001111000000 +00110101011000010000000000101100 +00110100000000110000000000001000 +11111000000000000011110000001011 +00101101100000010000001111001000 +10111001110000000001000000000000 +00110100000000110000000000000000 +00001101011000010000000000110100 +10111001100000000000100000000000 +11111011111111111111101111101101 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00101000001000110000000000000000 +10111000001000000101100000000000 +00101000001001000000000000000100 +01001000000000110000000000000110 +10111000011001000000100000000000 +00110100000011010000000000000000 +00110100000011000000000000000001 +01000100001000000000000000001001 +11100000000000000000000000001110 +00010100011000100000000000011000 +00110100000000010000000010000000 +00100000010000100000000011000000 +00110100000011011111111111111111 +00110100000011001111111111111111 +01011100010000010000000000001000 +11100000000000000000000000000101 +00101001011000100000000000001000 +00110100000011011111111111111111 +00110100000011001111111111111111 +01001000001000100000000000000011 +00110100000011010000000000000000 +00110100000011000000000000000001 +10111001101000000000100000000000 +10111001100000000001000000000000 +11111000000000000011101011101011 +00101001011001000000000000001100 +00101001011000110000000000001000 +01011001011000010000000000000000 +01011001011000100000000000000100 +10111001101000000000100000000000 +10111001100000000001000000000000 +11111000000000000011101011100100 +01011001011000010000000000001000 +01011001011000100000000000001100 +01111000000001001100101000000000 +11100000000000000000000000001111 +00101001011001100000000000000100 +00101001011001010000000000000000 +00110100001000010011101110011010 +00110100110000111111111111111111 +11110100110000110011000000000000 +01011001011000110000000000000100 +10110100010001000001100000000000 +11110100010000110001000000000000 +00110100101001011111111111111111 +10110100110001010010100000000000 +10110100010000010000100000000000 +01011001011001010000000000000000 +01011001011000010000000000001000 +01011001011000110000000000001100 +00101001011000010000000000001000 +00101001011000100000000000001100 +01001000000000011111111111110000 +11100000000000000000000000001111 +00101001011001010000000000000100 +00101001011001100000000000000000 +00110101111011111100010001100101 +00110100101000100000000000000001 +11110100101000100010100000000000 +01011001011000100000000000000100 +10110101110000110001000000000000 +11110101110000100111000000000000 +10110100101001100010100000000000 +10110101110011110111000000000000 +01011001011001010000000000000000 +01011001011011100000000000001000 +01011001011000100000000000001100 +11100000000000000000000000000100 +00110100000000010011101110011010 +01111000000001001100101000000000 +01111000000000110011011000000000 +00101001011011110000000000001000 +00101001011011100000000000001100 +01001001111000011111111111101101 +01011101111000010000000000000010 +01010101110001001111111111101011 +00101001011000110000000000000000 +00101001011001000000000000000100 +10111001101000000000100000000000 +10111001100000000001000000000000 +11111000000000000011101010110011 +01011001011000010000000000000000 +01011001011000100000000000000100 +10111001111000000000100000000000 +10111001110000000001000000000000 +10111001101000000001100000000000 +10111001100000000010000000000000 +11111000000000000011101010101100 +01011001011000010000000000001000 +01011001011000100000000000001100 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000010001100000000000000100 +00101000001001000000000000000100 +00101000010001110000000000000000 +00101000001001010000000000000000 +10110100110001000010000000000000 +11110100110001000011000000000000 +10110100111001010010100000000000 +10110100110001010010100000000000 +01011000001001010000000000000000 +01011000001001000000000000000100 +00101000010001000000000000001100 +00101000010001010000000000001000 +00101000001000100000000000001100 +00101000001001100000000000001000 +10110100100000100001000000000000 +11110100100000100010000000000000 +10110100101001100010100000000000 +10110100100001010010000000000000 +01011000001001000000000000001000 +01011000001000100000000000001100 +11111011111111111111111110000001 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000010001000000000000000100 +00101000001001100000000000000100 +00101000010001010000000000000000 +00101000001001110000000000000000 +11001000110001000010000000000000 +11110100100001100011000000000000 +11001000111001010010100000000000 +11001000101001100010100000000000 +01011000001001010000000000000000 +01011000001001000000000000000100 +00101000010001100000000000001000 +00101000001001010000000000001100 +00101000010000100000000000001100 +00101000001001000000000000001000 +11001000101000100001000000000000 +11110100010001010010100000000000 +11001000100001100010000000000000 +11001000100001010010000000000000 +01011000001001000000000000001000 +01011000001000100000000000001100 +11111011111111111111111101100111 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001011110000000000001000 +00101001011011000000000000001100 +00101000001011010000000000000000 +00101000001011100000000000000100 +00000001100011000000000000000001 +00111101111000010000000000011111 +00010101111011110000000000000001 +10111000001011000110000000000000 +00010101101000100000000000011111 +01011001011011110000000000001000 +01011001011011000000000000001100 +00100001110000010000000000000001 +00111000010000100000000000000001 +01000100001000000000000000001011 +00010100010000010000000000011111 +00110100000000110001110111001101 +01111000000001000110010100000000 +11111000000000000011101001010100 +10110100010011000110000000000000 +11110100010011000001000000000000 +10110100001011110000100000000000 +10110100010000010000100000000000 +01011001011000010000000000001000 +01011001011011000000000000001100 +00111101101000100000000000011111 +00000001110000010000000000000001 +00010101101011010000000000000001 +10111000010000010000100000000000 +01011001011011010000000000000000 +01011001011000010000000000000100 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00101000001000100000000000000100 +00101000001001010000000000000000 +01111000000000110000000000000001 +11001000000000100010000000000000 +00111000011000110111100101001000 +01001000000001010000000000001100 +01111000000000110000000000000001 +10111000101000100010000000000000 +00111000011000110111110001011000 +01011100100000000000000000000111 +00101000001001010000000000001000 +01111000000000110000000000000001 +00111000011000110111100101001000 +01001000100001010000000000000011 +01111000000000110000000000000001 +00111000011000110111110001011000 +10111000010000000010000000000000 +00101000001000100000000000001000 +00101000001000010000000000001100 +00111100010001100000000000010000 +00000000001001010000000000010000 +10111000110001010010100000000000 +00010100010001100000000000010000 +01001000000001100000000000000010 +11100000000000000000000000001000 +11001000000000010000100000000000 +01111100001001010000000000000000 +11001000000000100001000000000000 +11001000010001010010100000000000 +00111100101001010000000000010000 +00000000001000010000000000010000 +10111000101000010010100000000000 +01111000000010110000000000000001 +00111001011010111011010111110000 +01111000000000100000000000000001 +10111001011000000000100000000000 +00111000010000100111100101001100 +11111000000000000001101101000100 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111001100 +01011011100010110000000000101100 +01011011100011000000000000101000 +01011011100011010000000000100100 +01011011100011100000000000100000 +01011011100011110000000000011100 +01011011100100000000000000011000 +01011011100100010000000000010100 +01011011100100100000000000010000 +01011011100100110000000000001100 +01011011100101000000000000001000 +01011011100111010000000000000100 +00101000010011010000000000010000 +10111000001000000111000000000000 +10111000010000000101100000000000 +10111000011000000110000000000000 +00101000010100110000000000010100 +01001001101000000000000000001100 +01011101101000000000000000000010 +01011110011011010000000000001010 +00101001100000010000000000000000 +01011001011000010000000000001000 +00101001100000010000000000000100 +01011001011000010000000000001100 +00101001100000010000000000000000 +01001000000000010000000000000010 +11100000000000000000000000000011 +01011001011000000000000000001000 +01011001011000000000000000001100 +00101001110000010000000000110000 +00101001011100100000000000001000 +00101001011100010000000000001100 +00101000001000010000000000001000 +00110100000011110000000000111111 +00011100001000010000000000011000 +00110100001100001111111111111111 +11001001111000010111100000000000 +10111001111000000001100000000000 +10111010010000000000100000000000 +10111010001000000001000000000000 +11111000000000000011101000011111 +10111000001000100000100000000000 +00110110000101000000000000000001 +00110101111011110000000000000001 +00110110000100001111111111111111 +01011100001000001111111111111000 +10111010100000000001100000000000 +00110100000000100000000000000001 +11111000000000000011101000001000 +10111000001000000001100000000000 +01001001101000110000000000000100 +01011101101000110000000000000101 +01010110011000100000000000000010 +11100000000000000000000000000011 +01011001011000110000000000010000 +01011001011000100000000000010100 +00101001011001000000000000010000 +00101001011001010000000000010100 +01001000011001000000000000000100 +01011100011001000000000000001000 +01010100010001010000000000000010 +11100000000000000000000000000110 +00110100101000010000000000000001 +11110100101000010010100000000000 +01011001011000010000000000010100 +10110100101001000010000000000000 +01011001011001000000000000010000 +00101001100000010000000000000000 +01001000000000010000000000000010 +11100000000000000000000000000011 +01011001100100100000000000000000 +01011001100100010000000000000100 +00101001100000010000000000000000 +01001000000000010000000000000010 +11100000000000000000000000000011 +01011001100000000000000000000000 +01011001100000000000000000000100 +00101001011000110000000000001100 +00101001011001100000000000001000 +00101001100000010000000000000000 +00111100011000100000000000000001 +00111100110001010000000000000001 +11110100011000100011100000000000 +10110100010000110001100000000000 +10110100111001010010100000000000 +11110100010000110001000000000000 +10110100101001100010100000000000 +10110100010001010001000000000000 +00101001100001000000000000000100 +01001000001000100000000000000100 +01011100001000100000000000011101 +01010100100000110000000000000010 +11100000000000000000000000011011 +00111100001001100000000000010000 +00000000100001010000000000010000 +01111000000001000000000000000001 +10111001110000000000100000000000 +00110100000000100000000000000100 +00110100000000110000000000000001 +00111000100001000111100101011000 +10111000110001010010100000000000 +11111011111111111110010110100010 +00101001011001000000000000010100 +00101001011000110000000000010000 +00101001011001010000000000001100 +00110100100000010000000000000001 +11110100100000010010000000000000 +00111100101000100000000000000001 +10110100100000110010000000000000 +00101001011000110000000000001000 +11110100101000100010100000000000 +10110100001000100001000000000000 +00111100011000110000000000000001 +11110100001000100000100000000000 +10110100101000110001100000000000 +10110100100000110001100000000000 +10110100001000110000100000000000 +01011001100000010000000000000000 +01011001100000100000000000000100 +00101001011011010000000000010100 +00101001011000010000000000010000 +00101001011001000000000000001100 +00110101101000101111111111111111 +11110101101000100001100000000000 +00110100001000011111111111111111 +10110100011000010000100000000000 +00101001011000110000000000001000 +11111000000000000011100110010010 +00101001100000110000000000000100 +00101001100001000000000000000000 +10110100011000100001000000000000 +11110100011000100001100000000000 +10110100100000010000100000000000 +10110100011000010000100000000000 +01011011100000010000000000110000 +01011011100000100000000000110100 +00110111100000010000000000110000 +10111001101000000001000000000000 +11111011111111111110101100010010 +00101011100000010000000000110100 +00101011100001100000000000110000 +01111000000001000000000000000001 +01011001011000010000000000001100 +01011001011001100000000000001000 +01011001100001100000000000000000 +01011001100000010000000000000100 +00000000001001110000000000010000 +00101001011001010000000000010100 +00111100110001100000000000010000 +10111001110000000000100000000000 +00110100000000100000000000000100 +00110100000000110000000000000001 +00111000100001000111100101110000 +10111000110001110011000000000000 +11111011111111111110010101101101 +00101011100111010000000000000100 +00101011100010110000000000101100 +00101011100011000000000000101000 +00101011100011010000000000100100 +00101011100011100000000000100000 +00101011100011110000000000011100 +00101011100100000000000000011000 +00101011100100010000000000010100 +00101011100100100000000000010000 +00101011100100110000000000001100 +00101011100101000000000000001000 +00110111100111000000000000110100 +11000011101000000000000000000000 +00110111100111001111111111010100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +00101000001011100000000000000000 +10111000001000001000000000000000 +00101000010000010000000000000100 +00101001110010110000000000000100 +00101000010011010000000000000000 +10111000010000000110000000000000 +00101001011011110000000000100100 +00101001011000100000000000100000 +01111000000001010000000000000001 +10110100001011110111100000000000 +11110100001011110000100000000000 +10110101101000100110100000000000 +10110100001011010110100000000000 +00101001110000010000000000001000 +00111000101001011000111011100100 +00101000101001000000000000000000 +00011100001000100000000000010110 +00110100000000110000000000000000 +01011001011011010000000000100000 +00010100010000010000000000011111 +01011001011011110000000000100100 +11111000000000000011100101001100 +00000000010001000000000000010000 +00111100001000110000000000010000 +00111100010000100000000000010000 +10111000100000110001100000000000 +01001001101000110000000000001011 +01011101101000110000000000000010 +01010101111000100000000000001001 +11001000000000100001000000000000 +01111100010000010000000000000000 +11001000000000110001100000000000 +11001000011000010001100000000000 +01001000011011010000000000000100 +01011100011011010000000000000101 +01010100010011110000000000000010 +11100000000000000000000000000011 +01011001011000110000000000100000 +01011001011000100000000000100100 +00101001011000100000000000100000 +00101001011000110000000000100100 +01001000010000000000000000000011 +01011100010000000000000000000100 +01000100011000100000000000000011 +00110100000010110000000000000000 +11100000000000000000000000000010 +00110100000010111111111111111111 +01011011100000100000000000101000 +01011011100000110000000000101100 +01000101011000000000000000000111 +11001000000000110001100000000000 +01111100011000010000000000000000 +11001000000000100001000000000000 +11001000010000010001000000000000 +01011011100000100000000000101000 +01011011100000110000000000101100 +00101001110000100000000000001000 +00110111100000010000000000101000 +00011100010000100000000000010110 +11111011111111111110101010110001 +01000101011000000000000000001001 +00101011100000010000000000101100 +00101011100000100000000000101000 +11001000000000010000100000000000 +01111100001000110000000000000000 +11001000000000100001000000000000 +11001000010000110001000000000000 +01011011100000100000000000101000 +01011011100000010000000000101100 +00101001100000100000000000000000 +00101001100000110000000000000100 +01001000010000000000000000000011 +01011100010000000000000000000100 +01000100011000100000000000000011 +00110100000010110000000000000000 +11100000000000000000000000000010 +00110100000010111111111111111111 +01011011100000100000000000100000 +01011011100000110000000000100100 +01000101011000000000000000000111 +11001000000000110001100000000000 +01111100011000010000000000000000 +11001000000000100001000000000000 +11001000010000010001000000000000 +01011011100000100000000000100000 +01011011100000110000000000100100 +00101010000000010000000000000000 +00101000001000100000000000001000 +00110111100000010000000000100000 +00011100010000100000000000010100 +11111011111111111110101010010010 +01000101011000000000000000001001 +00101011100000010000000000100100 +00101011100000100000000000100000 +11001000000000010000100000000000 +01111100001000110000000000000000 +11001000000000100001000000000000 +11001000010000110001000000000000 +01011011100000100000000000100000 +01011011100000010000000000100100 +00101011100000110000000000101100 +00101011100000100000000000100100 +00101011100000010000000000100000 +00101011100001000000000000101000 +10110100011000100001000000000000 +11110100011000100001100000000000 +10110100100000010000100000000000 +10110100011000010000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000101100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00101000001000100000000000110000 +00101000001001000000000000111000 +10111000001000000101100000000000 +00101000010000110000000000000100 +01011000011000000000000000111000 +01011000011000000000000000111100 +00101000010000110000000000010100 +00001100001000000000000100100000 +00001100011000000000000000001000 +00101000100000110000000000010100 +01000100011000000000000000010011 +11011000011000000000000000000000 +00110100000000101111111111111111 +01011100001000100000000000001000 +01111000000001000000000000000001 +10111001011000000000100000000000 +00110100000000100000000000000100 +00110100000000110000000000000001 +00111000100001000111100110010100 +11111011111111111110010011001100 +00110100000000010000000000000000 +00101001011000100000000000110000 +11001000000000010000100000000000 +00111100001000010000000000001010 +00101000010000100000000000000100 +00010100001000110000000000011111 +01011000010000010000000000100100 +01011000010000110000000000100000 +11100000000000000000000000001101 +00101000010000100000000000001000 +00101000010000100000000000010000 +00100000010000100000000000000001 +01011100010000110000000000000101 +00101000100001000000000000001000 +00110100000000100000000000000000 +00110100000000110000000000000000 +11011000100000000000000000000000 +00101001011000010000000000110000 +00101000001000010000000000000100 +01011000001000000000000000100000 +01011000001000000000000000100100 +10111001011000000000100000000000 +00110100000000100000000000000100 +11111011111111111110010100110100 +00101001011000010000000000110000 +01111000000001000000000000000001 +00110100000000100000000000000100 +00101000001001100000000000000100 +00110100000000110000000000000001 +10111001011000000000100000000000 +00101000110001010000000000100000 +00101000110001100000000000100100 +00111000100001000111100110110000 +11111011111111111110010010101010 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000011000000110000000000000 +00101000100001010000000000000000 +00101000100000110000000000000100 +10111000001000000101100000000000 +00101000100000010000000000001000 +00101000100001000000000000001100 +01011001100001010000000000000000 +01011001100000110000000000000100 +01011001100001000000000000001100 +01011001100000010000000000001000 +10111001100000000000100000000000 +11111011111111111111111000011000 +10111001100000000000100000000000 +11111011111111111111111001011110 +01111000000001000000000000000001 +10111000001000000010100000000000 +00110100000000100000000000000100 +10111001011000000000100000000000 +00110100000000110000000000000001 +00111000100001000111100111010000 +11111011111111111110010010001100 +00101001100000010000000000000100 +00101001100000100000000000000000 +10111000010000010001000000000000 +00110100000000010000000000000000 +01000100010000000000000000010111 +00101001011000100000000000110000 +00101000010000100000000000001000 +00101000010000100000000000010000 +00100000010000100000000000000001 +01011100010000000000000000010010 +00101001011000010000000000111000 +00110111100011010000000000010100 +10111001101000000001000000000000 +00101000001000110000000000000000 +10111001011000000000100000000000 +11011000011000000000000000000000 +10111001101000000000100000000000 +10111001100000000001000000000000 +11111011111111111111110111111100 +00101001011000010000000000111000 +10111001101000000001000000000000 +00101000001000110000000000000100 +10111001011000000000100000000000 +11011000011000000000000000000000 +10111001011000000000100000000000 +11111011111111111111111110010000 +00110100000000010000000000000001 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000001000000001000000000000 +00101000001000010000000000110000 +00101000010001100000000010101000 +00101000010001010000000010101100 +00101000010001000000000010110000 +00101000010000110000000010110100 +00101000001000010000000000000100 +00110100010000100000000010011000 +01011000001001100000000000000000 +01011000001001010000000000000100 +01011000001001000000000000001000 +01011000001000110000000000001100 +11111011111111111111110111011111 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +00101000001000100000000000110000 +00101000001000110000000010011100 +10111000001000000101100000000000 +00101000010011010000000000000100 +00101000010011000000000000010000 +00101000001000100000000010011000 +10111000010000110001000000000000 +01011100010000000000000000001011 +00101000001000110000000010100000 +00101000001001000000000010100100 +10111000011001000001100000000000 +01011100011000100000000000000111 +01111000000001000000000000000001 +00110100000000100000000000000100 +00110100000000110000000000000010 +00111000100001000111101000010100 +11111011111111111110010001000000 +11100000000000000000000010001000 +00101001011001000000000011001000 +00101001011000110000000011001100 +00101001011000100000000011010000 +00101001011000010000000011010100 +00110101101011100000000000010000 +00110101011100000000000010111000 +01011001101001000000000000010000 +01011001101000110000000000010100 +01011001101000100000000000011000 +01011001101000010000000000011100 +10111010000000000001000000000000 +10111001110000000000100000000000 +11111011111111111111110110110101 +00110101011000010000000010011000 +11111011111111111111110111111011 +01111000000001000000000000000001 +10111000001000000010100000000000 +00110100000000100000000000000100 +00110100000000110000000000000010 +00111000100001000111100111101100 +10111001011000000000100000000000 +11111011111111111110010000101001 +00110101011000010000000010101000 +11111011111111111111110111110010 +01111000000001000000000000000001 +10111000001000000010100000000000 +00110100000000100000000000000100 +00110100000000110000000000000010 +00111000100001000111100111110100 +10111001011000000000100000000000 +11111011111111111110010000100000 +10111010000000000000100000000000 +11111011111111111111110111101001 +01111000000001000000000000000001 +10111000001000000010100000000000 +00110100000000100000000000000100 +00110100000000110000000000000010 +00111000100001000111101000110100 +10111001011000000000100000000000 +11111011111111111110010000010111 +00110101011000010000000011001000 +11111011111111111111110111100000 +01111000000001000000000000000001 +10111000001000000010100000000000 +00110100000000100000000000000100 +00110100000000110000000000000010 +00111000100001000111101000111100 +10111001011000000000100000000000 +11111011111111111110010000001110 +10111001101000000000100000000000 +11111011111111111111110111010111 +01111000000001000000000000000001 +10111000001000000010100000000000 +00110100000000100000000000000100 +00110100000000110000000000000001 +00111000100001000111101001000100 +10111001011000000000100000000000 +11111011111111111110010000000101 +10111001110000000000100000000000 +11111011111111111111110111001110 +01111000000001000000000000000001 +10111000001000000010100000000000 +00110100000000100000000000000100 +10111001011000000000100000000000 +00110100000000110000000000000001 +00111000100001000111101001011100 +11111011111111111110001111111100 +00101001011000010000000000110000 +00110101100011110000000000011000 +00101000001000110000000000000100 +00101000011001010000000000000000 +00101000011001000000000000000100 +00101000011000100000000000001000 +00101000011000010000000000001100 +01011001100001010000000000011000 +01011001100001000000000000011100 +01011001100000100000000000100000 +01011001100000010000000000100100 +00110100011000100000000000010000 +10111001111000000000100000000000 +11111011111111111111110101010111 +10111001111000000000100000000000 +11111011111111111111110110001001 +10111001111000000000100000000000 +11111011111111111111110110110101 +01111000000001000000000000000001 +10111000001000000010100000000000 +00110100000000100000000000000100 +10111001011000000000100000000000 +00110100000000110000000000000001 +00111000100001000111101001110100 +11111011111111111110001111100011 +00101001100000010000000000011100 +00101001100011100000000000011000 +10111001110000010111000000000000 +01011101110000000000000000101000 +00110101101000100000000000101000 +10111001011000000000100000000000 +00110101100000110000000000100000 +11111011111111111111110111010100 +10111001101000000010000000000000 +10111001011000000000100000000000 +10111001111000000001000000000000 +00110101100000110000000000001000 +11111011111111111111111100110001 +10111000001000000110100000000000 +01011100001011100000000000011101 +00110101011000010000000000110000 +00110101100000100000000000010000 +11111011111111111111111001110010 +00101001011000110000000000110000 +00101000011000110000000000001000 +00101000011001000000000000010000 +00100000100001000000000000000001 +01011100100011010000000000001011 +00111100001000010000000000010000 +00000000010000100000000000010000 +10111000001000100001000000000000 +00101001011000010000000000111000 +11001000000000100001000000000000 +00101000001000110000000000010000 +01011100011001000000000000000010 +00101000001000110000000000001100 +10111001011000000000100000000000 +11011000011000000000000000000000 +00101001011000010000000000110000 +01111000000001000000000000000001 +00110100000000100000000000000100 +00101000001000010000000000000100 +00110100000000110000000000000010 +00111000100001000111100111111100 +00101000001001010000000000100100 +10111001011000000000100000000000 +00010100101001010000000000001010 +11111011111111111110001110111000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001010110000000000001100 +10111000001000000110000000000000 +00110100000000010000000000000001 +01011001011000010000000000000000 +00101001100000010000000000100100 +01001000001000000000000000000010 +00110100000000010000000000000001 +00001101011000010000000000001100 +00101001100000010000000000001000 +01011100001000000000000000000010 +01011001100000100000000000001000 +00101001100011010000000000001000 +00110101011000010000000000010000 +00110100000000110000000000001100 +10111001101000000001000000000000 +11111000000000000011100010010111 +00101101011000100000000000001100 +00110100000000010000000000000001 +01011100010000010000000000000100 +00101001100000010000000000000000 +00101000001000010000000000100100 +01100100001000010000000000000010 +01011001011000010000000000100000 +00101001101000010000000000100000 +00101101011001110000000000001100 +00110100000000100000000000000000 +00110001011000010000000000011100 +00101001101000010000000000100100 +00110100000001100000000000000010 +00110100000001010000000000000001 +00110001011000010000000000011101 +00101001101000010000000000101000 +00110100000001001111111111111111 +00110001011000010000000000011110 +11100000000000000000000000001101 +00001000010000010000010000011000 +00101001100010000000000000000000 +10110101000000010000100000000000 +01000100011000000000000000000100 +00101000001000110000000000100100 +01000100011001100000000000000010 +01011001011000000000000000100000 +01011000001000100000001111011000 +01011000001001010000000000000000 +01011000001000000000000000010000 +00001100001001000000000100100010 +00110100010000100000000000000001 +00101001011000110000000000100000 +01001000111000101111111111110011 +01000100011000000000000000000111 +00110100000000010000000011111111 +01011001011000010000000000010000 +01111000000000010000000000000001 +00111000001000010111101010011000 +00110100000000100000000011111111 +11111000000000000001100010110111 +01111000000000010000000000000001 +00111000001000011001111100000100 +00101000001000110000000000000100 +00110100000000010000000000000000 +01000100011000000000000000000100 +10111001100000000000100000000000 +10111001101000000001000000000000 +11011000011000000000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01111000000000100000000000000001 +00111000010000101001111100000100 +00101000010000110000000000001000 +00110100000000100000000000000000 +01000100011000000000000000000011 +11011000011000000000000000000000 +10111000001000000001000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011001111101110100 +00101000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011001110110101000 +11100000000000000000000000000100 +00101000010001000000000000000000 +01000100011001000000000000000100 +00110100001000010000000000001100 +00101000001000110000000000000000 +01011100011000001111111111111100 +00101000001000010000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01011011100000010000000000001100 +01011011100000100000000000010000 +10111000011000000101100000000000 +10111000010000000001100000000000 +01011100001000000000000000001110 +01111000000000100000000000000001 +00111000010000101000111011101000 +00101000010000010000000000000000 +01010100011000010000000000001010 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011011011000001100 +00111000010000100111101010111100 +01011101011000000000000000000011 +01111000000000100000000000000001 +00111000010000100111101011000100 +11111000000000000001100001101101 +11100000000000000000000000010000 +01111000000000110000000000000001 +00111000011000111000111011001000 +00101000011000100000000000000000 +00110111100000010000000000001100 +11111011111111111110100011000101 +10111000001000000010000000000000 +01111000000000100000000000000001 +01111000000000010000000000000001 +00101011100000110000000000010000 +00111000001000011011011000001100 +00111000010000100111101011001000 +01011101011000000000000000000011 +01111000000000100000000000000001 +00111000010000100111101011010100 +11111000000000000001100001011101 +01111000000000010000000000000001 +00111000001000011011011000001100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111100010000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011001111101110100 +00101000001000010000000000000000 +00101000001010110000000000011000 +01111000000000010000000000000001 +00111000001000011100001010010100 +00101000001000100000000000000000 +00110100000000010000000000000000 +01000100010000000000000011011011 +01111000000011000000000000000001 +00111001100011001011011000001000 +00101001100000010000000000000000 +01011100001000000000000000001000 +11111000000000000001111000111110 +01111000000000100000000000000001 +00111000010000101001011011111000 +00101000010000100000000000000000 +10100100010000000001000000000000 +10110100010000010000100000000000 +01011001100000010000000000000000 +01111000000000010000000000000001 +00111000001000011011111110110100 +00101000001000010000000000000000 +00101001011000100000000001011000 +01011100001000100000000000000111 +01111000000000010000000000000001 +00111000001000011011000011011000 +00101000001000110000000000000000 +00110100000000100000000000000011 +00110100000000010000000000000000 +01000100011000100000000011000101 +11111000000000000001111000101100 +01111000000000110000000000000001 +01111000000000100000000000000001 +00111000011000111001011011111000 +00111000010000101011011000001000 +00101000011000110000000000000000 +00101000010000100000000000000000 +10110100011000100001000000000000 +11001000001000100000100000000000 +01001100001000000000000000000111 +01111000000000010000000000000001 +00111000001000011011000011011000 +00101000001000110000000000000000 +00110100000000100000000000000011 +00110100000000010000000000000000 +01011100011000100000000010110101 +11111000000000000001111000011100 +01111000000000100000000000000001 +00111000010000101011011000001000 +01011000010000010000000000000000 +00101001011000100000000001011000 +01111000000000010000000000000001 +00111000001000011011111110110100 +01011000001000100000000000000000 +00110111100000010000000011011100 +00110111100000100000000011101000 +11111000000000000010001100010111 +00110100000000100000000000000000 +00110111100000010000000000010100 +11111000000000000000001100100110 +00110111100000010000000011110000 +00110111100000100000000011101100 +11111000000000000001110111011000 +00101011100000110000000011101100 +00101011100001000000000011110000 +00101011100000100000000001000000 +01111000000000010000000000000001 +00111000001000010111101011011100 +11111000000000000001100000011010 +00101011100000100000000001001000 +01111000000000010000000000000001 +00111000001000010111101011110000 +01111100010000100000000000000000 +11111000000000000001100000010101 +11111011111111111111111101111001 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000010111101011111100 +11111000000000000001100000010000 +01111000000000010000000000000001 +00111000001000011011000011011000 +00101000001000100000000000000000 +00110100000000010000000000000011 +01011100010000010000000000001010 +00101001011000100000000000010000 +01111000000000010000000000000001 +00111000001000010111101100000100 +00100000010000100000000000000001 +11111000000000000001100000000110 +01111000000000010000000000000001 +00111000001000010111101100001100 +00110101011000100000000001100000 +11111000000000000001100000000010 +00110100000000010000000000000000 +00110111100000100000000011100100 +01111000000011010000000000000001 +11111000000000000011001111100010 +00110100000011000000000000000000 +00111001101011010111101100011000 +11100000000000000000000000001000 +10111001100000000000100000000000 +11111000000000000011010001000010 +10111000001000000001100000000000 +10111001100000000001000000000000 +10111001101000000000100000000000 +11111000000000000001011111110101 +00110101100011000000000000000001 +00101011100000010000000011100100 +01001000001011001111111111111000 +00101011100000100000000011100000 +00101011100000110000000011101000 +01111000000000010000000000000001 +00111000001000010111101100100100 +11111000000000000001011111101101 +01111000000000010000000000000001 +00111000001000011011000011011000 +00101000001000100000000000000000 +00110100000000010000000000000011 +01011100010000010000000001001110 +00101001011000100000000001000100 +00101001011000010000000001000000 +00110100000000110000000000000000 +11111011111111111111111101010110 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000010111101100110100 +11111000000000000001011111100000 +00101001011000100000000001010100 +00101001011000010000000001010000 +00110100000000110000000000000000 +11111011111111111111111101001110 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000010111101100111100 +11111000000000000001011111011000 +00101001011000100000000000011000 +00101001011000110000000000011100 +01111000000000010000000000000001 +00111000001000010111101101000100 +11111000000000000001011111010011 +00101001011000100000000000100000 +00101001011000110000000000100100 +01111000000000010000000000000001 +00111000001000010111101101011000 +11111000000000000001011111001110 +00101001011000100000000001010100 +00101001011000110000000001000100 +01111000000000010000000000000001 +00111100010000100000000000000001 +00111000001000010111101101101100 +11001000011000100001000000000000 +11111000000000000001011111000111 +00101001011000100000000000011000 +00101001011000010000000001000100 +00101001011000110000000001000000 +00010100010001000000000000011111 +11001000001000100001000000000000 +11110100010000010000100000000000 +11001000011001000001100000000000 +11001000011000010001100000000000 +00101001011000010000000000011100 +00010100001001000000000000011111 +11001000010000010000100000000000 +11110100001000100001000000000000 +11001000011001000001100000000000 +11001000011000100001000000000000 +00101001011000110000000000100000 +00010100011001000000000000011111 +11001000001000110001100000000000 +11110100011000010000100000000000 +11001000010001000001000000000000 +11001000010000010000100000000000 +00101001011000100000000000100100 +00010100010001000000000000011111 +11001000011000100001000000000000 +11110100010000110001100000000000 +11001000001001000000100000000000 +11001000001000110000100000000000 +00110100000000110000000000000000 +11111011111111111111111100011101 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000010111101101111000 +11111000000000000001011110100111 +00101001011000100000000010001100 +01111000000000010000000000000001 +00111000001000010111101110000100 +11111000000000000001011110100011 +00101001011000100000000001001000 +01111000000000010000000000000001 +00111000001000010111101110001100 +11111000000000000001011110011111 +00101001011000100000000001011000 +01111000000000010000000000000001 +00111000001000010111101110011000 +11111000000000000001011110011011 +00110100000000011111111111111111 +11111000000000000011001111101101 +10111000001000000110000000000000 +00110100000000010000000000000000 +11111000000000000011001111101010 +10111000001000000101100000000000 +00110100000000010000000000000001 +11111000000000000011001111100111 +01111000000001010000000000000001 +10111000001000000010000000000000 +10111000101000000000100000000000 +10111001100000000001000000000000 +10111001011000000001100000000000 +00111000001000010111101110100100 +11111000000000000001011110001100 +01111000000000010000000000000001 +00111000001000010111101110111000 +11111000000000000010000101110101 +00100000001000111111111111111111 +00001000011000110010011100010000 +10111000001000000001000000000000 +00010100010000100000000000010000 +00010100011000110000000000010000 +01111000000000010000000000000001 +00111000001000010111101110111100 +11111000000000000001011110000001 +01111000000000010000000000000001 +00111000001000011000011110011000 +11111000000000000001011101111110 +00110100000000010000000000000001 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000011110000 +11000011101000000000000000000000 +00110111100111001111111100001100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100111010000000000001100 +11111000000000000001110111110110 +10111000001000000101100000000000 +11111000000000000001110111111010 +10100000001010110001000000000000 +00110100000000010000000000000000 +01011100010000000000000001011111 +01111000000010110000000000000001 +00111001011010111011011000100100 +00101001011000010000000000000000 +01011100001000100000000000000100 +11111000000000000001110101010100 +00110100001000011111110000010111 +01011001011000010000000000000000 +01111000000010110000000000000001 +11111000000000000001110101010000 +00111001011010111011011000100100 +00101001011000100000000000000000 +11001000001000100000100000000000 +00110100001000101111110000011000 +00110100000000010000000000000000 +01001000000000100000000001010000 +11111000000000000001110101001001 +01011001011000010000000000000000 +00110100000000010000000000000000 +11111000000000000001110111001100 +00110111100000010000000011110100 +00110111100000100000000011110000 +11111000000000000001110100001111 +00101011100000010000000011110100 +00101011100000100000000011110000 +01111000000010110000000000000001 +00111001011010111001111101110100 +11111000000000000001111000001101 +00110111100000010000000011100000 +00110111100000100000000011101100 +11111000000000000010001001000000 +00101011100000110000000011101100 +00101011100000010000000011100000 +00101011100000100000000011100100 +11111000000000000001111000001100 +00110100000000100000000000000000 +00110111100000010000000000011000 +11111000000000000000001001001011 +00101011100000010000000001000100 +00101011100000100000000001001100 +01111100001000010000000000000000 +01111100010000100000000000000000 +11111000000000000001110111101001 +00101001011000010000000000000000 +01000000001000010000000000000011 +11111000000000000001110111101111 +01111000000000010000000000000001 +00111000001000011011000011011000 +00101000001000100000000000000000 +00110100000000010000000000000011 +01011100010000010000000000010010 +00101001011000010000000000000000 +00101000001010010000000000011000 +00101001001010100000000001001000 +00101001001001100000000001010100 +00101001001001000000000001000100 +00101001001000010000000000010000 +00101001001000110000000001000000 +00101001001001010000000001010000 +01000001001000100000000000010111 +00101001001010000000000010001100 +01011011100010100000000000000100 +00111100110001110000000000000001 +00101001001010010000000001011000 +00100000001000010000000000000001 +11001000100001110011100000000000 +01011011100010010000000000001000 +11111000000000000001110110111011 +00110100000000010000000000000000 +00110111100000100000000011101000 +11111000000000000011001100001011 +00101011100000100000000011101000 +00110100000000010000000000001000 +01001100001000100000000000000010 +01011011100000010000000011101000 +00110100000010110000000000000000 +00110100000011000000000000000000 +11100000000000000000000000000111 +10111001011000000000100000000000 +11111000000000000011001101100111 +00100000001000010000000000000001 +10111100001010110000100000000000 +00110101011010110000000000000001 +10111001100000010110000000000000 +00101011100000010000000011101000 +01001000001010111111111111111001 +10111001100000000000100000000000 +11111000000000000001110111001011 +01111000000000010000000000000001 +00111000001000010111101110111000 +11111000000000000010000011111111 +11111000000000000001110111011010 +00110100000000010000000000000001 +11111000000000000001110110000010 +00110100000000010000000000000001 +00101011100111010000000000001100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00110111100111000000000011110100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111001111101110100 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000100111101111001100 +00101000001011000000000000011000 +00110100000000010000000000000100 +11111000000000000000101011001000 +11111011111111111111111001100010 +01111000000000100000000000000001 +10111000001000000001100000000000 +00111000010000100111101111011100 +00110100000000010000000000000111 +11111000000000000000101011000010 +00101001100000010000000000010000 +01000100001000000000000000000101 +00101001011000010000000000000000 +00101000001000100000000000000000 +00110100000000010000000000001001 +01000100010000010000000000000111 +01111000000000100000000000000001 +00110100000000010000000000000001 +00111000010000100111101111100000 +11111000000000000000101010111000 +00110100000000010000000000000000 +11100000000000000000000000000110 +01111000000000100000000000000001 +00110100000000010000000000000100 +00111000010000100111101111111000 +11111000000000000000101010110010 +00110100000000010000000000000001 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111011100100 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011001111101110100 +00101000001000010000000000000000 +01111000000011000000000000000001 +00111001100011001011011000101100 +00101000001010110000000000011000 +00101001100000010000000000000000 +01011100001000000000000000001000 +11111000000000000001110010111100 +01111000000000100000000000000001 +00111000010000101001011011111000 +00101000010000100000000000000000 +10100100010000000001000000000000 +10110100010000010000100000000000 +01011001100000010000000000000000 +11111000000000000001110010110101 +01111000000000110000000000000001 +01111000000000100000000000000001 +00111000011000111001011011111000 +00111000010000101011011000101100 +00101000011000110000000000000000 +00101000010000100000000000000000 +10110100011000100001000000000000 +11001000001000100000100000000000 +01001100001000000000000000000111 +01111000000000010000000000000001 +00111000001000011011011000101000 +00101000001000010000000000000000 +00101001011000100000000001011000 +00110100000011000000000000000000 +01000100001000100000000110110010 +11111000000000000001110010100101 +01111000000000100000000000000001 +00111000010000101011011000101100 +01011000010000010000000000000000 +00101001011000100000000001011000 +01111000000000010000000000000001 +00111000001000011011011000101000 +01011000001000100000000000000000 +11111000000000000000101010011010 +01111000000000110000000000000001 +00111000011000111001011011101000 +00101000011000110000000000000000 +01111000000000100000000000000001 +00110100000000010000000000000100 +00111000010000100111110000010100 +11111000000000000000101001110100 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111110000110000 +11111000000000000000101001110000 +00110111100000010000000100000100 +00110111100000100000000100010100 +11111000000000000010000110010100 +01111000000000100000000000000001 +00110100000000010000000000000100 +00111000010000100111110000111100 +11111000000000000000101001101001 +00101011100000100000000100001000 +00101011100000010000000100000100 +00110100000000110000000000000000 +11111000000000000000100110110100 +01111000000000100000000000000001 +10111000001000000001100000000000 +00111000010000100111101111011100 +00110100000000010000000000000111 +11111000000000000000101001100000 +00110100000000100000000000000000 +00110111100000010000000000101000 +11111000000000000000000110010110 +01111000000000100000000000000001 +00110100000000010000000000000100 +00111000010000100111110001011100 +11111000000000000000101001011001 +01111000000000100000000000000001 +01111000000000110000000000000001 +00110100000000010000000000000111 +00111000010000100111110001101100 +00111000011000110111110001110100 +11111000000000000000101001010011 +00101011100000010000000001010100 +01000100001000000000000000000101 +01111000000000100000000000000001 +00110100000000010000000000000010 +00111000010000100111110001111100 +11100000000000000000000000000100 +01111000000000100000000000000001 +00110100000000010000000000000001 +00111000010000100111110010001000 +11111000000000000000101001001001 +00110111100000010000000100011100 +00110111100000100000000100011000 +11111000000000000001110000110100 +00101011100000110000000100011000 +00101011100001000000000100011100 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111110010010100 +11111000000000000000101001000000 +00101011100000010000000001010100 +00110100000011000000000000000001 +01000100001000000000000101101011 +01111000000000100000000000000001 +00111000010000100111110010101000 +00110100000000010000000000000111 +11111000000000000000101000111001 +00110111100011010000000100001100 +10111001101000000000100000000000 +11111000000000000000110100001110 +00110111100000110000000011110000 +10111000011000000000100000000000 +10111001101000000001000000000000 +01011011100000110000000000100100 +11111000000000000000100001010110 +01111000000000010000000000000001 +00111000001000011011100011111000 +00101000001000010000000000000000 +00101011100000110000000000100100 +01000100001011000000000000001010 +01000100001000000000000000000100 +00110100000000100000000000000010 +01011100001000100000000000001111 +11100000000000000000000000001010 +01111000000000100000000000000001 +00110100000000010000000000000001 +00111000010000100111110010110000 +11111000000000000000101000100100 +11100000000000000000000000001001 +01111000000000100000000000000001 +00110100000000010000000000000010 +00111000010000100111110011000000 +11100000000000000000000000000100 +01111000000000100000000000000001 +00110100000000010000000000000010 +00111000010000100111110011010000 +11111000000000000000101000011011 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111110011101000 +01111000000011010000000000000001 +11111000000000000000101000010110 +00111001101011011001111101110100 +00101001101000010000000000000000 +00101000001000010000001101011000 +00101000001000010000000000010000 +00101000001011100000000000001000 +01011101110000000000000001001011 +01111000000000100000000000000001 +00110100000000010000000000000001 +00111000010000100111110011110000 +11111000000000000000101000001100 +11111011111111111111111100111000 +00110100000011000000000000000001 +01000100001011100000000100110111 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111110011111000 +11111000000000000000101000000101 +00101001101000010000000000000000 +00101000001000010000000000110000 +00101000001000010000000000010000 +00101000001001010000000000001000 +00101000001000110000000000001100 +00101000001000100000000000010000 +00101000001001000000000000010100 +10111000101000110010100000000000 +01000100101000000000000000010100 +00111100010000100000000000010000 +00000000100001000000000000010000 +10111000010001000010000000000000 +01001000011000000000000000000101 +01101100100000100000000000000000 +01100100011000010000000000000000 +10100000010000010000100000000000 +01000100001000000000000000000110 +01111000000000100000000000000001 +00110100000000010000000000000111 +00111000010000100111110100011000 +11111000000000000000100111110000 +11100000000000000000000100011100 +01111000000000100000000000000001 +00110100000000010000000000000111 +00111000010000100111110100100100 +11001000000001000010000000000000 +11111000000000000000100111101010 +11100000000000000000000100010111 +00000000100001000000000000010000 +00111100010000110000000000010000 +01111000000010110000000000000001 +00111001011010110111110100110000 +10111000011001000001100000000000 +10111001011000000001000000000000 +00110100000000010000000000000111 +11111000000000000000100111100001 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111110100111000 +11111000000000000000100111011101 +00101001101000010000000000000000 +10111001011000000001000000000000 +00101000001000010000000000110000 +00101000001000010000000000010000 +00101000001001000000000000100000 +00101100001000110000000000100100 +00110100000000010000000000000111 +00111100100001000000000000010000 +10111000100000110001100000000000 +11111000000000000000100111010011 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111110101011000 +11111000000000000000100111001111 +00101001101000010000000000000000 +10111001011000000001000000000000 +00101000001000010000000000110000 +00101000001001000000000000000100 +00110100000000010000000000000111 +00101000100000110000000000100000 +00101000100001000000000000100100 +11111000000000000000100111000111 +11100000000000000000000011110100 +01111000000000010000000000000001 +00111000001000011011000011011000 +00101000001000010000000000000000 +00110100000000100000000000000001 +01001000010000010000000000001110 +00110100000000100000000000000010 +01001100010000010000000000000100 +00110100000000100000000000000011 +01011100001000100000000000001010 +11100000000000000000000000000101 +01111000000000100000000000000001 +00110100000000010000000000000111 +00111000010000100111110101111000 +11100000000000000000000000001000 +01111000000000100000000000000001 +00110100000000010000000000000111 +00111000010000100111110110000100 +11100000000000000000000000000100 +01111000000000100000000000000001 +00110100000000010000000000000001 +00111000010000100111110110010000 +11111000000000000000100110110000 +00101011100000010000000001011100 +01000100001000000000000000000101 +01111000000000100000000000000001 +00110100000000010000000000000010 +00111000010000100111110110011100 +11100000000000000000000000000100 +01111000000000100000000000000001 +00110100000000010000000000000001 +00111000010000100111110110100100 +11111000000000000000100110100110 +00101011100000010000000001111000 +01000100001000000000000000000111 +00101011100000010000000001111100 +01000100001000000000000000000101 +01111000000000100000000000000001 +00110100000000010000000000000010 +00111000010000100111110110101100 +11100000000000000000000000000100 +01111000000000100000000000000001 +00110100000000010000000000000001 +00111000010000100111110110111000 +11111000000000000000100110011010 +11111011111111111111111011000110 +00110100000011000000000000000001 +01000100001000000000000011000101 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111110111001000 +11111000000000000000100110010011 +01111000000000100000000000000001 +00110100000000010000000000000111 +00111000010000100111100111101000 +00110101011000110000000001100000 +11111000000000000000100110001110 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111110111100100 +11111000000000000000100110001010 +00101001011000010000000001011100 +01000100001000000000000000000101 +01111000000000100000000000000001 +00110100000000010000000000000010 +00111000010000100111111000000000 +11100000000000000000000000000100 +01111000000000100000000000000001 +00110100000000010000000000000001 +00111000010000100111111000000100 +11111000000000000000100110000000 +00110100000000010000000000000000 +00110111100000100000000100010000 +01111000000100000000000000000001 +01111000000011110000000000000001 +01111000000011100000000000000001 +01111000000011010000000000000001 +11111000000000000011000110010011 +00110100000011000000000000000000 +00111010000100000111111000001100 +00111001111011110111111000101100 +00111001110011100111111000110100 +00111001101011011000011110011000 +11100000000000000000000000010101 +00110100000000010000000010000111 +10111010000000000001000000000000 +10111001100000000001100000000000 +11111000000000000000100101101111 +10111001100000000000100000000000 +11111000000000000011000111101100 +10111000001000001000100000000000 +00100000001000010000000000000001 +01000100001000000000000000000100 +00110100000000010000000000000010 +10111001111000000001000000000000 +11111000000000000000100101100111 +00100010001100010000000000000010 +01000110001000000000000000000100 +00110100000000010000000000000010 +10111001110000000001000000000000 +11111000000000000000100101100010 +10111001101000000000100000000000 +11111000000000000001010110010110 +00110101100011000000000000000001 +00101011100000010000000100010000 +01001000001011001111111111101011 +01111000000000100000000000000001 +00110100000000010000000000000100 +00111000010000100111111001000000 +11111000000000000000100101011001 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111111001011000 +11111000000000000000100101010101 +00101001011000100000000001000100 +00101001011000010000000001000000 +00110100000000110000000000000001 +01111000000011000000000000000001 +11111011111111111111110011111000 +00111001100011000111111001110000 +10111000001000000001100000000000 +10111001100000000001000000000000 +00110100000000010000000000000111 +11111000000000000000100101001011 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111111001111000 +11111000000000000000100101000111 +00101001011000100000000001010100 +00101001011000010000000001010000 +00110100000000110000000000000001 +01111000000011010000000000000001 +11111011111111111111110011101010 +10111000001000000001100000000000 +10111001100000000001000000000000 +00110100000000010000000000000111 +11111000000000000000100100111110 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111111010010000 +11111000000000000000100100111010 +00101001011000110000000000011000 +00101001011001000000000000011100 +00111001101011010111111010110000 +10111001101000000001000000000000 +00110100000000010000000000000111 +11111000000000000000100100110100 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111111011001000 +11111000000000000000100100110000 +00101001011001000000000000100100 +00101001011000110000000000100000 +10111001101000000001000000000000 +00110100000000010000000000000111 +11111000000000000000100100101011 +00101001011011010000000001010100 +00101001011000010000000001000100 +01111000000000100000000000000001 +00111101101011010000000000000001 +00111000010000100111111011101000 +11001000001011010110100000000000 +00110100000000010000000010000111 +11111000000000000000100100100011 +01111000000000100000000000000001 +10111001101000000001100000000000 +00110100000000010000000000000111 +00111000010000100111111100000000 +11111000000000000000100100011110 +00101001011000010000000000011000 +00101001011000100000000001000100 +00101001011011100000000001000000 +00010100001000110000000000011111 +11001000010000010000100000000000 +11110100001000100001000000000000 +11001001110000110111000000000000 +11001001110000100111000000000000 +00101001011000100000000000011100 +00101001011011010000000000100100 +00010100010000110000000000011111 +11001000001000100001000000000000 +11110100010000010000100000000000 +11001001110000110111000000000000 +11001001110000010111000000000000 +00101001011000010000000000100000 +00010100001000110000000000011111 +11001000010000010000100000000000 +11110100001000100001000000000000 +11001001110000110111000000000000 +00010101101000110000000000011111 +11001000001011010110100000000000 +11001001110000100111000000000000 +11110101101000010000100000000000 +11001001110000110111000000000000 +01111000000000100000000000000001 +11001001110000010111000000000000 +00111000010000100111111100001100 +00110100000000010000000010000111 +11111000000000000000100100000000 +10111001101000000001000000000000 +00110100000000110000000000000001 +10111001110000000000100000000000 +11111011111111111111110010100100 +10111000001000000001100000000000 +10111001100000000001000000000000 +00110100000000010000000000000111 +11111000000000000000100011111000 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111111100100100 +11111000000000000000100011110100 +00101001011000110000000010001100 +01111000000000100000000000000001 +00110100000000010000000000000111 +00111000010000100111111100110100 +11111000000000000000100011101111 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111111101000000 +11111000000000000000100011101011 +00101001011000110000000001001000 +01111000000000100000000000000001 +00110100000000010000000000000111 +00111000010000100111111101010000 +11111000000000000000100011100110 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111111101011100 +11111000000000000000100011100010 +00101001011000110000000010000100 +01111000000000100000000000000001 +00110100000000010000000000000111 +00111000010000100111111101101000 +11111000000000000000100011011101 +01111000000000100000000000000001 +00110100000000010000000010000111 +00111000010000100111111101110100 +11111000000000000000100011011001 +00101001011000110000000001011000 +01111000000000100000000000000001 +00110100000000010000000000000111 +00111000010000100111111110000100 +11111000000000000000100011010100 +00110100000011000000000000000001 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000100011100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +11111011111111111110000111110100 +00110100000000100000000000000011 +01011100001000100000000000000011 +00110100000000010000000000000010 +11100000000000000000000000000010 +00110100000000010000000000000001 +01011001011000010000000000101000 +00110101011000100000000001001100 +00110101011000010000000001001000 +11111000000000000001011010100100 +00110100000000010000000000000000 +01011001011000000000000001000000 +01011001011000000000000001000100 +01011001011000000000000010001000 +01011001011000000000000010001100 +00110111100000100000000000001100 +00110100000000110000000000000000 +11111000000000000011000010011000 +01000100001000000000000000000110 +00101011100000010000000000001100 +01011001011000010000000010100000 +00110100000000010000000000000001 +01011001011000010000000010100100 +11100000000000000000000000000011 +01011001011000000000000010100000 +01011001011000000000000010100100 +00110100000000010000000000000000 +11111000000000000001011001101010 +01011001011000010000000000101100 +00110100000000010000000000000001 +01011001011000010000000001010100 +01011001011000010000000001010000 +00110100000000010000000000000000 +11111000000000000011000000100011 +01011001011000010000000000110100 +00110100000000010001111101000000 +01011001011000010000000010110100 +01111000000000010000000000000001 +00111000001000011001011100000000 +00101000001000010000000000000000 +01011001011000010000000010111000 +01011001011000010000000010111100 +00110101011000010000000000010100 +11111000000000000001011000001111 +00110100000000010000000000000000 +01011001011000000000000000011100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000010111111110100100 +11111000000000000001010011000001 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111011011010000100 +00101001011001010000000000000000 +01111000000000100000000000000001 +00110100001001000000000000000001 +10111000001000000001100000000000 +00111000010000101011011000110000 +10110100001000100000100000000000 +11001000101000110001100000000000 +10110100100000100001000000000000 +11111000000000000011010010100001 +00101001011000010000000000000000 +00110100001000011111111111111111 +01011001011000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111001100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00110111100010110000000000010100 +00110100000000100000000000000000 +00110100000000110000000000100100 +10111001011000000000100000000000 +11111000000000000011010011010101 +01111000000000110000000000000001 +10111001011000000000100000000000 +00110100000001000000000000000000 +00110100000000100000000000000000 +00111000011000111011011000110000 +00110100000010000000000000100000 +00110100000001110000000000001000 +11100000000000000000000000000100 +00110100100001000000000000000001 +00110100001000010000000000000100 +01000100100001110000000000010111 +10110100010000110010100000000000 +11100000000000000000000000000100 +00110000101000000000000000000000 +00110100010000100000000000000001 +00110100101001010000000000000001 +01000000101001100000000000000000 +01000100110010001111111111111100 +01000100110000000000000000001101 +10110100010000110010100000000000 +01011000001001010000000000000000 +11100000000000000000000000000010 +00110100010000100000000000000001 +10110100010000110010100000000000 +01000000101001010000000000000000 +01111100101010010000000000000000 +01111100101001100000000000100000 +10100001001001100011000000000000 +01011100110000001111111111111010 +01011100101001101111111111101011 +11100000000000000000000000000011 +00110100000011000000000000000000 +01000100100011000000000000100001 +00101011100000010000000000010100 +00110100000011000000000000000000 +01000000001000100000000000000000 +00110100000000010000000000100011 +01000100010000010000000000011100 +01111000000010110000000000000001 +01111000000011000000000000000001 +00111001011010111010111000011000 +00111001100011001010111011100000 +11100000000000000000000000010001 +00101001011000010000000000000000 +11111000000000000011010011101001 +10111000001000000110100000000000 +01011100001000000000000000001100 +00101001011000100000000000000100 +00110111100000010000000000011000 +11011000010000000000000000000000 +10111000001000000110000000000000 +01001100001011010000000000001110 +00101001011000100000000000000000 +01111000000000010000000000000001 +10111001100000000001100000000000 +00111000001000010111111110101100 +11111000000000000001010001100110 +11100000000000000000000000001000 +00110101011010110000000000001000 +00101011100000100000000000010100 +01010101100010111111111111101111 +01111000000000010000000000000001 +00111000001000010111111111000100 +11111000000000000001010001011111 +00110100000011001111111111101010 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000110100 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011001111110101100 +01111000000000100000000000000001 +00101000001001100000000000000000 +00110100000001010000000000111011 +00110100000000010000000000000000 +00111000010000101011011000110000 +00110100000001000000000001010000 +11100000000000000000000000000101 +10110100001000100011100000000000 +00110000111000110000000000000000 +00110100001000010000000000000001 +01000100001001000000000000000101 +10110100110000010001100000000000 +01000000011000110000000000000000 +01000100011000000000000000000010 +01011100011001011111111111111001 +01111000000000100000000000000001 +00111000010000101011011000110000 +10110100010000010001000000000000 +00110000010000000000000000000000 +01111000000000100000000000000001 +00111000010000101001111110101100 +00101000010000110000000000000000 +00110100000001000000000000111011 +10110100011000010001100000000000 +01011000010000110000000000000000 +01000000011001010000000000000000 +01011100101001000000000000000011 +00110100011000110000000000000001 +01011000010000110000000000000000 +01011100001000000000000000000110 +01111000000000100000000000000001 +01111000000000110000000000000001 +00111000010000101001111110101100 +00111000011000111001111101111000 +01011000010000110000000000000000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000011011011000110000 +01000100010000010000000000000011 +00110100000000110000000001010000 +11111000000000000011010110010000 +01111000000000010000000000000001 +00111000001000011011011000110000 +11111000000000000011010100010001 +01111000000000100000000000000001 +00111000010000101011011010000100 +01111000000010110000000000000001 +01011000010000010000000000000000 +00111001011010111011111111010000 +00110100000000010000000000000001 +01011001011000010000000000000000 +11111011111111111111111101110101 +01011001011000000000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011011011010001100 +01011000001000000000000000000000 +01111000000000010000000000000001 +00111000001000011011011010000100 +01011000001000000000000000000000 +01111000000000010000000000000001 +00111000001000011011011010001000 +01011000001000000000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111011011010001000 +00101001011000010000000000000000 +00110100000011000000000000000001 +01000100001011000000000000010000 +00110100000000100000000000000010 +01000100001000100000000010011101 +00110100000000100000000000000000 +01011100001000000000000010100101 +01111000000000010000000000000001 +00111000001000010111111111100000 +11111000000000000001001111111110 +01111000000000010000000000000001 +00111000001000011011011010001100 +01011000001000000000000000000000 +01111000000000010000000000000001 +00111000001000011011011010000100 +01011000001000000000000000000000 +01011001011011000000000000000000 +11100000000000000000000010001110 +11111000000000000001010011111110 +00110100000000100000000000000000 +01001000000000010000000010010111 +00110100000000100000000000011011 +01000100001000100000000000001000 +01111000000000100000000000000001 +00111000010000101011011010010000 +00101000010000110000000000000000 +01100100001001000000000001011011 +00000000011001010000000000010000 +10100000101001000010000000000000 +01000100100000000000000000000110 +01111000000000010000000000000001 +00111000001000011011011010010000 +01111000000000100000000000000001 +01011000001000100000000000000000 +11100000000000000000000000000011 +10111000001000110000100000000000 +01011000010000010000000000000000 +01111000000000010000000000000001 +00111000001000011011011010010000 +00101000001010110000000000000000 +00110100000000100000000000000001 +00100001011000010000000011111111 +01000100001000000000000010000001 +00110100000000010000000001111110 +01000101011000010000000000101110 +01001001011000010000000000000110 +00110100000000010000000000001001 +01000101011000010000000001101101 +00110100000000010000000000001101 +01011101011000010000000001000010 +11100000000000000000000000100000 +01111000000000100000000000000001 +00111000010000101000111011101100 +00101000010000010000000000000000 +01000101011000010000000000010000 +01111000000000100000000000000001 +00111000010000101000111011110000 +00101000010000010000000000000000 +01000101011000010000000000000100 +00110100000000010000000001111111 +01011101011000010000000000110111 +11100000000000000000000000100111 +01111000000000010000000000000001 +00111000001000011011011010001100 +00101000001000100000000000000000 +01001100000000100000000001011011 +00110100010000101111111111111111 +01011000001000100000000000000000 +00110100000000010000000001000100 +11100000000000000000000000001011 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011011011010001100 +00111000010000101011011010000100 +00101000001000110000000000000000 +00101000010000100000000000000000 +01001100011000100000000001010000 +00110100011000110000000000000001 +01011000001000110000000000000000 +00110100000000010000000001000011 +11111011111111111111111011110001 +11100000000000000000000001001011 +01111000000000010000000000000001 +00111000001000011000011110011000 +11111000000000000001001110110011 +01111000000000010000000000000001 +00111000001000011011011010001000 +00110100000000100000000000000010 +01011000001000100000000000000000 +11100000000000000000000001000011 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011011011010001100 +00111000010000101011011010000100 +00101000001000010000000000000000 +00101000010000100000000000000000 +01000100001000100000000000111100 +11111011111111111111111011101001 +00110100000000010000000001010000 +11100011111111111111111111101101 +01111000000010110000000000000001 +00111001011010111011011010001100 +00101001011000010000000000000000 +01001100000000010000000000110101 +00110100000000010000000001000100 +11111011111111111111111011011000 +00110100000000010000000001010000 +11111011111111111111111011010110 +00101001011000010000000000000000 +00110100001000011111111111111111 +11111011111111111111111011011100 +00101001011000010000000000000000 +00110100001000011111111111111111 +01011001011000010000000000000000 +11100000000000000000000000101010 +01111000000000010000000000000001 +10100001011000010000100000000000 +01011100001000000000000000100111 +01111000000000010000000000000001 +00111000001000011011011010000100 +00101000001001000000000000000000 +00110100000000010000000001001111 +01001000100000010000000000100010 +01111000000000010000000000000001 +00111000001000011011011010001100 +00101000001000110000000000000000 +01000100011001000000000000001000 +01111000000000100000000000000001 +00110100011000010000000000000001 +00111000010000101011011000110000 +10110100001000100000100000000000 +10110100011000100001000000000000 +11001000100000110001100000000000 +11111000000000000011001101110011 +01111000000000010000000000000001 +00111000001000011011011010001100 +00101000001000110000000000000000 +01111000000000100000000000000001 +00111000010000101011011000110000 +10110100010000110001000000000000 +00110000010010110000000000000000 +00110100011000100000000000000001 +01011000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011011011010000100 +00101000001000100000000000000000 +00110100010000100000000000000001 +01011000001000100000000000000000 +00110100000000010000000001000000 +11111011111111111111111010101100 +01111000000000100000000000000001 +00111000010000101011011010010000 +00101000010000100000000000000000 +01111000000000010000000000000001 +00111000001000010111111111101000 +11111000000000000001001101101100 +01111000000000010000000000000001 +00111000001000011011011010010000 +01011000001000000000000000000000 +00110100000000100000000000000001 +11100000000000000000000000001011 +01111000000000100000000000000001 +00111000010000101011011010000100 +00101000010000100000000000000000 +01111000000000010000000000000001 +00111000001000011011011000110000 +10110100001000100000100000000000 +00110000001000000000000000000000 +11111011111111111111111010110111 +01011001011000000000000000000000 +11100011111111111111111111110101 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00110100000001000000000000000001 +10111000001000000101100000000000 +10111000010000000110000000000000 +01000100001000000000000000000110 +01000000001000100000000000000000 +00110100000000010000000000101101 +01011100010000010000000000000011 +00110101011010110000000000000001 +00110100000001001111111111111111 +00110100000000010000000000000000 +00110100000000100000000000000000 +00110100000010000000000000001001 +00110100000001110000000000000101 +11100000000000000000000000101000 +00110100011001011111111111010000 +00100000101001100000000011111111 +01010100110010000000000000001011 +00000000010001100000000000011100 +00111100001000110000000000000100 +00010100101000010000000000011111 +10111000110000110001100000000000 +00111100010001100000000000000100 +10110100011000010001100000000000 +10110100110001010001000000000000 +11110100110000100011000000000000 +10110100110000110000100000000000 +11100000000000000000000000011010 +00110100011001101111111110111111 +00100000110001010000000011111111 +01010100101001110000000000001000 +00000000010010010000000000011100 +00111100001001010000000000000100 +00111100010000100000000000000100 +10111001001001010010100000000000 +00010100110000010000000000011111 +00110100011000111111111111001001 +11100000000000000000000000001010 +00110100011001101111111110011111 +00100000110001010000000011111111 +01010100101001110000000000010001 +00000000010010010000000000011100 +00111100001001010000000000000100 +00111100010000100000000000000100 +00010100110000010000000000011111 +10111001001001010010100000000000 +00110100011000111111111110101001 +11110100110000110011000000000000 +10110100011000100001000000000000 +10110100110000010011000000000000 +11110100011000100001100000000000 +10110100110001010010100000000000 +10110100011001010000100000000000 +00110101011010110000000000000001 +01000101011000000000000000000011 +01000001011000110000000000000000 +01011100011000001111111111010111 +00010100100000110000000000011111 +11111000000000000011000111011110 +01011001100000010000000000000000 +10111001011000000000100000000000 +01011001100000100000000000000100 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +00110111100000100000000000001100 +11111011111111111111111110110101 +00101011100000100000000000010000 +01011001011000100000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110100000001000000000000000001 +01000100001000000000000000000110 +01000000001001010000000000000000 +00110100000000110000000000101101 +01011100101000110000000000000011 +00110100001000010000000000000001 +00110100000001001111111111111111 +00110100000000110000000000000000 +00110100000001100000000000001001 +11100000000000000000000000000111 +00110100101001011111111111010000 +00100000101001110000000011111111 +01010100111001100000000000000111 +00001000011000110000000000001010 +00110100001000010000000000000001 +10110100101000110001100000000000 +01000100001000000000000000000011 +01000000001001010000000000000000 +01011100101000001111111111111000 +10001000011001000001100000000000 +01011000010000110000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011011111101110100 +01000000001000010000000000000000 +01000100001000000000000000101100 +01111000000011010000000000000001 +01111000000011000000000000000001 +01111000000010110000000000000001 +00111001101011011011011010000100 +00111001100011000111111111101100 +00111001011010111011011000110000 +11111011111111111111111010001000 +01011001101000010000000000000000 +01011100001000000000000000001001 +01111000000010110000000000000001 +01111000000011100000000000000001 +01111000000011010000000000000001 +00110100000011000000000000000000 +00111001011010111011011000110000 +00111001110011101011011010000100 +00111001101011010111111111101100 +11100000000000000000000000000111 +10111001100000000000100000000000 +10111001011000000001000000000000 +11111000000000000001001011010001 +10111001011000000000100000000000 +11111011111111111111111010011111 +11100011111111111111111111110000 +10111001011000000000100000000000 +00110100000000100000000001010000 +10111001100000000001100000000000 +11111000000000000010001100100010 +01011001110000010000000000000000 +01001000001000000000000000000110 +01011101100000000000000000001110 +01111000000000010000000000000001 +00111000001000010111111111111100 +11111000000000000001001011000100 +11100000000000000000000000001010 +10110101011000010000100000000000 +00110000001000001111111111111111 +10111001011000000001000000000000 +10111001101000000000100000000000 +11111000000000000001001010111110 +10111001011000000000100000000000 +11111011111111111111111010001100 +00110100000011000000000000000001 +11100011111111111111111111101101 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011000000000010100 +01111000000011100000000000000001 +01111000000011010000000000000001 +01111000000011000000000000000001 +11111000000000000001001010100111 +00110100000010110000000000000000 +00111001110011101011011010000100 +00111001101011010111100111101000 +00111001100011001011011000110000 +11111011111111111111111001001100 +01011001110000010000000000000000 +01000100001000000000000000000111 +10111001101000000000100000000000 +10111001100000000001000000000000 +00110101011010110000000000000001 +11111000000000000001001010011100 +00100001011010110000000011111111 +11100011111111111111111111111000 +01011101011000010000000000000100 +01111000000000010000000000000001 +00111000001000011000000000101100 +11111000000000000001001010010110 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011100001010101100 +00101000001000010000000000000000 +01111000000000110000000000000001 +00111000011000111001011011101000 +00101000011000100000000000000000 +00101000001010110000000000001100 +01111000000000110000000000000001 +01111000000000010000000000000001 +00111000011000111000000011100000 +00111000001000011000000000111000 +11111000000000000001001010000000 +01111000000001010000000000000001 +01111000000000110000000000000001 +01111000000001000000000000000001 +00111000101001011001011011101100 +00111000011000111001011011110000 +00111000100001001001011011110100 +00101000101000100000000000000000 +00101000011000110000000000000000 +00101000100001000000000000000000 +01111000000000010000000000000001 +00111000001000011000000001010000 +11111000000000000001001001110100 +00100001011010110000000000001111 +00110101011010110000000000000001 +01111000000000010000000000000001 +00110100000000100000000010000000 +00111101011010110000000000000100 +00111000001000011000000001100100 +00110100000000110000100000000000 +11111000000000000001001001101100 +00110101011000011111111110000000 +00110100000000100000000000001111 +01010000010000010000000000000110 +01111000000000010000000000000001 +00111000001000011000000010001100 +10111001011000000001000000000000 +00110101011000110000000000010000 +11111000000000000001001001100100 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +00101000001000100000000000000000 +01000100010000000000000000000110 +01111000000011100000000000000001 +10111000001000000101100000000000 +00111001110011101001111110110000 +00110100000011110000000000001000 +11100000000000000000000000110011 +00110100000000011111111111111111 +11111011111111111110000000100101 +00111100001000010000000000000010 +01111000000000100000000000000001 +00111000010000101001001010011000 +10110100010000010001000000000000 +00110100000000011111111111111111 +00101000010011000000000000000000 +11111011111111111101111101000101 +00111100001000010000000000000010 +01111000000000110000000000000001 +00111000011000111001001010100000 +10110100011000010001100000000000 +00101000011010110000000000000000 +11111011111111111101111100111011 +00111100001000010000000000000010 +01111000000001000000000000000001 +00111000100001001001001010101000 +10110100100000010010000000000000 +00101000100001000000000000000000 +01111000000000010000000000000001 +00111000001000011000000010111100 +10111001100000000001000000000000 +10111001011000000001100000000000 +11111000000000000001001000110110 +00110100000000010000000000000000 +11100000000000000000000000011011 +10111001110000000110000000000000 +00110100000011010000000000000000 +00101001011000010000000000000000 +00101001100000100000000000000000 +11111000000000000011001010100110 +10111000001000001000000000000000 +01011100001000000000000000000110 +00101001100000100000000000000100 +00101001100000010000000000001000 +11011000010000000000000000000000 +01001010000000010000000000010000 +11100000000000000000000000000100 +00110101101011010000000000000001 +00110101100011000000000000001100 +01011101101011111111111111110100 +00110101011010110000000000000100 +01011101101011110000000000000111 +00101010001000100000000000000000 +01111000000000010000000000000001 +00111000001000011000000011001000 +11111000000000000001001000011111 +00110100000000011111111111101010 +11100000000000000000000000000100 +00101001011000010000000000000000 +10111001011000001000100000000000 +01011100001000001111111111100111 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011000000100101000 +01111000000010110000000000000001 +01111000000011010000000000000001 +01111000000011000000000000000001 +11111000000000000001001000000101 +00111001011010111010111000011000 +00111001101011011010111011100000 +00111001100011001000000101000000 +11100000000000000000000000000101 +00101001011000100000000000000000 +10111001100000000000100000000000 +00110101011010110000000000001000 +11111000000000000001000111111101 +01010101101010111111111111111100 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00110100000010110000000000000000 +10111000010000000110100000000000 +00110100000011000000000000000110 +00110111100000100000000000010100 +11111011111111111111111011011011 +00101011100000110000000000010100 +10110101101010110001000000000000 +00110101011010110000000000000001 +00110000010000110000000000000000 +01000000001000100000000000000000 +01100100010000100000000000111010 +10110100001000100000100000000000 +01011101011011001111111111110111 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000010000000100000000000000 +01000001000000110000000000000000 +01000001000001000000000000000001 +01000001000001010000000000000010 +01000001000001100000000000000011 +01000001000001110000000000000100 +01000001000010000000000000000101 +01111000000000100000000000000001 +00111000010000101000000101010000 +10111000001000000101100000000000 +11111000000000000001000111000001 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111010000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01000100001000000000000000000101 +01111000000000100000000000000001 +00111000010000101000000101110000 +11111000000000000011001000111000 +01011100001000000000000000000100 +00110111100000010000000000101100 +11111000000000000001001011111111 +11100000000000000000000000101011 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000000101110100 +11111000000000000011001000110000 +01011100001000000000000000001000 +00110111100010110000000000101100 +10111001011000000000100000000000 +11111000000000000001001011110110 +10111001011000000001000000000000 +00110100000000010000000000000000 +11111000000000000001111100100011 +11100000000000000000000000011111 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000000101111100 +11111000000000000011001000100100 +01011100001000000000000000001011 +00101001011000110000000000000100 +01000100011000010000000000001001 +00110111100010110000000000101100 +10111000011000000000100000000000 +10111001011000000001000000000000 +11111011111111111111111110110010 +10111001011000000000100000000000 +11111000000000000001001011010001 +11111000000000000001001111001100 +11100000000000000000000000010000 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000000110000000 +11111000000000000011001000010101 +10111000001000000001100000000000 +00110100000000101111111111101010 +01011100001000000000000000010001 +00101001011000010000000000000100 +01000100001000110000000000001111 +00110111100010110000000000101100 +10111001011000000001000000000000 +11111011111111111111111110100010 +00110100000000010000000000000000 +10111001011000000001000000000000 +11111000000000000001111101101101 +00110111100000100000000000101100 +00110111100000010000000000001100 +11111011111111111111111110110100 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000011000000110001000 +11111000000000000001000110001100 +00110100000000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000110000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01000100001000000000000000100100 +01111000000000100000000000000001 +00111000010000101000000110100000 +11111000000000000011000111110000 +01011100001000000000000000001101 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011010111011101100 +00111000010000101011000010101100 +11100000000000000000000000000110 +01011000001000000000000000011100 +01011000001000000000000000011000 +01011000001000000000000000010100 +01011000001000000000000000010000 +00110100001000010000000000100000 +01010100010000011111111111111011 +11100000000000000000000000101100 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000000110101000 +11111000000000000011000111011111 +10111000001000000001000000000000 +01011100001000000000000000001110 +00101001011000010000000000000100 +01000100001000100000000000000101 +11111000000000000000010101010100 +01111000000000100000000000000001 +00111000010000101011000010110100 +01011000010000010000000000000000 +01111000000000100000000000000001 +00111000010000101011000010110100 +00101000010000100000000000000000 +01111000000000010000000000000001 +00111000001000011000000110101100 +11111000000000000001000101011010 +11100000000000000000000000011001 +01111000000000010000000000000001 +00111000001000011000000111001100 +01111000000010110000000000000001 +01111000000011010000000000000001 +01111000000011000000000000000001 +11111000000000000001000101010011 +00111001011010111010111011101100 +00111001101011011011000010101100 +00111001100011001000000111111100 +11100000000000000000000000001110 +00101001011000010000000000011000 +00110100000000100000001111101000 +00101001011011110000000000010000 +11111000000000000011000010100010 +00101001011011100000000000010100 +00101001011001010000000000011100 +00101001011001100000000000000000 +10111000001000000010000000000000 +10111001111000000001000000000000 +10111001100000000000100000000000 +10111001110000000001100000000000 +11111000000000000001000101000011 +00110101011010110000000000100000 +01010101101010111111111111110011 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01111000000000100000000000000000 +00111000010000100000000010100000 +00101000010000100000000000000000 +01111000000000010000000000000001 +00111000001000011000001000100000 +11111000000000000001000100110000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100111010000000000000100 +10111000001000000001000000000000 +00101000001000010000000000000000 +01000100001000000000000000001101 +00101000010000100000000000000100 +01011100010000000000000000001011 +00110111100000100000000000001000 +11111011111111111111111000011111 +00101011100000100000000000001000 +01111000000000010000000000000001 +00111000001000011001011011111000 +00001000010000100000001111101000 +01011000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011000011110011000 +11100000000000000000000000000011 +01111000000000010000000000000001 +00111000001000011000001000100100 +11111000000000000001000100011000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01011100001000000000000000010001 +01111000000000010000000000000001 +00111000001000011100001010010100 +00101000001000100000000000000000 +00110100000010110000000000000000 +01100100010000100000000000000000 +01011000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011011111110110100 +00101000001000110000000000000000 +00110100011000111111111111111111 +01011000001000110000000000000000 +01011100010010110000000000101011 +01111000000000010000000000000001 +00111000001000011000001001001000 +11111000000000000001000011111111 +11100000000000000000000000100111 +01111000000000100000000000000001 +00111000010000101000001001011100 +11111000000000000011000101110010 +01011100001000000000000000000111 +11111000000000000001001010100011 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000011000101000100100 +11111000000000000001000011110101 +11100000000000000000000000011100 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000100111000100101100 +11111000000000000011000101100111 +01011100001000000000000000001011 +01111000000000010000000000000001 +00111000001000011100001010010100 +00110100000000100000000000000001 +01011000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011011111110110100 +00101000001000100000000000000000 +00110100010000101111111111111111 +01011000001000100000000000000000 +11100000000000000000000000001101 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001001100000 +11111000000000000011000101011000 +00110100000010111111111111101010 +01011100001000000000000000001000 +01111000000000010000000000000001 +00111000001000011100001010010100 +01011000001000000000000000000000 +01111000000000010000000000000001 +00111000001000011000001001001000 +11111000000000000001000011011001 +00110100000010110000000000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111110111000 +01011011100010110000000000101000 +01011011100011000000000000100100 +01011011100011010000000000100000 +01011011100011100000000000011100 +01011011100011110000000000011000 +01011011100100000000000000010100 +01011011100100010000000000010000 +01011011100100100000000000001100 +01011011100100110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01000100001000000000000011001000 +01111000000000100000000000000001 +00111000010000101000001010000000 +11111000000000000011000100111001 +01011100001000000000000000001000 +11111000000000000001111011001010 +00110100000000111111111111111111 +00110100000000100000000000000000 +01011100001000110000000011000100 +01111000000000010000000000000001 +00111000001000011000001010001000 +11100000000000000000000000111100 +00101001011000010000000000010000 +01000100001000000000000001000101 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001010011100 +11111000000000000011000100101011 +01011100001000000000000001000000 +00101001011000010000000000000100 +00110100000000100000000000010000 +00110101011011000000000000000100 +11111000000000000011001001001010 +00111100001000010000000000011000 +00110100000000110000000000000000 +00010100001000010000000000011000 +00110111100001000000000000101100 +11100000000000000000000000000111 +00101001100000100000000000000000 +10110100100000110010100000000000 +10110100010000110001000000000000 +01000000010000100000000000000000 +00110100011000110000000000000001 +00110000101000100000000000000000 +10110000011000000001000000000000 +01001000001000101111111111111001 +10110100100000100000100000000000 +00110100000000110000000000100000 +00110100000001000000000000001111 +11100000000000000000000000000101 +00110100010000100000000000000001 +00110000001000110000000000000000 +10110000010000000001000000000000 +00110100001000010000000000000001 +01001100100000101111111111111100 +00101001011000010000000000001000 +11111000000000000000010010001000 +01011011100000010000000001000000 +00101001011000010000000000001100 +11111000000000000000010010000101 +01011011100000010000000001000100 +00101001011000010000000000010000 +11111000000000000000010010000010 +01011011100000010000000000111100 +00110100000000100000000000000001 +00110111100000010000000000101100 +00110100000000110000000000000000 +11111000000000000001111011110110 +00111100001000100000000000011000 +00110100000000011111111111111110 +00010100010000100000000000011000 +01011100010000010000000000000110 +01111000000000010000000000000001 +00111000001000011000001010100000 +11111000000000000001000010000101 +00110100000000101111111111100100 +11100000000000000000000010001010 +00110100000000011111111111111111 +01011100010000010000000000000110 +01111000000000010000000000000001 +00111000001000011000001010110000 +11111000000000000001000001111110 +00110100000000101111111111111011 +11100000000000000000000010000011 +01001100010000000000000000000100 +01111000000000010000000000000001 +00111000001000011000001010111100 +11100000000000000000000000100011 +01111000000000010000000000000001 +00111000001000011000001011011000 +11111000000000000001000001110101 +11100000000000000000000001110101 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001011101000 +11111000000000000011000011100111 +01011100001000000000000000110000 +01111000000100000000000000000001 +01111000000011110000000000000001 +01111000000011100000000000000001 +00110100000011000000000000000000 +00110100000100010000000000000000 +00110111100100100000000000101100 +00111010000100001000001100000100 +00110111100100110000000000111100 +00111001111011110111111111101000 +00111001110011101000001100001100 +10111010010000000000100000000000 +00110100000000100000000000000000 +10111001100000000001100000000000 +11111000000000000001111011001011 +00111100001010110000000000011000 +00010101011010110000000000011000 +01011101011000000000000000000101 +01111000000000010000000000000001 +00111000001000011000001011110000 +11111000000000000001000001011011 +11100000000000000000000001011011 +01001101011000000000000000000111 +01111000000000010000000000000001 +00111000001000011000001010111100 +10111001011000000001000000000000 +11111000000000000001000001010101 +00110100000000101111111111110010 +11100000000000000000000001011010 +00110101100011000000000000000001 +10111010000000000000100000000000 +10111001100000000001000000000000 +11111000000000000001000001001111 +10111010010000000110100000000000 +01000001101000100000000000000000 +10111001111000000000100000000000 +00110101101011010000000000000001 +11111000000000000001000001001010 +01011101101100111111111111111100 +00101011100000100000000001000000 +00101011100000110000000001000100 +00101011100001000000000000111100 +00110110001100010000000000000001 +10111001110000000000100000000000 +10110010001000001000100000000000 +11111000000000000001000001000010 +01001001011100011111111111011101 +11100000000000000000000001000001 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001100101100 +11111000000000000011000010110011 +01011100001000000000000000110010 +11111000000000000001011100000111 +00111100001011000000000000011000 +00110100000000011111111111101101 +00010101100011000000000000011000 +01011101100000010000000000000110 +01111000000000010000000000000001 +00111000001000011000001100110100 +11111000000000000001000000110011 +00110100000000101111111111101101 +11100000000000000000000000111000 +01111000000010110000000000000001 +00111001011010111011111110111100 +01111000000011010000000000000001 +00110100000000011111111111111011 +00110101011011100000000000010000 +00111001101011010111111111101000 +01011101100000010000000000000100 +01111000000000010000000000000001 +00111000001000011000001101000000 +11100011111111111111111110101001 +01000001011000100000000000000000 +10111001101000000000100000000000 +00110101011010110000000000000001 +11111000000000000001000000100011 +01011101011011101111111111111100 +01111000000000010000000000000001 +00111000001000011000011110011000 +11111000000000000001000000011111 +00110100000000011111111111111010 +01011101100000010000000000000110 +01111000000000010000000000000001 +00111000001000011000001101010000 +11111000000000000001000000011010 +00110100000000101111111111111010 +11100000000000000000000000011111 +01111000000000100000000000000001 +01111000000000110000000000000001 +01111000000001000000000000000001 +00111000010000101011111101000000 +00111000011000111011111101000100 +00111000100001001010100000001000 +00101000010000100000000000000000 +00101000011000110000000000000000 +00101000100001000000000000000000 +01111000000000010000000000000001 +00111000001000011000001101101000 +11111000000000000001000000001100 +10111001100000000001000000000000 +11100000000000000000000000010001 +00101001011000010000000000000100 +01000100001000000000000000001011 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001110010000 +11111000000000000011000001111011 +01011100001000000000000000000110 +00101001011000010000000000000100 +11111000000000000000001111110010 +11111000000000000001000111110111 +00110100000000100000000000000000 +11100000000000000000000000000101 +01111000000000010000000000000001 +00111000001000011000001001101100 +11111000000000000000111111111011 +00110100000000101111111111101010 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000101000 +00101011100011000000000000100100 +00101011100011010000000000100000 +00101011100011100000000000011100 +00101011100011110000000000011000 +00101011100100000000000000010100 +00101011100100010000000000010000 +00101011100100100000000000001100 +00101011100100110000000000001000 +00110111100111000000000001001000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001110011000 +11111000000000000011000001011010 +01011100001000000000000000010001 +00101001011000110000000000001100 +00110100000000101111111111101010 +01000100011000010000000010000110 +00101001011000010000000000000100 +11111000000000000000001111001110 +10111000001000000110100000000000 +00101001011000010000000000001000 +11111000000000000000001111001011 +10111000001000000110000000000000 +00101001011000010000000000001100 +11111000000000000000001111001000 +10111000001000000001100000000000 +10111001100000000001000000000000 +10111001101000000000100000000000 +11111000000000000010101001010100 +11100000000000000000000001111000 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001110100000 +11111000000000000011000001000101 +10111000001000000001100000000000 +01011100001000000000000000000111 +00101001011000010000000000000100 +00110100000000101111111111101010 +01000100001000110000000001110000 +11111000000000000000001110111001 +11111000000000000010101100010010 +11100000000000000000000001100000 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001001100100 +11111000000000000011000000111001 +01011100001000000000000000000011 +11111000000000000010101110101111 +11100000000000000000000001100101 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001110100100 +11111000000000000011000000110010 +01011100001000000000000000001101 +00101001011000110000000000001000 +00110100000000101111111111101010 +01000100011000010000000001011110 +00101001011000010000000000000100 +11111000000000000000001110100110 +10111000001000000110000000000000 +00101001011000010000000000001000 +11111000000000000000001110100011 +10111000001000000001000000000000 +10111001100000000000100000000000 +11111000000000000010101100001011 +11100000000000000000000001010100 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001110101000 +11111000000000000011000000100001 +10111000001000000001100000000000 +01011100001000000000000000001110 +00101001011000010000000000000100 +00110100000000101111111111101010 +01000100001000110000000001001100 +11111000000000000000001110010101 +00110111100000100000000000011000 +00110111100000110000000000010100 +11111000000000000010101100100101 +00101011100000100000000000011000 +00101011100000110000000000010100 +01111000000000010000000000000001 +00111000001000011000001110101100 +11111000000000000000111110011100 +11100000000000000000000001000001 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000000011100100 +11111000000000000011000000001110 +10111000001000000001100000000000 +01011100001000000000000000000111 +00101001011000010000000000000100 +00110100000000101111111111101010 +01000100001000110000000000111001 +11111000000000000000001110000010 +11111000000000000010101010111101 +11100000000000000000000000110101 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000000011101100 +11111000000000000011000000000010 +10111000001000000001100000000000 +01011100001000000000000000000111 +00101001011000010000000000000100 +00110100000000101111111111101010 +01000100001000110000000000101101 +11111000000000000000001101110110 +11111000000000000010101011000010 +11100000000000000000000000101001 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001110110100 +11111000000000000010111111110110 +01011100001000000000000000001101 +00101001011000110000000000001000 +00110100000000101111111111101010 +01000100011000010000000000100010 +00101001011000010000000000000100 +11111000000000000000001101101010 +10111000001000000110000000000000 +00101001011000010000000000001000 +11111000000000000000001101100111 +10111000001000000001000000000000 +10111001100000000000100000000000 +11111000000000000010101111010110 +11100000000000000000000000011000 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001110111100 +11111000000000000010111111100101 +10111000001000000001100000000000 +01011100001000000000000000001011 +00101001011000010000000000000100 +00110100000000101111111111101010 +01000100001000110000000000010000 +11111000000000000000001101011001 +11111000000000000010101110111011 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000010111111111000000 +11111000000000000000111101100011 +11100000000000000000000000001000 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001111000100 +11111000000000000010111111010101 +00110100000000101111111111101010 +01011100001000000000000000000011 +11111000000000000010110001101101 +00110100000000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01000100001000000000000000001011 +01111000000000100000000000000001 +00111000010000101000001111010100 +11111000000000000010111111000000 +10111000001000000110000000000000 +01011100001000000000000000000110 +00110111100000010000000000010000 +11111000000000000001011110010110 +00110100000010111111111111111111 +01001001100000010000000000100001 +11100000000000000000000000011100 +00101001011000010000000000000000 +00110100000010110000000000000000 +01011100001000000000000000011101 +00110111100000010000000000010000 +00110100000000100000000000000000 +11111000000000000001111001111000 +01001101011000010000000000001010 +00101011100000100000000000010000 +01111000000000010000000000000001 +00111000001000011000001111011100 +11111000000000000000111100110111 +00101011100000100000000000010000 +01111000000000010000000000000001 +00111000001000011001011100000000 +01011000001000100000000000000000 +11100000000000000000000000010000 +01111000000000010000000000000001 +00111000001000011000010000000100 +11111000000000000000111100101111 +00110111100000010000000000010000 +11111000000000000001011101111110 +00110100000010111111111111111111 +01001000000000010000000000001001 +00101011100000100000000000010000 +01111000000000010000000000000001 +00111000001000011001011100000000 +01011000001000100000000000000000 +00110111100000010000000000010000 +00110100000000100000000000000001 +11111000000000000001111001100000 +10111000001000000101100000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00110111100000100000000000011000 +00110111100000010000000000010000 +11111000000000000001101000000110 +00101001011000010000000000001000 +01000100001000000000000000010100 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000000101111100 +11111000000000000010111110000110 +01011100001000000000000000001111 +11111011111111111101110000001000 +00110100000000110000000000000011 +00110100000000101111111111110000 +01000100001000110000000001000000 +00101001011000010000000000000100 +11111000000000000000001011111001 +10111000001000000110000000000000 +00101001011000010000000000001000 +11111000000000000000001011110110 +10111000001000000001100000000000 +10111001100000000001000000000000 +00010101100000010000000000011111 +00110100000001000000000000000011 +11100000000000000000000000100000 +00101001011000010000000000000000 +01000100001000000000000000001111 +01111000000000100000000000000001 +00111000010000101000010000111000 +11111000000000000010111101110010 +01011100001000000000000000001011 +11111011111111111101101111110100 +00110100000000100000000000000011 +01000100001000100000000000100011 +00101001011000010000000000000100 +11111000000000000000001011100110 +10111000001000000001000000000000 +00110100000000110000000000000000 +00010100001000010000000000011111 +00110100000001000000000000000001 +11100000000000000000000000010000 +00101001011000010000000000000000 +01000100001000000000000000010000 +01111000000000100000000000000001 +00111000010000101000010001000000 +11111000000000000010111101100010 +01011100001000000000000000001100 +11111011111111111101101111100100 +00110100000000100000000000000011 +01000100001000100000000000010011 +00101001011000010000000000000100 +11111000000000000000001011010110 +10111000001000000001100000000000 +00110100000000100000000000000000 +00110100000000010000000000000000 +00110100000001000000000000000010 +11111000000000000001100110110001 +11100000000000000000000000010100 +00101001011000010000000000000000 +01000100001000000000000000001001 +01111000000000100000000000000001 +00111000010000101000010001001000 +11111000000000000010111101010001 +01011100001000000000000000000101 +01111000000000010000000000000001 +00111000001000011000001110101100 +00101011100000100000000000010100 +11100000000000000000000000001000 +00101011100000100000000000010100 +00101011100000010000000000010000 +00110100000000110000000000000000 +11111000000000000000000111101010 +10111000001000000001000000000000 +01111000000000010000000000000001 +00111000001000011000010001001100 +00101011100000110000000000011000 +11111000000000000000111011001100 +00110100000000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011011000010110000 +00110100000000100000000000000001 +01011000001000100000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01011100001000000000000000000011 +11111000000000000001010111101111 +11100000000000000000000001010111 +00101001011000010000000000000100 +00110100000011001111111111101010 +01000100001000000000000001010101 +00101001011000100000000000001100 +01000100010000000000000000001000 +11111000000000000000001010011111 +01011100001000000000000000000110 +00101001011000010000000000001100 +00110100000011010000000001010000 +11111000000000000000001010011011 +00111100001011100000000000001010 +11100000000000000000000000000111 +00101001011000010000000000001100 +00110100000011100000000000000001 +00110100000011010000000001010000 +01000100001000000000000000000011 +11111000000000000000001010010100 +00100000001011010000000011111111 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000010001110000 +11111000000000000010111100010101 +01011100001000000000000000001101 +00101001011000100000000000001000 +01000100010000010000000000001011 +00101001011000010000000000000100 +11111000000000000000001010001010 +10111000001000000110000000000000 +00101001011000010000000000001000 +11111000000000000000001010000111 +10111000001000000001000000000000 +10111001110000000001100000000000 +10111001100000000000100000000000 +10111001101000000010000000000000 +11100000000000000000000000010000 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000010001110000 +11111000000000000010111100000100 +01011100001000000000000000001101 +01111000000011000000000000000001 +00111001100011001011111110100100 +00101001100000100000000000000100 +01000100010000010000000000001001 +00101001011000010000000000000100 +11111000000000000000001001110111 +01011100001000000000000000000110 +00101001100000100000000000001100 +00101001100000110000000000001000 +00110100000001000000000000000000 +11111000000000000001111101111100 +11100000000000000000000000100011 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000010001110100 +11111000000000000010111011110011 +01011100001000000000000000001101 +00101001011000100000000000001000 +01000100010000010000000000001011 +00101001011000010000000000000100 +11111000000000000000001001101000 +10111000001000000110000000000000 +00101001011000010000000000001000 +11111000000000000000001001100101 +10111000001000000001000000000000 +10111001110000000001100000000000 +10111001100000000000100000000000 +10111001101000000010000000000000 +11100000000000000000000000010001 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000010001110100 +11111000000000000010111011100010 +00110100000011001111111111101010 +01011100001000000000000000001101 +01111000000011010000000000000001 +00111001101011011011111110100100 +00101001101000100000000000000100 +01000100010000010000000000001001 +00101001011000010000000000000100 +11111000000000000000001001010100 +01011100001000000000000000000110 +00101001101000100000000000001100 +00101001101000110000000000001000 +00110100000001000000000000000000 +11111000000000000001111100011001 +00110100000011000000000000000000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01000100001000000000000000001100 +01111000000000100000000000000001 +00111000010000101000010010000100 +11111000000000000010111011000011 +01011100001000000000000000001000 +00110100000000010000000000000001 +11111011111111111110011010010101 +01111000000000010000000000000001 +00111000001000011001011011111100 +00110100000000100000000000000001 +01011000001000100000000000000000 +11100000000000000000000000001011 +00101001011000010000000000000000 +01000100001000000000000000001001 +01111000000000100000000000000001 +00111000010000101000010010001100 +11111000000000000010111010110110 +01011100001000000000000000000101 +11111011111111111110011010001001 +01111000000000010000000000000001 +00111000001000011001011011111100 +01011000001000000000000000000000 +01111000000000010000000000000001 +00111000001000011001011011111100 +00101000001000010000000000000000 +01111000000000100000000000000001 +00111000010000101000010010000000 +01000100001000000000000000000011 +01111000000000100000000000000001 +00111000010000101000010001111100 +01111000000000010000000000000001 +00111000001000011000010010010100 +11111000000000000000111000101111 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00110100000010110000000000000000 +10111000010000000110100000000000 +00110100000011000000000000000100 +00110111100000100000000000010100 +11111011111111111111101100011100 +00101011100000110000000000010100 +10110101101010110001000000000000 +00110101011010110000000000000001 +00110000010000110000000000000000 +01000000001000100000000000000000 +01100100010000100000000000101110 +10110100001000100000100000000000 +01011101011011001111111111110111 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000010000000011000000000000 +01000000110000110000000000000000 +01000000110001000000000000000001 +01000000110001010000000000000010 +01000000110001100000000000000011 +01111000000000100000000000000001 +00111000010000101000010010110000 +10111000001000000101100000000000 +11111000000000000000110111111000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01000100001000000000000000000101 +01111000000000100000000000000001 +00111000010000101000000101110000 +11111000000000000010111001101111 +01011100001000000000000000000100 +00110111100000010000000000100000 +11111000000000000000010010010111 +11100000000000000000000000010010 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000000101111100 +11111000000000000010111001100111 +10111000001000000001100000000000 +00110100000000101111111111101010 +01011100001000000000000000100100 +00101001011000010000000000000100 +01000100001000110000000000100010 +01111000000000100000000000000001 +00111000010000101011100011111000 +00110100000000110000000000000010 +01011000010000110000000000000000 +00110111100000100000000000100000 +11111011111111111111111110111100 +00110111100000010000000000100000 +11111000000000000000010010001110 +00110111100010110000000000001100 +00110111100000100000000000100000 +10111001011000000000100000000000 +11111011111111111111111111001110 +01111000000000010000000000000001 +00111000001000011011100011111000 +00101000001000010000000000000000 +00110100000000100000000000000001 +01000100001000100000000000001001 +01000100001000000000000000000100 +00110100000000100000000000000010 +01011100001000100000000000001101 +11100000000000000000000000001000 +01111000000000010000000000000001 +00111000001000011000010010111100 +11111000000000000000110111010011 +11100000000000000000000000001000 +01111000000000010000000000000001 +00111000001000011000010011011000 +11100000000000000000000000000011 +01111000000000010000000000000001 +00111000001000011000010011111000 +10111001011000000001000000000000 +11111000000000000000110111001011 +00110100000000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000001000010000000000000000 +01000100001000000000000000000101 +11111011111111111101100010100001 +01111000000000100000000000000001 +00111000010000101011000011001100 +01011000010000010000000000000000 +01111000000000100000000000000001 +00111000010000101011000011001100 +00101000010000100000000000000000 +01111000000000010000000000000001 +00111000001000011000010100100000 +11111000000000000000110110110111 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01000100001000000000000000001011 +01111000000000100000000000000001 +00111000010000101000001010000000 +11111000000000000010111000100000 +10111000001000000110000000000000 +01011100001000000000000000000110 +11111000000000000001110100100100 +01001100001011000000000000100110 +01111000000000010000000000000001 +00111000001000011000010101000000 +11100000000000000000000000001110 +00101001011000010000000000000100 +01000100001000000000000000010001 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001010011100 +11111000000000000010111000010011 +10111000001000000110000000000000 +01011100001000000000000000001011 +10111001011000000000100000000000 +11111000000000000001110100111100 +01001100001011000000000000000101 +01111000000000010000000000000001 +00111000001000011000010101100000 +11111000000000000000110110010100 +11100000000000000000000000010100 +01111000000000010000000000000001 +00111000001000011000010101111100 +11100011111111111111111111111100 +00101001011000010000000000000000 +01000100001000000000000000001000 +01111000000000100000000000000001 +00111000010000101000001011101000 +11111000000000000010111000000010 +01011100001000000000000000000100 +11111011111111111111101011010111 +11111000000000000001110110100000 +11100000000000000000000000001000 +00101001011000010000000000000000 +01000100001000000000000000000110 +01111000000000100000000000000001 +00111000010000101000010110000100 +11111000000000000010110111111001 +01011100001000000000000000000010 +11111011111111111111101010010010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01000100001000000000000000100111 +01111000000000100000000000000001 +00111000010000101000000101110000 +11111000000000000010110111101000 +01000100001000000000000000100011 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000000101111100 +11111000000000000010110111100011 +10111000001000000001000000000000 +01011100001000000000000000010011 +00101001011000010000000000000100 +01000100001000100000000000010001 +00110111100000100000000000001100 +11111011111111111111101001100010 +00101011100000100000000000001100 +00110100000000110000111111111110 +00110100010000011111111111111111 +01010000011000010000000000000111 +00101001011000110000000000000100 +01111000000000010000000000000001 +00111000001000011000010110001100 +11111000000000000000110101011110 +00110100000000101111111111101010 +11100000000000000000000000010111 +01111000000000010000000000000001 +00111000001000011001011100000100 +01011000001000100000000000000000 +11100000000000000000000000001010 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000001001100000 +11111000000000000010110111001011 +00110100000000101111111111101010 +01011100001000000000000000001101 +01111000000000010000000000000001 +00111000001000011001011100000100 +01011000001000000000000000000000 +11111000000000000000111101110111 +01111000000000010000000000000001 +00111000001000011001011100000100 +00101000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011000010110100100 +10111000010000000001100000000000 +11111000000000000000110101000111 +00110100000000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111011100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +01011100001000000000000000010010 +00110111100000100000000000100000 +00110111100000110000000000011100 +00110111100001000000000000011000 +00110111100000010000000000100100 +11111000000000000001001100101110 +01111000000000010000000000000001 +00111000001000011000010111001000 +11111000000000000000110100110001 +00101011100000100000000000100100 +00101011100000110000000000100000 +00101011100001000000000000011100 +00101011100001010000000000011000 +01111000000000010000000000000001 +00111000001000011000010111100000 +11111000000000000000110100101010 +00110100000011000000000000000000 +11100000000000000000000000111010 +01111000000000100000000000000001 +00111000010000101000011000001100 +11111000000000000010110110011100 +10111000001000000001000000000000 +01011100001000000000000000000111 +00101001011000010000000000000100 +01000100001000100000000000000101 +11111000000000000000000100010001 +10111000001000000101100000000000 +00110100000000100000000000000001 +11100000000000000000000000001100 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000011000100100 +11111000000000000010110110010000 +10111000001000000001000000000000 +01011100001000000000000000001111 +00101001011000010000000000000100 +01000100001000100000000000001101 +11111000000000000000000100000101 +10111000001000000101100000000000 +00110100000000100000000000000000 +00110111100000110000000000010100 +11111000000000000001001100100100 +10111000001000000110000000000000 +01011100001000000000000000100000 +01111000000000010000000000000001 +00111000001000011000011000010000 +10111001011000000001000000000000 +00101011100000110000000000010100 +11100000000000000000000000011010 +00101001011000010000000000000000 +01111000000000100000000000000001 +00111000010000101000011000101000 +11111000000000000010110101111100 +10111000001000000001000000000000 +00110100000011001111111111101010 +01011100001000000000000000010100 +00101001011000010000000000000100 +01000100001000100000000000010010 +00101001011000100000000000001000 +01000100010000000000000000010000 +11111000000000000000000011101110 +10111000001000000110100000000000 +00101001011000010000000000001000 +11111000000000000000000011101011 +10111000001000000001000000000000 +01011011100000010000000000010100 +10111001101000000000100000000000 +11111000000000000001001101010001 +10111000001000000110000000000000 +01011100001000000000000000000110 +00101011100000100000000000010100 +01111000000000010000000000000001 +00111000001000011000011000101100 +10111001101000000001100000000000 +11111000000000000000110011101111 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000100100 +11000011101000000000000000000000 +00110111100111001111111111010000 +01011011100010110000000000110000 +01011011100011000000000000101100 +01011011100011010000000000101000 +01011011100011100000000000100100 +01011011100011110000000000100000 +01011011100100000000000000011100 +01011011100100010000000000011000 +01011011100100100000000000010100 +01011011100100110000000000010000 +01011011100101000000000000001100 +01011011100111010000000000001000 +10111000011000001001000000000000 +01111000000000110000000000000001 +00111000011000111000111011110100 +10111000010000000110000000000000 +10111000010000000000100000000000 +00101000011000100000000000000000 +11111000000000000010110000111100 +01111000000000110000000000000001 +00111000011000111000111011110100 +00101000011000100000000000000000 +10111000001000000101100000000000 +10111001100000000000100000000000 +11111000000000000010110000100110 +10111000001000001010000000000000 +00110100000000100000000000111100 +10111001011000000000100000000000 +11111000000000000010110000110010 +00110100000000100000111000010000 +10111000001000000111100000000000 +10111001011000000000100000000000 +11111000000000000010110000101110 +00110100000000100000000000111100 +11111000000000000010110000011100 +10111000001000001000000000000000 +00110100000000100000111000010000 +10111001011000000000100000000000 +11111000000000000010110000011000 +10111000001000001000100000000000 +10111010100000000111000000000000 +00110100000010110000011110110010 +11100000000000000000000000001111 +00110100000000100000000101101101 +01011101100000000000000000001011 +00110100000000100000000001100100 +10111001011000000000100000000000 +11111000000000000010101111101111 +00110100000000100000000101101110 +01011100001011000000000000000110 +00110100000000100000000110010000 +10111001011000000000100000000000 +11111000000000000010101111101010 +01100100001000100000000000000000 +00110100010000100000000101101101 +11001001110000100111000000000000 +00110101011010110000000000000001 +00100001011011000000000000000011 +00110100000000100000000101101101 +01011101100000000000000000001011 +00110100000000100000000001100100 +10111001011000000000100000000000 +11111000000000000010101111100000 +00110100000000100000000101101110 +01011100001011000000000000000110 +00110100000000100000000110010000 +10111001011000000000100000000000 +11111000000000000010101111011011 +01100100001000100000000000000000 +00110100010000100000000101101101 +01010001110000101111111111100101 +00110100000000100000000001100100 +10111001011000000000100000000000 +11111000000000000010101111010101 +00110100000000100000000110010000 +10111000001000001001100000000000 +10111001011000000000100000000000 +11111000000000000010101111010001 +01111000000000100000000000000001 +00110100000011010000000000000000 +01100100001001010000000000000000 +00111000010000101001001010111100 +11100000000000000000000000001101 +00110100000001000000000000000000 +01011101100000000000000000000100 +00110100000001000000000000000001 +01011110011011000000000000000010 +10111000101000000010000000000000 +00001000100001000000000000001100 +10110100100011010010000000000000 +00111100100001000000000000000010 +00110101101011010000000000000001 +10110100010001000010000000000000 +00101000100000010000000000000000 +11001001110000010111000000000000 +00110100000001000000000000000000 +01011101100000000000000000000100 +00110100000001000000000000000001 +01011110011011000000000000000010 +10111000101000000010000000000000 +00001000100001000000000000001100 +10110100100011010010000000000000 +00111100100001000000000000000010 +10110100010001000010000000000000 +00101000100000010000000000000000 +01010001110000011111111111101010 +00110100000000010000000000000001 +00110101110011100000000000000001 +01000110010000010000000000011101 +01111000000011000000000000000001 +00110100000000010000000000000010 +00111001100011001011011010010100 +01000110010000010000000000101000 +00110110100000010000000000000100 +00110100000000100000000000000111 +11111000000000000010101111011011 +00111100001000010000000000000010 +01111000000100110000000000000001 +01111000000000100000000000000001 +00111101101011010000000000000010 +00111000010000101001001100111000 +00111010011100111001001100011100 +10110110011000011001100000000000 +10110100010011010110100000000000 +01111000000100100000000000000001 +00101010011000110000000000000000 +00101001101001000000000000000000 +00111010010100101000011001011100 +10111001100000000000100000000000 +10111010010000000001000000000000 +10111001110000000010100000000000 +10111001011000000011000000000000 +10111010001000000011100000000000 +10111010000000000100000000000000 +01011011100011110000000000000100 +11111000000000000000110001010010 +11100000000000000000000000011010 +01111000000000010000000000000001 +00111101101011010000000000000010 +00111000001000011001001100111000 +10110100001011010110100000000000 +00101001101000110000000000000000 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000010000101000011001111100 +10111001110000000010000000000000 +10111010001000000010100000000000 +10111010000000000011000000000000 +10111001111000000011100000000000 +00111000001000011011011010010100 +11111000000000000000110001000011 +11100000000000000000000000001011 +01111000000000100000000000000001 +10111001100000000000100000000000 +00111000010000101000011010010100 +10111001011000000001100000000000 +00110101101001000000000000000001 +10111001110000000010100000000000 +10111010001000000011000000000000 +10111010000000000011100000000000 +10111001111000000100000000000000 +11111000000000000000110000111000 +01111000000000010000000000000001 +00111000001000011011011010010100 +00101011100111010000000000001000 +00101011100010110000000000110000 +00101011100011000000000000101100 +00101011100011010000000000101000 +00101011100011100000000000100100 +00101011100011110000000000100000 +00101011100100000000000000011100 +00101011100100010000000000011000 +00101011100100100000000000010100 +00101011100100110000000000010000 +00101011100101000000000000001100 +00110111100111000000000000110000 +11000011101000000000000000000000 +00110111100111001111111111011100 +01011011100010110000000000001000 +01011011100111010000000000000100 +01011011100001000000000000010100 +00100000001001000000000010000000 +01100100100001000000000000000000 +01011011100000110000000000010000 +01111000000000110000000000000001 +10111000001000000100100000000000 +10111000011000000000100000000000 +00110100000000110000000000000010 +01011011100000100000000000001100 +10111000010000000101100000000000 +00111000001000011000011010110100 +11001000011001000001000000000000 +00100001001000110000000001111111 +01011011100001010000000000011000 +01011011100001100000000000011100 +01011011100001110000000000100000 +01011011100010000000000000100100 +11111000000000000000110000100010 +00110111100000100000000000010000 +10111001011000000000100000000000 +11111000000000000000101111111101 +01111000000000010000000000000001 +00111000001000011000011011000000 +11111000000000000000110000011100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000100100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011000011011010000 +11111000000000000000110000010011 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +01000000001001000000000000000000 +00110100000000100000000000101101 +00110100000000110000000000000001 +01011100100000100000000000000011 +00110100001000010000000000000001 +00110100000000111111111111111111 +00110100000000100000000000000000 +00110100000001010000000000001001 +11100000000000000000000000000100 +00001000010000100000000000001010 +00110100001000010000000000000001 +10110100100000100001000000000000 +01000000001001000000000000000000 +00110100100001001111111111010000 +00100000100001100000000011111111 +01010000101001101111111111111010 +10001000010000110000100000000000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +11111000000000000001000111100100 +00110100001010110000000000000001 +11111000000000000001000111100010 +01011100001010111111111111111111 +10111001100000000000100000000000 +11100000000000000000000000000010 +00110100001000011111111111111111 +01001000001000001111111111111111 +11111000000000000001000111011100 +11001000001010110000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00110100000010110000010000000000 +00110100000011000000010000000000 +11100000000000000000000000000011 +10110101100010110110000000000000 +00111101011010110000000000000001 +10111001100000000000100000000000 +11111011111111111111111111100001 +01000100001000001111111111111100 +00010101100011000000000000000001 +00010101011010110000000000000010 +11100000000000000000000000001001 +10110101011011000110100000000000 +10111001101000000000100000000000 +11111011111111111111111111011010 +01011100001000000000000000000010 +10111001101000000110000000000000 +00000001011000010000000000011111 +10110100001010110101100000000000 +00010101011010110000000000000001 +01011101011000001111111111111000 +01111000000000010000000000000001 +00111000001000011011011011010100 +01011000001011000000000000000000 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000011000011100101000 +11111000000000000000101111001010 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01111000000000100000000000000001 +00111000010000101011011011010100 +00101000010000110000000000000000 +00110100000001000010011100010000 +00001000011001010000000000001010 +11100000000000000000000000000100 +00110100010000101111111111111111 +01001000010000001111111111111111 +00110100001000011101100011110000 +01010000100000010000000000000011 +10111000101000000001000000000000 +11100011111111111111111111111100 +10001000001000110000100000000000 +00110100000000100000001111101000 +11111000000000000010101100001010 +11100000000000000000000000000010 +00110100001000011111111111111111 +01001000001000001111111111111111 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +10111000001000000010100000000000 +01011100100000000000000000000010 +10111000011000000010000000000000 +10111000100000000011000000000000 +01010000011001000000000000000010 +10111000011000000011000000000000 +10110100001001100000100000000000 +11100000000000000000000000001110 +00101100010001100000000000000010 +00101000010001110000000000001100 +10110100111001100011100000000000 +01000000111001100000000000000000 +00110000101001100000000000000000 +00101100010001110000000000000010 +00101100010001100000000000000110 +00110100101001010000000000000001 +00110100111001110000000000000001 +00100000111001111111111111111111 +00001100010001110000000000000010 +01011100110001110000000000000010 +00001100010000000000000000000010 +01011100101000011111111111110011 +01010000100000110000000000001011 +00101100010000010000000000000010 +10110100011000010000100000000000 +11001000001001000010000000000000 +00001100010001000000000000000010 +00101100010000010000000000000110 +11100000000000000000000000000011 +11001000100000010010000000000000 +00001100010001000000000000000010 +00101100010001000000000000000010 +01010100100000011111111111111101 +10111000011000000000100000000000 +11000011101000000000000000000000 +10110100010000110010100000000000 +11100000000000000000000000001101 +00101100001001000000000000000000 +00101000001001100000000000001100 +01000000010001110000000000000000 +00110100010000100000000000000001 +10110100110001000011000000000000 +00110000110001110000000000000000 +00110100100001000000000000000001 +00101100001001100000000000000110 +00100000100001001111111111111111 +00001100001001000000000000000000 +01011100110001000000000000000010 +00001100001000000000000000000000 +01011100010001011111111111110100 +10111000011000000000100000000000 +11000011101000000000000000000000 +00110111100111001111111111001000 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +01111000000011000000000000000001 +00111001011010111011100011101000 +00111001100011001011011100001000 +10111001011000000000100000000000 +10111001100000000001000000000000 +00110100000000110000000111100000 +00110111100001000000000000100000 +11111000000000000000111111000000 +10111000001000000110100000000000 +00110100000011110000000000000000 +01001100000000010000000001100001 +00101101011000100000000000001100 +00001111100000000000000000111000 +00111000000000011000000100000000 +01011100010000010000000000001110 +10111001100000000001000000000000 +00110100000000110000000000000010 +00110111100000010000000000111000 +11111000000000000010101100010100 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011011100011110100 +00111000010000101011011100001010 +00110100000000110000000000000010 +01111000000011000000000000000001 +11111000000000000010101100001101 +00110101101011011111111111111100 +00111001100011001011011100001100 +01111000000000010000000000000001 +00101111100000100000000000111000 +00111000001000011001011100000100 +00101000001000010000000000000000 +00100000010000100000111111111111 +00110100000011110000000000000000 +01011100010000010000000001001001 +01000001100000100000000000000000 +00110100000000010000000001000101 +00110100000000110000000000000000 +01011100010000010000000000001000 +01000001100000100000000000001001 +00110100000000010000000000010001 +01011100010000010000000000000101 +01000001100000110000000000010110 +01000001100000010000000000010111 +00111100011000110000000000001000 +10111000011000010001100000000000 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011011100011101000 +00111000010000101011011011011000 +00101100001001110000000000001100 +00110100010001100000000000110000 +00110100000001000000000000000000 +00110100000010110000000000000000 +11100000000000000000000000001100 +00101000010000010000000000000000 +01000100001000000000000000001001 +00101100001001010000000000001100 +01011100101001110000000000000111 +00101100001001010000000000001110 +01011100011000000000000000000011 +01000100101000110000000000111000 +11100000000000000000000000000011 +01011100101000110000000000000010 +10111000001000000010000000000000 +00110100010000100000000000000100 +01011100010001101111111111110101 +01000100100000000000000000000010 +10111000100000000101100000000000 +00110100000011110000000000000001 +01000101011000000000000000100101 +00101101011100000000000000101000 +00110101101000010000000000101000 +01001000001100000000000000100010 +00110101011011100000000000100100 +00110111100000100000000000111010 +00110100000000110000000000000010 +10111001110000000000100000000000 +00001111100011010000000000111010 +11111011111111111111111110010111 +11001010000000010110100000000000 +00100001101011011111111111111111 +00001101011011010000000000101000 +00110111100000100000000000100000 +00110100000000110000000000011000 +10111001110000000000100000000000 +11111011111111111111111110010000 +11001001101000010110100000000000 +00100001101011011111111111111111 +01111000000000100000000000000001 +00001101011011010000000000101000 +00111000010000101011100011101000 +00110100000000110000000000001110 +10111001110000000000100000000000 +11111011111111111111111110001000 +11001001101000010110100000000000 +00101111100000110000000000111010 +00100001101011011111111111111111 +00001101011011010000000000101000 +10111001110000000000100000000000 +10111001100000000001000000000000 +11111011111111111111111110000001 +11001001101000010000100000000000 +00001101011000010000000000101000 +00101101011000010000000000101100 +00110100001000010000000000000001 +00001101011000010000000000101100 +10111001111000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000111000 +11000011101000000000000000000000 +10111000001000000101100000000000 +11100011111111111111111111001011 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000010000000000100000000000 +11111000000000000000110000110101 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101011011011011000 +00110100010000110000000000110000 +11100000000000000000000000000100 +00101000010001000000000000000000 +00110100010000100000000000000100 +01011000100000010000000000011100 +01011100010000111111111111111101 +11000011101000000000000000000000 +00110111100111001111111100100100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000001010000000000000001 +10111000001000000101100000000000 +10111000010000000110000000000000 +10111000011000000111000000000000 +10111000100000000110100000000000 +00111000101001011011011011011000 +00110100000000010000000000000000 +00110100000000100000000000001100 +00101000101000110000000000000000 +00110100101001010000000000000100 +01011100011000000000000000001001 +00111100001000100000000000000010 +01111000000001010000000000000001 +00111000101001011011011011011000 +10110100101000100010100000000000 +01011000101010110000000000000000 +00110100000000100000000000001100 +01011100001000100000000000001010 +11100000000000000000000000000011 +00110100001000010000000000000001 +01011100001000101111111111110100 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000010000101001001101101000 +00111000001000011000011101000000 +11111000000000000000101011000111 +11100000000000000000000000100000 +01111000000000100000000000000001 +00110111100000010000000000011000 +00111000010000101000011101011100 +11111011111111111111010111000101 +01001000000000010000000000011011 +10111001011000000000100000000000 +00110100000000100000000000000000 +00110100000000110000000000010010 +11111000000000000010101011110011 +01000101100000000000000000000101 +10111001011000000000100000000000 +10111001100000000001000000000000 +00110100000000110000000000010010 +11111000000000000010101001110000 +00001101011000000000000000001110 +01011101110000000000000000000100 +00110100000000010000100000000000 +00001101011000010000000000001100 +00001101011011010000000000001110 +00110101011000010000000000010010 +11111000000000000000101111110010 +00101011100000010000000011010000 +00001101011000000000000000100110 +00001101011000000000000000100100 +01011001011000010000000000011100 +00101011100000010000000010111000 +00001101011000000000000000101100 +01011001011000010000000000100000 +00101101011000010000000000101010 +00001101011000010000000000101000 +11100000000000000000000000000010 +00110100000010110000000000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000011011100 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101011011011011000 +00110100010000110000000000110000 +11100000000000000000000000000101 +00101000010001000000000000000000 +01011100100000010000000000000010 +01011000010000000000000000000000 +00110100010000100000000000000100 +01011100010000111111111111111100 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +01011001011000100000000000010000 +10111000010000000111000000000000 +10111000100000000111100000000000 +10111000101000000110000000000000 +00101000001011010000000000001000 +01000100011000000000000000000101 +10111000101000000000100000000000 +00110100000000101111110000011000 +11111000000000000010100110001100 +10110100001011010110100000000000 +11001001110011110010000000000000 +10111000100000000001100000000000 +01001100100000000000000000000010 +10110100100011000001100000000000 +00000001100000010000000000011111 +10110100001011000000100000000000 +00010100001000010000000000000001 +10110100001001000010000000000000 +01001100100000000000000000000010 +10110100100011000010000000000000 +01001001100001000000000000000010 +11001000100011000010000000000000 +00001001100000100000000000000011 +00010100010001010000000000011111 +00000000101001010000000000011110 +10110100101000100001000000000000 +00010100010000100000000000000010 +01001000011000100000000000000110 +00010101100000100000000000011111 +00000000010000100000000000011110 +10110100010011000001000000000000 +00010100010000100000000000000010 +01001100011000100000000000001101 +10110100100000010010000000000000 +01011001011011010000000000001000 +01011001011001000000000000001100 +01001001100001000000000000001010 +11001000100011000010000000000000 +01011001011001000000000000001100 +10111001100000000000100000000000 +00110100000000100000001111101000 +11111000000000000010100101101011 +10110101101000010000100000000000 +01011001011000010000000000001000 +11100000000000000000000000000010 +01011001011000110000000000001100 +01111000000000110000000000000001 +00111000011000111000111011101000 +00101001011000010000000000001000 +00101000011000100000000000000000 +01001100010000010000000000001101 +01111000000000110000000000000001 +00111000011000111000111011011100 +00101000011000100000000000000000 +00101001011000110000000000000000 +10110100001000100000100000000000 +00101001011000100000000000000100 +01011001011000010000000000001000 +00110100010000010000000000000001 +11110100010000010001000000000000 +01011001011000010000000000000100 +10110100010000110001000000000000 +01011001011000100000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111110110100 +01011011100010110000000000100100 +01011011100011000000000000100000 +01011011100011010000000000011100 +01011011100011100000000000011000 +01011011100011110000000000010100 +01011011100100000000000000010000 +01011011100100010000000000001100 +01011011100100100000000000001000 +01011011100111010000000000000100 +10111000010000000110100000000000 +00101100001000100000000000101100 +10111000101000000101100000000000 +10111000001000000110000000000000 +10111000011000001001000000000000 +10111000100000000111100000000000 +00110100000001010000000000000000 +01000100010000000000000001010110 +00110100001011100000000000100100 +00101100001100010000000000101000 +00110100010000101111111111111111 +00001100001000100000000000101100 +00110100000000110000000000000010 +10111001110000000001000000000000 +00110100000001000000000000000000 +00110111100000010000000001001110 +11111011111111111111111001111110 +10110110001000011000100000000000 +00100010001100011111111111111111 +00001101100100010000000000101000 +10111001110000000001000000000000 +00110100000000110000000000011000 +00110100000001000000000000000000 +00110111100000010000000000101000 +11111011111111111111111001110110 +10110110001000011000100000000000 +00100010001100011111111111111111 +00110111100100000000000001000000 +00001101100100010000000000101000 +10111001110000000001000000000000 +00110100000000110000000000001110 +00110100000001000000000000000000 +10111010000000000000100000000000 +11111011111111111111111001101101 +10110110001000011000100000000000 +00101111100000110000000001001110 +00100010001100011111111111111111 +10111001110000000001000000000000 +10111001111000000010000000000000 +00001101100100010000000000101000 +10111010010000000000100000000000 +11111011111111111111111001100101 +10110110001000010000100000000000 +00001101100000010000000000101000 +00101111100000010000000001001100 +01111000000000110000000000000001 +00111000011000111001011100000100 +00001101101000010000000000001100 +00101000011000010000000000000000 +00110111100000100000000001000110 +00110100000000110000000000000110 +00001101101000010000000000010000 +10111001101000000000100000000000 +11111000000000000010100110111100 +00110101101000010000000000000110 +10111010000000000001000000000000 +00110100000000110000000000000110 +11111000000000000010100110111000 +01000101011000000000000000011111 +00101011100000010000000000111000 +01011001011000010000000000010100 +00101011100000010000000000101100 +01011001011000010000000000011000 +00110100000000010000000000000000 +11111000000000000010011000001100 +10111000001000000110100000000000 +00110101011000100000000000010000 +00110100000000110000000000000000 +00110100000000010000000000000000 +11111000000000000010010110100100 +00101011100000010000000000110000 +01000011100000100000000000101000 +00101011100000110000000000101100 +01011001011000010000000000000000 +00101011100000010000000000110100 +01111100010000100000000000000000 +00101001100001000000000000011100 +01011001011000010000000000000100 +00101011100000010000000000111000 +01011001011000000000000000001100 +00110100000001010001111101000000 +01011001011000010000000000001000 +00100001101000010000000011111111 +01100100001000010000000000000000 +10100000001000100000100000000000 +00101001011000100000000000010000 +01011001011000010000000000011100 +10111001011000000000100000000000 +11111011111111111111111101001111 +00101111100000010000000001001110 +10111001111000000010100000000000 +01010000001011110000000000000010 +10111000001000000010100000000000 +10111000101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100100 +00101011100011000000000000100000 +00101011100011010000000000011100 +00101011100011100000000000011000 +00101011100011110000000000010100 +00101011100100000000000000010000 +00101011100100010000000000001100 +00101011100100100000000000001000 +00110111100111000000000001001100 +11000011101000000000000000000000 +00110111100111001111111111000000 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +10111000011000000111000000000000 +00110111100000010000000000110000 +00110100000000110000000000000110 +10111000101000000101100000000000 +10111000100000000110100000000000 +11111000000000000010100101111100 +00110111100000010000000000110110 +00110101100000100000000000010010 +00110100000000110000000000000110 +11111000000000000010100101111000 +01111000000000010000000000000001 +00111000001000011001011100000100 +00101000001001010000000000000000 +00101101100000010000000000001100 +01000100101000000000000000001001 +00110100000000101000000100000000 +00001111100000100000000000111100 +00101101100000100000000000011000 +00001111100000010000000001000000 +00111100010000100000000000001101 +10111000010001010010100000000000 +00001111100001010000000000111110 +11100000000000000000000000000010 +00001111100000010000000000111100 +00110111100000010000000000110000 +10111001110000000001000000000000 +10111001101000000001100000000000 +00110111100001000000000000011000 +11111000000000000000111011000000 +01000101011000000000000000001010 +00101011100000100000000000100000 +01011001011000000000000000001100 +01011001011000100000000000000000 +00101011100000100000000000100100 +01011001011000100000000000000100 +00101011100000100000000000101000 +01011001011000100000000000001000 +01000011100000100000000000011000 +01011001011000100000000000011100 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000001000000 +11000011101000000000000000000000 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00110100000000100000000000000000 +00110100000000110000000000000000 +00110100000001000000000001000100 +00111000001000011010000000010000 +11111011111111111111111010101100 +01111000000000100000000000000001 +00111000010000101011100011111100 +01011000010000010000000000000000 +01111000000000010000000000000001 +00110100000001000000000000100101 +00110100000000100000000000000000 +00110100000000110000000000000000 +00111000001000011010000001000100 +11111011111111111111111010100011 +01111000000000100000000000000001 +00110111100010110000000000001100 +00111000010000101011100100001100 +01011000010000010000000000000000 +00110100000000110000000000010010 +10111001011000000000100000000000 +00110100000000100000000000000000 +11111000000000000010100110110111 +00110100000000010000100000000000 +00001111100000010000000000011000 +01111000000000010000000000000001 +10111001011000000001000000000000 +00110100000000110000000000000001 +00110100000001000000000000000000 +00111000001000011010000001111000 +11111011111111111111111010010011 +01111000000000100000000000000001 +00111000010000101011100100001000 +01011000010000010000000000000000 +11111011111111111111111111011010 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110100000000110000000000000000 +00110100000001000000000000000000 +11100000000000000000000000000101 +00101100001001010000000000000000 +00110100100001000000000000000001 +00110100001000010000000000000010 +10110100011001010001100000000000 +01001000010001001111111111111100 +00000000011000010000000000010000 +00100000011000111111111111111111 +10110100011000010001100000000000 +00000000011000010000000000010000 +10110100001000110001100000000000 +10100100011000000000100000000000 +00100000001000011111111111111111 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01111000000000100000000000000001 +00111000010000101011100100010000 +00110100000000110000000000000100 +11111000000000000010100100010001 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +01111000000010110000000000000001 +00111001011010111011100100010000 +00111000011000111100001010111000 +10111000001000000001000000000000 +00101000011011000000000000000000 +10111001011000000000100000000000 +00110100000000110000000000000100 +11111000000000000010100100000001 +01000001011000100000000000000000 +01000001011000010000000000000001 +00110101100011000000000000011000 +00111100010000100000000000011000 +00111100001000010000000000010000 +10111000010000010000100000000000 +01000001011000100000000000000011 +10111000001000100000100000000000 +01000001011000100000000000000010 +00111100010000100000000000001000 +10111000001000100000100000000000 +11100000000000000000000000000010 +01011001100000010000000000000000 +00101001100000100000000000000000 +01011100010000011111111111111110 +01011100001000000000000000000100 +01111000000000010000000000000001 +00111000001000011011100011111000 +01011000001000000000000000000000 +01111000000000010000000000000001 +00111000001000011011100100000100 +01011000001000000000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000001000000001000000000000 +00110100000000011111111111111111 +01000100010000000000000000000110 +00110100010000010000000000010000 +01111000000000100000000000000001 +00111000010000101011100100010000 +00110100000000110000000000000100 +11111000000000000010100010111011 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111000110000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011100001010100100 +00101000001000100000000000000000 +00110100000000010000000000000001 +01011100010000010000000000000110 +01111000000000010000000000000001 +00111000001000011011100011111000 +00101000001000110000000000000000 +01011100011000100000000000000010 +01011000001000000000000000000000 +01111000000000100000000000000001 +00111000010000101011100011111100 +00101000010000010000000000000000 +00110111100011000000000000100100 +00110111100000100000000110110100 +00110100000001000000000110010000 +10111001100000000001100000000000 +00110100000001010000000000000000 +11111011111111111111111011000010 +01111000000001000000000000000001 +00111000100001001011100011111000 +10111000001000000001000000000000 +00101000100000010000000000000000 +00110100000010110000000000000000 +01011100001000000000000000100011 +01001101011000100000000000000100 +10111001100000000000100000000000 +11111000000000000000001000110101 +10111000001000000101100000000000 +11111000000000000000111011100110 +01111000000000100000000000000001 +00111000010000101011100100000000 +00101000010000110000000000000000 +01011100011000000000000000000011 +01011000010000010000000000000000 +11100000000000000000000000000101 +00110100011000110000001111101000 +11001000001000110000100000000000 +01001000000000010000000000010101 +01011000010000110000000000000000 +01111000000000010000000000000001 +00111000001000011011100100000100 +00101000001000110000000000000000 +00110111100010110000000000100100 +00110111100011000000000110110100 +00110100011000110000000000000001 +01011000001000110000000000000000 +10111001011000000001000000000000 +10111001100000000000100000000000 +11111000000000000000000110111011 +01111000000001010000000000000001 +00111000101001011011100011111100 +10111000001000000010000000000000 +00101000101000010000000000000000 +10111001011000000001100000000000 +10111001100000000001000000000000 +00110100000001010000000000000000 +11111011111111111111111100001110 +00110100000010110000000000000001 +01111000000011010000000000000001 +00111001101011011011100100001000 +00101001101000010000000000000000 +00110111100011100000000110110100 +00110111100011000000000000100100 +10111001110000000001000000000000 +10111001100000000001100000000000 +00110100000001000000000010000000 +00110100000001010000000000000000 +11111011111111111111111010010000 +10111000001000001000100000000000 +00110100000011110000000000000000 +01001100000000010000000000010100 +01111000000000110000000000000001 +00111000011000111011100011111000 +00101000011000010000000000000000 +01000100001000000000000000010000 +10111001100000000000100000000000 +11111011111111111111111110011101 +10111000001000001000000000000000 +01011100001000000000000000001100 +10111001100000000000100000000000 +10111010001000000001000000000000 +11111000000000000000000010111101 +10111000001000000010000000000000 +00110100000011110000000000000001 +01001110000000010000000000000110 +00101001101000010000000000000000 +10111001110000000001000000000000 +10111001100000000001100000000000 +00110100000001010000000000000000 +11111011111111111111111011101101 +01111000000011010000000000000001 +00111001101011011011100100001100 +00101001101000010000000000000000 +00110111100100000000000110110100 +00110111100011000000000000100100 +10111010000000000001000000000000 +10111001100000000001100000000000 +00110100000001000000000000100000 +00110100000001010000000000000000 +11111011111111111111111001110000 +00110100000011100000000000000000 +01001100000000010000000000011100 +10111001100000000000100000000000 +11111011111111111111111110000010 +01011100001000000000000000011001 +00110111100000010000000111001000 +00110100000000100000000000000000 +11111000000000000001001110011100 +01111000000000100000000000000001 +00111000010000101000111011111000 +00101000010000010000000000000000 +00101011100000100000000111001100 +00110100000000110000000000000100 +00110100000011100000000000000001 +10110100010000010000100000000000 +01011011100000010000000111010000 +00110111100000100000000111010000 +00110111100000010000000001000000 +11111000000000000010100001011000 +10111001100000000000100000000000 +00110100000000100000000000100000 +00110100000000110000000000000000 +11111000000000000000000011110101 +00101001101000010000000000000000 +10111010000000000001000000000000 +10111001100000000001100000000000 +00110100000001000000000000100000 +00110100000001010000000000000000 +11111011111111111111111011000110 +11111011111111111111111100100101 +10110101111010110101100000000000 +10110101011000010000100000000000 +10110100001011100111000000000000 +01111101110000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000111010000 +11000011101000000000000000000000 +00110111100111001111111100110100 +01011011100010110000000000101000 +01011011100011000000000000100100 +01011011100011010000000000100000 +01011011100011100000000000011100 +01011011100011110000000000011000 +01011011100100000000000000010100 +01011011100100010000000000010000 +01011011100100100000000000001100 +01011011100100110000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011011100011111000 +00101000001000010000000000000000 +00110100000010110000000000000000 +01000100001000000000000001000111 +01111000000011000000000000000001 +00111001100011001011101111110100 +00101001100000010000000000000000 +00110111100011110000000010101100 +00110111100011100000000000101100 +10111001111000000001000000000000 +10111001110000000001100000000000 +00110100000001000000000010000000 +00110100000001010000000000000000 +11111011111111111111111000101010 +01001100000000010000000000111100 +00110100000000100000000000011011 +00110100000010110000000000000001 +01001100010000010000000000111001 +00110111100011010000000011001000 +10111001101000000000100000000000 +11111011111111111111111100001000 +01000011100000010000000000110010 +01011100001000000000000000110100 +01000011100000010000000000110011 +01011100001010110000000000110010 +00110111100100000000000001000100 +10111010000000000000100000000000 +10111001101000000001000000000000 +00110100000000110000000000000100 +11111000000000000010011111110100 +01011100001000000000000000101100 +00110111100100010000000011000000 +00110111100100110000000000110100 +10111010011000000001000000000000 +00110100000000110000000000000110 +10111010001000000000100000000000 +11111000000000000010100000001110 +00110111100100100000000000111010 +10111010010000000001000000000000 +00110100000000110000000000000100 +00110111100000010000000011001100 +11111000000000000010100000001001 +00110100000000010000000000001000 +00110011100000010000000000101110 +00110100000000010000000000000110 +00110011100000010000000000110000 +00110100000000010000000000000100 +00110011100000010000000000110001 +00110100000000010000000000000010 +00110011100000010000000000110011 +10111010011000000000100000000000 +00110011100000000000000000101100 +00110011100010110000000000101101 +00110011100000000000000000101111 +00110011100000000000000000110010 +11111000000000000000100110000100 +10111001101000000001000000000000 +00110100000000110000000000000100 +10111010010000000000100000000000 +11111000000000000010011111110111 +10111010001000000001000000000000 +00110100000000110000000000000110 +00110111100000010000000000111110 +11111000000000000010011111110011 +00110111100000100000000011001100 +00110100000000110000000000000100 +10111010000000000000100000000000 +11111000000000000010011111101111 +00101001100000010000000000000000 +10111001111000000001000000000000 +10111001110000000001100000000000 +00110100000001000000000000011100 +00110100000001010000000000000000 +11111011111111111111111001100001 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000101000 +00101011100011000000000000100100 +00101011100011010000000000100000 +00101011100011100000000000011100 +00101011100011110000000000011000 +00101011100100000000000000010100 +00101011100100010000000000010000 +00101011100100100000000000001100 +00101011100100110000000000001000 +00110111100111000000000011001100 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000001000 +01011011100111010000000000000100 +00110111100010110000000000001100 +10111001011000000000100000000000 +00110100000000100000000000000000 +00110100000000110000000000010010 +11111000000000000010100001010010 +10111001011000000000100000000000 +00110100000000100000000011111111 +00110100000000110000000000000110 +11111000000000000010100001001110 +00110100000000010000100000000110 +00001111100000010000000000011000 +01111000000000010000000000000001 +10111001011000000001000000000000 +00110100000000110000000000000001 +00110100000001000000000000000000 +00111000001000011010000010101100 +11111011111111111111110100101010 +01111000000000100000000000000001 +00111000010000101011101111110100 +01011000010000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00110111100011010000000000011100 +10111000001000000101100000000000 +10111001101000000000100000000000 +11111011111111111111111010100000 +01000001011000100000000000000000 +00110100000000010000000001000101 +00110100000011000000000000000000 +01011100010000010000000001001010 +00110101011011100000000000010000 +10111001101000000001000000000000 +10111001110000000000100000000000 +00110100000000110000000000000100 +11111000000000000010011110001100 +10111000001000000001000000000000 +01011100001000000000000001000011 +01000001011001000000000000001001 +00110100000000110000000000000001 +01000001011011010000000000000010 +01000001011000010000000000000011 +10111000010000000110000000000000 +01011100100000110000000000111101 +01000001011000110000000000010100 +00110100000000100000000000001000 +01011100011000100000000000111010 +00111101101011010000000000001000 +10111001101000010110100000000000 +00110101101011011111111111101000 +00110100000000010000000001000000 +01001100001011010000000000000010 +00110100000011010000000001000000 +00110101011011110000000000001100 +10111001111000000001000000000000 +00110100000000110000000000000100 +00110111100000010000000000100000 +11111000000000000010011110010111 +00110101101011000000000000011000 +00110100000000010000000001000101 +00110001011000010000000000000000 +00010101100000010000000000001000 +00110111100000100000000000011100 +00110001011000010000000000000010 +00110100000000010000000000111111 +00110001011000010000000000001000 +00110100000000010000000000000001 +00110001011000010000000000001001 +00110100000000110000000000000100 +00110001011000000000000000000001 +00110001011011000000000000000011 +00110001011000000000000000000100 +00110001011000000000000000000101 +00110001011000000000000000000110 +00110001011000000000000000000111 +00110001011000000000000000001010 +00110001011000000000000000001011 +10111001111000000000100000000000 +11111000000000000010011110000010 +00110100000000110000000000000100 +00110111100000100000000000100000 +10111001110000000000100000000000 +11111000000000000010011101111110 +00110101101011010000000000000101 +00000001101000010000000000011111 +00110001011000000000000000010100 +10110100001011010110100000000000 +00010101101000100000000000000001 +00110001011000000000000000010101 +00110001011000000000000000010110 +00110001011000000000000000010111 +00110101011000010000000000010100 +11111011111111111111111001001110 +00100000001000011111111111111111 +00000000001000100000000000001000 +00110001011000010000000000010111 +00110001011000100000000000010110 +10111001011000000000100000000000 +00110100000000100000000000001010 +11111011111111111111111001000111 +00100000001000011111111111111111 +00000000001000100000000000001000 +00110001011000010000000000001011 +00110001011000100000000000001010 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111001100 +01011011100010110000000000101000 +01011011100011000000000000100100 +01011011100011010000000000100000 +01011011100011100000000000011100 +01011011100011110000000000011000 +01011011100100000000000000010100 +01011011100100010000000000010000 +01011011100100100000000000001100 +01011011100100110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000110100000000000 +10111000011000000110000000000000 +01011100011000000000000000010010 +00110101011000100000000000001100 +00110100000000110000000000000100 +00110111100000010000000000110000 +11111000000000000010011101001101 +00110111100011000000000000101100 +00110101011000100000000000010000 +00110100000000110000000000000100 +10111001100000000000100000000000 +11111000000000000010011101001000 +00110101011000100000000000010100 +00110100000000110000000000000010 +00110111100000010000000000110110 +11111000000000000010011101000100 +00110111100000010000000000110100 +00110101011000100000000000010110 +00110100000000110000000000000010 +11111000000000000010011101000000 +00110101011100010000000000001000 +10111001100000000001000000000000 +00110100000000110000000000000100 +10111010001000000000100000000000 +11111000000000000010011100111011 +00110101101011101111111111101100 +00110101011100000000000000001100 +00110101100011110000000000000100 +10111001111000000001000000000000 +00110100000000110000000000000100 +00010101110100100000000000001000 +10111010000000000000100000000000 +11111000000000000010011100110011 +00100010010100100000000011111111 +00100001110011100000000011111111 +00110100000000010000000000010001 +00110001011000010000000000010001 +00110001011100100000000000010010 +00110001011011100000000000010011 +00110101100000100000000000001000 +00110100000000110000000000000010 +00110001011000000000000000010000 +00110101011000010000000000010100 +11111000000000000010011100101000 +00110100000000110000000000000010 +00110101100000100000000000001010 +00110101011000010000000000010110 +11111000000000000010011100100100 +00110101101000101111111111111001 +00000000010000010000000000011111 +00110001011011100000000000011001 +00110001011100100000000000011000 +00110001011000000000000000011010 +00110001011000000000000000011011 +10110101011011010111000000000000 +10110100001000100001000000000000 +01000001110100100000000000000000 +00010100010000100000000000000001 +00110001110000000000000000000000 +10111010001000000000100000000000 +11111011111111111111110111110001 +00100000001000111111111111111111 +00110001110100100000000000000000 +00110101011100110000000000010000 +01011100011000000000000000000010 +00111000000000111111111111111111 +00000000011000010000000000001000 +00110001011000110000000000011011 +00110001011000010000000000011010 +00110100000000010000000001000101 +00110001011000010000000000000000 +00010101101000010000000000001000 +10111001100000000001000000000000 +00110001011000010000000000000010 +00110100000000010000000000111111 +00110001011000010000000000001000 +00110100000000010000000000010001 +00110001011000010000000000001001 +00110001011000000000000000000001 +00110001011011010000000000000011 +00110001011000000000000000000100 +00110001011000000000000000000101 +00110001011000000000000000000110 +00110001011000000000000000000111 +00110001011000000000000000001010 +00110001011000000000000000001011 +10111010000000000000100000000000 +00110100000000110000000000000100 +11111000000000000010011011111011 +10111001111000000001000000000000 +00110100000000110000000000000100 +10111010011000000000100000000000 +11111000000000000010011011110111 +10111001011000000000100000000000 +00110100000000100000000000001010 +11111011111111111111110111001110 +00100000001000011111111111111111 +00000000001000100000000000001000 +00110001011000010000000000001011 +00110001011000100000000000001010 +00101011100111010000000000000100 +00101011100010110000000000101000 +00101011100011000000000000100100 +00101011100011010000000000100000 +00101011100011100000000000011100 +00101011100011110000000000011000 +00101011100100000000000000010100 +00101011100100010000000000010000 +00101011100100100000000000001100 +00101011100100110000000000001000 +00110111100111000000000000110100 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +10111000001000000110100000000000 +00110100000000100000000000000001 +00110100000000010000000000000110 +00110001011000100000000000011100 +00110001011000100000000000011101 +00110001011000010000000000011110 +00110001011000000000000000011111 +00110101011000010000000000100000 +10111000011000000110000000000000 +11111000000000000000100001011101 +01000001011000100000000000100100 +01000001011000010000000000100000 +00110100000000110000000000000010 +10011000010000010000100000000000 +00110001011000010000000000100000 +01000001011000100000000000100101 +01000001011000010000000000100001 +00110001011011000000000000100101 +10011000010000010000100000000000 +00110001011000010000000000100001 +01000001011000010000000000100010 +00010101100000100000000000001000 +10011000010000010000100000000000 +00110001011000010000000000100010 +01000001011000010000000000100011 +00110001011000100000000000100100 +00110100000000100000000000000000 +10011000001011000000100000000000 +00110001011000010000000000100011 +00110101011000010000000000100110 +11111000000000000010011100111101 +00110101011000010000000000101000 +00110100000000100000000000000000 +00110100000000110000000000000100 +11111000000000000010011100111001 +00110101011000010000000000101100 +00110100000000100000000000000000 +00110100000000110000000000000100 +11111000000000000010011100110101 +00110101011000010000000000110000 +00110100000000100000000000000000 +00110100000000110000000000000100 +11111000000000000010011100110001 +00110101011000010000000000110100 +00110100000000100000000000000000 +00110100000000110000000000000100 +11111000000000000010011100101101 +00110101011011000000000000111000 +00110100000000100000000000000000 +00110100000000110000000000010000 +10111001100000000000100000000000 +11111000000000000010011100101000 +10111001100000000000100000000000 +11111000000000000000100000110001 +00110101011000010000000001001000 +00110100000000100000000000000000 +00110100000000110000000001000000 +11111000000000000010011100100010 +00110101011000010000000010001000 +00110100000000100000000000000000 +00110100000000110000000010000000 +11111000000000000010011100011110 +00110101011000010000000100001000 +00110100000000100000000000000000 +00110100000000110000000001000000 +11111000000000000010011100011010 +00110111100011000000000000010100 +10111001100000000000100000000000 +00110100000000100000000000000000 +00110100000000110000000000000100 +11111000000000000010011100010101 +00110111100000010000000000011000 +00110100000000100000000011111111 +00110100000000110000000000000100 +11111000000000000010011100010001 +00110100000000010000000001000100 +00001111100000010000000000011100 +00110100000000010000000001000011 +00001111100000010000000000011110 +10111001100000000001100000000000 +10111001011000000000100000000000 +00110100000000100000000101001000 +11111011111111111111111100101100 +10111001101000000000100000000000 +00110100000000100000000011111111 +00110100000000110000000000000110 +11111000000000000010011100000101 +00110100000000010000000101001000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +00110111100011010000000000011000 +10111000001000000101100000000000 +10111001101000000000100000000000 +10111000010000000111000000000000 +11111000000000000000011111111110 +00110100000000010000000101001000 +00110100000011000000000000000000 +01011101110000010000000000011011 +01000001011000010000000000010100 +01011100001000000000000000011001 +01000001011000100000000000010101 +00110100000000010000000001000011 +01011100010000010000000000010110 +00110101011000010000000000111000 +10111001101000000001000000000000 +00110100000000110000000000000110 +11111000000000000010011001001000 +01011100001000000000000000010001 +01111000000000010000000000000001 +00110100000000100000000000000001 +00111000001000011011100011111000 +01011000001000100000000000000000 +00110101011000010000000000101100 +11111011111111111111110101010101 +00110111100000010000000000100000 +11111011111111111111110101001010 +01000011100000100000000000100000 +01000011100000110000000000100001 +01000011100001000000000000100010 +01000011100001010000000000100011 +01111000000000010000000000000001 +00111000001000011000011101110100 +11111000000000000000011010100001 +00110100000011000000000000000001 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111010000 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +00100000100001000000000011111111 +00100000100100000000000000001000 +00100000010000100000000011111111 +01111110000100000000000000000000 +10111000001000000111100000000000 +00110100010010110000000000000001 +00100000100011010000000000000100 +10111000011000000110000000000000 +01000000001000010000000000000000 +10110101111010110101100000000000 +01111101101011010000000000000000 +01011110000000000000000000000111 +11001000001000100001000000000000 +00110100000000010000000000000001 +11101100001000100000100000000000 +10111001101000000111000000000000 +10100001101000010000100000000000 +01000100001100000000000000000111 +00110100000000010000000000000010 +00110001011000010000000000000000 +00110100000000010000000000000001 +00110001011000010000000000000001 +00110100000011100000000000000000 +00110100000000100000000000000010 +01100101101000010000000000000000 +01111100010000110000000000000010 +10100000011000010001100000000000 +00110100000000010000000000000000 +01011100011000000000000000110101 +01101000010000100000000000000010 +10100000010011010001000000000000 +01000100010000110000000000000010 +00110100000011100000000000000001 +00110100000000010000000000000010 +00110011100000010000000000110000 +01000001100000010000000000010001 +01011011100010110000000000100000 +00110011100000010000000000110001 +00101001100000010000000000001100 +01011011100000010000000000101100 +01000101110000000000000000000100 +01000001011000010000000000000001 +00110100001000010000000000000001 +00110001011000010000000000000001 +00100000100001000000000000000001 +01000100100000000000000000001001 +00101001100000110000000000001000 +00110100000000011111111111111100 +01000100011000000000000000100001 +00110101011000010000000000000010 +00110111100000100000000000100000 +11011000011000000000000000000000 +01001000000000010000000000011101 +11100000000000000000000000000101 +00101001100000110000000000000100 +00110101011000010000000000000010 +00110111100000100000000000100000 +11011000011000000000000000000000 +01100100001000100000000000000000 +10100000010011100111000000000000 +01000101110000000000000000001100 +01000001011000010000000000000000 +00110111100000100000000000100000 +00110100001000010000000000000001 +00110001011000010000000000000000 +00110100000000010000000000000001 +00110001011000010000000000000001 +00101001100000110000000000000100 +00110101011000010000000000000010 +11011000011000000000000000000000 +01011100001000000000000000000011 +11100000000000000000000000001010 +01011100010011100000000000001000 +01001000000000010000000000001000 +10111010000011010110100000000000 +00110100001000010000000000000010 +01000101101000000000000000000101 +00110100000000100000000000000010 +00110001111000100000000000000000 +11100000000000000000000000000010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000110000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100010110000000000000100 +01111000000001000000000000000001 +00111000100001001001001110100000 +00110100010000101111111111111111 +00110100100010100000000000011100 +00110100000000110000000000000000 +00110100000010010000000011111101 +00110100000010000000000011111001 +00110100000001110000000011111111 +00110100000001101111111110100010 +11100000000000000000000000010001 +01000000100001010000000000000000 +01011100101010010000000000000100 +10110100001000110010100000000000 +00110000101001100000000000000000 +11100000000000000000000000001010 +01011100101010000000000000000101 +10110100001000110010100000000000 +01000000101001010000000000000000 +10110100011001010001100000000000 +11100000000000000000000000000101 +01011100101001110000000000000100 +10110100001000110010100000000000 +11001000010000110101100000000000 +00110000101010110000000000000000 +00110100011000110000000000000001 +00110100100001000000000000000001 +01011100100010101111111111110000 +00101011100010110000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01000000001000110000000000000110 +00110100000001000000000000100000 +01001100100000110000000000000010 +00110100000000110000000000100000 +00100000011010110000000011111111 +10110100001010110001100000000000 +00110100000001001111111110100010 +00110000011001000000000000000111 +01000000011000110000000000001010 +00110100000001000000000000000100 +01001100100000110000000000000010 +00110100000000110000000000000100 +10110101011000110101100000000000 +00100001011010110000000011111111 +10110100001010110001100000000000 +00110000011000100000000000001101 +00110100000000100000000000000001 +00110000011000100000000000010000 +01000000011000100000000000010110 +00110100000000110000000000101000 +01001100011000100000000000000010 +00110100000000100000000000101000 +10110101011000100001000000000000 +00100000010000100000000011111111 +10110100001000100001100000000000 +00110100010000100000000000011001 +00110100000001000000000000000101 +00100000010010110000000011111111 +00110000011001000000000000010111 +00110000011000000000000000011000 +10111001011000000001000000000000 +11111011111111111111111110111110 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111011111100 +01011011100010110000000000101000 +01011011100011000000000000100100 +01011011100011010000000000100000 +01011011100011100000000000011100 +01011011100011110000000000011000 +01011011100100000000000000010100 +01011011100100010000000000010000 +01011011100100100000000000001100 +01011011100100110000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011011110001111000 +00101000001000010000000000000000 +00110111100010110000000000101100 +00110111100000100000000011110100 +10111001011000000001100000000000 +00110100000001000000000011001000 +00110100000001010000000000000000 +11111011111111111111101110010111 +00110100000000100000000000111000 +00110100000011000000000000000000 +01010000010000010000000010100110 +10111001011000000000100000000000 +11111011111111111111110010101000 +01011100001000000000000010100011 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011100001010011100 +00111000010000101001001110100000 +01111000000000110000000000000001 +01000000001001010000000000000000 +00110100010011100000000000011100 +10111001011000000000100000000000 +00110100000001000000000000000000 +00110100000011010000000000000110 +00111000011000111001001110000100 +00110100000010110000000010100000 +00110100000010100000000010100001 +00110100000010010000000010100011 +00110100000010000000000000000001 +11100000000000000000000000101000 +01000000010001100000000000000000 +00110100110001110000000000000111 +00100000111001110000000011111111 +01010100111011010000000000010100 +00111100111001110000000000000010 +10110100011001110011100000000000 +00101000111001100000000000000000 +11000000110000000000000000000000 +10110100100000010011000000000000 +01000000110001100000000000011100 +10110100100001100010000000000000 +11100000000000000000000000011010 +10110100100000010010100000000000 +01000000101001010000000000011100 +01010001000001010000000000010111 +11100000000000000000000000001011 +10110100100000010011000000000000 +01000000110001100000000000011100 +01000100110010110000000000001110 +01000100110010100000000000001111 +01000100110010010000000000010000 +01011101100000000000000000010000 +11100000000000000000000000000100 +10110100100000010011100000000000 +01000000111001110000000000011100 +01000100111001100000000000001100 +01111000000000010000000000000001 +00111000001000011100001010011100 +00110000001001010000000000000000 +00110100000000100000000000000101 +00110111100000010000000001001000 +11100000000000000000000001011011 +00110100000011000000000000000010 +11100000000000000000000000000100 +00110100000011000000000000000100 +11100000000000000000000000000010 +00110100000011000000000000000001 +00110100100001000000000000000001 +00110100010000100000000000000001 +01011100010011101111111111011001 +01111000000000010000000000000001 +00111000001000011100001010011100 +00110000001001010000000000000000 +00110111100000010000000001001000 +10110100001001000110100000000000 +01111000000010110000000000000001 +00110100100001000000000000000001 +10110100001001000111100000000000 +00111001011010111010000011100000 +00100001100100110000000000000011 +00100001100100000000000000000100 +00111001100100100000000000001000 +11100000000000000000000000111111 +01000001101100010000000000000000 +01000110011000000000000000000010 +01010100001100010000000000111011 +00100010001000100000000011111111 +01010000001000100000000000000010 +10111000001000001000100000000000 +00101001011000010000000000000000 +00100010001100010000000011111111 +10111001111000000001000000000000 +10111010001000000001100000000000 +11111000000000000010010100011011 +00111100001001010000000000011000 +10111001100000000111000000000000 +00010100101001010000000000011000 +01000110000000000000000000001010 +01001000101000000000000000000111 +01000001011000110000000000001100 +01000001101000010000000000000000 +01100100101000100000000000000000 +11110000011000010000100000000000 +10100000010000010000100000000000 +01000100001000000000000000000011 +01000001011100010000000000001100 +10111010010000000111000000000000 +01000001011000110000000000001100 +01100100101000010000000000000000 +11100100011100010001000000000000 +10100000010000010001000000000000 +01011100010000000000000000000011 +00100001110000010000000000001000 +01000100001000100000000000011110 +01011110000000000000000000000011 +00100001110000010000000000001000 +01000100001100000000000000000100 +00101001011000100000000000000000 +10111001111000000000100000000000 +11111000000000000010010100100010 +00101001011001010000000000000100 +00101001011000110000000000001000 +10111001101000000000100000000000 +10111010001000000001000000000000 +10111001110000000010000000000000 +11011000101000000000000000000000 +01001100000000010000000000001100 +01011110000000000000000000000011 +00100001110011100000000000001000 +01000101110100000000000000000101 +01000001101000110000000000000000 +01000001011000100000000000001100 +10110100011000100001000000000000 +00110001101000100000000000000000 +01000001011001000000000000001100 +10110101111001000111100000000000 +10110101111000010111100000000000 +11100000000000000000000000001010 +01000100001000000000000000000110 +11001000000000010001000000000000 +00100000010000100000000011111111 +00110111100000010000000001001000 +11100000000000000000000000001010 +01001000101000010000000000000111 +00110101011010110000000000010000 +01000001011000010000000000001100 +01011100001000001111111111000001 +01000101011000000000000000000011 +01000001011000010000000000001100 +01011100001000000000000000000110 +00110111100000010000000001001000 +00110100000000100000000000000010 +11111011111111111111111100110100 +10111000001000000101100000000000 +11100000000000000000000000000111 +00110111100000010000000001001000 +11001001111000010101100000000000 +10111001011000000001000000000000 +11111011111111111111111100001110 +00110100000011000000000000000000 +01001000000010110000000000010000 +00110111100011000000000000101100 +00110101011010110000000000011100 +10111001100000000000100000000000 +10111001011000000001000000000000 +00110100000000110000000000000000 +11111011111111111111110110010100 +01111000000001010000000000000001 +00111000101001011011110001111000 +00101000101000010000000000000000 +10111001100000000001100000000000 +00110111100000100000000011110100 +10111001011000000010000000000000 +00110100000001010000000000000000 +11111011111111111111101101100011 +00110100000011000000000000000001 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000101000 +00101011100011000000000000100100 +00101011100011010000000000100000 +00101011100011100000000000011100 +00101011100011110000000000011000 +00101011100100000000000000010100 +00101011100100010000000000010000 +00101011100100100000000000001100 +00101011100100110000000000001000 +00110111100111000000000100000100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000011000000000000 +01000000110001010000000000010001 +01000000001000100000000000000000 +10111000011000000110000000000000 +01000000001010110000000000000001 +00110100000001001111111111111101 +01011100101000100000000000011110 +00110100001000100000000000000010 +00110100000000010000000000000100 +01000100101000010000000000010011 +00110100000000010000000001000010 +01000100101000010000000000000100 +00110100000000010000000000000010 +00110100000001000000000000000000 +01011100101000010000000000010110 +00110100000011010000000000000100 +00110100000001001111111111111101 +01010101011011010000000000010011 +00110111100000010000000000010100 +10111001011000000001100000000000 +01011011100000000000000000010100 +11111000000000000010010011000010 +00101011100000010000000000010100 +11001001101010110110100000000000 +00111101101011010000000000000011 +10000000001011010110100000000000 +01011001100011010000000000000000 +11100000000000000000000000001000 +01000000110000010000000000010011 +01010101011000010000000000000111 +10111000011000000000100000000000 +10110101100010110110000000000000 +10111001011000000001100000000000 +11111000000000000010010010110110 +00110001100000000000000000000000 +00110101011001000000000000000010 +10111000100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01000000010000110000000000010010 +00101000010001000000000000001100 +10110100100000110001100000000000 +11111011111111111111111111001011 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111001100 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +01000000001011100000000000000000 +00100000010000100000000011111111 +00100000100001000000000011111111 +00110100010011000000000000000001 +11001001110000100111000000000000 +00100000100000100000000000000001 +10111000001000000111100000000000 +10110100001011000110000000000000 +00110100000000011111111111111100 +01011100010000000000000001101000 +00100000100011010000000000000100 +01111101101011010000000000000000 +00100000100100000000000000001000 +01111110000100000000000000000000 +10111000011000000101100000000000 +00100001101100010000000011111111 +11100000000000000000000000100011 +10111001110000000001100000000000 +01001100001011100000000000000010 +10111000001000000001100000000000 +00101001011000010000000000000000 +10111001100000000001000000000000 +00100000011000110000000011111111 +11111000000000000010010001100010 +01011110000000000000000000001010 +10110000001000000000100000000000 +01100100001000100000000000000000 +10100000010100010001100000000000 +01000100011100000000000000000011 +01000001011000110000000000010000 +01001100011011100000000000000100 +01101000001000010000000000000000 +10100010001000010000100000000000 +01000100001000000000000000001011 +00101001011000100000000000000000 +01000001011000110000000000010000 +10111001100000000000100000000000 +00110100000011100000000000000000 +11111000000000000010010001110100 +01000001011000010000000000010000 +00110100000000100000000000000001 +10110101100000010000100000000000 +00110000001000100000000000000000 +11100000000000000000000000001101 +01000100010000010000000000000110 +01000001011000010000000000010000 +00110100001000010000000000000001 +01000101110000010000000000000110 +01000101101000000000000000000010 +01001001110000010000000000000110 +00110101011010110000000000010100 +01000001011000010000000000010000 +01011100001000001111111111011101 +10111001101000000111000000000000 +11100000000000000000000000000010 +00110100000011100000000000000001 +01000001011000100000000000010000 +00110100000000010000000000000000 +01000100010000000000000000110111 +01000001011000010000000000010001 +00110011100000100000000000110100 +01011011100011000000000000100100 +00110011100000010000000000110101 +00101001011000010000000000001100 +01011011100000010000000000110000 +01000101110000000000000000000100 +01000001100000010000000000000001 +00110100001000010000000000000001 +00110001100000010000000000000001 +01000001011000010000000000010000 +00101001011000110000000000000100 +00110111100100010000000000100100 +00110100001000010000000000000001 +10110101100000010000100000000000 +10111010001000000001000000000000 +11011000011000000000000000000000 +01100100001000110000000000000000 +10100000011011100111000000000000 +01000101110000000000000000011001 +00110101011010110000000000010100 +01000001011000110000000000010000 +00110100000000010000000000000000 +01000100011000000000000000011111 +00101001011000100000000000000000 +10111001100000000000100000000000 +11111000000000000010010001000101 +01000001011000010000000000010000 +00110100000000100000000000000001 +10110101100000010000100000000000 +00110000001000100000000000000000 +01000001011000100000000000010001 +01000001011000010000000000010000 +00101001011000110000000000000100 +00110011100000100000000000110101 +00101001011000100000000000001100 +00110011100000010000000000110100 +00110100001000010000000000000001 +01011011100000100000000000110000 +10110101100000010000100000000000 +10111010001000000001000000000000 +11011000011000000000000000000000 +01011100001000000000000000000011 +11100000000000000000000000001011 +01011100011011100000000000001001 +01001000000000010000000000001001 +01000001011000100000000000010000 +10111010000011010110100000000000 +00110100010000100000000000000001 +10110100001000100000100000000000 +01000101101000000000000000000100 +00110001111000100000000000000000 +11100000000000000000000000000010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000110100 +11000011101000000000000000000000 +00110111100111001111111111010000 +01011011100010110000000000110000 +01011011100011000000000000101100 +01011011100011010000000000101000 +01011011100011100000000000100100 +01011011100011110000000000100000 +01011011100100000000000000011100 +01011011100100010000000000011000 +01011011100100100000000000010100 +01011011100100110000000000010000 +01011011100101000000000000001100 +01011011100101010000000000001000 +01011011100111010000000000000100 +00100000100001000000000011111111 +01000000001100010000000000000000 +00100000010000100000000011111111 +00000000100011010000000000000011 +00110100010011100000000000000001 +00100000100011110000000000000100 +10111000001000001000000000000000 +11001010001000101000100000000000 +10110100001011100111000000000000 +00100001101011010000000000000001 +10111000011000000101100000000000 +00110100000011000000000000000000 +00100000100101010000000000000011 +00100000100101000000000000000001 +01111101111100110000000000000000 +11100000000000000000000000110100 +10111000101000001001000000000000 +01011101101000000000000000000101 +10111010001000001001000000000000 +01001100101100010000000000000010 +10111000101000001001000000000000 +00100010010100100000000011111111 +01000110101000000000000000000010 +01011110001001010000000000101011 +01011101101000000000000000001100 +00101001011000010000000000000000 +10111001110000000001000000000000 +10111010010000000001100000000000 +11111000000000000010001111010101 +00111100001011000000000000011000 +00010101100011000000000000011000 +01011101100011010000000000000110 +01000101111011000000000000001001 +01000001011000010000000000010000 +01011100001100100000000000000111 +11100000000000000000000000011111 +01000101100000000000000000000101 +01101001100000010000000000000000 +10100000001100110001000000000000 +01011100010000000000000000000010 +01000101101000100000000000011001 +01000101111000000000000000000111 +00101001011000100000000000000000 +01000001011000110000000000010000 +10111001110000000000100000000000 +11111000000000000010001111100101 +01000001011000010000000000010000 +00110010000000010000000000000000 +01000110100000000000000000001000 +00101001011000110000000000001000 +01000100011000000000000000010100 +01000001011000010000000000010000 +10111001011000000001000000000000 +10110101110000010000100000000000 +11011000011000000000000000000000 +01001000000000010000000000010010 +01000001011000010000000000010000 +00101001011000110000000000000100 +10111001011000000001000000000000 +10110101110000010000100000000000 +11011000011000000000000000000000 +01000100001000000000000000000101 +01000001011000100000000000010000 +10110100001000100000100000000000 +11100000000000000000000000001001 +01011100001011010000000000000111 +00110101011010110000000000010100 +01000001011001010000000000010000 +01011100101000001111111111001100 +11100000000000000000000000000011 +00110100000000011111111111111100 +11100000000000000000000000000010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000110000 +00101011100011000000000000101100 +00101011100011010000000000101000 +00101011100011100000000000100100 +00101011100011110000000000100000 +00101011100100000000000000011100 +00101011100100010000000000011000 +00101011100100100000000000010100 +00101011100100110000000000010000 +00101011100101000000000000001100 +00101011100101010000000000001000 +00110111100111000000000000110000 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +00110100001011010000000000000010 +00110000001000100000000000000000 +00110100000000010000000001000011 +10111000011000000101100000000000 +01010100010000010000000000001000 +00110100000000010000000001000001 +01010000010000010000000000001001 +00110100000000010000000000000010 +01000100010000010000000000000111 +00110100000000010000000000000100 +01011100010000010000000000101001 +11100000000000000000000000011100 +00110100000000010000000001000110 +01011100010000010000000000100110 +11100000000000000000000000001001 +00101001011000010000000000000000 +00110111100000100000000000011100 +00110100000000110000000000000100 +01011011100000010000000000011100 +10111001101000000000100000000000 +11111000000000000010001110100001 +00110100000000010000000000000100 +11100000000000000000000000001111 +01111000000000010000000000000001 +00111000001000011100001010011100 +01000000001000010000000000000000 +00110100000000100000000000000000 +01000100001000000000000000011001 +00101000011000010000000000000000 +00110111100000100000000000010100 +01011011100000010000000000010100 +00101000011000010000000000000100 +00110100000000110000000000001000 +01011011100000010000000000011000 +10111001101000000000100000000000 +11111000000000000010001110010010 +00110100000000010000000000001000 +00110001100000010000000000000001 +11100000000000000000000000001010 +10111000011000000000100000000000 +00110100000000100000000000011111 +11111000000000000010010101101111 +00100000001000110000000011111111 +00110001100000110000000000000001 +10111001101000000000100000000000 +10111001011000000001000000000000 +00110100011000110000000000000001 +11111000000000000010001110000110 +01000001100000100000000000000001 +00110100010000100000000000000010 +11100000000000000000000000000010 +00110100000000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +00101000010011010000000000001100 +10111000001000000111000000000000 +10111000010000000101100000000000 +00110100000000010000000000000001 +01111000000000100000000000000001 +00111000010000101011110010100000 +01000101101000010000000000000101 +00110100000001001111111111111101 +01011101101000000000000000101100 +01111000000000100000000000000001 +00111000010000101011110010100100 +00101001011000010000000000000000 +00110100000001010000000000000001 +00101000010000100000000000000000 +01000000001011000000000000000000 +01000000001000010000000000000001 +00110100000001000000000000000000 +01011100001001010000000000100011 +01001100001011000000000000100010 +00110100010000010000000000000010 +01001001100000010000000000100000 +00110100000000010000000000000010 +01011101100000010000000000000110 +00110100000000010000000010100011 +00110100000001001111111111111100 +01000100011000010000000000011011 +01011011100000100000000000011000 +11100000000000000000000000010100 +00110100000000010000000010100011 +01011100011000010000000000001100 +10111001110000000000100000000000 +10111001011000000001000000000000 +00110111100000110000000000011000 +11111011111111111111111001110111 +10111000001000000010000000000000 +01001100000000010000000000010001 +00101011100000100000000000011000 +00110101100000011111111111111101 +11111000000000000000100111110001 +00110100000001001111111111111011 +01001000000000010000000000001100 +00110101100000011111111111111101 +10111001101000000001000000000000 +00110111100000110000000000011000 +11111000000000000000100110100100 +00110100000001001111111111111011 +01001000000000010000000000000110 +01000001011000100000000000010001 +10111001110000000000100000000000 +00110111100000110000000000011000 +11111011111111111111111110000111 +10111000001000000010000000000000 +10111000100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000110000000010100011 +11111011111111111111111110111011 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000110000000010100000 +11111011111111111111111110110100 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000110000000000000 +00101000010000100000000000001100 +00110100000000110000000000000001 +10111000001000000110100000000000 +01000100010000110000000000011001 +00110100000000110000000000000010 +01011100010000110000000000110001 +01111000000000100000000000000001 +00111000010000101011110001111100 +00101000010000110000000000000000 +00101000011001010000000001010100 +00101000011001000000000001010000 +00111100101000100000000000000001 +00111100100001000000000000000001 +11110100101000100010100000000000 +11001000000000100001000000000000 +10110100101001000010000000000000 +01111100010001010000000000000000 +11001000000001000010000000000000 +11001000100001010010000000000000 +00101000011001010000000001000000 +00101000011000110000000001000100 +10110100100001010010000000000000 +10110100010000110001100000000000 +11110100010000110001000000000000 +01011011100000110000000000011100 +10110100010001000001000000000000 +01011011100000100000000000011000 +11100000000000000000000000010111 +01111000000000100000000000000001 +00111000010000101011110001111100 +00101000010000110000000000000000 +01111000000001010000000000000001 +00111000101001011000111011001000 +00101000011011100000000010101000 +00101100011010110000000010101100 +00101000011000100000000010100100 +00111101110000010000000000010000 +00101000101001000000000000000000 +10111000001010110101100000000000 +00101000011000010000000010100000 +00110100000000110000000000000000 +00010101110011100000000000010000 +11111000000000000010001000000110 +10110101011000100001000000000000 +11110101011000100101100000000000 +10110101110000010001100000000000 +10110101011000110001100000000000 +01011011100000110000000000011000 +01011011100000100000000000011100 +10111001101000000000100000000000 +01000001100000100000000000010001 +00110111100000110000000000011000 +11111011111111111111111100110100 +11100000000000000000000000000010 +00110100000000011111111111111111 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100111010000000000000100 +00101000010000110000000000001100 +01000000010001010000000000010001 +01000000010000100000000000010010 +00101000011000110000000000000000 +10110100011000100001000000000000 +00101000010001000000000000000000 +00101000010000110000000000000100 +01001000100000000000000000001110 +01011100100000000000000000000101 +01111000000001100000000000000001 +00111000110001101000111011111100 +00101000110000100000000000000000 +01010100011000100000000000001001 +00110100000000101111111111111111 +01001000010001000000000000001011 +01011100100000100000000000001011 +01111000000001000000000000000001 +00111000100001001000111100000000 +00101000100000100000000000000000 +01010100010000110000000000000110 +11100000000000000000000000000110 +01111000000001100000000000000001 +00111000110001101000111011010100 +00101000110000110000000000000000 +11100000000000000000000000000010 +01111000000000111000000000000000 +01011011100000110000000000001000 +10111000101000000001000000000000 +00110111100000110000000000001000 +11111011111111111111111100001011 +00101011100111010000000000000100 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000010001000000000000001100 +01000000010000110000000000010010 +01000000010000100000000000010001 +00101000100001000000000000000000 +10110100100000110001100000000000 +11111011111111111111111100000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000010001000000000000001100 +01000000010000110000000000010010 +01000000010000100000000000010001 +10110100100000110001100000000000 +11111011111111111111111011110110 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111110011000 +01011011100010110000000000110100 +01011011100011000000000000110000 +01011011100011010000000000101100 +01011011100011100000000000101000 +01011011100011110000000000100100 +01011011100100000000000000100000 +01011011100100010000000000011100 +01011011100100100000000000011000 +01011011100100110000000000010100 +01011011100101000000000000010000 +01011011100101010000000000001100 +01011011100101100000000000001000 +01011011100111010000000000000100 +10111000001000001000000000000000 +00101000010000010000000000000000 +10111000010000000111000000000000 +00110100000011010000000000000000 +01000000001101100000000000000001 +01000000001011000000000000000000 +00110100000010110000000000000001 +00110111100011110000000000111000 +00110100000101011111111111111111 +00110100000101000000000000000010 +00110100000100110000000000000011 +00110100000100100000000000000100 +00110100000100010000000000000101 +00100001101000110000000011111111 +10111001111000000000100000000000 +00110100000000100000000000000000 +11111000000000000001000101000001 +10111000001000000001100000000000 +01000100001000000000000000011100 +01000100001101010000000000011011 +01011110110010110000000000001101 +01011101100101000000000000001001 +00110111100010110000000001011000 +00110100000000110000000000010000 +10111001011000000000100000000000 +10111001111000000001000000000000 +11111000000000000010001010000101 +10111001011000000001100000000000 +00110011100000000000000001101000 +11100000000000000000000000001101 +01000101100100110000000000000111 +01000101100100100000000000001000 +01000101100100010000000000001001 +00110101011010110000000000000001 +00110101101011010000000000000001 +01001100011010111111111111101010 +11100000000000000000000000001010 +00110111100000110000000001001100 +11100000000000000000000000000100 +00110111100000110000000001010000 +11100000000000000000000000000010 +00110111100000110000000001001000 +01000001110000100000000000010001 +10111010000000000000100000000000 +11111011111111111111111010111000 +11100000000000000000000000000010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000110100 +00101011100011000000000000110000 +00101011100011010000000000101100 +00101011100011100000000000101000 +00101011100011110000000000100100 +00101011100100000000000000100000 +00101011100100010000000000011100 +00101011100100100000000000011000 +00101011100100110000000000010100 +00101011100101000000000000010000 +00101011100101010000000000001100 +00101011100101100000000000001000 +00110111100111000000000001101000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +00101000010000100000000000001100 +10111000001000000110000000000000 +00110100000000010000000000000001 +01011100010000010000000000001010 +00110100000000010000000000000000 +11111000000000000000010000101011 +00110100001000100000000000000001 +01011011100000100000000000010000 +01000001011000100000000000010001 +10111001100000000000100000000000 +00110111100000110000000000010000 +11111011111111111111111010010110 +11100000000000000000000000000010 +00110100000000011111111111111111 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00101000010010110000000000001100 +10111001011000000001100000000000 +11111011111111111111110101100111 +10111000001000000110000000000000 +01001100000000010000000000001010 +00101001011000100000000000000000 +00110100000000010000000000000001 +01011100010000010000000000000101 +11111011111111111100111110101110 +11111011111111111100111110000111 +00110100000000010000000001100100 +11100000000000000000000000000010 +00110100000000010000000011001000 +01011001011000010000000000000000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000010010110000000000001100 +10111001011000000001100000000000 +11111011111111111111110101001110 +10111000001000000110100000000000 +01001100000000010000000001010000 +00101001011000100000000000000000 +00110100000000010000000000000010 +01000100010000010000000000011110 +01001000010000010000000000000100 +00110100000000010000000000000001 +01011100010000010000000001001000 +11100000000000000000000000100000 +00110100000000010000000000000011 +01000100010000010000000000000100 +00110100000000010000000000110010 +01011100010000010000000001000011 +11100000000000000000000000111101 +01111000000000100000000000000001 +00111000010000101011110010000000 +00101000010000010000000000010100 +01111000000000110000000000000001 +00111000011000111011111101000000 +01011000011000010000000000000000 +00101000010000010000000000011000 +01111000000000110000000000000001 +00111000011000111011111101000100 +01011000011000010000000000000000 +00101000010000010000000000010000 +01111000000000110000000000000001 +00111000011000111010100000001000 +01011000011000010000000000000000 +01111000000000010000000000000001 +00111000001000011000011110011100 +11111000000000000000001001010011 +11111011111111111100111101111011 +11111011111111111100111101010100 +11100000000000000000000000101100 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011011110010000000 +00111000010000101011111110111100 +00110100000000110000000000010000 +11111000000000000010001000000010 +01111000000011000000000000000001 +00111001100011001011110010000000 +01000001100000010000000000000000 +01011100001000000000000000000011 +00110100000000010000000011001011 +11100000000000000000000000100011 +00110100000000100000000000010000 +10111001100000000000100000000000 +11111000000000000010001111011100 +10111000001000000001000000000000 +00110100000000110000000000001111 +00110100000000010000000000100000 +11100000000000000000000000000100 +10110100010011000010000000000000 +00110000100000010000000000000000 +00110100010000100000000000000001 +01001100011000101111111111111101 +00110100000000100000000000000001 +10111001100000000000100000000000 +00110100000000110000000000000000 +11111000000000000001000010011111 +10111000001000000001000000000000 +00110100000000011111111111111110 +01011100010000010000000000000011 +00110100000000010000000011001010 +11100000000000000000000000001111 +00110100000000011111111111111111 +01011100010000010000000000000011 +00110100000000010000000011001001 +11100000000000000000000000001011 +11111000000000000000100011111000 +01000100001000000000000000000110 +00110100000000010000000001100101 +11100000000000000000000000000111 +11111000000000000001000000110001 +00110100000000101111111111111111 +01000100001000100000000000000011 +00110100000000010000000001100100 +11100000000000000000000000000010 +00110100000000010000000011001000 +01011001011000010000000000000000 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111001000 +01011011100010110000000000100100 +01011011100011000000000000100000 +01011011100011010000000000011100 +01011011100011100000000000011000 +01011011100011110000000000010100 +01011011100100000000000000010000 +01011011100100010000000000001100 +01011011100100100000000000001000 +01011011100111010000000000000100 +10111000001000000111100000000000 +00101000010000010000000000000000 +10111000010000000110100000000000 +00110100000011000000000000000001 +01000000001100100000000000000001 +01000000001011100000000000000000 +00110100000000010000000000000000 +11111000000000000000110000010100 +10111000001000000010000000000000 +00110100000100010000000000000010 +00110100000100000000000000000011 +11100000000000000000000000100101 +01011110010011000000000000100000 +00101000100010110000000000000100 +01011101110100010000000000000111 +00101000100000110000000000000000 +01111000000000100000000000000001 +00110111100000010000000000101000 +00111000010000100111101111011100 +11111000000000000000000111101110 +11100000000000000000000000011111 +01011101110100000000000000010111 +01111000000000011000000000000000 +01011101011000010000000000000110 +01111000000000100000000000000001 +00110111100000010000000000101000 +00111000010000101000011111001000 +11111000000000000000000111100110 +11100000000000000000000000010111 +01001101011000000000000000000110 +01111000000000100000000000000001 +00110111100000010000000000101000 +00111000010000100111100101001000 +11001000000010110101100000000000 +11111000000000000000000111011111 +00100001011001001111111111111111 +00001000100001000010011100010000 +01111000000000100000000000000001 +00010101011000110000000000010000 +00000000100001000000000000010000 +00110111100000010000000000101000 +00111000010000101000011111010000 +11111000000000000000000111010111 +11100000000000000000000000001000 +10111000100000000000100000000000 +11111000000000000000101111101110 +10111000001000000010000000000000 +00110101100011000000000000000001 +01011100100000001111111111011100 +00110100000000010000000000000000 +11100000000000000000000000000101 +01000001101000100000000000010001 +10111001111000000000100000000000 +00110111100000110000000000101000 +11111011111111111111110111010110 +00101011100111010000000000000100 +00101011100010110000000000100100 +00101011100011000000000000100000 +00101011100011010000000000011100 +00101011100011100000000000011000 +00101011100011110000000000010100 +00101011100100000000000000010000 +00101011100100010000000000001100 +00101011100100100000000000001000 +00110111100111000000000000111000 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000010011010000000000001100 +10111000001000000110000000000000 +10111000010000000101100000000000 +00100001101000010000000000000010 +01000100001000000000000000001001 +11111000000000000000011110101111 +00110100000000100000000000001010 +11111000000000000010000100011000 +01011011100000010000000000011100 +01000001011000100000000000010001 +10111001100000000000100000000000 +00110111100000110000000000011100 +11100000000000000000000000010011 +00100001101000100000000000000100 +01000100010000010000000000000100 +00110111100000010000000000010100 +00110100000000100000000000000000 +11111000000000000000110010101000 +00100001101011010000000000000001 +01000101101000000000000000001001 +00101011100000100000000000011000 +00101011100000010000000000010100 +00110100000000110000000000000010 +11111011111111111111010011001010 +10111000001000000001100000000000 +01000001011000100000000000010001 +10111001100000000000100000000000 +11100000000000000000000000000100 +01000001011000100000000000010001 +10111001100000000000100000000000 +00110111100000110000000000010100 +11111011111111111111110110100110 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100111010000000000000100 +01111000000000010000000000000001 +00110100000000100000000000000000 +00110100000000110000000000000000 +00110100000001000000000010100001 +00111000001000011010000110101000 +11111011111111111111011010110101 +01111000000000100000000000000001 +00111000010000101011110001111000 +01011000010000010000000000000000 +01111000000000010000000000000001 +00111000001000011001100000101000 +00101000001000010000000000011000 +01111000000000100000000000000001 +00111000010000101011110001111100 +01111000000000110000000000000001 +01111000000001000000000000000001 +01011000010000010000000000000000 +00111000011000111011110010100100 +00110111100000010000000000001100 +00110111100000100000000000001000 +00111000100001001011110010100000 +11111000000000000000011110000101 +01000011100000110000000000001111 +01000011100000100000000000001011 +01111000000000010000000000000001 +00111000001000011010000110010000 +00110000001000110000000000001000 +00110000001000100000000000001001 +01111000000000010000000000000001 +00111000001000011010000110011100 +00110000001000110000000000001000 +00110000001000100000000000001001 +00101011100111010000000000000100 +00110111100111000000000000001100 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111011110110110100 +00101100011001010000000000000000 +01111000000001000000000000000001 +00111000100001001011110111001100 +00111100001000010000000000000001 +10110100100001010010000000000000 +00110100101001010000000000000010 +00110000100000010000000000000000 +00110000100000100000000000000001 +00001100011001010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111000000 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +00110100000000100000000000001000 +01010100001000100000000010111110 +00111100001000010000000000000010 +01111000000000100000000000000001 +00111000010000101001001110111100 +10110100010000010001000000000000 +00101000010000010000000000000000 +01111000000011000000000000000001 +00111001100011001011110110110100 +11000000001000000000000000000000 +00110100000000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111111100010 +11100000000000000000000010101100 +00110100000000010000000000000001 +00110100000000100000000000000111 +11111011111111111111111111011110 +00101101100000100000000000000000 +01111000000000010000000000000001 +00111000001000011011110111001100 +10110100001000100000100000000000 +00110100000000100000000000000100 +11100000000000000000000000001001 +00110100000000010000000000000010 +00110100000000100000000000000111 +11111011111111111111111111010101 +00101101100000100000000000000000 +01111000000000010000000000000001 +00111000001000011011110111001100 +10110100001000100000100000000000 +00110100000000100000000000000011 +00110000001000100000000000000000 +00110100001000010000000000000001 +11111000000000000000001010001011 +00110100000010110000000000000111 +11100000000000000000000010010111 +00110100000000010000000000000011 +00110100000000100000000000000010 +11111011111111111111111111001000 +00101101100000100000000000000000 +01111000000000010000000000000001 +00111000001000011011110111001100 +10110100001000100000100000000000 +00110100000000100000000000101000 +00110000001000000000000000000000 +00110000001000100000000000000001 +00110100000010110000000000000010 +11100000000000000000000010001011 +01111000000011010000000000000001 +00111001101011011000011101011100 +10111001101000000000100000000000 +11111000000000000010001000100100 +00110100001010110000000000000001 +00100001011000100000000011111111 +00110100000000010000000000000100 +11111011111111111111111110110111 +00101101100000100000000000000000 +01111000000000010000000000000001 +00111000001000011011110111001100 +10110100010000010000100000000000 +10111001101000000001000000000000 +11111000000000000010000111110110 +11100000000000000000000001111100 +00110111100000010000000001000000 +11111011111111111111011111001101 +01111000000000100000000000000001 +00110111100000010000000001000000 +00111000010000101000111110010000 +00110100000000110000000000000100 +01111000000011000000000000000001 +01111000000011100000000000000001 +11111000000000000010000010111011 +00111001100011001011110110110100 +00111001110011101011110111001100 +00110111100011010000000000011000 +01000100001000000000000000001101 +00110111100000100000000001000000 +10111001101000000000100000000000 +11111011111111111111001100001100 +10111001101000000000100000000000 +11111000000000000010001000000111 +10111000001000000101100000000000 +00101101100000010000000000000000 +10111001101000000001000000000000 +00110100001000010000000000000010 +10110100001011100000100000000000 +11111000000000000010000111011101 +11100000000000000000000000010100 +00110111100000010000000000111000 +11111000000000000000001001010011 +01000011100000110000000000111000 +01000011100001000000000000111001 +01000011100001010000000000111010 +01000011100001100000000000111011 +01000011100001110000000000111100 +01000011100010000000000000111101 +01111000000000100000000000000001 +00111000010000101000000101010000 +10111001101000000000100000000000 +11111000000000000000000011111010 +00101101100000010000000000000000 +10111001101000000001000000000000 +00110100000000110000000000010001 +00110100001000010000000000000010 +10110100001011100000100000000000 +11111000000000000010001001101010 +00110100000010110000000000010001 +00110100000000010000000000000101 +00100001011000100000000011111111 +11100000000000000000000000100110 +00101101100011100000000000000000 +01111000000011010000000000000001 +00111001101011011011110111001100 +00110101110011100000000000000010 +01111000000010110000000000000001 +10110101110011010111000000000000 +00111001011010111100001010000100 +00110100000000110000000000000100 +10111001011000000001000000000000 +10111001110000000000100000000000 +11111000000000000010001001011011 +10111001011000000000100000000000 +00110100000000100000000000000100 +11111000000000000010001010001011 +10110101110000010101100000000000 +01111000000000100000000000000001 +10111001011000000000100000000000 +00111000010000100111111001101100 +01111000000011100000000000000001 +11111000000000000010000110110010 +00111001110011101001011011101000 +00101001110000100000000000000000 +00110101011010110000000000000010 +10111001011000000000100000000000 +00110100000000110000000000100000 +11111000000000000010001001001100 +00101001110000010000000000000000 +00110100000000100000000000100000 +11111000000000000010001001111100 +10110101011000010000100000000000 +00101101100010110000000000000000 +00110101011010110000000000000010 +10110101011011010101100000000000 +11001000001010110101100000000000 +00100001011010110000000011111111 +00110100000000010000000000000110 +10111001011000000001000000000000 +11111011111111111111111101011011 +11100000000000000000000000100110 +01111000000000100000000000000001 +00110111100000010000000001000000 +00111000010000101000111110010000 +00110100000000110000000000000100 +11111000000000000010000001101001 +00110100000010110000000000000000 +01000100001000000000000000011111 +00110100000000010000000000001000 +00110100000000100000000000001100 +01111000000011000000000000000001 +11111011111111111111111101001111 +00111001100011001011110110110100 +00101101100000010000000000000000 +01111000000010110000000000000001 +00111001011010111011110111001100 +10110101011000010000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000010 +00110000001000100000000000000000 +00110100000000100000000000000001 +00110000001000110000000000000110 +00110000001000100000000000000001 +00110000001000100000000000001010 +00110111100000010000000001000000 +11111011111111111111011101100000 +00110111100000100000000001000000 +00110111100000010000000000011000 +11111011111111111111001010101010 +00101101100000010000000000000000 +00110111100000100000000001000000 +00110100000000110000000000000100 +00110100001000010000000000000010 +10110101011000010000100000000000 +11111000000000000010000001101101 +00110100000010110000000000001100 +11100000000000000000000000000010 +00110100000010110000000000000000 +01111000000000010000000000000001 +00111000001000011011110110110100 +00101100001000100000000000000000 +10110101011000100101100000000000 +00001100001010110000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000001000000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00110100000000100000000000000000 +00110100000000110000000010011110 +00111000001000011011110111001100 +11111000000000000010000011010011 +01111000000000010000000000000001 +00111000001000011011110110110100 +00001100001000000000000000000000 +01111000000000010000000000000001 +00111000001000011000011111111000 +11111000000000000000000010010111 +00110100000010110000000000000001 +00110100000011000000000000001001 +10111001011000000000100000000000 +00110101011010110000000000000001 +11111011111111111111111100100001 +01011101011011001111111111111101 +00110100000000010000000000000000 +11111011111111111111111100011110 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011011111001111000 +00101000001000100000000000000000 +00110100000000110010011100010000 +01001100011000100000000000110100 +00110111100011000000000000010000 +10111001100000000000100000000000 +11111000000000000000000110111111 +00110111100010110000000000010111 +10111001011000000000100000000000 +11111011111111111111011100011101 +01111000000000100000000000000001 +00110100000000110000000000000110 +10111001100000000000100000000000 +00111000010000101011111001101100 +11111000000000000010000000001101 +10111000001000000001100000000000 +01011100001000000000000000001011 +01111000000000100000000000000001 +00111000010000101011100011111000 +00101000010000010000000000000000 +01000100001000110000000000010010 +01111000000000100000000000000001 +10111001011000000000100000000000 +00111000010000101011111001110100 +00110100000000110000000000000100 +11111000000000000010000000000010 +01000100001000000000000000001100 +11111011111111111111111111000100 +01111000000000010000000000000001 +00110111100000100000000000010000 +00110100000000110000000000000110 +00111000001000011011111001101100 +11111000000000000010000000011100 +01111000000000010000000000000001 +00111000001000011011111001110100 +00110111100000100000000000010111 +00110100000000110000000000000100 +11111000000000000010000000010111 +01111000000000010000000000000001 +01111000000001000000000000000001 +00111000001000011011110110110000 +00111000100001001011110110110100 +00101000001000010000000000000000 +00101100100001000000000000000000 +01111000000000100000000000000001 +01111000000000110000000000000001 +00111000010000101011110110111000 +00111000011000111011110111001100 +00110100000001010000000000000000 +11111011111111111111011010000011 +01111000000000010000000000000001 +00111000001000011011111001111000 +01011000001000000000000000000000 +00110100000000010000000000000001 +11100000000000000000000000000100 +00110100010000100000000000000001 +01011000001000100000000000000000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000001000 +01011011100111010000000000000100 +00110111100010110000000000001100 +10111001011000000000100000000000 +00110100000000100000000000000000 +00110100000000110000000000010010 +11111000000000000010000001110100 +00110100000000011000100011001100 +00001111100000010000000000011000 +01111000000000010000000000000001 +00110100000001000000000000000000 +10111001011000000001000000000000 +00110100000000110000000000000001 +00111000001000011011111001111100 +11111011111111111111010101010000 +01111000000000100000000000000001 +01111000000010110000000000000001 +00111001011010111011110110111000 +00111000010000101011110110110000 +01011000010000010000000000000000 +00110100000000110000000000010010 +10111001011000000000100000000000 +00110100000000100000000000000000 +11111000000000000010000001100011 +01111000000000100000000000000001 +00111000010000101000111110011000 +00110100000000110000000000000110 +10111001011000000000100000000000 +11111000000000000001111111100000 +11111011111111111111111110000010 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +10111000001000000010000000000000 +00111001011010111011111010110000 +10111000010000000001100000000000 +10111001011000000000100000000000 +10111000100000000001000000000000 +11111000000000000000000000100111 +10111000001000000110000000000000 +10111001011000000000100000000000 +11111000000000000000000100001100 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100111010000000000000100 +01011011100000110000000000001100 +00110111100000110000000000001100 +01011011100000100000000000001000 +01011011100001000000000000010000 +01011011100001010000000000010100 +01011011100001100000000000011000 +01011011100001110000000000011100 +01011011100010000000000000100000 +11111000000000000000000000010011 +00101011100111010000000000000100 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111011100 +01011011100111010000000000000100 +01011011100000100000000000001100 +00110111100000100000000000001100 +01011011100000010000000000001000 +01011011100000110000000000010000 +01011011100001000000000000010100 +01011011100001010000000000011000 +01011011100001100000000000011100 +01011011100001110000000000100000 +01011011100010000000000000100100 +11111011111111111111111111010011 +00101011100111010000000000000100 +00110111100111000000000000100100 +11000011101000000000000000000000 +00110111100111001111111110011100 +01011011100010110000000001000100 +01011011100011000000000001000000 +01011011100011010000000000111100 +01011011100011100000000000111000 +01011011100011110000000000110100 +01011011100100000000000000110000 +01011011100100010000000000101100 +01011011100100100000000000101000 +01011011100100110000000000100100 +01011011100101000000000000100000 +01011011100101010000000000011100 +01011011100101100000000000011000 +01011011100101110000000000010100 +01011011100110000000000000010000 +01011011100110010000000000001100 +01011011100110110000000000001000 +01011011100111010000000000000100 +01111000000101100000000000000001 +10111000001000001100100000000000 +10111000010000001010000000000000 +10111000001000001001100000000000 +00110100000110000000000000100101 +00110100000010010000000001101001 +00110100000010000000000001110000 +00110100000001110000000001011000 +00110100000110110000000000101010 +00110100000010100000000000110000 +00110100000101110000000000010000 +00110111100101010000000001011000 +00111010110101101000100000010000 +11100000000000000000000010010110 +00110100000011110000000000000000 +00110100000100010000000000100000 +00110100000011010000000000001010 +01000100001110000000000000000100 +00110010011000010000000000000000 +11100000000000000000000000111100 +00110100000100010000000000110000 +00110110100101000000000000000001 +01000010100000010000000000000000 +01000100001010010000000001000000 +01010100001010010000000000001111 +01000100001001110000000000111011 +01010100001001110000000000001000 +01000100001110110000000000011010 +01010100001110110000000000000100 +01000100001000000000000010001000 +01011100001110000000000000011010 +11100000000000000000000000101111 +01011100001010100000000000011000 +11100000000000000000000000010110 +00110100000000100000000001100011 +01000100001000100000000000011100 +00110100000001000000000001100100 +01011100001001000000000000010011 +11100000000000000000000000110001 +01000100001010000000000000101101 +01010100001010000000000000000110 +00110100000000100000000001101110 +01000100001000100000000001111000 +00110100000001000000000001101111 +01011100001001000000000000001100 +11100000000000000000000000100100 +00110100000000100000000001110101 +01000100001000100000000000101000 +00110100000001000000000001111000 +01000100001001000000000000100011 +00110100000000100000000001110011 +01011100001000100000000000000101 +11100000000000000000000000010000 +00101000011011010000000000000000 +00110100011000110000000000000100 +01000101111000001111111111011101 +00110100001000011111111111010000 +00100000001000100000000011111111 +00110100000001000000000000001001 +01010100010001001111111111011010 +00001001111011110000000000001010 +10110100001011110111100000000000 +11100011111111111111111111010111 +00101000011000010000000000000000 +00110100011000110000000000000100 +00110010011000010000000000000000 +00110110011100110000000000000001 +11100000000000000000000001011111 +10111000011000000000100000000000 +00101000001000010000000000000000 +00110100011000110000000000000100 +11100000000000000000000000000100 +00110010011000100000000000000000 +00110100001000010000000000000001 +00110110011100110000000000000001 +01000000001000100000000000000000 +01011100010000001111111111111100 +11100000000000000000000001010101 +00110010011110000000000000000000 +00110110011100110000000000000001 +11100000000000000000000001010010 +00110100000000010000000000001010 +01000101101000010000000000000100 +11100000000000000000000000000100 +00110100000011010000000000010000 +11100000000000000000000000000010 +00110100000011010000000000001000 +00101000011001010000000000000000 +00110100011100100000000000000100 +10111000101000000111000000000000 +01011101111000000000000000000010 +00110100000011110000000000000001 +00000000101001100000000000011111 +01100101101000110000000000001010 +00110100000100000000000000000000 +10100000110000110001100000000000 +01000100011000000000000000000011 +11001000000001010111000000000000 +00110100000100000000000000000001 +00110100000011000000000000010000 +11100000000000000000000000010101 +10111001110000000000100000000000 +10111001101000000001000000000000 +01011011100001110000000001001100 +01011011100010000000000001010000 +01011011100010010000000001010100 +01011011100010100000000001001000 +11111000000000000001111011011011 +10110110110000010001100000000000 +01000000011000110000000000000000 +00110101100011001111111111111111 +10110110101011000101100000000000 +10111001110000000000100000000000 +00110001011000110000000000000000 +10111001101000000001000000000000 +11111000000000000001111011000011 +00101011100010100000000001001000 +00101011100010010000000001010100 +00101011100010000000000001010000 +00101011100001110000000001001100 +10111000001000000111000000000000 +01111101100001000000000000000000 +01111101110000110000000000000000 +10100000100000110001100000000000 +01011100011000001111111111101001 +01011101100101110000000000000100 +00110100000000100000000000110000 +00110011100000100000000001100111 +00110100000011000000000000001111 +01100110001000100000000000100000 +10100010000000100001000000000000 +01000100010000000000000000001011 +00110101100011001111111111111111 +10110110101011000001000000000000 +00110100000000110000000000101101 +00110000010000110000000000000000 +00110100000100000000000000000000 +11100000000000000000000000000101 +00110101100011001111111111111111 +10110110101011000001000000000000 +00110000010100010000000000000000 +11100000000000000000000000000011 +11001010111011110000100000000000 +10110100001100000000100000000000 +01001001100000011111111111111010 +01000110000000000000000000000101 +00110101100011001111111111111111 +10110110101011000000100000000000 +00110100000000100000000000101101 +00110000001000100000000000000000 +11001010111011000001100000000000 +10111010011000000000100000000000 +00110100000001000000000000001111 +11100000000000000000000000000110 +10110110101011000001000000000000 +01000000010000100000000000000000 +00110101100011000000000000000001 +00110000001000100000000000000000 +00110100001000010000000000000001 +01001100100011001111111111111011 +10110110011000111001100000000000 +10111010010000000001100000000000 +00110110100101000000000000000001 +01000010100000010000000000000000 +01011100001000001111111101101010 +11001010011110010000100000000000 +00110010011000000000000000000000 +00101011100111010000000000000100 +00101011100010110000000001000100 +00101011100011000000000001000000 +00101011100011010000000000111100 +00101011100011100000000000111000 +00101011100011110000000000110100 +00101011100100000000000000110000 +00101011100100010000000000101100 +00101011100100100000000000101000 +00101011100100110000000000100100 +00101011100101000000000000100000 +00101011100101010000000000011100 +00101011100101100000000000011000 +00101011100101110000000000010100 +00101011100110000000000000010000 +00101011100110010000000000001100 +00101011100110110000000000001000 +00110111100111000000000001100100 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011100001010001100 +00101000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011100001010110100 +01011000001000100000000000000000 +00110100000000010000001111000110 +01011000010000010000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00110100000000010000000000001010 +01011101011000010000000000000011 +00110100000000010000000000001101 +11111011111111111111111111111001 +01111000000000100000000000000001 +00111000010000101100001010110100 +00101000010000100000000000000000 +00101000010000010000000000000000 +00100000001000010000000000000001 +01011100001000001111111111111110 +01011000010010110000000000001000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +10111000001000000101100000000000 +11100000000000000000000000000100 +10111000010000000000100000000000 +00110101011010110000000000000001 +11111011111111111111111111100100 +01000001011000100000000000000000 +01011100010000001111111111111100 +11001001011011000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011100001010110100 +00101000001000100000000000000000 +00110100000000011111111111111111 +00101000010000110000000000000000 +00100000011000110000000000000010 +01000100011000000000000000000011 +00101000010000010000000000001100 +00100000001000010000000011111111 +11000011101000000000000000000000 +01111000000000100000000000000001 +00010100001000010000000000000010 +00111000010000101100001010110000 +00101000010000100000000000000000 +00100000001000010000000011111111 +00111100001000010000000000010000 +01011000010000010000000000101100 +00101000010000010000000000110000 +01001100001000001111111111111111 +00101000010000010000000000110000 +00100000001000011111111111111111 +11000011101000000000000000000000 +00010100001000010000000000000010 +01111000000000110000000000000001 +00111000011000111100001010110000 +00100000001000010000000011111111 +00101000011000110000000000000000 +00100000010000101111111111111111 +01111000000001001000000000000000 +00111100001000010000000000010000 +10111000010001000001000000000000 +10111000010000010001000000000000 +01011000011000100000000000101100 +00101000011000010000000000110000 +01001100001000001111111111111111 +11000011101000000000000000000000 +01000000001001000000000000000010 +01000000001000110000000000000011 +01111000000000100000000000000001 +00111100100001000000000000011000 +00111100011000110000000000010000 +00111000010000101100001010110000 +10111000100000110001100000000000 +01000000001001000000000000000101 +00101000010000100000000000000000 +10111000011001000001100000000000 +01000000001001000000000000000100 +00111100100001000000000000001000 +10111000011001000001100000000000 +01011000010000110000000000101000 +01000000001000110000000000000001 +01000000001000010000000000000000 +00111100001000010000000000001000 +10111000011000010000100000000000 +01011000010000010000000000100100 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101100001010110000 +00101000010000110000000000000000 +00101000011000110000000000101000 +00110000001000110000000000000101 +00101000010000110000000000000000 +00101000011000110000000000101000 +00000000011000110000000000001000 +00110000001000110000000000000100 +00101000010000110000000000000000 +00101000011000110000000000101000 +00000000011000110000000000010000 +00110000001000110000000000000011 +00101000010000110000000000000000 +00101000011000110000000000101000 +00000000011000110000000000011000 +00110000001000110000000000000010 +00101000010000110000000000000000 +00101000011000110000000000100100 +00110000001000110000000000000001 +00101000010000100000000000000000 +00101000010000100000000000100100 +00000000010000100000000000001000 +00110000001000100000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +10111000010000000110000000000000 +00111001011010111100001010110000 +01011100001000000000000000000100 +00101001011000010000000000000000 +01011000001000000000000000000000 +11100000000000000000000000100010 +00101001011000010000000000000000 +01011000001000000000000000000000 +00101000001000100000000000110100 +01111000000000010000000000000001 +00111000001000011000100000100100 +11111011111111111111111010010110 +11111000000000000000000010111110 +00101001011000010000000000000000 +00110100000000100000000011100000 +01011000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011011111100110000 +00110100000000100000100000000000 +01011000001011000000000000000000 +00110100000000010000000000000000 +11111011111111111111111110101011 +00110100000000010000000011001000 +11111000000000000000010001111011 +00110100000000010000000000000000 +00111000000000101000000000000000 +11111011111111111111111110100110 +00110100000000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111110100011 +00110100000000010000000000010000 +00110100000000100000000000000000 +11111011111111111111111110100000 +01111101100000100000000000000000 +00110100000000010000000000000000 +11001000000000100001000000000000 +00100000010000100001001000000000 +00110100010000100000000101000000 +11111011111111111111111110011010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000000100000000000000001 +00111000010000101011111100110000 +00101000010010110000000000000000 +10111000001000000110000000000000 +00110100000000010000000000000100 +11111011111111111111111101111110 +01111101011010110000000000000000 +00001111100000010000000000010010 +00110100000000010000000000000100 +11001000000010110101100000000000 +11111011111111111111111101111001 +00100001011010110000000000100000 +00001111100000010000000000010010 +00110101011010110000000000000100 +01000101100000000000000000000100 +00110100000000010000000000010100 +11111011111111111111111101110011 +00001101100000010000000000000000 +00101111100000010000000000010010 +10100001011000010000100000000000 +11100100001010110000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000010000000001000000 +11111011111111111111111101100110 +00000000001000010000000000000100 +00100000001000010000000000011111 +00001000001000010000001100100000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +00111000011000111011111101000000 +10111000010000000101100000000000 +00101000011000100000000000000000 +01011000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011011111101000100 +00101000001011000000000000000000 +00110100000000010000000001000000 +11111011111111111111111101010010 +00000000001000010000000000000100 +00100000001000010000000000011111 +00001000001000010000001100100000 +10110100001011000000100000000000 +01011001011000010000000000000000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000010000000001000000 +11111011111111111111111101000011 +00111000001000100000000000000001 +00110100000000010000000001000000 +11111011111111111111111101001100 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000010000000001000000 +11111011111111111111111100111000 +00110100000000101111111111111110 +10100000001000100001000000000000 +00110100000000010000000001000000 +11111011111111111111111101000000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111100001010110000 +00101001011000010000000000000000 +00101000001000100000000000000100 +00111000010000100000000000010000 +01011000001000100000000000000100 +00110100000000010000000000000001 +11111000000000000000010000000011 +00101001011000010000000000000000 +00101000001000010000000000000100 +00100000001000010000000000100000 +01111100001000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00110100000000010000000001000100 +11111011111111111111111100010111 +00111000001000100000000000100000 +01000101011000000000000000000011 +00110100000000101111111111011111 +10100000001000100001000000000000 +00110100000000010000000001000100 +11111011111111111111111100011101 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000100000000000000001 +00111000010000101011111110100000 +00101000010000100000000000000000 +01111000000010110000000000000001 +00111001011010111100001010110000 +01011001011000100000000000000000 +11111011111111111111111100011100 +00110100000000010000000000000001 +11111011111111111111111111100100 +01111000000000100000000000000001 +00111000010000101000111100000100 +00101000010000010000000000000000 +01111000000001000000000000000001 +00111000100001001000111100001000 +01011000001000000000000000000000 +00101001011000010000000000000000 +00101000100000110000000000000000 +00110100000000100000000000000011 +01011000001000000000000000000000 +01011000001000100000000000001100 +01011000001000110000000000001000 +01111000000000110000000000000001 +00111000011000111000111100001100 +01011000001000100000000000000100 +00101000011000100000000000000000 +01011000001000100000000000111100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011001011100000100 +00101000001000100000000000000000 +01111000000000010000000000000001 +00111000001000011010011111100000 +01000100010000000000000000000011 +01111000000000010000000000000001 +00111000001000011010011111101000 +00101000001010110000000000000000 +01011101011000000000000000000100 +01111000000000010000000000000001 +00111000001000011000100000101100 +11100000000000000000000000110110 +01111000000000110000000000000001 +00111000011000111000111100010000 +00101000001011000000000000000100 +00101001011000100000000000000000 +00101000011000010000000000000000 +01000100010000010000000000010001 +10111001011000000000100000000000 +01111000000001000000000011111111 +11100000000000000000000000001101 +00101000001000110000000000000000 +00111100011001100000000000011000 +00000000011001010000000000011000 +10111000110001010010100000000000 +10100000011001000011000000000000 +00000000110001100000000000001000 +00100000011000111111111100000000 +00111100011000110000000000001000 +10111000101001100010100000000000 +10111000101000110001100000000000 +01011000001000110000000000000000 +00110100001000010000000000000100 +01010101100000011111111111110100 +01111000000001000000000000000001 +00111000100001001000111100010000 +00101001011000110000000000000000 +00101000100000010000000000000000 +01000100011000010000000000000101 +01111000000000010000000000000001 +00111000001000011000100001000100 +11111011111111111111110110101000 +11100000000000000000000010101011 +01111000000000010000000000000001 +00111000001000011011111100110100 +00101000001000100000000000000000 +00110101011010110000000000000100 +01011100010000000000000000010110 +00101001011000110000000000001000 +00110100000000100001001000110100 +00000000011000110000000000001101 +00100000011000111111111111111111 +01011100011000100000000000001011 +00101001011000110000000000010000 +00110100000000100101011001111000 +00000000011000110000000000001101 +00100000011000111111111111111111 +01011100011000100000000000000110 +00101001011000110000000000011000 +00110100010000100100010001000100 +00000000011000110000000000001101 +00100000011000111111111111111111 +01000100011000100000000000000101 +01111000000000010000000000000001 +00111000001000011000100001101100 +11111011111111111111110110010000 +11100000000000000000000010010011 +00110100000000100000000000000001 +01011000001000100000000000000000 +00110111100000010000000000010100 +11111011111111111111111011001100 +01111000000001100000000000000001 +00111000110001101000111100010100 +00101000110001010000000000000000 +00101001011001110000000000001000 +00101001011001100000000000010000 +00101001011000010000000000011000 +10100000111001010011100000000000 +10100000110001010011000000000000 +10100000001001010000100000000000 +01011001011001110000000000001000 +01011001011001100000000000010000 +01011001011000010000000000011000 +01000011100010000000000000010100 +01000011100010010000000000010101 +00110101011001000000000000001000 +00111101000010000000000000001000 +00110101011000110000000000010000 +10111001000010010100000000000000 +00111101000010000000000000001101 +00110101011000100000000000011000 +10111000111010000011100000000000 +01011001011001110000000000001000 +01000011100001110000000000010110 +01000011100010000000000000010111 +00111000000010011100101011111110 +00111100111001110000000000001000 +10111000111010000011100000000000 +00111100111001110000000000001101 +00110100000010000000000000000001 +10111000110001110011000000000000 +01011001011001100000000000010000 +01000011100001100000000000011000 +01000011100001110000000000011001 +00111100110001100000000000001000 +10111000110001110011000000000000 +00111100110001100000000000001101 +10111000001001100000100000000000 +01111000000001100000000000000001 +00111000110001101000111100011000 +01011001011000010000000000011000 +00101000110001110000000000000000 +10111001011000000000100000000000 +11100000000000000000000000001011 +00101000001001100000000000000000 +00000000110010100000000000001101 +00100001010010101111111111111111 +01011101010010010000000000000110 +00100000110010100000000000000111 +01011101010010000000000000000100 +10100000110001010011000000000000 +10111000110001110011000000000000 +01011000001001100000000000000000 +00110100001000010000000000001000 +01010101100000011111111111110110 +01111000000001110000000000000001 +00111000111001111000111100010100 +01111000000001100000000000000001 +10111001011000000000100000000000 +00110100000001010000000000000000 +00110100000010100000101010101010 +00110100000010010000000000000111 +00101000111010000000000000000000 +00111000110001101001011100000100 +11100000000000000000000000010000 +00101000001001110000000000000000 +00000000111011010000000000001101 +00100001101011011111111111111111 +01011101101010100000000000001011 +00000000111011010000000000000111 +00100001101011010000000000011111 +01011101101010010000000000001000 +10100000111010000011100000000000 +01011000001001110000000000000000 +00101000110001010000000000000000 +00111100101001010000000000001101 +10111000101001110011100000000000 +01011000001001110000000000000000 +10111000001000000010100000000000 +00110100001000010000000000001000 +01010101100000011111111111110001 +01111000000000010000000000000001 +00111000001000011100001010110000 +00101000001000010000000000000000 +00110100000001100000000000000000 +01011000001000000000000000010100 +11100000000000000000000000001111 +00101001011001110000000000000000 +00101001011010010000000000000100 +00110101011010110000000000001000 +00100000111010000000111111111111 +00111101001010010000000000010100 +00000000111001110000000000001100 +01011000001010000000000000011000 +10111001001001110011100000000000 +00111100111001110000000000001000 +00100000110010010000000000111111 +00111000111001110000000001000000 +10111000111010010011100000000000 +01011000001001110000000000010100 +00110100110001100000000000000001 +01010101100010111111111111110010 +01000100101000000000000000001011 +01111000000010000000000000000001 +00111001000010001000111100010100 +00101000101001110000000000000000 +00101001000001100000000000000000 +01111000000010000000000000000001 +00111001000010001000111100011100 +10100000111001100011000000000000 +00101001000001110000000000000000 +10111000110001110011000000000000 +01011000101001100000000000000000 +01111000000001110000000000000001 +00111000111001111000111100010100 +00101000100001100000000000000000 +00101000111001010000000000000000 +01111000000010000000000000000001 +00111001000010001000111100100000 +10100000110001010011000000000000 +01011000100001100000000000000000 +00101000011001100000000000000000 +10100000110001010011000000000000 +01011000011001100000000000000000 +00101000010001100000000000000000 +10100000110001010010100000000000 +01011000010001010000000000000000 +00101000100001100000000000000000 +00101001000001010000000000000000 +10111000110001010010100000000000 +01011000100001010000000000000000 +00101000011001010000000000000000 +01111000000001000000101011001111 +10111000101001000010000000000000 +01111000000001010000000000000001 +01011000011001000000000000000000 +00111000101001011000111100100100 +00101000010001000000000000000000 +00101000101000110000000000000000 +10111000100000110001100000000000 +01011000010000110000000000000000 +00110100000000100000000010000000 +01011000001000100000000000010100 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111100001010101100 +01000100010000000000000000000100 +00101000011000100000000000000000 +01011000010000010000000000000100 +11000011101000000000000000000000 +00101000011000100000000000000000 +01011000010000010000000000001000 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111100001010101100 +01000100010000000000000000000100 +00101000011000100000000000000000 +01011000010000010000000000000100 +11000011101000000000000000000000 +00101000011000100000000000000000 +01011000010000010000000000001000 +11000011101000000000000000000000 +00110100000000100000000000000000 +11100000000000000000000000000011 +00110100000000000000000000000000 +00110100010000100000000000000001 +01011100010000011111111111111110 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00100000001000010000000011111111 +00001000001010110000000000001100 +01111000000000100000000000000001 +00111000010000101010011111110000 +10110100010010110101100000000000 +00101001011000010000000000000100 +00110100000000100000000000000000 +11111011111111111111111111011110 +00101001011000010000000000001000 +11111011111111111111111111101110 +00101001011000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111111011001 +00101001011000010000000000001000 +11111011111111111111111111101001 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00100000001000010000000011111111 +00001000001010110000000000001100 +01111000000000100000000000000001 +00111000010000101010011111110000 +10110100010010110101100000000000 +00101001011000010000000000000100 +00110100000000100000000000000001 +11111011111111111111111111001000 +00101001011000010000000000001000 +11111011111111111111111111011000 +00101001011000010000000000000000 +00110100000000100000000000000001 +11111011111111111111111111000011 +00101001011000010000000000001000 +11111011111111111111111111010011 +00101001011000010000000000000100 +00110100000000100000000000000000 +11111011111111111111111110111110 +00101001011000010000000000001000 +11111011111111111111111111001110 +00101001011000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111110111001 +00101001011000010000000000001000 +11111011111111111111111111001001 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00100000001000010000000011111111 +00001000001010110000000000001100 +01111000000000100000000000000001 +00111000010000101010011111110000 +10110100010010110101100000000000 +00101001011000010000000000000100 +00110100000000100000000000000000 +11111011111111111111111110101000 +00101001011000010000000000001000 +11111011111111111111111110111000 +00101001011000010000000000000000 +00110100000000100000000000000001 +11111011111111111111111110100011 +00101001011000010000000000001000 +11111011111111111111111110110011 +00101001011000010000000000000100 +00110100000000100000000000000001 +11111011111111111111111110011110 +00101001011000010000000000001000 +11111011111111111111111110101110 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00100000001000010000000011111111 +00001000001010110000000000001100 +01111000000000110000000000000001 +00111000011000111010011111110000 +00100000010011110000000011111111 +00110100000011100000000000001000 +10110100011010110101100000000000 +00101001011000010000000000000100 +00100001111000100000000010000000 +00110101110011101111111111111111 +11111011111111111111111110000110 +00101001011000010000000000001000 +00111101111011110000000000000001 +00100001110011100000000011111111 +11111011111111111111111110010100 +00101001011000010000000000000000 +00110100000000100000000000000001 +00110101011011010000000000000100 +11111011111111111111111101111110 +00101001011000010000000000001000 +00110101011011000000000000001000 +00100001111011110000000011111111 +11111011111111111111111110001100 +00101001011000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111101110111 +00101001011000010000000000001000 +11111011111111111111111110000111 +01011101110000001111111111101011 +00101001101000010000000000000000 +00110100000000100000000000000001 +11111011111111111111111101110001 +00101001100000010000000000000000 +11111011111111111111111110000001 +00101001011000010000000000000000 +00110100000000100000000000000001 +11111011111111111111111101101100 +00101001100000010000000000000000 +11111011111111111111111101111100 +01111000000000010000000000000001 +00111000001000011100001010101100 +00101000001000010000000000000000 +00101001101011100000000000000000 +00110100000000100000000000000000 +00101000001000010000000000000100 +10100000001011100111000000000000 +00101001011000010000000000000000 +11111011111111111111111101100001 +00101001100000010000000000000000 +11111011111111111111111101110001 +00101001101000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111101011100 +00101001100000010000000000000000 +11111011111111111111111101101100 +01111101110000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +00100000001000010000000011111111 +00001000001010110000000000001100 +01111000000001000000000000000001 +00111000100001001010011111110000 +10110100100010110101100000000000 +00101001011000010000000000000100 +10111000010000001000000000000000 +00110100000000100000000000000001 +00100000011100010000000011111111 +11111011111111111111111100111110 +00101001011000010000000000001000 +01111000000011110000000000000001 +00110100000011100000000000001000 +11111011111111111111111101001100 +00101001011000010000000000000000 +00110100000000100000000000000000 +00110100000011010000000000000000 +11111011111111111111111100110110 +00101001011000010000000000001000 +00111001111011111100001010101100 +11111011111111111111111101000101 +00101001011000010000000000000000 +00110100000000100000000000000001 +00111101101011010000000000000001 +11111011111111111111111100101111 +00101001011000010000000000001000 +00100001101011010000000011111111 +11111011111111111111111100111110 +00101001111000010000000000000000 +00101001011000100000000000000100 +00101000001000010000000000000100 +10100000001000100000100000000000 +01000100001000000000000000000010 +00111001101011010000000000000001 +00101001011000010000000000000000 +00110100000000100000000000000000 +00110101110011101111111111111111 +11111011111111111111111100100010 +00101001011000010000000000001000 +00110101011011000000000000001000 +11111011111111111111111100110001 +01011101110000001111111111101100 +01000110001011100000000000000100 +00101001011000010000000000000100 +00110100000000100000000000000001 +11100000000000000000000000000011 +00101001011000010000000000000100 +00110100000000100000000000000000 +11111011111111111111111100010111 +00101001100000010000000000000000 +11111011111111111111111100100111 +00101001011000010000000000000000 +00110100000000100000000000000001 +11111011111111111111111100010010 +00101001100000010000000000000000 +11111011111111111111111100100010 +00101001011000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111100001101 +00101001100000010000000000000000 +11111011111111111111111100011101 +00110010000011010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00100000001000010000000011111111 +00001000001010110000000000001100 +01111000000000100000000000000001 +00111000010000101010011111110000 +10110100010010110101100000000000 +00101001011000010000000000000000 +00110100000000100000000000000001 +11111011111111111111111011110101 +00101001011000010000000000001000 +11111011111111111111111100000101 +00101001011000010000000000000100 +00110100000000100000000000000001 +11111011111111111111111011110000 +00101001011000010000000000001000 +11111011111111111111111100000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00100000001010110000000011111111 +10111001011000000000100000000000 +00100000010011000000000011111111 +11111011111111111111111011111010 +00111101100000100000000000000001 +10111001011000000000100000000000 +00100000010000100000000011111110 +11111011111111111111111101000111 +10111000001000000110000000000000 +10111001011000000000100000000000 +11111011111111111111111100101001 +01100101100000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00100000001000010000000000000011 +00111100001000010000000000010000 +10111000001000100001000000000000 +01111000000000010000000000000001 +00111000001000011100001010111100 +00101000001000010000000000000000 +01011000001000100000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011100001010111100 +00101000001000010000000000000000 +01111000000010110000000000000001 +00110100000001000000000000000001 +00101000001000110000000000000000 +00111001011010111100001010100000 +00000000011000100000000000011000 +00100000010000100000000000001111 +01000100010001000000000000000110 +01111000000000010000000000000001 +00111000001000011000100010010100 +11111011111111111111101110110011 +01011001011000000000000000000000 +11100000000000000000000000000110 +01011001011000100000000000000000 +00110100000000100000000000000111 +01011000001000100000000001000000 +00111000011000110000010000000000 +01011000001000110000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111010000 +01011011100010110000000000100100 +01011011100011000000000000100000 +01011011100011010000000000011100 +01011011100011100000000000011000 +01011011100011110000000000010100 +01011011100100000000000000010000 +01011011100100010000000000001100 +01011011100100100000000000001000 +01011011100111010000000000000100 +10111000011000001000100000000000 +01111000000000110000000000000001 +00111000011000111100001010111100 +10111000100000000110000000000000 +00101000011001000000000000000000 +00110100000010110000000000000000 +00101000100001010000000000000000 +00100000101001010001000000000000 +01011100101000000000000010011100 +01111000000000110000000000000001 +00111000011000111100001010100000 +00101000011000110000000000000000 +10111000101000000101100000000000 +01000100011001010000000010010111 +00110100100011110000000000001000 +01111000000010100100000000000000 +00110100000001000000000000000000 +00110100000010010000000000001101 +00110100000010000000000000000011 +00110100000001110000000000000001 +00101001111100000000000000000000 +11110001001001000011000000000000 +00000010000011100000000000010000 +00100010000011011111111111111111 +00100001110011100000000000000011 +01100101110001010000000000000000 +10100010000010101000000000000000 +10100000101001100011000000000000 +01111110000100000000000000000000 +01000100110000000000000000000111 +00000000100000110000000000000001 +00110100100001000000000000000010 +00111100011000110000000000000001 +10110100001000110001100000000000 +00001100011011010000000000000000 +11100000000000000000000000011110 +11110101011100011001000000000000 +01111101110000110000000000000010 +10100010010000110001100000000000 +01011100011001100000000000000110 +01000100101000110000000000000111 +00000001011000110000000000000001 +00111100011000110000000000000001 +10110100010000110001100000000000 +00001100011011010000000000000000 +00110101011010110000000000000010 +11100000000000000000000000010011 +01011101110010000000000000000111 +00000001011000110000000000000001 +00110101011010110000000000000001 +00111100011000110000000000000001 +10110100010000110001100000000000 +00001100011011010000000000000000 +11100000000000000000000000001100 +01111100100001100000000000000000 +01100101110000110000000000000010 +10100000110000110001100000000000 +01000100011001010000000000001000 +00100001101000010000000000000010 +00110100000011100000000000000010 +01000100001001010000000000001001 +01111000000000010000000000000001 +00111000001000011000100011001000 +11111011111111111111101101011110 +11100000000000000000000000000101 +01011110000000000000000000000011 +01011101110001111111111111010010 +11100000000000000000000000000010 +00110100000100000000000000000001 +01111000000000010000000000000001 +00111000001000011100001010111100 +00101000001001010000000000000000 +00110100000100100000100000000000 +00110100000000010000000000000000 +00110100101001010000000000001000 +00110100000011110000000000000000 +00110100000000100000000000000001 +00110100000001000000000000000010 +01111000000000110100000000000000 +11100000000000000000000000010000 +01000100001000000000000000000111 +01011100001000100000000000000011 +00111101101011110000000000010000 +11100000000000000000000000000101 +01011100001001000000000000000100 +10111001111011010111100000000000 +11100000000000000000000000000010 +10111001101000001001000000000000 +00101000101100000000000000000000 +00110100001000010000000000000001 +00000010000011100000000000010000 +00100010000011011111111111111111 +10100010000000111000000000000000 +01111110000100000000000000000000 +00100001110011100000000000000011 +01011110000000000000000000000010 +01000101110000101111111111110000 +00110100001000011111111111111111 +00110100000000100000000000000010 +01010000010000010000000000000100 +01000101100000000000000000110000 +00110001100000000000000000000000 +11100000000000000000000000101110 +01000101100000000000000000101101 +00110111100000010000000000101000 +00110111100000100000000000110000 +11111000000000000000011000100100 +01111000000000100000000000000001 +00111000010000101000111100101000 +01111000000000110000000000000001 +00101000010000010000000000000000 +00111000011000111000111100101100 +00101000011000100000000000000000 +10100001111000010000100000000000 +00000001111011110000000000011100 +01010000010000010000000000001110 +01111000000001000000000000000001 +00111000100001001000111100110000 +00101011100000110000000000110000 +00101000100000100000000000000000 +01010100011000100000000000001001 +00101011100001000000000000101100 +00101011100000110000000000101000 +00110100100000101111111111111111 +11110100100000100010000000000000 +00110100011000111111111111111111 +10110100100000110001100000000000 +01011011100000110000000000101000 +01011011100000100000000000101100 +00101011100000100000000000101000 +01011001100000100000000000001000 +00101011100000100000000000101100 +01011001100000100000000000001100 +00100000001000100000000000001111 +11001000010011110111100000000000 +01100101111000101111111111110001 +01100101111011110000000000000001 +10111000010011110111100000000000 +01000101111000000000000000000100 +00110100000000100000000000000001 +01011001100000100000000000000100 +11100000000000000000000000000010 +01011001100000000000000000000100 +00100010010100100000100000000000 +00111100001000010000000000000011 +01100110010100100000000000000000 +01011001100000010000000000010000 +00110001100100100000000000000000 +01111000000000010000000000000001 +00111000001000011100001001111100 +00101000001000100000000000000100 +00110100010000100000000000000001 +01011000001000100000000000000100 +01111000000000010000000000000001 +00111000001000011100001010111100 +00101000001000010000000000000000 +00101000001000010000000000000000 +00100000001000010010000000000000 +01000100001000000000000000000100 +01111000000000010000000000000001 +00111000001000011000100011110100 +11111011111111111111101011111100 +01010010001010110000000000000010 +10111010001000000101100000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100100 +00101011100011000000000000100000 +00101011100011010000000000011100 +00101011100011100000000000011000 +00101011100011110000000000010100 +00101011100100000000000000010000 +00101011100100010000000000001100 +00101011100100100000000000001000 +00110111100111000000000000110000 +11000011101000000000000000000000 +00110111100111001111111111010100 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +10111000010000000110100000000000 +01111000000000100000000000000001 +00111000010000101100001010100000 +00101000010000100000000000000000 +10111000001000000111100000000000 +10111000011000000110000000000000 +10111000100000000101100000000000 +00110100000000010000000000000000 +01000100010000000000000010001010 +00101101111000110000000000001100 +00111000000000011000000100000000 +11111100011000010001100000000000 +00110100000000011111111111111100 +11001000000000110001100000000000 +10100000011000010001100000000000 +00110100011000110000000000010010 +10110100011011000001000000000000 +00110100000000010000000000111011 +00010100011100010000000000000001 +01010100010000010000000000000011 +00110100000011000000000000111100 +11001001100000110110000000000000 +00110101100100000000000000000001 +00110100000000010000000000000010 +00110100000000100000000000000000 +00000010000100000000000000000001 +11111011111111111111111100000000 +00110100000011100000000000000000 +11100000000000000000000000000110 +00101101111000100000000000000000 +00110100000000010000000000000000 +00110101110011100000000000000001 +11111011111111111111111011111010 +00110101111011110000000000000010 +01010110001011101111111111111011 +10111001101000000111100000000000 +00110100000011100000000000000000 +00110110000100001111111111111111 +11100000000000000000000000000110 +00101101111000100000000000000000 +00110100000000010000000000000000 +00110101110011100000000000000001 +11111011111111111111111011110000 +00110101111011110000000000000010 +01010110000011101111111111111011 +00100001100000100000000000000001 +00111110000000010000000000000001 +01011100010000000000000000000100 +10110101101000010110100000000000 +00110100000000010000000000000000 +11100000000000000000000000000011 +10110101101000010110100000000000 +00110100000000010000000000000011 +00101101101000100000000000000000 +11111011111111111111111011100100 +01000101011000000000000000000111 +00110100000000010000000000000001 +00110100000000100001000000000000 +11111011111111111111111011100000 +00110100000000010000000000000001 +00110100000000100000000000000000 +11111011111111111111111011011101 +01111000000000010000000000000001 +00111000001000011100001010111100 +00101000001000100000000000000000 +00110100000011010000000000000000 +10111000001000000111100000000000 +00101000010000110000000000000000 +00110100000100000000001111101000 +00111000011000110000000000000001 +01011000010000110000000000000000 +00101001111000010000000000000000 +00101000001011100000000000000000 +00100001110000010000000000000010 +01011100001000000000000000001001 +00110100000000010000000000000001 +00110101101011010000000000000001 +11111000000000000000000010001000 +01011101101100001111111111111001 +01111000000000010000000000000001 +00111000001000011000100100101000 +10111001110000000001000000000000 +11111011111111111111101010010010 +01000101011000000000000000111110 +01111000000011010000000000000001 +00110100000011100000000000000000 +00111001101011011100001010111100 +00110100000011110000000001100100 +00101001101000010000000000000000 +00101000001000100000000000000000 +00100000010000100000100000000000 +01011100010000000000000000001010 +00110100000000010000000000000001 +00110101110011100000000000000001 +11111000000000000000000001110111 +01011101110011111111111111111001 +01111000000000010000000000000001 +00111000001000011000100101011000 +11111011111111111111101010000010 +00110100000011100000000000000000 +11100000000000000000000000000011 +00101000001011100000000000010100 +00100001110011100000000000000001 +01111000000000010000000000000001 +00111000001000011100001010111100 +00101000001000010000000000000000 +01111000000000100000000000000001 +00111000010000101000111100101000 +00101000001011010000000000011000 +00101000001000010000000000010100 +00101000010000010000000000000000 +00110111100000100000000000101100 +10100001101000010110100000000000 +00110111100000010000000000100100 +11111000000000000000010101100011 +01111000000000110000000000000001 +00111000011000111000111100101100 +00101000011000010000000000000000 +01010000001011010000000000001110 +01111000000000110000000000000001 +00111000011000111000111100110000 +00101011100000100000000000101100 +00101000011000010000000000000000 +01010100010000010000000000001001 +00101011100000110000000000101000 +00101011100000100000000000100100 +00110100011000011111111111111111 +11110100011000010001100000000000 +00110100010000101111111111111111 +10110100011000100001000000000000 +01011011100000100000000000100100 +01011011100000010000000000101000 +00101011100000010000000000100100 +00110001011011100000000000000000 +00111101101011010000000000000011 +01011001011000010000000000001000 +00101011100000010000000000101000 +01011001011000000000000000000100 +01011001011011010000000000010000 +01011001011000010000000000001100 +01111000000000010000000000000001 +00111000001000011100001001111100 +00101000001000100000000000000000 +00110100010000100000000000000001 +01011000001000100000000000000000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000101100 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111100001001111100 +00101000011001000000000000000000 +01011000001001000000000000000000 +00101000011000010000000000000100 +01011000010000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100111010000000000000100 +01111000000000100000000000000001 +00111000010000101100001010101100 +00101000010000100000000000000000 +00110100000000110000000000000100 +00101000010000100000000000010000 +01011011100000100000000000001000 +00110111100000100000000000001000 +11111000000000000001100111110000 +00101011100111010000000000000100 +00110111100111000000000000001000 +11000011101000000000000000000000 +01111000000001000000000000000001 +00111000100001001100001010101100 +00101000100001000000000000000000 +00101000100001010000000000001100 +00000000101001010000000000010000 +00111100101001010000000000001010 +01011000011001010000000000000000 +00101000100000110000000000010100 +01011000010000110000000000000000 +00101000100000100000000000001100 +00000000010000100000000000001000 +00100000010000100000000000000011 +01011000001000100000000000000000 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101100001011000000 +00101000010000100000000000000000 +01111000000000110000000000000001 +00111000011000111100001010101100 +01011000011000100000000000000000 +01000100001000000000000000000101 +00101000010000110000000000011000 +01111000000000011000000000000000 +10111000011000010000100000000000 +11100000000000000000000000000110 +01111000000001000000000000000001 +00111000100001001000111011010100 +00101000010000110000000000011000 +00101000100000010000000000000000 +10100000011000010000100000000000 +01011000010000010000000000011000 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011100001010101100 +00101000001000010000000000000000 +00101000001000010000000000011100 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101100001010101100 +00101000010000100000000000000000 +00101000010000110000000000011100 +10110100001000110000100000000000 +00101000010000110000000000011100 +11001000011000010001100000000000 +01001000000000111111111111111110 +11000011101000000000000000000000 +01111000000001010000000000000001 +00111000101001011100001010101100 +00101000101001010000000000000000 +01111000000001100000000000000001 +00111000110001101011111100111000 +00101000101010000000000000100100 +00101000101001110000000000100100 +00100001000010001111111111111111 +01011000110010000000000000000000 +00000000111001110000000000010000 +01111000000001100000000000000001 +00111000110001101011111100111100 +01011000110001110000000000000000 +01000100001000000000000000000100 +00101000101001100000000000100000 +00000000110001100000000000010000 +01011000001001100000000000000000 +01000100010000000000000000000100 +00101000101000010000000000100000 +00100000001000011111111111111111 +01011000010000010000000000000000 +01000100011000000000000000000010 +01011000011010000000000000000000 +01000100100000000000000000000010 +01011000100001110000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000111000000000000 +10111000011000000110100000000000 +00110100000000011111111111101010 +01000100011000000000000000110110 +01111000000011000000000000000001 +00111001100011001011111100111000 +00101001100000010000000000000000 +01011100001000000000000000001010 +01111000000000010000000000000001 +00111000001000011000100110001000 +11111011111111111111100111011011 +01111000000000010000000000000001 +00111000001000011100001010101100 +00101000001000010000000000000000 +00101000001000010000000000100100 +00100000001000011111111111111111 +01011001100000010000000000000000 +01111000000011000000000000000001 +00111001100011001011111100111100 +00101001100000010000000000000000 +01011100001000000000000000001010 +01111000000000010000000000000001 +00111000001000011000100110100000 +11111011111111111111100111001110 +01111000000000010000000000000001 +00111000001000011100001010101100 +00101000001000010000000000000000 +00101000001000010000000000100100 +00000000001000010000000000010000 +01011001100000010000000000000000 +01011101110000000000000000000110 +01111000000000010000000000000001 +00111000001000011011111100111000 +00101000001000010000000000000000 +01010001011000010000000000001000 +11100000000000000000000000001110 +00110100000000010000000000000001 +01011101110000010000000000001100 +01111000000000010000000000000001 +00111000001000011011111100111100 +00101000001000010000000000000000 +01010100001010110000000000000100 +01011001101000000000000000000000 +00110100000000011111111111101010 +11100000000000000000000000001101 +01111000000000010000000000000001 +00111000001000011011111100111000 +00101000001000010000000000000000 +10110101011000010101100000000000 +01111000000000010000000000000001 +00111000001000011100001010101100 +00101000001000010000000000000000 +00100001011010111111111111111111 +01011000001010110000000000101000 +00101000001000010000000000101100 +01011001101000010000000000000000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111011111100111000 +00101000011001000000000000000000 +00110100000000111111111111101010 +01010000001001000000000000001010 +01111000000000110000000000000001 +00111000011000111100001010101100 +00101000011000110000000000000000 +00100000001000011111111111111111 +01011000011000100000000000101100 +01111000000000101000000000000000 +10111000001000100000100000000000 +01011000011000010000000000101000 +00110100000000110000000000000000 +10111000011000000000100000000000 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011100001010101100 +00101000001000010000000000000000 +00101000001000100000000000000100 +00111000010000100000000000010000 +01011000001000100000000000000100 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101100001010101100 +01000100001000000000000000000101 +00101000010000010000000000000000 +00101000001000100000000000110000 +00111000010000100000000000000001 +11100000000000000000000000000101 +00101000010000010000000000000000 +00110100000000101111111111111110 +00101000001000110000000000110000 +10100000011000100001000000000000 +01011000001000100000000000110000 +01111000000000010000000000000001 +00111000001000011100001010101100 +00101000001000010000000000000000 +00101000001000010000000000110000 +00100000001000010000000000000001 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011100001010101100 +00101000001000010000000000000000 +00101000001000010000000000110000 +00100000001000010000000000000001 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011100001010101100 +00101000001000010000000000000000 +00101000001000010000000000110000 +00100000001000010000000100000000 +01111100001000010000000000000000 +11000011101000000000000000000000 +01111000000010010000000000000001 +00111001001010011100001010101100 +00101001001010010000000000000000 +01111100001000010000000000000000 +00100000010000100000000000001111 +01011001001000010000000000110100 +00101001001000010000000000110100 +00111100010000100000000000001000 +10111000010000010001000000000000 +01011001001000100000000000110100 +01011001001000110000000001011000 +01011001001001000000000001011100 +01011001001001010000000001100000 +01011001001001100000000001100100 +00101011100000010000000000000100 +01011001001001110000000001101000 +01011001001010000000000001101100 +01011001001000010000000001110000 +00101011100000010000000000001000 +01011001001000010000000001110100 +11000011101000000000000000000000 +01111100010000100000000000000000 +01111000000000110000000000000001 +00111000011000111100001010101100 +01111100001000010000000000000000 +00111100010000100000000000000001 +00101000011000110000000000000000 +10111000010000010001000000000000 +01011000011000100000000000111000 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101100001010101100 +00101000010000100000000000000000 +00100000001000010000000011111111 +01011000010000010000000000111100 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101100001010101100 +00101000010000100000000000000000 +00100000001000010000000011111111 +01011000010000010000000001000000 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111100001010101100 +00101000011000110000000000000000 +01011000011000010000000001000100 +01011000011000100000000001001000 +11000011101000000000000000000000 +01111000000001000000000000000001 +00111000100001001100001010101100 +00101000100001000000000000000000 +01011000100000010000000001001100 +01011000100000100000000001010000 +01011000100000110000000001010100 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101100001010101100 +00101000010000100000000000000000 +01011000010000010000000001111000 +11000011101000000000000000000000 +00110111100111001111111111000100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011100001010101100 +00101000001000010000000000000000 +01111000000011000000000000000001 +00111001100011001011111110111100 +00110001100000000000000000000000 +00101000001000100000000000000100 +00110100000000011111111111101101 +00100000010000100000000010000000 +01011100010000000000000001010011 +00110100000000010000000000000001 +11111011111111111111110100101011 +00110100000000010000000000000001 +11111011111111111111110001000000 +00110100000000100000000010100000 +00110100000000010000000000000001 +11111011111111111111110010001110 +00110100000000100000000000000000 +00110100000000010000000000000001 +11111011111111111111110010001011 +00110100000000010000000000000001 +11111011111111111111110001001110 +00110100000000100000000010100001 +00110100000000010000000000000001 +11111011111111111111110010000110 +00110111100011100000000000111111 +10111001110000000001000000000000 +00110100000000110000000000000001 +00110100000000010000000000000001 +11111011111111111111110011001000 +00110100000000010000000000000001 +11111011111111111111110001100100 +00110100000000010000000000000001 +01000011100011010000000000111111 +11111011111111111111110000101011 +00110100000000010000000000000001 +00110100000000100000000010100001 +11111011111111111111110001111001 +00110100000010111111111111011001 +00110100000100000000000000001111 +00110100000011110000000000010111 +00110100000000010000000000000001 +10111001110000000001000000000000 +00110100000000110000000000000000 +11111011111111111111110010111001 +01000011100000010000000000111111 +10110101101000010110100000000000 +00100001101011010000000011111111 +01010101011100000000000000000011 +10110101011011000001000000000000 +00110000010000010000000000000000 +00110101011010110000000000000001 +01011101011011111111111111110101 +00110111100000100000000000111111 +00110100000000010000000000000001 +00110100000000110000000000000001 +11111011111111111111110010101101 +00110100000000010000000000000001 +11111011111111111111110001001001 +01000011100000100000000000111111 +00110100000000011111111111111011 +01011100010011010000000000011111 +00110111100010110000000000100000 +01111000000000100000000000000001 +00111000010000101011111110111100 +00110100000000110000000000010000 +10111001011000000000100000000000 +11111000000000000001101001010000 +10111001011000000000100000000000 +11111000000000000000011100010110 +01111000000000100000000000000001 +00111000010000101011111101001000 +01011100001000000000000000000101 +00110100000000010000000000000001 +01011000010000010000000000000000 +00110100000000011111111111111010 +11100000000000000000000000010000 +00101011100000110000000000110100 +01111000000000010000000000000001 +00111000001000011011111101000000 +01011000001000110000000000000000 +00101011100000110000000000111000 +01111000000000010000000000000001 +00111000001000011011111101000100 +01011000001000110000000000000000 +00101011100000110000000000110000 +01111000000000010000000000000001 +00111000001000011010100000001000 +01011000001000110000000000000000 +00110100000000010000000000000010 +01011000010000010000000000000000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000111100 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100110110000000000001000 +00110100000110110000000000100000 +10110111011111001101100000000000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100111010000000000000100 +01111000000010110000000000000001 +01111000000011000000000000000001 +10111011100000000111100000000000 +00110100000000100000000000000001 +00111001011010111010100011010000 +00111001100011001000100110111000 +11100000000000000000000000010010 +10111011100000001000000000000000 +00110111100111001111111111100100 +00110111100011100000000000001011 +00000001110011100000000000000011 +00110101101000100000000000101100 +00111101110011100000000000000011 +00110100000000110000000000010100 +10111001110000000000100000000000 +11111000000000000001100001100100 +00110001110000000000000000010011 +00101001101000100000000000100000 +00101001011000110000000001110100 +10111001100000000000100000000000 +10111001110000000010000000000000 +11111011111111111111100010100110 +00110100000000100000000000000000 +10111010000000001110000000000000 +10111001011000000000100000000000 +11111000000000000001011000011110 +10111000001000000110100000000000 +01011100001000001111111111101100 +10111001111000001110000000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100110110000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111011111101001100 +00101001011000010000000000000000 +01011100001000000000000000000111 +01111000000000010000000000000001 +00111000001000011010100011010000 +11111000000000000001010111100010 +00101001011000010000000000000000 +00110100001000010000000000000001 +01011001011000010000000000000000 +01111000000010110000000000000001 +00111001011010111010100000010000 +01111000000011000000000000000001 +00110101011011010000000011000000 +00111001100011001010100011010000 +11100000000000000000000000001001 +00101001011000100000000000001000 +00101001011000110000000000001100 +00101001011001000000000000010000 +00101001011011100000000000000000 +10111001100000000000100000000000 +11111000000000000001011010101010 +01011001110000010000000000000000 +00110101011010110000000000011000 +01011101011011011111111111111000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00110100000000100000000000000000 +10111000001000000110000000000000 +11111000000000000000011110100100 +10111000001000000101100000000000 +01001100001000000000000000000101 +01111000000000010000000000000001 +00111000001000011000100111100000 +10111001011000000001000000000000 +11100000000000000000000000000100 +00101001100000100000000000000000 +01111000000000010000000000000001 +00111000001000011000101000001100 +11111011111111111111100001011110 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011011111101010000 +01011000001000000000000000000000 +01111000000000100000000000000001 +01111000000000010000000000000001 +00111000001000011011111101100100 +00111000010000101011111101010100 +00110100000000111111111111111111 +01011000001000110000000000000000 +01011000010000110000000000000000 +01011000001000000000000000001000 +01011000010000000000000000001000 +01011000010000000000000000000100 +01011000001000000000000000000100 +01011000010000000000000000001100 +01011000001000000000000000001100 +00110100000000100000000000000000 +00110100000000010000000000000000 +11111000000000000001001110011111 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +00110100000000010000000000000000 +11111000000000000001010001001100 +10111000001000000101100000000000 +00110100000000100000000000000000 +01011100001000000000000010000001 +11111011111111111111101000011001 +01111000000000110000000000000001 +00111000011000111011111101010100 +00101000011001010000000000001000 +01111000000000100000000000000001 +00111000010000101011111101010000 +10111000001000000010000000000000 +00101000010000100000000000000000 +01000100101010110000000000000100 +00110100000000010000000000000001 +01011100101000010000000000011101 +11100000000000000000000000010000 +00110100000000010000000000000001 +01000100100000010000000000000101 +00101000011000010000000000000100 +00110100001000010000000000000001 +01011000011000010000000000000100 +11100000000000000000000000000010 +01011000011000000000000000000100 +01111000000000110000000000000001 +00111000011000111011111101010100 +00101000011001010000000000000100 +00110100000000010000000000000100 +01001100001001010000000000010000 +00110100000000010000000000000001 +01011000011000010000000000001000 +11100000000000000000000000000010 +01000100100001010000000000000011 +01011000011000000000000000000100 +11100000000000000000000000001010 +00101000011001010000000000000100 +00110100000000010000000000000100 +00110100101001010000000000000001 +01011000011001010000000000000100 +01001100001001010000000000000101 +00110100000000010000000000000010 +01011000011000010000000000001000 +00110100010000011111111000001100 +01011000011000010000000000001100 +01111000000000110000000000000001 +00111000011000111011111101100100 +00101000011001010000000000001000 +01000100101000000000000000000100 +00110100000000010000000000000001 +01011100101000010000000000011100 +11100000000000000000000000001111 +01000100100001010000000000000101 +00101000011000010000000000000100 +00110100001000010000000000000001 +01011000011000010000000000000100 +11100000000000000000000000000010 +01011000011000000000000000000100 +01111000000000110000000000000001 +00111000011000111011111101100100 +00101000011001000000000000000100 +00110100000000010000000000000100 +01001100001001000000000000010000 +00110100000000010000000000000001 +01011000011000010000000000001000 +11100000000000000000000000000010 +01000100100000000000000000000011 +01011000011000000000000000000100 +11100000000000000000000000001010 +00101000011001000000000000000100 +00110100000000010000000000000100 +00110100100001000000000000000001 +01011000011001000000000000000100 +01001100001001000000000000000101 +00110100000000010000000000000010 +01011000011000010000000000001000 +00110100010000011111111000001100 +01011000011000010000000000001100 +00110100000000010010010100011011 +01001100001000100000000000110000 +01111000000000100000000000000001 +00111000010000101011111101010100 +00101000010001000000000000001000 +00110100000000010000000000000010 +00110100000000101111111111111111 +01011100100000010000000000110001 +01111000000000110000000000000001 +00111000011000111011111101100100 +00101000011000010000000000001000 +01011100001001000000000000101101 +00101000011000100000000000001100 +00110100000000010001111100111111 +11100000000000000000000000000010 +00110100010000101110000011000000 +01001000010000011111111111111111 +01111000000000110000000000000001 +00111000011000111011111101100100 +01011000011000100000000000001100 +01111000000000110000000000000001 +00111000011000111011111101010100 +00101000011000110000000000001100 +00110100000000010001111100111111 +11100000000000000000000000000010 +00110100011000111110000011000000 +01001000011000011111111111111111 +01111000000001000000000000000001 +00111000100001001011111101010100 +01011000100000110000000000001100 +01001100011000100000000000000011 +00110100010001001111000001100000 +11100000000000000000000000000100 +00110100000001000000000000000000 +01001100010000110000000000000010 +00110100010001000000111110100000 +10110100100000110001100000000000 +00000000011000100000000000011111 +10110100010000110001100000000000 +00010100011000100000000000000001 +01001100010000000000000000000011 +00110100010000100001111101000000 +11100000000000000000000000000100 +00110100000000010001111100111111 +01001100001000100000000000000010 +00110100010000101110000011000000 +01011001100000100000000000000000 +00110100000000100000000000000001 +11100000000000000000000000001000 +01111000000000010000000000000001 +00110100010000100000000001100100 +00111000001000011011111101010000 +01011000001000100000000000000000 +00110100000000010000000000000000 +11111000000000000001001100010011 +00110100000000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000100000000000000001 +10111000001000000101100000000000 +10111000010000000000100000000000 +00111000001000011000101000101100 +11111011111111111111011110101000 +11100000000000000000000000000011 +00110100000000010000000001100100 +11111011111111111111110110010110 +00110100000000010000000000000000 +11111011111111111111100100101111 +01000100001000001111111111111100 +00110100000000010000000000000011 +00110100000000100000000000000000 +00110100000000110000000000000001 +11111000000000000001001000011111 +01111000000000100000000000000001 +10111000010000000000100000000000 +00111000001000011000101001000100 +11111011111111111111011110011010 +11100000000000000000000000000011 +00110100000000010000000001100100 +11111011111111111111110110001000 +00110100000000010000000000000000 +11111000000000000001001011100000 +01000100001000001111111111111100 +01111000000000100000000000000001 +10111000010000000000100000000000 +00111000001000011000011110011000 +11111011111111111111011110010000 +01111000000000100000000000000001 +10111000010000000000100000000000 +00111000001000011000101001010100 +11111011111111111111011110001100 +11111011111111111111111100110100 +10111001011000000000100000000000 +11111011111111111111111101001010 +01000100001000001111111111111110 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +00110100000000100000000000000011 +00110100000011000000000000000000 +00110100000011010000001111101001 +01011100001000100000000000100010 +11100000000000000000000000000101 +01000101100011010000000000100111 +11111011111111111111100100000011 +01000100001000000000000000100101 +00110101100011000000000000000001 +10111001011000000000100000000000 +11111011111111111111111100110100 +01000100001000001111111111111010 +01001100001000000000000000000010 +11100000000000000000000000011000 +00110111100000010000000000010100 +00110100000000100000000000000000 +11111000000000000000011010101001 +01001000000000010000000000000111 +00101001011000100000000000000000 +00101011100000010000000000010100 +00110100010000111111111100111000 +01010100011000010000000000000011 +00110100010000100000000011001000 +01010000010000010000000000011101 +00110100000000100000000000000001 +10111001011000000000100000000000 +11111000000000000000011010011111 +01111000000000110000000000000001 +00101001011000100000000000000000 +00111000011000111000101001111100 +01001100001000000000000000000011 +01111000000000110000000000000001 +00111000011000111000101001110100 +01111000000000010000000000000001 +00111000001000011000101010000100 +11111011111111111111011101011010 +11100000000000000000000000010000 +10111001011000000000100000000000 +11111011111111111111111011101001 +10111000001000000110000000000000 +01001000000000010000000000000101 +00101001011000010000000000000000 +11111011111111111110110001100100 +11100000000000000000000000000010 +00110100000011001111111111111111 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110100000011000000000000000000 +11100011111111111111111111110100 +00110100000000000000000000000000 +00110100000000000000000000000000 +00110100000000000000000000000000 +00110100000000000000000000000000 +00110100000000000000000000000000 +00110100000000000000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000001100000000000 +10111000010000000101100000000000 +00110100000000010000100000000000 +10111000011000000001000000000000 +01111000000011000000000000000001 +11111011111111111111101001001001 +00110100000011010000000000001000 +11111011111111111111111111101101 +00111001100011001100001010101100 +00110100000000010000010000000000 +00110100000000100000000000000000 +11111011111111111111101001000011 +10110001011000000000100000000000 +01001100001000000000000000000100 +00110100000000010001000000000000 +00110100000000100000000000000001 +11100000000000000000000000000011 +00110100000000010001000000000000 +00110100000000100000000000000000 +11111011111111111111101000111011 +11111011111111111111111111100000 +00110100000000010000010000000000 +00110100000000100000000000000001 +11111011111111111111101000110111 +00101001100000010000000000000000 +00111101011010110000000000000001 +00110101101011011111111111111111 +00101000001000010000000000000100 +00100000001000010010000000000000 +01111100001000010000000000000000 +10111001011000010101100000000000 +00100001011010110000000011111111 +11111011111111111111111111010100 +01011101101000001111111111101000 +00110100000000010000010000000000 +00110100000000100000000000000000 +11111011111111111111101000101010 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000010000100000000000 +00110100000000100000000000000001 +11111011111111111111101000011110 +00110100000000010000010000000000 +00110100000000100000000000000000 +11111011111111111111101000011011 +00110100000000010001000000000000 +00110100000000100000000000000000 +11111011111111111111101000011000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000110100000000000 +00110100000000010000000000000001 +00110100000000100000000000000000 +10111000011000000110000000000000 +11111011111111111111111110110111 +00110100000000100000000000001011 +00110100000000010000000000000000 +11111011111111111111111110110100 +00000001011000110000000000010000 +00110100000000010000000000000000 +00100000011000100000000011111111 +11111011111111111111111110110000 +00100001011000111111111100000000 +00000000011000100000000000001000 +00110100000000010000000000000000 +11111011111111111111111110101100 +00100001011000100000000011111111 +00110100000000010000000000000000 +11111011111111111111111110101001 +00110100000000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111110100110 +00110100000010110000000000000000 +11100000000000000000000000000111 +00110100000000100000000000000000 +00110100000000010000000000000000 +11111011111111111111111110100001 +10110101101010110001000000000000 +00110000010000010000000000000000 +00110101011010110000000000000001 +01001001100010111111111111111010 +00110100000000100000000000000000 +00110100000000010000000000000001 +11111011111111111111111110011010 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00110100000000100000000000000000 +10111000001000000101100000000000 +00110100000000010000000000000001 +11111011111111111111111110001100 +00110100000000100000000000000110 +00110100000000010000000000000000 +11111011111111111111111110001001 +00110100000000100000000000000000 +00110100000000010000000000000001 +11111011111111111111111110000110 +00110100000000100000000011011000 +00110100000000010000000000000000 +11111011111111111111111110000011 +00000001011000100000000000010000 +00110100000000010000000000000000 +00100000010000100000000011111111 +11111011111111111111111101111111 +00100001011000101111111100000000 +00000000010000100000000000001000 +00110100000000010000000000000000 +11111011111111111111111101111011 +00100001011000100000000011111111 +00110100000000010000000000000000 +11111011111111111111111101111000 +00110100000000100000000000000000 +00110100000000010000000000000001 +11111011111111111111111101110101 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00110100000000100000000000000000 +00110100000000010000000000000001 +11111011111111111111111101101011 +00110100000000100000000000000101 +00110100000000010000000000000000 +11111011111111111111111101101000 +00110100000000100000000000000000 +00110100000000010000000000000000 +11111011111111111111111101100101 +10111000001000000101100000000000 +00110100000000100000000000000000 +00110100000000010000000000000001 +11111011111111111111111101100001 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111011111110100100 +00101001011011000000000000001000 +10111000010000000110100000000000 +10111000001000000111100000000000 +10111000010000000000100000000000 +10111001100000000001000000000000 +11111000000000000001010111110100 +01111100001011100000000000000000 +10111001100000000001000000000000 +10111001101000000000100000000000 +11111000000000000001010111100000 +10110101110000010111000000000000 +00110100000011000000000000000000 +11100000000000000000000000001001 +00101001011000100000000000001000 +10001001100000100001000000000000 +10110100010011110000100000000000 +11111011111111111111111110110000 +11111011111111111111111111010001 +00100000001000100000000000000001 +01011100010000001111111111111110 +00110101100011000000000000000001 +01001001110011001111111111111000 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000110100000000000 +00110100000000010000000000000001 +00110100000000100000000000000000 +10111000011000000110000000000000 +11111011111111111111111100101001 +00110100000000100000000000000110 +00110100000000010000000000000000 +11111011111111111111111100100110 +00110100000000100000000000000000 +00110100000000010000000000000001 +11111011111111111111111100100011 +00110100000000100000000000000010 +00110100000000010000000000000000 +11111011111111111111111100100000 +00000001011000110000000000010000 +00110100000000010000000000000000 +00100000011000100000000011111111 +11111011111111111111111100011100 +00100001011000111111111100000000 +00000000011000100000000000001000 +00110100000000010000000000000000 +11111011111111111111111100011000 +00100001011000100000000011111111 +00110100000000010000000000000000 +11111011111111111111111100010101 +00110100000010110000000000000000 +11100000000000000000000000000110 +10110101101010110001000000000000 +01000000010000100000000000000000 +00110100000000010000000000000000 +00110101011010110000000000000001 +11111011111111111111111100001110 +01001001100010111111111111111011 +00110100000000010000000000000001 +00110100000000100000000000000000 +11111011111111111111111100001010 +11111011111111111111111110011001 +00100000001000010000000000000001 +01011100001000001111111111111110 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +01111000000011000000000000000001 +00111001011010111010111011100000 +00111001100011001010111011101100 +11100000000000000000000000000101 +00101001011000100000000000000000 +10111001011000000000100000000000 +00110101011010110000000000001100 +11011000010000000000000000000000 +01010101100010111111111111111100 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +01111000000011010000000000000001 +00110100000011000000000000000000 +00111001011010111010111011100000 +00111001101011011010111011101100 +11100000000000000000000000000110 +00101001011000100000000000000000 +10111001011000000000100000000000 +00110101011010110000000000001100 +11011000010000000000000000000000 +10110101100000010110000000000000 +01010101101010111111111111111011 +01101001100000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +01111000000011010000000000000001 +10111000001000000111000000000000 +00111001011010111010111011100000 +00111001101011011010111011101100 +11100000000000000000000000001100 +00101001011011000000000000001000 +11100000000000000000000000000111 +10111001110000000001000000000000 +11111000000000000001011010011101 +01011100001000000000000000000011 +00101001100000010000000000000100 +11100000000000000000000000000111 +00110101100011000000000000001000 +00101001100000010000000000000000 +01011100001000001111111111111001 +00110101011010110000000000001100 +01010101101010111111111111110101 +01111000000000011000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +10111000001000000001100000000000 +01011100001000000000000000001000 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011010111011100000 +00111000010000101010111011101100 +01000100001000100000000000000011 +00101000001000010000000000001000 +11000011101000000000000000000000 +00101000011000100000000000001000 +00110100011000010000000000001000 +01011100010000000000000000010110 +01111000000000100000000000000001 +01111000000001000000000000000001 +00111000010000101010111011100000 +00111000100001001010111011101100 +11100000000000000000000000001111 +00101000010000010000000000001000 +11100000000000000000000000001010 +01011100001000110000000000001000 +01111000000000110000000000000001 +00110100010000100000000000001100 +00111000011000111010111011101100 +00110100000000010000000000000000 +01010000010000110000000000001001 +00101000010000010000000000001000 +11000011101000000000000000000000 +00110100001000010000000000001000 +00101000001001010000000000000000 +01011100101000001111111111110110 +00110100010000100000000000001100 +01010100100000101111111111110010 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111001000 +01011011100010110000000000111000 +01011011100011000000000000110100 +01011011100011010000000000110000 +01011011100011100000000000101100 +01011011100011110000000000101000 +01011011100100000000000000100100 +01011011100100010000000000100000 +01011011100100100000000000011100 +01011011100100110000000000011000 +01011011100101000000000000010100 +01011011100101010000000000010000 +01011011100101100000000000001100 +01011011100101110000000000001000 +01011011100111010000000000000100 +10111000001000000111000000000000 +00110100000000010000000000000000 +10111000010000001011100000000000 +01111000000101000000000000000001 +11111011111111111111111111001011 +01111000000100110000000000000001 +01111000000100100000000000000001 +01111000000100010000000000000001 +01111000000100000000000000000001 +01111000000011110000000000000001 +10111000001000000110100000000000 +00110100000101010000000000000000 +00110100000010110000000000000000 +00111010100101001000000011100000 +00111010011100110111110001011000 +00111010010100101000101010110000 +01111000000101101000000000000000 +00111010001100011000011111010000 +00111010000100000111100101001000 +00111001111011111000011111001000 +11100000000000000000000000101000 +00110101011000100000000000001111 +10110101110010110000100000000000 +01001010111000100000000000000110 +01111000000000100000000000000001 +00111000010000101000101010101000 +11111011111111111111010110011011 +10110101011000010101100000000000 +11100000000000000000000000100001 +00101001101011000000000000000100 +10111010100000000001100000000000 +01000110101000000000000000000010 +10111010011000000001100000000000 +00101001101001000000000000000000 +10111010010000000001000000000000 +11111011111111111111010110010010 +10110100001010110101100000000000 +01011101100101100000000000000101 +10110101110010110000100000000000 +10111001111000000001000000000000 +11111011111111111111010110001101 +11100000000000000000000000001110 +01001101100000000000000000000110 +10110101110010110000100000000000 +10111010000000000001000000000000 +11111011111111111111010110001000 +11001000000011000110000000000000 +10110101011000010101100000000000 +00100001100001001111111111111111 +00001000100001000010011100010000 +00010101100000110000000000010000 +10110101110010110000100000000000 +00000000100001000000000000010000 +10111010001000000001000000000000 +11111011111111111111010101111111 +10110100001010110101100000000000 +10111001101000000000100000000000 +11111011111111111111111110010110 +10111000001000000110100000000000 +00110110101101010000000000000001 +01011101101000001111111111011001 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000111000 +00101011100011000000000000110100 +00101011100011010000000000110000 +00101011100011100000000000101100 +00101011100011110000000000101000 +00101011100100000000000000100100 +00101011100100010000000000100000 +00101011100100100000000000011100 +00101011100100110000000000011000 +00101011100101000000000000010100 +00101011100101010000000000010000 +00101011100101100000000000001100 +00101011100101110000000000001000 +00110111100111000000000000111000 +11000011101000000000000000000000 +00110111100111001111111110101000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00110111100010110000000000001100 +10111001011000000000100000000000 +00110100000000100000000001010000 +11111011111111111111111110011101 +01111000000000010000000000000001 +10111001011000000001000000000000 +00111000001000010111100111101000 +11111011111111111111010101101011 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000001011000 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011011111111010100 +00101000001000010000000000000000 +00101000001000100000000000001000 +00101000001000010000000000001100 +00100000001000010000000011111111 +11000011101000000000000000000000 +01111000000000010000000000000001 +01111000000000110000000000000001 +00111000011000111000111100110100 +00111000001000011011111111010100 +00101000001000010000000000000000 +00101000011000100000000000000000 +01111000000001000000000000000001 +00111000100001001000111100111000 +01011000001000100000000000000000 +01011000001000000000000000010100 +00101000100000110000000000000000 +01011000001000000000000000011000 +01011000001000000000000000010000 +01011000001000110000000000000000 +01011000001000100000000000000000 +01011000001000000000000000011100 +11000011101000000000000000000000 +01111000000001000000000000000001 +00110100000001010000000000000010 +00111000100001001011111111010100 +01011100001001010000000000001110 +00101000100000010000000000000000 +00010100010001000000000000011111 +00100000100001000000000000000111 +10110100100000110001100000000000 +11110100100000110010000000000000 +00000000011000110000000000000011 +10110100100000100001000000000000 +00111100010000100000000000011101 +01011000001000000000000000010100 +01011000001000000000000000011000 +10111000010000110001100000000000 +01011000001000110000000000010000 +11100000000000000000000000000110 +00101000100000010000000000000000 +00100000010000100000000011111111 +01011000001000110000000000010100 +01011000001000100000000000011000 +01011000001000000000000000010000 +01111000000000010000000000000001 +00111000001000011011111111010100 +00101000001000010000000000000000 +00101000001000100000000000000000 +00111000010000100000000000000100 +01011000001000100000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +01111000000001010000000000000001 +00111000101001011011111111010100 +00101000101001010000000000000000 +00100000001000010000000011111111 +00000000011000110000000000000011 +01011000101000100000000000010100 +01011000101000010000000000011000 +01011000101000110000000000010000 +00110100000000010000000000000011 +01011100100000010000000000000111 +00101000101000100000000000000000 +00110100000000011111111111110011 +10100000010000010000100000000000 +00111000001000010000000000001000 +01011000101000010000000000000000 +11000011101000000000000000000000 +00110100000000010000000000000001 +01011100100000010000000000000111 +00101000101000100000000000011100 +00110100000000011111111111100111 +10100000010000010000100000000000 +00111000001000010000000000010000 +01011000101000010000000000011100 +11000011101000000000000000000000 +00110100000000010000000000000010 +01011100100000010000000000000110 +00101000101000100000000000011100 +00110100000000011111111111000111 +10100000010000010000100000000000 +00111000001000010000000000100000 +01011000101000010000000000011100 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +01111000000000010000000000000001 +00111000001000011000111100101000 +00101000001011110000000000000000 +01111000000010110000000000000001 +10111000010000000110100000000000 +00111001011010111011111111010100 +11111011111111111111111110011010 +10111000001000001000100000000000 +00101001011000010000000000000000 +10111000010000001000000000000000 +00101000001011100000000000000100 +10100001110011110111000000000000 +11111011111111111111111110010100 +01011100001100011111111111111001 +01011100010100001111111111111000 +01000101100000000000000000000011 +01011001100000010000000000000000 +01011001100000100000000000000100 +01000101101000000000000000000011 +00111101110000010000000000000011 +01011001101000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011011111111010100 +00101000001000010000000000000000 +00101000001000010000000000000000 +00100000001000010000000000000100 +01100100001000010000000000000000 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101011111111010100 +00101000010000100000000000000000 +00101000010000110000000000011100 +01000100001000000000000000000011 +00111000011000110000000000001100 +11100000000000000000000000000011 +00110100000000011111111111110011 +10100000011000010001100000000000 +01011000010000110000000000011100 +00110100000000010000000000000000 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101011111111010100 +00101000010000100000000000000000 +00101000010000110000000000011100 +01000100001000000000000000000011 +00111000011000110000000000000010 +11100000000000000000000000000011 +00110100000000011111111111111101 +10100000011000010001100000000000 +01011000010000110000000000011100 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00101000001010110000000000000100 +10111000100000000110100000000000 +10111000011000000111100000000000 +01000001011000010000000000000011 +10111000010000000110000000000000 +00110101101011101111111111111111 +11111011111111111111011111011100 +00101001011000100000000000000100 +01000001011000010000000000000011 +00111100010000100000000000000001 +00100000010000100000000011111110 +11111011111111111111100000101000 +00010101100000100000000000001000 +01000001011000010000000000000011 +00100000010000100000000011111111 +11111011111111111111100000100100 +01000001011000010000000000000011 +00100001100000100000000011111111 +00110100000011000000000000000000 +11111011111111111111100000100000 +01000001011000010000000000000011 +11111011111111111111011111100011 +00101001011000100000000000000100 +01000001011000010000000000000011 +00111100010000100000000000000001 +00111000010000100000000000000001 +00100000010000100000000011111111 +11111011111111111111100000011000 +11100000000000000000000000000101 +00100000101000010000000011111111 +00110100000000110000000000000000 +11111011111111111111100001011011 +00110101100011000000000000000001 +10110101111011000001000000000000 +00101001011001010000000000000000 +01001001110011001111111111111010 +00100000101000010000000011111111 +00110100000000110000000000000001 +11111011111111111111100001010100 +01000001011000010000000000000011 +11111011111111111111011111110000 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00110100000011010000000000000000 +10111000010000000110000000000000 +10111000011000000111000000000000 +00101000001010110000000000000100 +11100000000000000000000000100001 +01000001011000010000000000000011 +11111011111111111111011110100011 +00101001011000100000000000000100 +01000001011000010000000000000011 +00111100010000100000000000000001 +00100000010000100000000011111110 +11111011111111111111011111101111 +00010101100000100000000000001000 +01000001011000010000000000000011 +00100000010000100000000011111111 +11111011111111111111011111101011 +01000001011000010000000000000011 +00100001100000100000000011111111 +00110101100011000000000000000001 +11111011111111111111011111100111 +01000001011000010000000000000011 +00110100000000100000000011111111 +11111011111111111111011111100100 +01000001011000010000000000000011 +11111011111111111111011111000111 +01000001011000010000000000000011 +11111011111111111111011110001111 +00101001011000100000000000000100 +01000001011000010000000000000011 +00111100010000100000000000000001 +00100000010000100000000011111110 +11111011111111111111011111011011 +10111000001000000111100000000000 +01000001011000010000000000000011 +11111011111111111111011110111101 +01011101111000001111111111110110 +00110101101011010000000000000001 +01001001110011011111111111100000 +10111001110000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +00110100000011000000000000000000 +10111000010000000110100000000000 +10111000011000000111100000000000 +10111000100000000111000000000000 +00101000001010110000000000000100 +11100000000000000000000000100010 +01000001011000010000000000000011 +11111011111111111111011101101011 +00101001011000100000000000000100 +01000001011000010000000000000011 +00111100010000100000000000000001 +00100000010000100000000011111110 +11111011111111111111011110110111 +00010101101000100000000000001000 +01000001011000010000000000000011 +00100000010000100000000011111111 +11111011111111111111011110110011 +01000001011000010000000000000011 +00100001101000100000000011111111 +00110101101011010000000000000001 +11111011111111111111011110101111 +10110101111011000001000000000000 +01000001011000010000000000000011 +01000000010000100000000000000000 +11111011111111111111011110101011 +01000001011000010000000000000011 +11111011111111111111011110001110 +01000001011000010000000000000011 +11111011111111111111011101010110 +00101001011000100000000000000100 +01000001011000010000000000000011 +00111100010000100000000000000001 +00100000010000100000000011111110 +11111011111111111111011110100010 +10111000001000001000000000000000 +01000001011000010000000000000011 +11111011111111111111011110000100 +01011110000000001111111111110110 +00110101100011000000000000000001 +01001001110011001111111111011111 +10111001110000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000010000000000100000000000 +10111000011000000001000000000000 +11111011111111111111110101111111 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000010000000000100000000000 +10111000011000000001000000000000 +10111000100000000001100000000000 +11111011111111111111110110011110 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000001000010000000000000100 +11111000000000000000100101011000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000001000010000000000000100 +11111000000000000000100101111001 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000001000010000000000000100 +11111000000000000000100101011110 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111110111100 +01011011100010110000000000100100 +01011011100011000000000000100000 +01011011100011010000000000011100 +01011011100011100000000000011000 +01011011100011110000000000010100 +01011011100100000000000000010000 +01011011100100010000000000001100 +01011011100100100000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +00110100000000010000000000000011 +10111000010000000110100000000000 +10111000011000000111000000000000 +00110100000010111111111111111100 +01010100011000010000000001110010 +01111000000000110000000000000001 +01111000000001000000000000000001 +01111000000001010000000000000001 +00111000011000111000111100111100 +00111000100001001000111101000000 +00111000101001011000111101000100 +00101000011000100000000000000000 +01111000000011110000000000000001 +00101000100000110000000000000000 +00101000101001000000000000000000 +00111001111011111010100110001000 +10111001111000000000100000000000 +11111000000000000001000111011010 +00110100000010111111111111111111 +01001000000000010000000001100011 +01011101110000000000000000010111 +01111000000001000000000000000001 +00111000100001001011111110000010 +00110000100000000000000000000000 +00110100000000100000000000000001 +00110111100100000000000000101000 +00110111100100100000000000111000 +00110100000100010000000011111111 +10111000100000000101100000000000 +11100000000000000000000000000110 +01000000010000010000000000000000 +01000100001100010000000000001100 +00110100010000100000000000000001 +01011100010100101111111111111101 +11100000000000000000000001100000 +10111001111000000000100000000000 +10111010000000000001100000000000 +00110100000001000000000000011101 +11111000000000000001001000001000 +00110100000000100000000000011101 +01011100001000100000000000000011 +10111010000000000001000000000000 +11100011111111111111111111110100 +00110100000000010000000000000001 +01011101101000010000000000000111 +01111000000000010000000000000001 +00111000001000011011111110000010 +01000000001000100000000000000000 +00110100000000010000000000000100 +00110100000010111111111111111110 +01000100010000010000000001000001 +10111001110011010000100000000000 +01011100001000000000000000000111 +01111000000000010000000000000001 +00111000001000011011111110000010 +01000000001000010000000000000000 +00110100000010110000000000000000 +01000100001010110000000000111010 +11100000000000000000000000000010 +01011101101000000000000000011010 +00001001110000100000000000011101 +01111000000000010000000000000001 +00111000001000011010100110001000 +00110100010000100000000000000001 +10111001100000000001100000000000 +00110100000001000000000000011101 +11111000000000000001000111101100 +00110100000000100000000000011101 +00110100000010111111111111111111 +01011100001000100000000000101110 +10111001100000000000100000000000 +00110101100000110000000000011100 +00110100000000100000000000000000 +01000000001001000000000000000000 +00110100001000010000000000000001 +10110100010001000001000000000000 +00100000010000100000000011111111 +01011100001000111111111111111100 +01000001100000010000000000011100 +01000100001000100000000000100001 +01111000000000010000000000000001 +00111000001000011000101011001100 +11111011111111111111001110011011 +00110100000010111111111111111111 +11100000000000000000000000011111 +00110100000000010000000000000001 +01011101101000010000000000011010 +10111001100000000000100000000000 +00110101100000110000000000011100 +00110100000000100000000000000000 +01000000001001000000000000000000 +00110100001000010000000000000001 +10110100010001000001000000000000 +00100000010000100000000011111111 +01011100001000111111111111111100 +01111000000011010000000000000001 +00110001100000100000000000011100 +00111001101011011011111110000010 +01000001101000100000000000000000 +01111000000000010000000000000001 +00111000001000011010100110001000 +00001000010000100000000000011101 +10111001100000000001100000000000 +00110100000001000000000000011101 +00110100010000100000000000000001 +11111000000000000001000111110001 +00110100000000100000000000011101 +00110100000010111111111111111111 +01011100001000100000000000000111 +01000001101000010000000000000000 +00110100001000010000000000000001 +00110001101000010000000000000000 +01111000000000010000000000000001 +00111000001000011011111110000010 +01000000001010110000000000000000 +01111000000000010000000000000001 +00111000001000011010100110001000 +11111000000000000001000110100110 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100100 +00101011100011000000000000100000 +00101011100011010000000000011100 +00101011100011100000000000011000 +00101011100011110000000000010100 +00101011100100000000000000010000 +00101011100100010000000000001100 +00101011100100100000000000001000 +00110111100111000000000001000100 +11000011101000000000000000000000 +01000001011000100000000000000000 +00110100010000100000000000000001 +00100000010000100000000011111111 +00110001011000100000000000000000 +00001000010000100000000000011101 +00110100010000100000000000000001 +11100011111111111111111110011011 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000010000000000100000000000 +10111000011000000001000000000000 +10111000100000000001100000000000 +11111011111111111111110001011110 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111011000 +01011011100010110000000000100100 +01011011100011000000000000100000 +01011011100011010000000000011100 +01011011100011100000000000011000 +01011011100011110000000000010100 +01011011100100000000000000010000 +01011011100100010000000000001100 +01011011100110110000000000001000 +01011011100111010000000000000100 +10111000001000000111100000000000 +01111000000000010000000000000001 +00111000001000011000111101001000 +00101000001011100000000000000000 +01111000000010110000000000000001 +01011011100000000000000000101000 +00111001011010111001001111110100 +00110100000011000000000000000000 +00110100000011010000000000000111 +00101001011000010000000000000000 +00110111100110110000000000101000 +10111011011000000001000000000000 +00110100000000110000000000000100 +11111011111111111111110001000011 +00101011100000010000000000101000 +00110101011010110000000000000100 +01000100001011100000000000000011 +00110101100011000000000000000001 +01011101100011011111111111110111 +01111000000000010000000000000001 +00111000001000011000111101001000 +00101000001000100000000000000000 +00101011100000010000000000101000 +01000100001000100000000000001010 +01111000000011010000000000000001 +00111001101011011001010000010000 +01111000000011000000000000000001 +10111001101000000111000000000000 +00110100000010110000000000000000 +00111001100011001100000111110000 +10111000010000001000100000000000 +00110100000100000000000000000110 +11100000000000000000000000011011 +01111000000000010000000000000001 +00111101100011000000000000000010 +00111000001000011001001111110100 +10110100001011000000100000000000 +00101000001010110000000000000000 +01111000000000010000000000000001 +00111000001000011000101011101000 +10111001011000000001000000000000 +11111011111111111111001100101000 +01111000000000110000000000000001 +00111000011000111011111110100100 +00101000011000100000000000001000 +01111000000000010000000000000001 +00111000001000011010100110001000 +01011000001000100000000000001000 +01111000000000100000000000000001 +00111000010000100001001011101000 +01011000001000100000000000011100 +01111000000000100000000000000001 +00111000010000100001000000100000 +01011000001000100000000000100000 +01111000000000100000000000000001 +01011000001000000000000000000100 +01011000001010110000000000001100 +00111000010000100001000000000000 +11100000000000000000000000101011 +00101001110000100000000000000000 +10111001100000000000100000000000 +10111011011000000001100000000000 +00110100000001000000000000000100 +11111000000000000000100001100000 +00110100000000100000000000000100 +01011100001000100000000000000110 +00101011100000010000000000101000 +00110101110011100000000000000100 +01000100001100010000000000000011 +00110101011010110000000000000001 +01011101011100001111111111110101 +01111000000000010000000000000001 +00111000001000011000111101001000 +00101000001100000000000000000000 +00101011100000010000000000101000 +01011100001100000000000000011100 +00111101011010110000000000000010 +01111000000000010000000000000001 +00111000001000011001010000010000 +10110100001010110000100000000000 +00101000001010110000000000000000 +01111000000000010000000000000001 +00111000001000011000101100001000 +10111001011000000001000000000000 +11111011111111111111001011111101 +01111000000000010000000000000001 +00111000001000011010100110001000 +00110100000000100000000000000001 +01011000001000100000000000001000 +01111000000000100000000000000001 +00111000010000100001000001000100 +01011000001000100000000000011100 +01111000000000100000000000000001 +00111000010000100001000001111100 +01111000000000110000000000000001 +00111000011000111100000111110000 +01011000001000100000000000100000 +01111000000000100000000000000001 +01011000001000110000000000000100 +01011000001010110000000000001100 +00111000010000100001000001100000 +01011000001000100000000000100100 +11100000000000000000000000111010 +01111000000010110000000000000001 +00111001011010111011111101111000 +01111000000011100000000000000001 +01011001011011110000000000000000 +01011001011000000000000000000100 +00110100000100010000000001111111 +00111001110011101010100110001000 +00110100000110110000000000000110 +11100000000000000000000000101111 +01000001011000010000000000000011 +00100000010000100000000011111111 +10111001101000000111100000000000 +11111011111111111111011011111111 +00110100000011000000000000000000 +01000100001000000000000000100110 +00101001111000100000000000000000 +10111001110000000000100000000000 +00110111100000110000000000101000 +00110100000001000000000000000100 +11111011111111111111111000010000 +00101011100000010000000000101000 +00110101111011110000000000000100 +01000100001100000000000000000011 +00110101100011000000000000000001 +01011101100110111111111111110111 +00101011100000010000000000101000 +01011100001100000000000000011010 +00111101100011000000000000000010 +01111000000000010000000000000001 +00111000001000011001010000010000 +10110100001011000000100000000000 +00101000001011000000000000000000 +00101001011000110000000000000100 +01111000000000010000000000000001 +10111001100000000001000000000000 +00111000001000011000101100100100 +11111011111111111111001011000110 +01111000000000010000000000000001 +00111000001000011010100110001000 +00110100000000100000000000000001 +01011000001000100000000000001000 +01111000000000100000000000000001 +00111000010000100000110101011100 +01011000001000100000000000011100 +01111000000000100000000000000001 +00111000010000100000111100011000 +01011000001000100000000000100000 +01111000000000100000000000000001 +01011000001010110000000000000100 +01011000001011000000000000001100 +00111000010000100000111001000000 +11100011111111111111111111001011 +00101001011000010000000000000100 +00110100001000010000000000000001 +01011001011000010000000000000100 +00101001011000100000000000000100 +01001110001000101111111111010001 +01111000000000010000000000000001 +01111000000010110000000000000001 +00110100000000100000000000000001 +00111000001000011011111101110100 +00111001011010111010100110001000 +00110000001000100000000000000000 +10111001011000000000100000000000 +11111000000000000001000000000100 +01111000000011000000000000000001 +00110100000000100000000000000001 +00111001100011001000101101001000 +11100000000000000000000000001000 +00101000100000100000000000100000 +00101000100000110000000000001100 +00110000100000000000000000111111 +10111001100000000000100000000000 +00110100100001000000000000101100 +11111011111111111111001010100000 +00110100000000100000000000000000 +10111001011000000000100000000000 +11111000000000000001000000011001 +10111000001000000010000000000000 +01011100001000001111111111110110 +00101011100111010000000000000100 +00101011100010110000000000100100 +00101011100011000000000000100000 +00101011100011010000000000011100 +00101011100011100000000000011000 +00101011100011110000000000010100 +00101011100100000000000000010000 +00101011100100010000000000001100 +00101011100110110000000000001000 +00110111100111000000000000101000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +01111000000001000000000000000001 +01111000000001010000000000000001 +00111000011000111000111100111100 +00111000100001001000111101000000 +00111000101001011000111101001100 +10111000010000000101100000000000 +01111000000011010000000000000001 +00101000011000100000000000000000 +00101000100000110000000000000000 +00101000101001000000000000000000 +00111001101011011010100110001000 +10111001101000000000100000000000 +11111000000000000001000001111011 +00110100000000101111111111111111 +01001000000000010000000001001110 +10111001101000000000100000000000 +00110100000000100000000000000000 +10111001011000000001100000000000 +00110100000001000000000000000110 +11111000000000000001000010110111 +10111000001000000110000000000000 +10111001101000000000100000000000 +11111000000000000001000010100001 +01001101100000000000000000000110 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011000101101100100 +00111000010000101001000011010100 +11111011111111111111001001101101 +01000001011000010000000000000000 +00110100000000100000000011111111 +01000100001000100000000000001101 +01000001011000110000000000000001 +01000001011000100000000000000010 +10111000011000100001000000000000 +10111000001000100000100000000000 +01000001011000100000000000000011 +10111000001000100000100000000000 +01000001011000100000000000000100 +10111000001000100000100000000000 +01000001011000100000000000000101 +10111000001000100000100000000000 +00100000001000010000000011111111 +01011100001000000000000000001000 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011000101101110100 +00111000010000101001000011010100 +11111011111111111111001001011001 +00110100000011001111111111111111 +11100000000000000000000000000011 +00110100000000100000000000000000 +01001101100000000000000000101000 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000010000101001000011010100 +00111000001000011000101110001100 +11111011111111111111001001010000 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011100000111110000 +00111000010000101100001000000000 +00110100001001100000000010010000 +00110100000001010000000000100010 +00110100000001000000000000110011 +00101000010000010000000000000100 +00100000001000110000000011111111 +01111100011001110000000001000010 +01111100011000110000000000101000 +10100000111000110001100000000000 +01011100011000000000000000001100 +00101000010000110000000000000000 +00110100000011000000000000000000 +00110001011001010000000000000000 +00110001011000110000000000000010 +00000000001000110000000000011000 +00110001011001000000000000000001 +00110001011000110000000000000011 +00000000001000110000000000010000 +00000000001000010000000000001000 +00110001011000110000000000000100 +00110001011000010000000000000101 +00110100010000100000000000010000 +01011100010001101111111111101110 +00110100000000100000000000000000 +01000101100000000000000000000111 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000010000101001000011010100 +00111000001000011000101110101000 +11111011111111111111001000101111 +00110100000000101111111111111111 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +01111000000001000000000000000001 +01111000000001010000000000000001 +00111000011000111000111100111100 +00111000100001001000111101000000 +00111000101001011000111101001100 +10111000010000000110100000000000 +01111000000010110000000000000001 +00101000011000100000000000000000 +00101000100000110000000000000000 +00101000101001000000000000000000 +00111001011010111010100110001000 +10111001011000000000100000000000 +11111000000000000001000000010010 +10111000001000000110000000000000 +01001000000000010000000000001011 +00101001011000110000000001110000 +00110100000000100000000000000000 +10111001011000000000100000000000 +11111000000000000001000010100111 +10111001011000000000100000000000 +00110100000000100000000000000000 +10111001101000000001100000000000 +00110100000001000000000000000110 +11111000000000000001000001110110 +10111000001000000110000000000000 +01111000000000010000000000000001 +00111000001000011010100110001000 +11111000000000000001000000110011 +00110100000000010000000000000000 +01001101100000000000000000000111 +01111000000000010000000000000001 +01111000000000100000000000000001 +00111000001000011000101110111000 +00111000010000101001001111100000 +11111011111111111111000111111110 +00110100000000011111111111111111 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +01111000000001000000000000000001 +01111000000001010000000000000001 +00111000011000111000111100111100 +00111000100001001000111101000000 +00111000101001011000111101000100 +00101000011000100000000000000000 +01111000000010110000000000000001 +00101000100000110000000000000000 +00101000101001000000000000000000 +00111001011010111010100110001000 +10111001011000000000100000000000 +11111000000000000000111111100100 +10111000001000000001000000000000 +00110100000000011111111111111111 +01001000000000100000000000001110 +00101001011000110000000001110000 +10111001011000000000100000000000 +00110100000000100000000000000000 +11111000000000000001000001111000 +10111000001000000110000000000000 +00101001011000010000000001110000 +01011101100000010000000000000010 +00110100000011000000000000000001 +01111000000000010000000000000001 +00111000001000011010100110001000 +11111000000000000001000000000110 +01111101100000010000000000000001 +11001000000000010000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111001100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +00110100000011000000000000000000 +10111000001000000101100000000000 +00110100000011010000000000000001 +00110111100011100000000000011000 +11100000000000000000000000100111 +10111001110000000000100000000000 +00110100000000100000000000000000 +10111001100000000001100000000000 +11111011111111111111110111001010 +00100000001011010000000011111111 +01000101101000000000000000100010 +10111001110000000000100000000000 +10111001011000000001000000000000 +00110100000000110000000000010000 +11111000000000000001001011010111 +00110101100011000000000000000001 +01011100001000000000000000011011 +00101011100000010000000000101100 +00000000001000100000000000011000 +00110001011000010000000000010111 +00110001011000100000000000010100 +00000000001000100000000000010000 +00110001011000100000000000010101 +00000000001000100000000000001000 +00101011100000010000000000110000 +00110001011000100000000000010110 +00000000001000100000000000011000 +00110001011000010000000000011011 +00110001011000100000000000011000 +00000000001000100000000000010000 +00110001011000100000000000011001 +00000000001000100000000000001000 +00101011100000010000000000101000 +00110001011000100000000000011010 +00000000001000100000000000011000 +00110001011000010000000000010011 +00110001011000100000000000010000 +00000000001000100000000000010000 +00110001011000100000000000010001 +00000000001000100000000000001000 +00110100000000010000000000000001 +00110001011000100000000000010010 +11100000000000000000000000000011 +01001001101011001111111111011010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000110100 +11000011101000000000000000000000 +00110111100111001111111100101000 +01011011100010110000000001000100 +01011011100011000000000001000000 +01011011100011010000000000111100 +01011011100011100000000000111000 +01011011100011110000000000110100 +01011011100100000000000000110000 +01011011100100010000000000101100 +01011011100100100000000000101000 +01011011100100110000000000100100 +01011011100101000000000000100000 +01011011100101010000000000011100 +01011011100101100000000000011000 +01011011100101110000000000010100 +01011011100110000000000000010000 +01011011100110010000000000001100 +01011011100110110000000000001000 +01011011100111010000000000000100 +00100000010000100000000011111111 +10111000001000000110000000000000 +00100000011000110000000011111111 +01000100010000000000000001000100 +01000000001000100000000000000000 +01000000001001000000000000000001 +01000000001111010000000000000101 +01000000001110110000000000000110 +01000000001110010000000000000111 +01000000001110000000000000001000 +01000000001101110000000000001001 +01000000001101100000000000001010 +01000000001101010000000000001011 +01000000001101000000000000001100 +01000000001100110000000000001101 +01000000001100100000000000001110 +01000000001100010000000000001111 +01000000001100000000000000010000 +01000000001011110000000000010001 +01000000001011100000000000010010 +01000000001011010000000000010011 +01000000001010110000000000010100 +01000000001010100000000000010101 +01000000001010010000000000010110 +01000000001010000000000000010111 +01000000001001110000000000011000 +01000000001001100000000000011001 +01000000001001010000000000011010 +01000000001000110000000000011011 +01000000001000010000000000011100 +00110011100000100000000010111100 +00110011100001000000000010111101 +01000001100000100000000000000010 +00110011100000100000000010111110 +01000001100000100000000000000011 +00110011100000100000000010111111 +01000001100000100000000000000100 +00110011100000100000000011000000 +00110011100000010000000011011000 +00110111100000010000000010111100 +00110011100111010000000011000001 +00110011100110110000000011000010 +00110011100110010000000011000011 +00110011100110000000000011000100 +00110011100101110000000011000101 +00110011100101100000000011000110 +00110011100101010000000011000111 +00110011100101000000000011001000 +00110011100100110000000011001001 +00110011100100100000000011001010 +00110011100100010000000011001011 +00110011100100000000000011001100 +00110011100011110000000011001101 +00110011100011100000000011001110 +00110011100011010000000011001111 +00110011100010110000000011010000 +00110011100010100000000011010001 +00110011100010010000000011010010 +00110011100010000000000011010011 +00110011100001110000000011010100 +00110011100001100000000011010101 +00110011100001010000000011010110 +00110011100000110000000011010111 +11111011111111111111111101110101 +01011100001000000000000000001001 +01111000000000010000000000000001 +00111000001000011000101111010100 +11111011111111111111000101000001 +10111001100000000000100000000000 +00110100000000100000000000000001 +00110100000000110000000000000000 +11111011111111111111110101000101 +11100000000000000000000001100011 +01111000000000010000000000000001 +00111000001000011000101111101100 +11111011111111111111000100111001 +00110100000011010000000000000000 +00110100000010110000000000000001 +00110111100100010000000001001000 +00110111100100000000000011011100 +11100000000000000000000001000110 +00001001101011100000000000011101 +00110100000000100000000000000000 +10111001101000000001100000000000 +10110110001011100111100000000000 +10111001111000000000100000000000 +11111011111111111111110100110110 +10111000001000000101100000000000 +01001100000000010000000001010100 +10111001111000000000100000000000 +10111001100000000001000000000000 +00110100000000110000000000010000 +11111000000000000001001001000011 +01011100001000000000000000111000 +01000001100001010000000000010100 +01000001100000010000000000010101 +01000001100000110000000000010110 +00111100101001010000000000011000 +00111100001000010000000000010000 +00111100011000110000000000001000 +10111000001001010000100000000000 +10111000011000010001100000000000 +01000001100000010000000000010111 +10110110000011100001000000000000 +00110100010001001111111110000000 +10111000001000110001100000000000 +00000000011000010000000000011000 +00110000010000011111111110000000 +00000000011000010000000000010000 +00110000100000110000000000000011 +00110000100000010000000000000001 +00000000011000010000000000001000 +00110000100000010000000000000010 +01000001100001010000000000011000 +01000001100000010000000000011001 +01000001100000110000000000011010 +00111100101001010000000000011000 +00111100001000010000000000010000 +00111100011000110000000000001000 +10111000001001010000100000000000 +10111000011000010001100000000000 +01000001100000010000000000011011 +00110100010001001111111110000100 +10111000001000110001100000000000 +00000000011000010000000000011000 +00110000010000011111111110000100 +00000000011000010000000000010000 +00110000100000110000000000000011 +00110000100000010000000000000001 +00000000011000010000000000001000 +00110000100000010000000000000010 +01000001100001010000000000010000 +01000001100000010000000000010001 +01000001100000110000000000010010 +00111100101001010000000000011000 +00111100001000010000000000010000 +00111100011000110000000000001000 +10111000001001010000100000000000 +10111000011000010001100000000000 +01000001100000010000000000010011 +00110100010001001111111101111100 +10111000001000110001100000000000 +00000000011000010000000000011000 +00110000010000011111111101111100 +00000000011000010000000000010000 +00110000100000110000000000000011 +00110000100000010000000000000001 +00000000011000010000000000001000 +00110000100000010000000000000010 +00110101101011010000000000000001 +01001001011011011111111110111011 +11111011111111111111111011110111 +00110100000000101111111111111111 +10111001011000000111000000000000 +00110100000011000000000000000000 +00110111100011010000000001001000 +01011100001000100000000000001101 +01111000000000010000000000000001 +00111000001000011000001010001000 +11111011111111111111000011100101 +00110100000010111111111111111111 +11100000000000000000000000001011 +00001001100000010000000000011101 +00110100000000100000000000000001 +00110100000000110000000000000000 +10110101101000010000100000000000 +11111011111111111111110011100110 +00110101100011000000000000000001 +01001000000000010000000000000011 +10111001100000000000100000000000 +01001001110011001111111111111000 +10111000001000000101100000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000001000100 +00101011100011000000000001000000 +00101011100011010000000000111100 +00101011100011100000000000111000 +00101011100011110000000000110100 +00101011100100000000000000110000 +00101011100100010000000000101100 +00101011100100100000000000101000 +00101011100100110000000000100100 +00101011100101000000000000100000 +00101011100101010000000000011100 +00101011100101100000000000011000 +00101011100101110000000000010100 +00101011100110000000000000010000 +00101011100110010000000000001100 +00101011100110110000000000001000 +00110111100111000000000011011000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +01111000000001000000000000000001 +01111000000001010000000000000001 +00111000011000111000111100111100 +00111000100001001000111101000000 +00111000101001011000111101010000 +00100000010011100000000011111111 +01111000000010110000000000000001 +00101000011000100000000000000000 +00101000100000110000000000000000 +00101000101001000000000000000000 +00111001011010111010100110001000 +10111000001000000110100000000000 +10111001011000000000100000000000 +11111000000000000000111010101110 +00110100000011001111111111111111 +01001000000000010000000000100100 +01000101110000000000000000010010 +00101001011000110000000001110000 +00110100000000100000000000000000 +10111001011000000000100000000000 +11111000000000000000111101000010 +00101001101000100000000000000000 +01111000000000011000000000000000 +00110111100000110000000000011000 +10111000010000010000100000000000 +01011011100000010000000000011000 +00110100000000100000000000000000 +10111001011000000000100000000000 +00110100000001000000000000000100 +11111000000000000000111100001101 +01111100001000010000000000000100 +11001000000000010110000000000000 +00111001100011000000000000000001 +11100000000000000000000000001111 +00110100000000100000000000000000 +10111001011000000000100000000000 +00110111100000110000000000011000 +00110100000001000000000000000100 +11111000000000000000111011011000 +00110100000000100000000000000100 +01011100001000100000000000001000 +01111000000000100000000000000001 +00111000010000101000111011010100 +00101011100011000000000000011000 +00101000010000010000000000000000 +10100001100000010000100000000000 +00000001100011000000000000011111 +01011001101000010000000000000000 +01111000000000010000000000000001 +00111000001000011010100110001000 +11111000000000000000111010111001 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +01111000000001000000000000000001 +01111000000001010000000000000001 +00111000011000111000111100111100 +00111000100001001000111101000000 +00111000101001011000111101010100 +00101000011000100000000000000000 +01111000000010110000000000000001 +00101000100000110000000000000000 +00101000101001000000000000000000 +00111001011010111010100110001000 +10111001011000000000100000000000 +11111000000000000000111001110000 +10111000001000000001000000000000 +00110100000000011111111111111111 +01001000000000100000000000001110 +00101001011000110000000001110000 +10111001011000000000100000000000 +00110100000000100000000000000000 +11111000000000000000111100000100 +10111000001000000110000000000000 +00101001011000010000000001110000 +01011101100000010000000000000010 +00110100000011000000000000000001 +01111000000000010000000000000001 +00111000001000011010100110001000 +11111000000000000000111010010010 +01111101100000010000000000000001 +11001000000000010000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111011100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +01111000000001000000000000000001 +01111000000001010000000000000001 +00111000011000111000111100111100 +00111000100001001000111101000000 +00111000101001011000111101010100 +00101000011000100000000000000000 +01111000000011000000000000000001 +00101000100000110000000000000000 +00101000101001000000000000000000 +10111000001000000110100000000000 +00111001100011001010100110001000 +00110100000000010000000000100000 +00110011100000010000000000100111 +10111001100000000000100000000000 +11111000000000000000111001000011 +00110100000010111111111111111111 +01001000000000010000000001010001 +00001111100000000000000000100100 +00110111100011100000000000100110 +00110100000010110000000011111111 +11100000000000000000000000000110 +01000011100000010000000000100110 +01000100001010110000000000001100 +00101111100000010000000000100100 +00110100001000010000000000000001 +00001111100000010000000000100100 +00101111100000100000000000100100 +10111001100000000000100000000000 +10111001110000000001100000000000 +00110100010000100000000000000010 +00110100000001000000000000000001 +11111000000000000000111001110101 +00110100000000100000000000000001 +01000100001000101111111111110100 +00101111100000010000000000100100 +00110100000000100000000100000000 +01010000010000010000000000000010 +00001111100000000000000000100100 +01111000000011000000000000000001 +10111001101000000101100000000000 +00111001100011001010100110001000 +00110100000100000000000000001010 +00110100000011110000000000100000 +00110111100011100000000000100111 +11100000000000000000000000011110 +11111000000000000001000100010010 +00101111100000100000000000100100 +00101001011000110000000000000100 +10111000001000000110100000000000 +00110100010000100000000000000010 +10111001100000000000100000000000 +10111001101000000010000000000000 +11111000000000000000111010001100 +01011100001011010000000000101000 +00101111100000100000000000100100 +10110100001000100000100000000000 +00100000001000101111111111111111 +00101001011000010000000000001000 +00001111100000100000000000100100 +01000100001000000000000000000011 +00110011100011110000000000100111 +11100000000000000000000000000010 +00110011100100000000000000100111 +00110100010000100000000000000010 +10111001100000000000100000000000 +10111001110000000001100000000000 +00110100000001000000000000000001 +11111000000000000000111001111101 +00110100000000100000000000000001 +00110101011010110000000000000100 +01011100001000100000000000010111 +00101111100000010000000000100100 +00110100001000010000000000000001 +00001111100000010000000000100100 +00101001011000010000000000000100 +01011100001000001111111111100010 +10111001100000000000100000000000 +00110100000000100000000000000000 +00110111100000110000000000100100 +00110100000001000000000000000010 +11111000000000000000111001110000 +10111000001000000110100000000000 +00110100000000010000000000000010 +00110100000010111111111111111111 +01011101101000010000000000001010 +10111001100000000000100000000000 +00110100000000100000000000000000 +00110111100000110000000000100010 +00110100000001000000000000000010 +11111000000000000000111000111011 +11100100001011010101100000000000 +00110101011010111111111111111111 +11100000000000000000000000000010 +00110100000010111111111111111111 +01111000000000010000000000000001 +00111000001000011010100110001000 +11111000000000000000111000100001 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000100100 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +01111000000001000000000000000001 +01111000000001010000000000000001 +00111000011000111000111100111100 +00111000100001001000111101000000 +00111000101001011000111101010100 +00101000011000100000000000000000 +01111000000011000000000000000001 +00101000100000110000000000000000 +00101000101001000000000000000000 +00111001100011001010100110001000 +10111001100000000000100000000000 +11111000000000000000110111010011 +00110100000011011111111111111111 +01001000000000010000000000100010 +01111000000000010000000000000001 +00111000001000011000110000001000 +01111000000011010000000000000001 +11111011111111111110111111001111 +00110100000010110000000000000000 +00110111100011110000000000011111 +00110100000011100000000011111111 +00111001101011010111111111101000 +00110101011000100000000000000010 +10111001100000000000100000000000 +10111001111000000001100000000000 +00110100000001000000000000000001 +11111000000000000000111000000111 +00110100000000100000000000000001 +01011100001000100000000000001111 +01000011100000100000000000011111 +01000100010011100000000000000101 +10111001101000000000100000000000 +00110101011010110000000000000001 +11111011111111111110111110111111 +00100001011010111111111111111111 +01000011100000010000000000011111 +01011100001011101111111111110010 +00110100000011010000000000000000 +01011101011000000000000000000110 +01111000000000010000000000000001 +00111000001000011000000000101100 +11111011111111111110111110110111 +11100000000000000000000000000010 +00110100000011011111111111111111 +01111000000000010000000000000001 +00111000001000011010100110001000 +11111000000000000000110111100000 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000001 +10111000001000000110100000000000 +00100000011011000000000011111111 +10111000100000000000100000000000 +01111000000000110000000000000001 +01111000000001000000000000000001 +01111000000001010000000000000001 +00111000011000111000111100111100 +00111000100001001000111101000000 +00111000101001011000111101010100 +00100000010100010000000011111111 +00101000011000100000000000000000 +00101000100000110000000000000000 +00101000101001000000000000000000 +00111000001000011010100110001000 +00110100000010111111111111111111 +11111000000000000000110110001101 +01001000000000010000000000100010 +01011101100000000000000000000101 +01111000000000110000000000000001 +00111000011000111011111110000000 +00110100000000010000000000000010 +00001100011000010000000000000000 +01111000000011000000000000000001 +01111000000011100000000000000001 +00110100000010110000000000000000 +00111001100011001011111110000000 +00111001110011101010100110001000 +00110100000100000000000011111111 +00110100000011110000000000001010 +00101101100000100000000000000000 +00110100010000011111111111111110 +01010100001100010000000000001111 +00110100010000010000000000000001 +00001101100000010000000000000000 +10111001101000000001100000000000 +10111001110000000000100000000000 +00110100000001000000000000000001 +11111000000000000000110110111010 +00110100000000100000000000000001 +01011100001000100000000000000111 +01000001101000010000000000000000 +01000100001100000000000000000110 +00110101011010110000000000000001 +00110101101011010000000000000001 +01011100001011111111111111110001 +11100000000000000000000000000010 +00110100000010111111111111111111 +01111000000000010000000000000001 +00111000001000011010100110001000 +11111000000000000000110110011011 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111011111110100100 +01111000000000100000000000000001 +01111000000000110000000000000001 +10111001011000000000100000000000 +00111000010000101011111110110000 +00111000011000111011111110101100 +11111011111111111111010100100011 +00101001011000010000000000000000 +01011100001000000000000000000111 +00101001011000100000000000001000 +01011100010000010000000000000101 +01111000000000010000000000000001 +01011001011000000000000000000100 +01011001011000010000000000001000 +11100000000000000000000000000101 +01111000000000010000000000000001 +00111000001000011011111110100100 +00110100000000100000000000000001 +01011000001000100000000000000100 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000011000000111000000000000 +00100000100011010000000011111111 +01100100011000110000000000000000 +01100100001001000000000000000000 +10111000010000000110000000000000 +10100000100000110001100000000000 +00110100000010111111111111101010 +01011100011000000000000000101011 +01000100100000110000000000001000 +01111000000000010000000000000001 +00111000001000011000110000100100 +11111011111111111110111100110100 +00001001110000100000000000000101 +10111001100000000000100000000000 +11111011111111111111100010010110 +11100000000000000000000000010010 +00110100000000110000000000000001 +01011100001000110000000000010010 +01111000000000010000000000000001 +10111001101000000001000000000000 +10111001100000000001100000000000 +00111000001000011000110000111100 +11111011111111111110111100101001 +01111000000001010000000000000001 +01111000000000010000000000000001 +00111000101001011011111101111000 +00111000001000011010100110001000 +01011000101000000000000000000000 +01011000101011010000000000000100 +01011000001001010000000000000100 +10111001100000000001000000000000 +00110100000000110000000101000000 +11111011111111111111101010010001 +00110100000010110000000000000000 +11100000000000000000000000010000 +00110100000000110000000000000010 +00110100000010110000000000000000 +01011100001000110000000000001101 +01111000000000010000000000000001 +00111000001000011000110001011100 +11111011111111111110111100010111 +01111000000000010000000000000001 +01111000000001000000000000000001 +00111000001000011010100110001000 +00111000100001001100000111110000 +01011000001001000000000000000100 +10111001100000000001000000000000 +10111000100000000000100000000000 +00110100000000110000000101000000 +11111000000000000000010010000100 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111110111100 +01011011100010110000000000101100 +01011011100011000000000000101000 +01011011100011010000000000100100 +01011011100011100000000000100000 +01011011100011110000000000011100 +01011011100100000000000000011000 +01011011100100010000000000010100 +01011011100100100000000000010000 +01011011100100110000000000001100 +01011011100101000000000000001000 +01011011100111010000000000000100 +10111000001000000110100000000000 +10111000010000000101100000000000 +10111000011000000111000000000000 +00110100000000100000000000000000 +00110111100000010000000000110000 +00110100000000110000000000010011 +00100000100100000000000011111111 +11111000000000000000111100101000 +01100101110000100000000000000000 +01100101011000010000000000000000 +01100101101100100000000000000000 +10111000010000010000100000000000 +01111000000011000000000000000001 +10100010010000010000100000000000 +00111001100011001010110000111100 +01011100001000000000000010001011 +11001000000011100001000000000000 +00110101110000010000000100111111 +10100000010000010000100000000000 +10110100001010110000100000000000 +10111001100000000111100000000000 +00110101100001110000000100000000 +10111001100000000010100000000000 +00110101110001101111111111111111 +00101000101001000000000001010100 +00101000101000110000000001001100 +01011000101000010000000001001100 +11001000100000110001100000000000 +00010100001001000000000000011111 +01011000101001000000000001001000 +10110100001000110010000000000000 +01011000101001000000000001010100 +00110100011000110000000000000001 +00010100100001000000000000011111 +10110100011000010000100000000000 +01011000101001000000000001010000 +10110100110000010000100000000000 +00110100101001010000000001000000 +10100000001000100000100000000000 +01011100101001111111111111110001 +01111000000000010000000000000001 +00111000001000011010110000111100 +01011000001000000000000000001000 +01011000001010110000000000001100 +00101001100000100000000100010000 +01111000000100010000000000000001 +00110101111101000000000101000000 +01011000001000100000000000010000 +00101001100000100000000100010100 +00110111100100110000000000110000 +10111001111000000110000000000000 +01011000001000100000000000010100 +00111010001100011000110001111100 +00110101100000100000000000101100 +00110100000000110000000000010010 +10111010011000000000100000000000 +11111000000000000001000000101001 +00101001100000110000000000001100 +00101001100001000000000000010100 +10111010001000000000100000000000 +10111010011000000001000000000000 +00110101100011000000000001000000 +11111011111111111110111010111011 +01011101100101001111111111110110 +01000110010000000000000000010001 +01111000000000010000000000000001 +10111001011000000001000000000000 +00111000001000011000110010100000 +11111011111111111110111010110101 +00001001110000100000000000000101 +10111001011000000000100000000000 +00110100000011000000000000000000 +11111011111111111111100000010110 +00110100000011100000000101000000 +10110101100010110000100000000000 +10110101111011000001000000000000 +00110100000000110000000001000000 +00110101100011000000000001000000 +11111011111111111111100000111000 +01011101100011101111111111111011 +11100000000000000000000001000110 +00110100000000010000000000000001 +01011101101000010000000000100010 +00110100000000010000000000000000 +10111010000000000001000000000000 +11111011111111111111001011000101 +01011100001000000000000000000100 +01111000000000010000000000000001 +00111000001000011000110011000100 +11100000000000000000000000101010 +01111000000011100000000000000001 +00111001110011101011111101111000 +01111000000000010000000000000001 +01011001110100000000000000000100 +10111010000000000001000000000000 +01011001110000000000000000000000 +10111001011000000001100000000000 +00111000001000011000110011011100 +01111000000011000000000000000001 +11111011111111111110111010010110 +00111001100011001010100110001000 +01011001100011100000000000000100 +10111001100000000000100000000000 +10111001011000000001000000000000 +00110100000000110000000101000000 +11111011111111111111101000000010 +00110100000011100000000000000000 +00110100000100000000000101000000 +10110101110010110001000000000000 +10110101111011100001100000000000 +10111001100000000000100000000000 +00110100000001000000000001000000 +00110101110011100000000001000000 +11111011111111111111101000110000 +01011101110100001111111111111010 +11100000000000000000000000100011 +00110100000000010000000000000010 +01011101101000010000000000100001 +01111000000011000000000000000001 +01111000000000010000000000000001 +00111000001000011100000111110000 +00111001100011001010100110001000 +00110100000000100000000000000000 +01011001100000010000000000000100 +00110111100000110000000001000100 +00110100000001000000000000000100 +11111000000000000000001111001001 +00110100000000100000000000000100 +01000100001000100000000000000101 +01111000000000010000000000000001 +00111000001000011000110100001100 +11111011111111111110111001110110 +11100000000000000000000000010110 +01111000000000010000000000000001 +10111001011000000001000000000000 +00111000001000011000110100101000 +11111011111111111110111001110001 +00101001100000010000000000000100 +10111001011000000001000000000000 +00110100000000110000000101000000 +11111000000000000000001111100011 +00110100000011100000000000000000 +00110100000100000000000101000000 +00101001100000010000000000000100 +10110101110010110001000000000000 +10110101111011100001100000000000 +00110100000001000000000001000000 +00110101110011100000000001000000 +11111000000000000000001111000111 +01011101110100001111111111111010 +00110100000000010000000000000000 +00110100000000100000000001010000 +11111011111111111111101100000110 +11100000000000000000000000000010 +00110100000011011111111111101010 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000101100 +00101011100011000000000000101000 +00101011100011010000000000100100 +00101011100011100000000000100000 +00101011100011110000000000011100 +00101011100100000000000000011000 +00101011100100010000000000010100 +00101011100100100000000000010000 +00101011100100110000000000001100 +00101011100101000000000000001000 +00110111100111000000000001000100 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +10111000001000000111100000000000 +10111000010000000111000000000000 +00110100000011010000000000001000 +00110100000011000000000000000001 +00111001011010111010101001000000 +10100001100011100001100000000000 +00101001011001000000000000001000 +01111100011000100000000000000000 +10111001111000000000100000000000 +00110101101011011111111111111111 +11011000100000000000000000000000 +00111101100011000000000000000001 +01011101101000001111111111111001 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +10111000001000000111100000000000 +00110100000011100000000000001000 +00110100000011000000000000000000 +00110100000011010000000000000001 +00111001011010111010101001000000 +00101001011000100000000000000100 +10111001111000000000100000000000 +00110101110011101111111111111111 +11011000010000000000000000000000 +01111100001000100000000000000000 +11001000000000100001000000000000 +10100001101000100001000000000000 +10111001100000100110000000000000 +00111101101011010000000000000001 +01011101110000001111111111110111 +00110100000000010000000001100100 +11111011111111111110001001011000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111000000 +01011011100010110000000001000000 +01011011100011000000000000111100 +01011011100011010000000000111000 +01011011100011100000000000110100 +01011011100011110000000000110000 +01011011100100000000000000101100 +01011011100100010000000000101000 +01011011100100100000000000100100 +01011011100100110000000000100000 +01011011100101000000000000011100 +01011011100101010000000000011000 +01011011100101100000000000010100 +01011011100101110000000000010000 +01011011100110000000000000001100 +01011011100110010000000000001000 +01011011100111010000000000000100 +00110100000000100000000000000000 +10111000001000000110000000000000 +00110100000000110000000010000000 +00110100001000010000000000001000 +01111000000011010000000000000001 +11111000000000000000111000110001 +00111001101011011010101001000000 +00101001101000010000000000000000 +00110100000011110000000000000000 +01000100001000000000000001100001 +10111001100000000101100000000000 +00110100000100100000000000000000 +00110100000100010000000000000000 +01111000000110010100000000000000 +00110100000101100000000000000001 +00110100000110000000000000001000 +01011001011011000000000000001000 +01000101111000000000000000100010 +00101001011000010000000000000000 +01111000000000101000000000000000 +00110100000000110000000000000000 +01011001011000010000000000010000 +00101001011000010000000000000100 +01011001011000010000000000010100 +10100000010110010000100000000000 +01000100001000000000000000000011 +01111000000000100100000000000000 +00110100000000110000000000000000 +10100000011100010000100000000000 +10100000010100100010100000000000 +10111000101000010010100000000000 +00101001011001000000000000010000 +00101001011000010000000000010100 +01011100101000000000000000001110 +10100100011000000011000000000000 +10100000001001100000100000000000 +01011001011000010000000000010100 +00000000011000110000000000000001 +00111100010000010000000000011111 +10100100010000000011100000000000 +00000000010000100000000000000001 +10100000100001110010000000000000 +10111000001000110001100000000000 +01011001011001000000000000010000 +10111000010000110000100000000000 +01011100001001011111111111101011 +11100000000000000000000000111100 +10111000100000100001000000000000 +10111000001000110001100000000000 +01011001011000100000000000010000 +01011001011000110000000000010100 +00110101111011100000000000000001 +00101001101000100000000000000000 +00111101110011100000000000000100 +10111001100000000000100000000000 +10110101100011100111000000000000 +11011000010000000000000000000000 +01011100001101100000000000110001 +10111001100000000000100000000000 +00110100000000100000000011110000 +11111011111111111111111101110100 +00110100000101000000000001000000 +00110100000100110000000000000000 +00110100000100000000000000000001 +00110100000100100000000000000000 +00110100000100010000000000000000 +00101001101000100000000000000100 +10111001100000000000100000000000 +00101001110101110000000000000100 +11011000010000000000000000000000 +00101001101000100000000000000100 +10111000001000001010100000000000 +10111001100000000000100000000000 +10100010111100001011100000000000 +11011000010000000000000000000000 +01000110101000010000000000001000 +00101001101000110000000000001000 +10111010101000000001000000000000 +01111110101101010000000000000000 +10111001100000000000100000000000 +11011000011000000000000000000000 +01011110101101100000000000010001 +11100000000000000000000000000111 +00101001101000110000000000001000 +10111001100000000000100000000000 +10111010111000000001000000000000 +11011000011000000000000000000000 +01000110111000000000000000001001 +11100000000000000000000000001010 +00101001110000010000000000000000 +10111000001100110000100000000000 +01011001110000010000000000000000 +00101001110000010000000000000100 +10111000001100000000100000000000 +01011001110000010000000000000100 +11100000000000000000000000000011 +10111010010100111001000000000000 +10111010001100001000100000000000 +00111110000000010000000000000001 +00111110011100110000000000000001 +11110110000000011000000000000000 +00110110100101001111111111111111 +10110110000100111001100000000000 +10111000001000001000000000000000 +01011110100000001111111111011010 +11100000000000000000000000010100 +10111001111000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000001000000 +00101011100011000000000000111100 +00101011100011010000000000111000 +00101011100011100000000000110100 +00101011100011110000000000110000 +00101011100100000000000000101100 +00101011100100010000000000101000 +00101011100100100000000000100100 +00101011100100110000000000100000 +00101011100101000000000000011100 +00101011100101010000000000011000 +00101011100101100000000000010100 +00101011100101110000000000010000 +00101011100110000000000000001100 +00101011100110010000000000001000 +00110111100111000000000001000000 +11000011101000000000000000000000 +00110101111011110000000000000001 +00110101011010110000000000010000 +01011101111110001111111110010001 +11100011111111111111111111101010 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +01111000000000010000000000000001 +00111000001000011010101001000000 +00101000001000100000000000000000 +00101001011000010000000000000000 +00110100000011000000000000000000 +00110100000011010000000001000000 +11011000010000000000000000000000 +00101001011000010000000000000000 +00110100000000100000000001010101 +11111011111111111111111100100000 +00101001011000010000000000001000 +00101001011000100000000000001100 +10111001100000000001100000000000 +00110101100011000000000000001000 +11111000000000000000110001001000 +00101001011000010000000000000000 +11111011111111111111111100011001 +01011101100011011111111111111001 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101000001000010000000000000000 +01111000000000100000000000000001 +00111000010000101100001001111000 +00101000010000100000000000000000 +00111100001000010000000000001000 +00111000001000010000000000001010 +01011000010000010000000000000000 +00101000010000010000000000000000 +00100000001000110000000000001000 +01011100011000001111111111111110 +00100000001000010000000000000001 +00011000001000010000000000000001 +11000011101000000000000000000000 +00101000001000010000000000000000 +01111000000000100000000000000001 +00111000010000101100001001111000 +00101000010000100000000000000000 +00111100001000010000000000001000 +00111000001000010000000000001001 +01011000010000010000000000000000 +00101000010000010000000000000000 +00100000001000110000000000001000 +01011100011000001111111111111110 +00100000001000010000000000000001 +11000011101000000000000000000000 +00101000001000010000000000000000 +01111000000000110000000000000001 +00111000011000111100001001111000 +00111100001000010000000000001000 +00101000011000110000000000000000 +01111100010000100000000000000000 +00111000001000010000000000001000 +10111000001000100001000000000000 +01011000011000100000000000000000 +00101000011000010000000000000000 +00100000001000010000000000001000 +01011100001000001111111111111110 +11000011101000000000000000000000 +01111000000000010000000000000001 +01111000000000110000000000000001 +00111000001000011100001001111000 +00111000011000111000111101011000 +00101000001000010000000000000000 +00101000011000100000000000000000 +01011000001000100000000000000100 +11000011101000000000000000000000 +00110111100111001111111111000100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +00101000001000010000000000000000 +00110100000010111111111111111111 +01000100001000000000000000101010 +00101001100000100000000000000100 +01000100010000000000000000101000 +11111011111111111110000100010110 +01111000000011100000000000000001 +10111000001000000110100000000000 +00110100000010110000000000000000 +00110100000100000000000000011111 +00110111100011110000000000100000 +00111001110011101000110101011100 +11100000000000000000000000001011 +11111011111111111110000100001110 +00100000001001000000000011111111 +10110101011011010001000000000000 +10110101111010110000100000000000 +00110000001001000000000000000000 +10111000010000000001100000000000 +10111001110000000000100000000000 +10111000100000000010100000000000 +11111011111111111110110100010101 +00110101011010110000000000000001 +00101001100000010000000000000100 +11101110000010110001100000000000 +00110101100011000000000000000100 +01111100001000100000000000000000 +10100000011000100001000000000000 +01011100010000001111111111110001 +01111000000000010000000000000001 +10111001011000000010000000000000 +10111001101000000001000000000000 +10111001111000000001100000000000 +00111000001000011100000111110000 +11111000000000000000001001101010 +10111000001000000110000000000000 +10111001011000000001100000000000 +01111000000000010000000000000001 +11111101100010110101100000000000 +00111000001000011000110110000000 +10111001101000000001000000000000 +10111001100000000010000000000000 +11111011111111111110110100000000 +11001000000010110101100000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000111100 +11000011101000000000000000000000 +00110111100111001111111111001000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +00110100000001011111111111111111 +01000100001000000000000000101100 +00101001011000100000000000000100 +01000100010000000000000000101010 +11111011111111111110000011011000 +10111000001000000111000000000000 +00101001011000010000000000000100 +11111011111111111110000011010101 +10111000001000000101100000000000 +00110100000000010000000000100000 +01001100001010110000000000000010 +00110100000010110000000000100000 +00110111100011010000000000011100 +01111000000000010000000000000001 +10111001011000000010000000000000 +10111001110000000001000000000000 +10111001101000000001100000000000 +00111000001000011100000111110000 +11111000000000000000001000100111 +10111000001000000110000000000000 +01111000000000010000000000000001 +10111001011000000001100000000000 +00111000001000011000110110100000 +10111001110000000001000000000000 +10111001100000000010000000000000 +11111011111111111110110011010010 +11101001100010110101100000000000 +11101100000011000000100000000000 +00110100000001011111111111111111 +10111001011000010101100000000000 +01011101011000000000000000001111 +10111001101000000111100000000000 +01111000000011010000000000000001 +00111001101011011000110101011100 +10110101111010110000100000000000 +01000000001001000000000000000000 +10110101011011100001000000000000 +10111001101000000000100000000000 +10111000010000000001100000000000 +10111000100000000010100000000000 +00110101011010110000000000000001 +11111011111111111110110011000010 +01001001100010111111111111111000 +11111101100010110010100000000000 +11001000000001010010100000000000 +10111000101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000111000 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +01111000000011010000000000000001 +00111001101011011100000111110000 +10111001101000000000100000000000 +01111000000010110000000000000001 +01111000000011110000000000000001 +01111000000011100000000000000001 +11111011111111111111111010010110 +00111001011010111100001000000000 +00110100000011000000000000000000 +00111001111011111000110111000000 +00111001110011101000110111011000 +00110100000100000000000000001000 +00101001011000110000000000000000 +00101001011001000000000000000100 +10111000011001000000100000000000 +01000100001000000000000000010000 +10111001100000000001000000000000 +10111001111000000000100000000000 +11111011111111111110110010011011 +00111101100000010000000000000100 +00110100000000100000000000000000 +00110100001000010000000000001000 +10110101101000010000100000000000 +11111000000000000000000000010101 +00100000001000111111111111111111 +00001000011000110010011100010000 +10111000001000000001000000000000 +00010100010000100000000000010000 +00010100011000110000000000010000 +10111001110000000000100000000000 +11111011111111111110110010001111 +00110101100011000000000000000001 +00110101011010110000000000010000 +01011101100100001111111111101011 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01000000001011010000000000001111 +10111000001000000110000000000000 +00110100000000010000000000101000 +10111000010000000111000000000000 +01000101101000010000000000000101 +00110100000000010000000001000010 +01000101101000010000000000000011 +00110100000000010000000000010000 +01011101101000010000000000110100 +00100001110010110000000000000010 +01011101011000000000000000001111 +10111001100000000000100000000000 +11111011111111111111111011110000 +00101001100000010000000000000000 +00110100000000100000000001000100 +00100001110011100000000000000001 +11111011111111111111111000011011 +00110100000000010000000000000000 +01011101110010110000000000101101 +01111000000010110000000000000001 +00111001011010111010101001000000 +00101001011000100000000000000100 +00101001100000010000000000000000 +11011000010000000000000000000000 +01000100001000001111111111111101 +10111001100000000000100000000000 +11111011111111111111111011100010 +00101001100000010000000000000000 +01111000000010110000000000000001 +00110100000000100000000010111110 +00111001011010111011111110000100 +11111011111111111111111000001100 +00110101011011100000000000001000 +11100000000000000000000000000101 +00101001100000010000000000000000 +11111011111111111111111000100101 +00110001011000010000000000000000 +00110101011010110000000000000001 +01011101011011101111111111111100 +01111000000000100000000000000001 +00111000010000101011111110000100 +01000000010000010000000000000001 +01000000010000110000000000000000 +00111100001000010000000000001000 +10111000001000110000100000000000 +00110100000000110000000000101000 +11011100001000000000100000000000 +01000101101000110000000000001011 +00110100000000110000000001000010 +01000101101000110000000000001001 +00110100000000110000000000010000 +01011101101000110000000000001011 +01000000010000100000000000000110 +00111100001000010000000000001111 +00111100010000100000000000001100 +00110100001000011100000000000000 +10111000001000100000100000000000 +11100000000000000000000000000110 +00111100001000010000000000001100 +11100000000000000000000000000100 +01111000000000011000000000000000 +11100000000000000000000000000010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000110000000000000000 +10111000001000000010000000000000 +00110100000010010000000000101000 +00110100000010000000000001000010 +00110100000001110000000000010000 +00110100000001100000000000001000 +01000000100001010000000000010111 +01000100101010010000000000000011 +01000100101010000000000000000010 +01011100101001110000000000000110 +00111100011000110000000000000100 +00110100011000110000000000001000 +10110100001000110000100000000000 +11111011111111111111111110100101 +11100000000000000000000000000101 +00110100011000110000000000000001 +00110100100001000000000000010000 +01011100011001101111111111110101 +01111000000000011000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000001000000000000000 +10111000011000000110000000000000 +11111011111111111111111010010010 +00101001011000010000000000000000 +00110100000000100000000000001111 +00100010000011100000000011111111 +11111011111111111111110110111101 +00101001011000010000000000000000 +10111001110000000001000000000000 +00100010000100001111111100000000 +11111011111111111111110110111001 +00010110000100000000000000001000 +00101001011000010000000000000000 +10111010000000000001000000000000 +00110100000011010000000000000000 +11111011111111111111110110110100 +11100000000000000000000000000101 +00101001011000010000000000000000 +00110100000000100000000011111111 +00110101101011010000000000000001 +11111011111111111111110110101111 +01001001100011011111111111111100 +10111001011000000000100000000000 +11111011111111111111111001111101 +00101001011000010000000000000000 +00110100000000100000000010101010 +11111011111111111111110110101001 +00101001011000010000000000000000 +11111011111111111111110111000100 +10111000001000000111100000000000 +01011100001011100000000000100001 +00101001011000010000000000000000 +11111011111111111111110111000000 +10111000001000000111000000000000 +01011100001100000000000000011111 +00101001011000010000000000000000 +00110100000011010000000000000000 +00110100000100010000000011111111 +11111011111111111111110110111010 +10111000001000001000000000000000 +11100000000000000000000000000101 +00101001011000010000000000000000 +11111011111111111111110110110110 +01011100001100010000000000011000 +00110101101011010000000000000001 +01001001100011011111111111111100 +10111001011000000000100000000000 +11111011111111111111111001100101 +00101001011000010000000000000000 +00110100000000100000000001010101 +11111011111111111111110110010001 +00101001011000010000000000000000 +10111001111000000001000000000000 +11111011111111111111110110001110 +00101001011000010000000000000000 +10111001110000000001000000000000 +11111011111111111111110110001011 +00101001011000010000000000000000 +10111010000000000001000000000000 +11111011111111111111110110001000 +00110100000000010010011100010000 +11111011111111111110000000010011 +11100000000000000000000000000110 +00110100000011001111111111111111 +11100000000000000000000000000100 +00110100000011001111111111111110 +11100000000000000000000000000010 +00110100000011001111111111111101 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000001000100000000000 +10111000011000001000000000000000 +10111000100000000110000000000000 +11111011111111111111111000111000 +00101001011000010000000000000000 +00110100000000100000000000001111 +00100010001011100000000011111111 +11111011111111111111110101100011 +00101001011000010000000000000000 +10111001110000000001000000000000 +00100010001100011111111100000000 +11111011111111111111110101011111 +00010110001100010000000000001000 +00101001011000010000000000000000 +10111010001000000001000000000000 +00110100000011010000000000000000 +11111011111111111111110101011010 +11100000000000000000000000000110 +10110110000011010001000000000000 +00101001011000010000000000000000 +01000000010000100000000000000000 +00110101101011010000000000000001 +11111011111111111111110101010100 +01001001100011011111111111111011 +10111001011000000000100000000000 +11111011111111111111111000100010 +00101001011000010000000000000000 +00110100000000100000000010101010 +11111011111111111111110101001110 +00101001011000010000000000000000 +11111011111111111111110101101001 +10111000001000000111100000000000 +01011100001011100000000000100010 +00101001011000010000000000000000 +11111011111111111111110101100101 +10111000001000000111000000000000 +01011100001100010000000000100000 +00101001011000010000000000000000 +00110100000011010000000000000000 +11111011111111111111110101100000 +10111000001000001000100000000000 +11100000000000000000000000000111 +00101001011000010000000000000000 +11111011111111111111110101011100 +10110110000011010001000000000000 +01000000010000100000000000000000 +01011100001000100000000000011000 +00110101101011010000000000000001 +01001001100011011111111111111010 +10111001011000000000100000000000 +11111011111111111111111000001001 +00101001011000010000000000000000 +00110100000000100000000001010101 +11111011111111111111110100110101 +00101001011000010000000000000000 +10111001111000000001000000000000 +11111011111111111111110100110010 +00101001011000010000000000000000 +10111001110000000001000000000000 +11111011111111111111110100101111 +00101001011000010000000000000000 +10111010001000000001000000000000 +11111011111111111111110100101100 +00110100000000010010011100010000 +11111011111111111101111110110111 +11100000000000000000000000000110 +00110100000011001111111111111111 +11100000000000000000000000000100 +00110100000011001111111111111110 +11100000000000000000000000000010 +00110100000011001111111111111101 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +10111000001000001000000000000000 +00100000010000010000000000011111 +10111000010000000101100000000000 +10111000011000000111000000000000 +10111000100000000110000000000000 +00110100000011010000000000000000 +01000100001000000000000000110000 +00110100010000011111111111111111 +10110100001001000000100000000000 +00010100001000100000000000011111 +10111000100000000111100000000000 +00000000010000100000000000011011 +10110100010000010000100000000000 +00010101011000100000000000011111 +00010100001000010000000000000101 +00000000010000100000000000011011 +10110100010010110001000000000000 +00010100010000100000000000000101 +01000100001000100000000000001100 +01111000000000010000000000000001 +00111000001000011000111101011100 +00101000001000100000000000000000 +10100001011000100001000000000000 +01001100010000000000000000000101 +00110100010000101111111111111111 +00110100000000011111111111100000 +10111000010000010001000000000000 +00110100010000100000000000000001 +00110100000011110000000000100000 +11001001111000100111100000000000 +10111010000000000000100000000000 +10111001011000000001000000000000 +10111001110000000001100000000000 +10111001111000000010000000000000 +11111011111111111111111101111010 +10111000001000000110100000000000 +01001000000000010000000000010110 +10110101110011110111000000000000 +10110101011011110101100000000000 +11001001100011110110000000000000 +11100000000000000000000000001110 +10111001100000000010000000000000 +01001101111011000000000000000010 +00110100000001000000000000100000 +10111010000000000000100000000000 +10111001011000000001000000000000 +10111001110000000001100000000000 +11111011111111111111111101101101 +01001000000000010000000000001001 +10110101101000010110100000000000 +00110101110011100000000000100000 +00110101011010110000000000100000 +00110101100011001111111111100000 +11100000000000000000000000000010 +00110100000011110000000000100000 +01001001100000001111111111110010 +11100000000000000000000000000010 +10111000001000000110100000000000 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +10111000001000000110000000000000 +10111000011000000111000000000000 +10111000100000000110100000000000 +11111011111111111111110110010011 +00101001100000010000000000000000 +00110100000000100000000011110000 +11111011111111111111110010111111 +00101001100000010000000000000000 +00100001011000100000000011111111 +11111011111111111111110010111100 +00100001011000101111111100000000 +00101001100000010000000000000000 +00000000010000100000000000001000 +00110100000010110000000000000000 +11111011111111111111110010110111 +11100000000000000000000000000110 +00101001100000010000000000000000 +11111011111111111111110011010001 +10110101110010110001000000000000 +00110000010000010000000000000000 +00110101011010110000000000000001 +01001001101010111111111111111011 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +10111000001000000111100000000000 +00100000010000010000000000011111 +10111000010000000101100000000000 +10111000011000000110000000000000 +00110100000011010000000000000000 +01000100001000000000000000101100 +00110100010000011111111111111111 +10110100001000110000100000000000 +00010100001000100000000000011111 +10111000011000000111000000000000 +00000000010000100000000000011011 +10110100010000010000100000000000 +00010101011000100000000000011111 +00010100001000010000000000000101 +00000000010000100000000000011011 +10110100010010110001000000000000 +00010100010000100000000000000101 +01000100001000100000000000001100 +01111000000000010000000000000001 +00111000001000011000111101011100 +00101000001000100000000000000000 +10100001011000100001000000000000 +01001100010000000000000000000101 +00110100010000101111111111111111 +00110100000000011111111111100000 +10111000010000010001000000000000 +00110100010000100000000000000001 +00110100000011100000000000100000 +11001001110000100111000000000000 +10111001111000000000100000000000 +10111001011000000001000000000000 +10111001110000000001100000000000 +11111011111111111111111010110011 +10111000001000000110100000000000 +01001000000000010000000000010011 +10110101011011100101100000000000 +11001001100011100110000000000000 +11100000000000000000000000001100 +10111001100000000001100000000000 +01001101110011000000000000000010 +00110100000000110000000000100000 +10111001111000000000100000000000 +10111001011000000001000000000000 +11111011111111111111111010101000 +01001000000000010000000000001000 +10110101101000010110100000000000 +00110101011010110000000000100000 +00110101100011001111111111100000 +11100000000000000000000000000010 +00110100000011100000000000100000 +01001001100000001111111111110100 +11100000000000000000000000000010 +10111000001000000110100000000000 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000001010000000000000000 +10111000001000000011000000000000 +00110100000010000000000001000011 +00110100000001110000000000001000 +01000000110010010000000000010111 +01011101001010000000000000000110 +00111100101001010000000000000100 +00110100101001010000000000001000 +10110100001001010000100000000000 +11111011111111111111111110001011 +11100000000000000000000000000101 +00110100101001010000000000000001 +00110100110001100000000000010000 +01011100101001111111111111110111 +00110100000000011111111111111111 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000001010000000000000000 +10111000001000000011000000000000 +00110100000010000000000001000011 +00110100000001110000000000001000 +01000000110010010000000000010111 +01011101001010000000000000000110 +00111100101001010000000000000100 +00110100101001010000000000001000 +10110100001001010000100000000000 +11111011111111111111111100101011 +11100000000000000000000000000101 +00110100101001010000000000000001 +00110100110001100000000000010000 +01011100101001111111111111110111 +00110100000000011111111111111111 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000001000000000000000000 +10111000001000000010100000000000 +00110100000001110000000001000011 +00110100000001100000000000001000 +01000000101010000000000000010111 +01011101000001110000000000000110 +00111100100001000000000000000100 +00110100100001000000000000001000 +10110100001001000000100000000000 +11111011111111111111111110001000 +11100000000000000000000000000101 +00110100100001000000000000000001 +00110100101001010000000000010000 +01011100100001101111111111110111 +00110100000000011111111111111111 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +00111001011010111011111110010100 +00101001011000010000000000000000 +01011100001000000000000000001001 +11111011111111111111000001011010 +01111000000000100000000000000001 +00110100001000010000001111101000 +00111000010000101011111110001100 +01011000010000010000000000000000 +00101001011000010000000000000000 +00110100001000010000000000000001 +01011001011000010000000000000000 +01111000000010110000000000000001 +00111001011010111011111110010000 +00101001011011000000000000000000 +11111011111111111111000001001111 +01111000000000100000000000000001 +00111000010000101011111110001100 +00101000010001000000000000000000 +11001000001001000010100000000000 +00110100000000010000000000000000 +01001000000001010000000000011000 +00100001100000110000000000000001 +01111000000000010000000000000001 +00111100011001010000000000000010 +00111000001000011001010000101000 +10110100001001010000100000000000 +00101000001000010000000000000000 +10110100001001000010000000000000 +00101001011000010000000000000000 +01011000010001000000000000000000 +00110100000000100000000000000001 +00110100001000010000000000000001 +01011001011000010000000000000000 +01111000000000010000000000000001 +00111000001000011100000111110000 +01000100011000100000000000000011 +11111011111111111111111000011000 +11100000000000000000000000000110 +00110100000000100000000000000010 +11111011111111111111111000010101 +01111000000000100000000000000001 +00111000010000101010101001001100 +01011000010000010000000000000100 +00110100000000010000000000000001 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00101000001001010000000000001000 +00101000001001000000000000000000 +00101000001001100000000000000100 +10110100010001010001100000000000 +10001000011001000010000000000000 +01011000001000100000000000011100 +10001000010001100001000000000000 +10110100100000100001000000000000 +00101000001001000000000000001100 +00010100010000100000000000001100 +10110100010001000010000000000000 +00101000001000100000000000010100 +01001100100000100000000000000101 +00101000001001000000000000010000 +01000100100000000000000000001000 +01001100101000110000000000001011 +11100000000000000000000000000110 +00101000001000100000000000011000 +01001100010001000000000000000110 +00101000001001000000000000010000 +01000100100000000000000000000010 +01001100011001010000000000000101 +01011000001000110000000000001000 +11100000000000000000000000000011 +01011000001000110000000000001000 +10111000100000000001000000000000 +01011000001000100000000000100000 +10111000010000000000100000000000 +11000011101000000000000000000000 +00101000001000100000000000001100 +01011000001000000000000000001000 +01011000001000100000000000100000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +01011000001000000000000000010100 +10111000010000000000100000000000 +11111000000000000000100110101100 +00101001011000110000000000001100 +00101001011000100000000000000000 +01001000001000110000000000001011 +00101001011000010000000000000100 +01001100010000010000000000000011 +00110100010000100000000000000001 +01011001011000100000000000000000 +00101001011000100000000000000000 +01011100010000010000000000010001 +00110100000000010000000000000001 +01011001011000010000000000010100 +01011001011000010000000000010000 +11100000000000000000000000001110 +00101001011000010000000000001000 +01001100001000100000000000000011 +00110100010000101111111111111111 +01011001011000100000000000000000 +00101001011000100000000000000000 +01011100010000010000000000000111 +00110100000000010000000000000001 +01011001011000010000000000010100 +01011001011000000000000000000000 +01011001011000000000000000010000 +00110100000000011111111111111111 +11100000000000000000000000000010 +00101001011000010000000000010000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +01011000001000000000000000010000 +01011000001000000000000000000000 +01011000001000000000000000010100 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111100001010011000 +00101000011001000000000000000000 +01001000100000010000000000010011 +01111000000000110000000000000001 +00111000011000111011111110111000 +11001000001001000000100000000000 +01000100010000000000000000000111 +00101000011000100000000000000000 +00110100000001000000000000000001 +10111100100000010000100000000000 +00101000010000110000000000101000 +10111000001000110000100000000000 +11100000000000000000000000000111 +00101000011000100000000000000000 +00110100000001000000000000000001 +10111100100000010000100000000000 +00101000010000110000000000101000 +10100100001000000000100000000000 +10100000001000110000100000000000 +01011000010000010000000000101000 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111011111110111000 +01000100010000000000000000000111 +00101000011000100000000000000000 +00110100000001000000000000000001 +10111100100000010000100000000000 +00101000010000110000000000100100 +10111000001000110000100000000000 +11100000000000000000000000000111 +00101000011000100000000000000000 +00110100000001000000000000000001 +10111100100000010000100000000000 +00101000010000110000000000100100 +10100100001000000000100000000000 +10100000001000110000100000000000 +01011000010000010000000000100100 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101011111110111000 +00101000010000100000000000000000 +10111000001000000001100000000000 +00110100000000010000000000000000 +00101000010001000000000000001000 +00100000100001000000000000000010 +01000100100000000000000000001100 +00110100000001000000000000000010 +01011000010001000000000000001000 +01111000000001100000000000000001 +00101000010000100000000000010000 +00111000110001101000111101100000 +00101000110001000000000000000000 +00110100010001011111111110011011 +01010100101001000000000000000100 +00001000010000100000000001100100 +00110100000000010000000000000001 +01011000011000100000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +10111000001000000110000000000000 +01111000000000010000000000000001 +00111001011010111100001010011000 +00111000001000011100001010010000 +00101000001000010000000000000000 +00101001011011010000000000000000 +10110100001011010110100000000000 +00101001100000010000000000000000 +10111001101000000001000000000000 +11111000000000000000000100010000 +00101001100000010000000000000100 +00101001011000110000000000000000 +10111001101000000001000000000000 +11111000000000000000000110001111 +01011001100000000000000000001100 +01011001100000000000000000001000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +11111000000000000000000101100111 +01111000000000010000000000000001 +00111000001000011011111110111000 +00101000001000010000000000000000 +00110100000000100000000000000001 +00110100000000110000000000001001 +01011000001000100000000000000100 +01011001011000110000000000001100 +01111000000000110000000000000001 +00111000011000111000111101100100 +01011001011000100000000000001000 +00101000011000100000000000000000 +01011000001000100000000001001100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +10111000001000000001000000000000 +00101000001000010000000000000000 +00101000001000110000000001001000 +00110100000000010000000000000000 +01000100011000000000000000010110 +00101000010000110000000000000100 +00101000011000110000000000111000 +01000100011000000000000000010011 +01111000000000110000000000000001 +00111000011000111011111110111000 +00101000011000110000000000000000 +00101000011001000000000000000100 +00100000100001000000000000000100 +01000100100000000000000000001101 +00101000011000110000000000000100 +00100000011000110000000000001000 +01011100011000000000000000001010 +00101000010000100000000000001100 +00110100000000110000000000001010 +00110100000000010000000000000001 +01010100010000110000000000000110 +01111000000000010000000000000001 +00111100010000100000000000000010 +00111000001000011001010001011000 +10110100001000100000100000000000 +00101000001000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00101000001000100000000000001100 +10111000001000000101100000000000 +00110100000000010000000000001001 +00110100010000101111111111111111 +00110100000011000000000000000000 +01010100010000010000000010100101 +01111000000000010000000000000001 +00111100010000100000000000000010 +00111000001000011001010000110000 +10110100001000100000100000000000 +00101000001000010000000000000000 +11000000001000000000000000000000 +01111000000000010000000000000001 +00111000001000011011111110111000 +00101000001000010000000000000000 +00110100000011000000000000000000 +00101000001000100000000000000100 +00100000010000100000000000001000 +01011100010000000000000010011000 +00101000001000110000000000000100 +01111000000000101000000000000000 +10111000011000100001000000000000 +01011000001000100000000000000100 +00110100000000010000000000001010 +11100000000000000000000010010000 +01111000000000010000000000000001 +00111000001000011011111110111000 +00101000001000010000000000000000 +01111000000001000000000000000001 +00111000100001001000111011010100 +00101000001000110000000000000100 +00101000100000100000000000000000 +10100000011000100001000000000000 +01011000001000100000000000000100 +00101000001000100000000000000100 +00100000010000100000000000001000 +01011100010000000000000010000011 +00101000001000010000000000000100 +00110100000011000000000000000001 +00100000001000010000000000000100 +01000100001000100000000010000010 +01011001011011000000000000001100 +11100000000000000000000010000000 +00101001011000010000000000000000 +00110100000011000000000000000000 +00101000001000010000000001001000 +01000100001000000000000001111100 +11111011111111111011000110001111 +00101001011000010000000000000100 +11111000000000000000000101000110 +11111011111111111011000110010101 +00110100000000010000000000001000 +11100000000000000000000001110100 +01111000000000010000000000000001 +00111000001000011011111110111000 +00101000001000010000000000000000 +00110100000000100000000000000010 +00110100000011000000000000000000 +01011000001000100000000000001000 +00101001011000010000000000000000 +00101000001000010000000001001000 +01000100001000000000000001101101 +00101001011000010000000000000100 +00101000001000010000000000111000 +01000100001000000000000001101010 +01111000000000010000000000000001 +00111000001000011011111111001100 +00101000001000010000000000000000 +00110100000000110000000010100010 +01011000001000110000000000000000 +00110100000000110000000000000011 +01011000001000110000000000010000 +00110100000000110000000000000001 +01011000001000110000000000011100 +01011001011000100000000000001100 +11100000000000000000000001011110 +01111000000000010000000000000001 +00111000001000011011111111001100 +00101000001000010000000000000000 +00110100000011000000000000000000 +00101000001000100000000000011100 +00100000010000100000000000000001 +01000100010000000000000001011000 +00110100000000100000000000000100 +01011000001000100000000000011100 +11111011111111111110111100000001 +00110100001000010000011111010000 +01011001011000010000000000010000 +00110100000000010000000000000011 +11100000000000000000000001001111 +11111011111111111110111011111100 +00101001011000100000000000010000 +00110100000011000000000000000000 +11001000001000100000100000000000 +01001000000000010000000001001100 +00110100000000010000000000000111 +01011001011000010000000000001100 +01011001011000000000000000011100 +11100000000000000000000001000111 +00110111100000010000000000010000 +11111011111111111111111100110111 +00110100000011000000000000000000 +01000100001000000000000001000100 +01111000000000110000000000000001 +00111000011000111000111101101000 +00101000011000100000000000000000 +00101011100000010000000000010000 +11111000000000000000100000110110 +00111000000000101100001101001111 +11101000001000100001000000000000 +01100100001000010000000000000000 +10111000010000010000100000000000 +01000100001000000000000000000101 +00110100000000010000000001100100 +01011001011000010000000000010100 +00110100000000011111111110011100 +11100000000000000000000000000011 +01011001011000000000000000010100 +00110100000000010000000001100100 +01011001011000010000000000011000 +00110100000000010000000000000100 +11100000000000000000000000101111 +00101001011000010000000000000100 +00110100000011000000000000000000 +11111000000000000000000111010001 +01011100001000000000000000101101 +00110111100000010000000000010000 +11111011111111111111111100011100 +01000100001011000000000000101010 +01111000000001000000000000000001 +00111000100001001000111101101000 +00101011100000010000000000010000 +00101000100000100000000000000000 +11111000000000000000100000011100 +00101001011000100000000000010100 +01011011100000010000000000010000 +01000100001000100000000000001001 +00101001011000010000000000011100 +00101001011000100000000000011000 +10110100010000010000100000000000 +01011001011000010000000000011100 +00101001011000010000000000000100 +00101001011000100000000000011100 +11111000000000000000000110011100 +11100000000000000000000000011001 +00101001011000100000000000010100 +00110100000011000000000000000001 +01011100001000100000000000010111 +00101001011000010000000000011100 +00110100001000010111010100110000 +01011001011000010000000000011100 +00101001011000010000000000000100 +00101001011000100000000000011100 +11111000000000000000000110010010 +00110100000000010000000000000101 +01011001011000010000000000001100 +11100000000000000000000000001110 +00101001011000010000000000000100 +00110100000011000000000000000000 +11111000000000000000000110101110 +01011100001000000000000000001010 +00110100000000010000000000000110 +11100000000000000000000000000110 +10111001011000000000100000000000 +11111011111111111111111100111101 +00110100000011000000000000000000 +01011100001000000000000000000100 +00110100000000010000000000001001 +01011001011000010000000000001100 +00110100000011000000000000000001 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +01111000000001000000000000000001 +00111000100001001011111110111000 +00101000100001010000000000000000 +00110100000001000000000000000000 +01000100011000000000000000000010 +01111000000001001000000000000000 +01111000000001100000000000000001 +00111000110001101000111101101100 +00101000110000110000000000000000 +00111100001000010000000000011000 +10100000010000110001000000000000 +10111000010000010000100000000000 +10111000001001000010000000000000 +01011000101001000000000001001100 +11000011101000000000000000000000 +01111000000001000000000000000001 +00111000100001001011111110111000 +00101000100001010000000000000000 +00110100000001000000000000000000 +01000100011000000000000000000010 +01111000000001001000000000000000 +01111000000001100000000000000001 +00111000110001101000111101101100 +00101000110000110000000000000000 +00111100001000010000000000011000 +10100000010000110001000000000000 +10111000010000010000100000000000 +10111000001001000010000000000000 +01011000101001000000000001001100 +11000011101000000000000000000000 +00110100000000110000000000000101 +01011000001000110000000000101000 +00111000000000111111111111111011 +01011000001000110000000000101100 +00110100000000111111111101101010 +01011000001000110000000000011000 +00110100000000111111111111111110 +01011000001000110000000000010100 +00110100000000110000000000000001 +01011000001000110000000000100100 +00110100000000110000000011001000 +01011000001000110000000001000100 +00110100000000110010011100010000 +01011000001000110000000000111100 +00110100000000110000000001100100 +01011000001000110000000001000000 +01011000001000100000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000001100 +10111000010000000110100000000000 +00110100000011000000000000000000 +01011100011000010000000001000111 +00110100000000010000000000100010 +00110100000000110000000000000000 +11111011111111111111111111000100 +00101001011000100000000000000100 +00110100000000010000000000100101 +00110100000000110000000000000000 +11111011111111111111111111000000 +00101001011000010000000000001000 +01001100001000000000000000000100 +01011001011011010000000000000100 +01011001011011010000000000001000 +11100000000000000000000000111011 +01001101101000010000000000000101 +00101001011000100000000000000000 +01111000000000010000000001000000 +10110100010000010000100000000000 +01011001011000010000000000000000 +00101001011000110000000000000000 +01111000000001010000000000000001 +00101001011000100000000000000100 +00111000101001011000111101110000 +00101000101000010000000000000000 +10110101101000110010000000000000 +11001000100000100110000000000000 +01001000001011000000000000000110 +01111000000001010000000000000001 +00111000101001011000111101110100 +00101000101000010000000000000000 +01001001100000010000000000000010 +11100000000000000000000000000010 +10111000001000000110000000000000 +01111000000001010000000000000001 +00111000101001011000111101111000 +00101000101000010000000000000000 +01001100001001000000000000000110 +01001100001000100000000000000101 +11001000011000010001100000000000 +11001000010000010000100000000000 +01011001011000110000000000000000 +01011001011000010000000000000100 +00101001011000010000000000000100 +10111001100000000001000000000000 +01011001011011010000000000001000 +00110100001000010100000000000000 +01011001011000010000000000000100 +00110101011000010000000000010100 +11111011111111111111111000010010 +01111000000000110000000000000001 +00111000011000111011111110111000 +00101001011000100000000000010000 +10111000001000000110100000000000 +00101000011000010000000000000000 +00110100000000110000000000000000 +01011000001011010000000001000000 +00110100010000010000000000000001 +01011001011000010000000000010000 +00110100000000010000000000100110 +11111011111111111111111110001101 +00110100000000010000000000100000 +10111001101000000001000000000000 +00110100000000110000000000000000 +11111011111111111111111110001001 +10111001100000000001000000000000 +00110100000000010000000000100001 +00110100000000110000000000000001 +11111011111111111111111110000101 +10111001100000000001000000000000 +00110101011000010000000000111000 +11111011111111111111111000011101 +01111100001011000000000000000000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000101000 +01011001011000000000000000000100 +01011001011000000000000000000000 +01011001011000010000000000100000 +00110100000000011111111111111111 +01011001011000010000000000001000 +01011001011000000000000000010000 +00110101011000010000000000010100 +11111011111111111111111000000100 +00110101011000010000000000111000 +11111011111111111111111000101011 +00101001011000010000000000001100 +00110100000000100000000000000001 +11111011111111111111111000101100 +00110100000000010000000000100100 +00110100000000100000000000000001 +00110100000000110000000000000001 +11111011111111111111111101100100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00110100000000010000000000000101 +01011001011000010000000000011000 +00111000000000011111111111111010 +01011001011000010000000000011100 +00110100000000010000000000000001 +01011001011000010000000000010100 +00110100000000010111010100110000 +01011001011000010000000000010000 +00110100000000011111101110110100 +01011001011000010000000000001000 +00110100000000011111111111100010 +01011001011000010000000000000100 +00110100000000010000010010110000 +01011001011000010000000000110100 +00110100000000010000001111101000 +01011001011000010000000000101100 +00110100000000010000000001100100 +01011001011000010000000000110000 +01111000000000010000000000000001 +00111000001000011100001010011000 +00101000001000010000000000000000 +01011001011000110000000001100100 +01011001011000100000000001100000 +11001000011000010001100000000000 +01011001011000110000000001101100 +00110101011000010000000000000100 +01011001011000000000000001110000 +11111011111111111111110111010111 +00110101011000010000000000101000 +11111011111111111111110111111110 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +01011000001000000000000001000100 +01011000001000000000000001000000 +00110100000000011111111111111111 +01011001011000010000000001001000 +01011001011000010000000001001100 +01011001011000010000000001010000 +01011001011000010000000001010100 +00110100000000010000000000000001 +01011001011000010000000001110000 +01011001011000000000000001011000 +00110101011000010000000000000100 +01011001011000000000000001011100 +01011001011000000000000001101000 +11111011111111111111110110111111 +00110101011000010000000000101000 +11111011111111111111110111100110 +00101001011000010000000001100000 +00110100000000100000000000000001 +11111011111111111111110111100111 +00101001011000010000000001100100 +00110100000000100000000000000001 +11111011111111111111110111100100 +00110100000000010000000000000100 +00110100000000100000000000000001 +00110100000000110000000000000001 +11111011111111111111111100101011 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000001100100 +00110100000000100000000000000000 +11111011111111111111110111010101 +01011001011000000000000001110000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001001000000000001110000 +10111000001000000101100000000000 +00110100000000010000000000000001 +01000100100000000000000001111000 +00101001011000010000000001100000 +01011100011000010000000000000010 +01011001011000100000000001001000 +00101001011000010000000001100100 +01011100011000010000000000000010 +01011001011000100000000001001100 +00101001011000010000000001001000 +01001000000000010000000000001001 +00101001011000100000000001010000 +01001000000000100000000000000110 +01001100001000100000000000000101 +00101001011000110000000001000000 +01111000000000100000000001000000 +10110100011000100001000000000000 +01011001011000100000000001000000 +01011001011000010000000001010000 +00101001011000010000000001001100 +01001000000000010000000000001001 +00101001011000100000000001010100 +01001000000000100000000000000110 +01001100001000100000000000000101 +00101001011000110000000001000100 +01111000000000100000000001000000 +10110100011000100001000000000000 +01011001011000100000000001000100 +01011001011000010000000001010100 +00101001011000110000000001001000 +00110100000000010000000000000000 +01001000000000110000000001011011 +00101001011000100000000001001100 +01001000000000100000000001011001 +00101001011011000000000001000000 +00101001011000010000000000111000 +10110100011011000001100000000000 +00101001011011000000000001000100 +11001000011000100001000000000000 +11001000010011000110000000000000 +01000100001000000000000000000110 +00100001100011000011111111111111 +00100001100000010010000000000000 +01000100001000000000000000000011 +00110100000000011100000000000000 +10111001100000010110000000000000 +10111001100000000001000000000000 +00110101011000010000000000000100 +11111011111111111111110101001111 +00101001011000100000000001101100 +01111000000000110000000000000001 +00111000011000111011111110111000 +00100000010000100000000000001111 +10111000001000000110100000000000 +00111100010000100000000000010000 +00101000011000010000000000000000 +00100001101000111111111111111111 +10111000011000100001000000000000 +01011000001000100000000001000100 +00101001011000110000000001000000 +00101001011000100000000001001000 +00110100000000010000000000000101 +10110100011000100001000000000000 +00110100000000110000000000000000 +11111011111111111111111011010100 +00101001011000110000000001000100 +00101001011000100000000001001100 +00110100000000010000000000000010 +10110100011000100001000000000000 +00110100000000110000000000000000 +11111011111111111111111011001110 +00110100000000010000000000000001 +10111001100000000001000000000000 +00110100000000110000000000000000 +11111011111111111111111011001010 +00101001011000100000000001101000 +00110100000000110000000000000000 +00110100010000010000000000000001 +01011001011000010000000001101000 +00110100000000010000000000000110 +11111011111111111111111011000100 +00110100000000010000000000000000 +10111001101000000001000000000000 +00110100000000110000000000000001 +11111011111111111111111011000000 +01111000000000100000000000000001 +00110100000000011111111111111111 +00111000010000101000111101111100 +01011001011000010000000001001100 +01011001011000010000000001001000 +00101001011000110000000001000000 +00101000010000010000000000000000 +01001100001000110000000000001010 +00101001011000100000000001000100 +01001100001000100000000000001000 +01111000000001000000000000000001 +00111000100001001000111110000000 +00101000100000010000000000000000 +10110100011000010001100000000000 +10110100010000010000100000000000 +01011001011000110000000001000000 +01011001011000010000000001000100 +00101001011000010000000000111000 +01000100001000000000000000001111 +00101001011000010000000001011100 +00101001011000100000000001011000 +01001100001000100000000000000110 +00110100001000010000000000000001 +01011001011000010000000001011100 +00101001011000010000000001000000 +00110100001000011111111111111111 +11100000000000000000000000000110 +01001100010000010000000000000110 +00110100001000011111111111111111 +01011001011000010000000001011100 +00101001011000010000000001000000 +00110100001000010000000000000001 +01011001011000010000000001000000 +00110101011000010000000000101000 +10111001100000000001000000000000 +11111011111111111111110100101000 +01111100001000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00010100010000110000000000011111 +00110111100000010000000000001100 +01001000000000100000000000001011 +00000000010001000000000000010010 +00111100011000110000000000001110 +00111100010000100000000000001110 +10111000011001000001100000000000 +01011011100000100000000000010000 +00110100000000100001111101000000 +01011011100000110000000000001100 +11111011111111111011011110000001 +00101011100000100000000000010000 +11100000000000000000000000001001 +00001000010000101100000000000000 +01011011100000100000000000010000 +00010100010000100000000000011111 +01011011100000100000000000001100 +00110100000000100001111101000000 +11111011111111111011011101111001 +00101011100000100000000000010000 +11001000000000100001000000000000 +00000000010000010000000000011111 +10110100001000100001000000000000 +00010100010000100000000000000001 +00110100000000010000000000000000 +01011001011000100000000001011000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101000001000100000000001011000 +00101000001000010000000001011100 +11111100010000010000100000000000 +11000011101000000000000000000000 +01011000001000100000000000000100 +01011000001000000000000000011100 +01011000001000110000000000001000 +01011000001000000000000000001100 +01011000001000000000000000010000 +01011000001000000000000000000000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000100000000000000001 +01011000001000100000000000000000 +01011000001000000000000000010100 +01011000001000000000000000011100 +01011000001000000000000000001100 +01011000001000000000000000010000 +00101000001000010000000000000100 +11111011111111111111110100010011 +01111000000000010000000000000001 +00111000001000011100001010011000 +00101000001000010000000000000000 +00110100000000100000000000000001 +11111011111111111111110100001110 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111110110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000110000000000000 +10111000011000000110100000000000 +00110111100000010000000000010100 +00110100000000100000000000000000 +00110100000000110000000001000000 +11111000000000000000011100101011 +00110100000000011100000000000000 +01111000000001000000000000000001 +01011011100000010000000000100000 +00111000100001001100001010011000 +00110100000000010100000000000000 +01011011100000010000000001000100 +00101000100000010000000000000000 +01011101101000010000000000000101 +01111000000000110000000000000001 +00111000011000111010110101111100 +01011000011011000000000000000000 +11100000000000000000000000100111 +00111101101011010000000000000101 +10110101011011010101100000000000 +00101001011000010000000000000000 +01000100001000000000000000100011 +01111000000000110000000000000001 +00111000011000111010110101111100 +00101000011000010000000000000000 +00101001011000100000000000010000 +11001001100000010000100000000000 +00100000001000010011111111111111 +00010100001000110000000000001100 +01011100010000000000000000000111 +00111100011000110000000000000010 +01011001011000010000000000001100 +00110100000000010000000000000001 +01011001011000110000000000010100 +01011001011000010000000000010000 +11100000000000000000000000010101 +00101001011001000000000000001100 +00110100010000100000000000000001 +10110100001001000000100000000000 +00101001011001000000000000010100 +10110100011001000001100000000000 +00111100011000110000000000000010 +00110111100001000000000001010000 +10110100100000110001100000000000 +00101000011000111111111111000100 +01011001011000100000000000010000 +10110100001000110000100000000000 +00101001011000110000000000001000 +01011001011000010000000000001100 +01011100010000110000000000000111 +11111000000000000000010111010010 +01011001011000010000000000011000 +00110100000000010000000000000001 +01011001011000010000000000011100 +01011001011000000000000000001100 +01011001011000000000000000010000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000001010000 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111011111110111000 +01011100010000000000000000001010 +00110100000001000000000000000001 +00101000011000100000000000000000 +10111100100000010000100000000000 +00100000001000010000000011111111 +00101000010000110000000000100000 +00111100001000010000000000010000 +10100100001000000000100000000000 +10100000001000110000100000000000 +11100000000000000000000000001000 +00101000011000100000000000000000 +00110100000001000000000000000001 +10111100100000010000100000000000 +00101000010000110000000000100000 +00100000001000010000000011111111 +00111100001000010000000000010000 +10111000001000110000100000000000 +01011000010000010000000000100000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00110100000000100000000000000001 +01000100001000100000000000001001 +00110100000000100000000000000010 +01000100001000100000000000001100 +01011100001000000000000000010111 +01111000000000010000000000000001 +00111000001000011011111110111000 +00101000001010110000000000000000 +00110101011010110000000000011000 +11100000000000000000000000001010 +01111000000000010000000000000001 +00111000001000011011111110111000 +00101000001010110000000000000000 +00110101011010110000000000010100 +11100000000000000000000000000101 +01111000000000010000000000000001 +00111000001000011011111110111000 +00101000001010110000000000000000 +00110101011010110000000000011100 +00110100000000010000011111010000 +11111011111111111110110010000000 +01111000000000110000000000000001 +00111000011000111000111100101000 +00101001011000100000000000000000 +00101000011000010000000000000000 +10100000010000010000100000000000 +11100000000000000000000000000010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000001 +10111000010000000101100000000000 +00111000011000111100000001100000 +01000100001000000000000000000111 +00110100001000011111111111111111 +00001000001000110000000001111100 +01111000000000010000000000000001 +00111000001000011011111111011000 +10110100011000010000100000000000 +00110100001000110000000100000100 +10111000011000000000100000000000 +10111001011000000001000000000000 +11111011111111111111111100110101 +01111000000000010000000000000001 +00111000001000011011111111011000 +01011000001010110000000000010100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000011000000000000000001 +01111000000011010000000000000001 +10111000001000000111000000000000 +00110100000010110000000000000000 +00111001100011001100001010011000 +00111001101011011011111110011000 +11100000000000000000000000001010 +00101001101000010000000000000000 +10010100001010110000100000000000 +00100000001000010000000000000001 +01000100001000000000000000000101 +00111101011000100000000000000101 +10110101110000100001000000000000 +00110100010000010000000111110100 +11111011111111111111111101000110 +00110101011010110000000000000001 +00101001100000010000000000000000 +01001000001010111111111111110110 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111110111100 +01011011100010110000000001000100 +01011011100011000000000001000000 +01011011100011010000000000111100 +01011011100011100000000000111000 +01011011100011110000000000110100 +01011011100100000000000000110000 +01011011100100010000000000101100 +01011011100100100000000000101000 +01011011100100110000000000100100 +01011011100101000000000000100000 +01011011100101010000000000011100 +01011011100101100000000000011000 +01011011100101110000000000010100 +01011011100110000000000000010000 +01011011100110010000000000001100 +01011011100110110000000000001000 +01011011100111010000000000000100 +01111000000110110000000000000001 +01111000000010110000000000000001 +01111000000110010000000000000001 +01111000000011010000000000000001 +01111000000100010000000000000001 +01111000000100000000000000000001 +01111000000011000000000000000001 +01111000000101110000000000000001 +01111000000011110000000000000001 +00111011011110111011111110111000 +00111001011010111011111111011000 +00110100000101000000000000001001 +00111011001110011001010010000100 +00110100000110000000000000000001 +00110100000100110000000000000011 +00111001101011011100000001000000 +00110100000100100000000000001000 +00111010001100011100000001100000 +00111010000100001011111111110000 +00111001100011001100001010011000 +00111010111101111100000111001100 +00111001111011111100001010010000 +11100000000000000000000001111110 +00101000011101010000000001111100 +01111000000000010000000011111111 +00111000001000011111111111111111 +00000010101011100000000000011000 +10100010101000011010100000000000 +00101001011000010000000000000100 +00100001110011100000000001111111 +00110100001000011111111111111111 +01010100001101000000000001010101 +00111100001000010000000000000010 +10110111001000010000100000000000 +00101000001000010000000000000000 +11000000001000000000000000000000 +00101001011000010000000001000100 +01011000011000010000000001000000 +00101001011000010000000010100100 +00101001011000100000000010100000 +10110100010000010000100000000000 +00000000001000100000000000011111 +10110100010000010000100000000000 +00010100001000010000000000000001 +00110100000000100000000000000001 +01011000011000010000000001000100 +00101001100000010000000000000000 +11111011111111111111110000010110 +11111011111111111110101111110111 +00110100001000010000000000110010 +01011001011000010000000000001000 +00110100000000010000000000001010 +11100000000000000000000000010001 +00101001011101100000000000001000 +11111011111111111110101111110001 +11001010110000010000100000000000 +01001100001000000000000000111100 +00101001011000010000000000000000 +01011100001110000000000000000011 +01011001011110000000000000000100 +11100000000000000000000000111000 +01011001011100110000000000000100 +11100000000000000000000000110110 +00101001100000010000000000000000 +00110100000000100000000000000000 +11111011111111111111110000000100 +10111001101000000000100000000000 +11111011111111111111110001011001 +00110100000000010000000000000010 +01011001011000010000000000000100 +11100000000000000000000000101110 +10111001101000000000100000000000 +11111011111111111111110001101010 +11100000000000000000000000010010 +10111010000000000000100000000000 +11111011111111111111110110111101 +00110100000000010000000000000100 +11100011111111111111111111111000 +00101001011000010000000001100000 +01000100001000000000000000100101 +00101001011000010000000001100100 +01000100001000000000000000100011 +00101001011000010000000000000000 +01011100001100110000000000001001 +00110100000000010000000000000101 +11100011111111111111111111110000 +10111010001000000000100000000000 +11111011111111111111110111110001 +00110100000000010000000000000110 +11100011111111111111111111101100 +00101001011000010000000011000000 +01000100001000000000000000011001 +10111001011000000000100000000000 +11111011111111111111111101110010 +01011001011100100000000000000100 +00101001011000010000000011101000 +00110100000000100000000000000001 +11100000000000000000000000010010 +00101001011000010000000000000000 +01011100001110000000000000000100 +10111001101000000000100000000000 +11111011111111111111110001001101 +01000100001000000000000000000111 +00101001011000010000000001100000 +01000100001000000000000000000101 +00101001011000010000000000000000 +01011100001100110000000000001010 +00101001011000010000000011000000 +01011100001000000000000000001000 +00101001011000010000000000001100 +00110100000000100000000000000000 +00110100001000010000000000000001 +01011001011000010000000000001100 +01011001011101000000000000000100 +00101001011000010000000011101000 +11111011111111111111111100001101 +10111010000000000000100000000000 +10111010101000000001000000000000 +10111001110000000001100000000000 +11111011111111111111110100111010 +00101001011000010000000001100000 +01000100001000000000000000011011 +10111010001000000000100000000000 +10111010101000000001000000000000 +10111001110000000001100000000000 +11111011111111111111110111111001 +00101001011000010000000000000100 +01011100001100100000000000010101 +00101001011000010000000000000000 +00110100000101100000000000000000 +01011100001100110000000000001100 +11100000000000000000000000001000 +00001010110000010000000001111100 +10111010101000000001000000000000 +10111001110000000001100000000000 +10110101011000010000100000000000 +00110100001000010000000100000100 +11111011111111111111110111101101 +00110110110101100000000000000001 +00101001111000010000000000000000 +00110100001000011111111111111111 +01001000001101101111111111110111 +00101001100000010000000000000000 +01001001110000010000000000000101 +10111010111000000000100000000000 +10111010101000000001000000000000 +10111001110000000001100000000000 +11111011111111111111111010101000 +00101011011000110000000000000000 +01111000000000100000000000000010 +00101000011000010000000010000000 +10100000001000100000100000000000 +01000100001000001111111101111111 +00101001011000010000000000010000 +00110100001000010000000000000001 +01011001011000010000000000010000 +00110100000000010000000000000001 +11010000010000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000001000100 +00101011100011000000000001000000 +00101011100011010000000000111100 +00101011100011100000000000111000 +00101011100011110000000000110100 +00101011100100000000000000110000 +00101011100100010000000000101100 +00101011100100100000000000101000 +00101011100100110000000000100100 +00101011100101000000000000100000 +00101011100101010000000000011100 +00101011100101100000000000011000 +00101011100101110000000000010100 +00101011100110000000000000010000 +00101011100110010000000000001100 +00101011100110110000000000001000 +00110111100111000000000001000100 +11000011101000000000000000000000 +01111000000000010000000000000001 +00111000001000011011111111010100 +00101000001000100000000000000000 +01111000000000110000000000000001 +01111000000000010000000000000001 +00111000001000011011111111001100 +00111000011000111000111110000100 +01011000001000100000000000000000 +00101000011000010000000000000000 +01011000010000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111010100 +01011011100010110000000000101000 +01011011100011000000000000100100 +01011011100011010000000000100000 +01011011100011100000000000011100 +01011011100011110000000000011000 +01011011100100000000000000010100 +01011011100100010000000000010000 +01011011100100100000000000001100 +01011011100100110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000001000000000000000 +10111000011000001001000000000000 +11111011111111111010110111000101 +01111000000000010000000000000001 +00111000001000011100001011000100 +00101000001001000000000000000000 +01111000000000010000000000000001 +00111000001000011011111110111000 +01011000001001000000000000000000 +01111000000000010000000000000001 +00101000100001010000000000000000 +00111000001000011011111111010100 +00101000001000010000000000000000 +01111000000000100000000000000001 +00111000010000101011111111001100 +00000000101001100000000000010000 +01011000010000010000000000000000 +01111000000000100000000000000001 +00111000010000101100001010011000 +00100000110001100000000000111111 +00000000101001010000000000011000 +01011000010001100000000000000000 +01111000000000100000000000000001 +00111000010000101100001010010000 +00100000101001010000000000000111 +01011000010001010000000000000000 +01111000000001010000000000000001 +00111000101001011011111111011000 +01011000101010110000000000000000 +01011000101000000000000000001100 +01011000100000000000000001000000 +01011000100000000000000001000100 +01011000100000000000000000000000 +01011000100000000000000000101000 +01011000100000000000000000100100 +01011000100000000000000000000100 +01111000000000110000000000000001 +01011000100000000000000000100000 +00110100000000100000001111101000 +00111000011000111000111100110100 +01011000100000100000000001001000 +00101000011000100000000000000000 +01011000001000000000000000011100 +01011000001000100000000000000000 +00110100000000010000000000000100 +01011101011000010000000000000100 +00110100000000010000000000000111 +01011000101000010000000000000100 +11100000000000000000000000000110 +00110100000000010000000000001001 +01011000101000010000000000000100 +00110100000000010000000000000011 +01011101011000010000000000000010 +10111010000000000011000000000000 +01111000000000010000000000000001 +10111000110000000001000000000000 +00111000001000011011111111110000 +01111000000011010000000000000001 +11111011111111111111110010011101 +00111001101011011100001010011000 +00101001101000110000000000000000 +01111000000000010000000000000001 +00111000001000011100000001100000 +10111010000000000001000000000000 +01111000000011110000000000000001 +01111000000011100000000000000001 +11111011111111111111110100011000 +00110100000011000000000000000000 +00111001111011111100001010010000 +00111001110011101011111111011000 +00110100000100110000000000000001 +11100000000000000000000000001100 +00001001100100010000000001111100 +00101001101001000000000000000000 +10111010000000000001000000000000 +10110101110100010000100000000000 +00110100100001000000000000000001 +10110100100011000001100000000000 +00110100001000010000000100000100 +10110101110100011000100000000000 +11111011111111111111110100001010 +00110101100011000000000000000001 +01011010001100110000000011111100 +00101001111000010000000000000000 +00110100001000011111111111111111 +01001000001011001111111111110011 +00110100000000010000000000000010 +01011101011000010000000000000110 +01111000000000010000000000000001 +00111000001000011011111111001100 +00101000001000010000000000000000 +00110100000000100000000000001100 +01011000001000100000000000011100 +01111000000011100000000000000001 +01111000000011010000000000000001 +00110100000011000000000000000000 +00111001110011101100001010011000 +00111001101011011011111111011000 +11100000000000000000000000001000 +00111101100000010000000000000101 +10111001100000000001000000000000 +10110101101000010000100000000000 +00110100001000010000000111110100 +00110100000000110000001000000000 +11111011111111111111110111110010 +00110101100011000000000000000001 +00101001110000100000000000000000 +01001000010011001111111111111000 +00110100000000010000000000000001 +01011101011000010000000000010111 +01111000000000010000000000000001 +00111000001000011011111110111000 +00101000001000010000000000000000 +00101000001000010000000000000100 +00100000001000010000000000000010 +01000100001000000000000000100001 +01111000000000010000000000000001 +01111000000001000000000000000001 +00111000001000011011111111011000 +00111000100001001011111111110000 +01011000001001000000000001101000 +01111000000001000000000000000001 +00111000100001001100000001100000 +01011000001001000000000001101100 +01111000000000010000000000000001 +00111000001000011100001010010000 +00101000001001000000000000000000 +01111000000000010000000000000001 +00111000001000011100000001000000 +10110100010001000001000000000000 +10111010010000000001100000000000 +11111011111111111111101100110101 +01111000000000010000000000000001 +00111000001000011011111110111000 +00101000001000010000000000000000 +01111000000000100000000000000010 +11100000000000000000000000000011 +00101000001000110000000001111100 +01011011100000110000000000101100 +00101000001000110000000010000000 +10100000011000100001100000000000 +01000100011000001111111111111100 +00110100000000100000000000000001 +01011000001000100000000001100100 +00101000001000100000000000101000 +00111000010000100000000000000001 +01011000001000100000000000101000 +11111011111111111010110100111101 +00101011100111010000000000000100 +00101011100010110000000000101000 +00101011100011000000000000100100 +00101011100011010000000000100000 +00101011100011100000000000011100 +00101011100011110000000000011000 +00101011100100000000000000010100 +00101011100100010000000000010000 +00101011100100100000000000001100 +00101011100100110000000000001000 +00110111100111000000000000101100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01111000000000100000000000000001 +00111000010000101011111111011000 +00101000010000110000000000000100 +01100100001001000000000000000000 +01111100011000110000000000001000 +10111000100000110001100000000000 +01011100011000000000000000000110 +00110100001000011111111111111111 +00001000001000010000000001111100 +10110100010000010000100000000000 +00110100001000010000000100000100 +11111011111111111111110011010011 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01000100001000000000000000001000 +00110100001000011111111111111111 +00001000001000010000000001111100 +01111000000000100000000000000001 +00111000010000101011111111011000 +10110100001000100000100000000000 +00110100001000010000000100000100 +11111011111111111111110011101000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +01111000000000100000000000000001 +10111000001000000001100000000000 +00111000010000101011111111011000 +01011100001000000000000000000100 +00101000010000010000000000000100 +01100100001000010000000000001000 +11000011101000000000000000000000 +00101000010001010000000000000100 +00110100000001000000000000001000 +00110100000000010000000000000000 +01011100101001000000000000000110 +00110100011000111111111111111111 +00001000011000110000000001111100 +10110100010000110001000000000000 +00101000010000010000000100111100 +01111100001000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00110100000000111111111111111111 +10111000010000000111100000000000 +01011100001000110000000000010110 +00110100000000010000000000000000 +01111000000011000000000000000001 +01111000000011010000000000000001 +11111011111111111111111000010100 +00110100000010110000000000000000 +00111001100011001100001010010000 +00111001101011011011111111011000 +00110100000011100000000000000100 +11100000000000000000000000001001 +00001001011000010000000001111100 +10110101101000010000100000000000 +00101000001000010000000011111100 +01011100001011100000000000000100 +00110101011000010000000000000001 +10111001111000000001000000000000 +11111011111111111111111000001000 +00110101011010110000000000000001 +00101001100000010000000000000000 +00110100001000011111111111111111 +01001000001010111111111111110110 +11100000000000000000000000000010 +11111011111111111111111000000010 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000001 +10111000010000000110100000000000 +10111000011000000110000000000000 +00111001011010111100000001100000 +01000100001000000000000000000111 +00110100001000011111111111111111 +00001000001010110000000001111100 +01111000000000010000000000000001 +00111000001000011011111111011000 +10110101011000010000100000000000 +00110100001010110000000100000100 +01000101101000000000000000001011 +00101001011000100000000001011100 +00110100000001000001111101000000 +00110100000000110000000000000000 +00111100010000100000000000000001 +00010100010000010000000000011111 +11111000000000000000001100101011 +00111100001000010000000000010010 +00000000010001000000000000001110 +10111000001001000010000000000000 +01011001101001000000000000000000 +01000101100000000000000000001011 +00101001011000100000000001011000 +00110100000000110000000000000000 +00110100000001000001111101000000 +00111100010000100000000000000001 +00010100010000010000000000011111 +11111000000000000000001100100000 +00111100001000010000000000010010 +00000000010000100000000000001110 +10111000001000100001000000000000 +01011001100000100000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000110100000000000 +01111000000000010000000000000001 +00111101011000100000000000000101 +00111000001000011011111111011000 +10110100001000100000100000000000 +00101000001001000000001000001100 +10111000011000000110000000000000 +01001100100000000000000000000011 +00110100100001000100000000000000 +11100000000000000000000000000100 +00110100000000010011111111111111 +01001100001001000000000000000010 +00110100100001001100000000000000 +00111100100001000000000000000001 +00110100000000010000000000000000 +00100000100000100011111111111110 +00110100000000110000000000000000 +00110100000001000001111101000000 +11111000000000000000001011111101 +00111100001000010000000000010010 +00000000010001000000000000001110 +10111000001001000010000000000000 +01011001101001000000000000000000 +01000101100000000000000000001100 +01111000000000010000000000000001 +00111000001000011011111110011000 +00101000001000100000000000000000 +00111101011000110000000000000101 +01111000000000010000000000000001 +00111000001000011011111111011000 +10110100001000110000100000000000 +00101000001000010000000111111000 +10010100010000010000100000000000 +00100000001000010000000000000001 +01011001100000010000000000000000 +00111101011010110000000000000101 +01111000000000100000000000000001 +00111000010000101011111111011000 +10110100010010110001000000000000 +00101000010000010000001000010000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +01000100001000000000000000000101 +01111000000000110000000000000001 +00111000011000111100001010011000 +00101000011000110000000000000000 +01011000001000110000000000000000 +01000100010000000000000000000101 +01111000000000010000000000000001 +00111000001000011100001010010000 +00101000001000010000000000000000 +01011000010000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100111010000000000001100 +01111000000000010000000000000001 +00111000001000011011111111011000 +00101000001000110000000000000100 +01111000000000100000000000000001 +00111000010000101001010010101100 +00111100011000110000000000000010 +10110100010000110001000000000000 +00101000010000110000000000000000 +00101000001000100000000000000100 +00110100000000010000000000001010 +01010100010000010000000000000010 +11100000000000000000000000000011 +01111000000000110000000000000001 +00111000011000111000110111110100 +01111000000000010000000000000001 +00111000001000011011111111011000 +00101000001000100000000000000000 +01001100000000100000000000001110 +00101000001000100000000000010000 +00101000001001000000000000000000 +00101000001001010000000001110100 +00101000001001100000000001100000 +00101000001001110000000011000000 +00101000001010000000000001001100 +00101000001010010000000010101100 +00101000001000010000000000001100 +01011011100010010000000000000100 +01011011100000010000000000001000 +01111000000000010000000000000001 +00111000001000011000111000000000 +11111011111111111110001111110001 +00101011100111010000000000001100 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01011100001000000000000000000100 +01111000000000010000000000000001 +00111000001000011100000001100000 +11100000000000000000000000000111 +00110100001000011111111111111111 +00001000001000010000000001111100 +01111000000000100000000000000001 +00111000010000101011111111011000 +10110100001000100000100000000000 +00110100001000010000000100000100 +11111011111111111111110011000100 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000011010000000000000001 +01111000000010110000000000000001 +10111000001000000110000000000000 +00111001101011011011111111011000 +00111001011010111011111110011000 +01000100010000000000000000001101 +00110100000000100000000000000001 +11111011111111111111100111011011 +00111101100000010000000000000101 +10110101101000010110100000000000 +00110101101000010000000111110100 +11111011111111111111110010111011 +00101001011000010000000000000000 +00110100000000100000000000000001 +10111100010011000110000000000000 +10111001100000010110000000000000 +01011001011011000000000000000000 +11100000000000000000000000001010 +00110100000000110000000000000001 +00101001011001000000000000000000 +10111100011000010001100000000000 +10100100011000000001100000000000 +10100000011001000001100000000000 +01011001011000110000000000000000 +00101001101000110000000011101000 +01000100001000110000000000000010 +11111011111111111111100111001000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00001000001000010000000001111100 +01111000000000100000000000000001 +00111000010000101011111111011000 +10110100010000010001000000000000 +00101000010000010000000011111100 +00101000010000110000000011111100 +00110100000000100000000000000100 +01111100001000010000000000000001 +01011100011000100000000000000010 +00111000001000010000000000000010 +11000011101000000000000000000000 +01001100001000000000000000000101 +01111000000000010000000000000001 +00111000001000011011111111011000 +00101000001000010000000001001100 +11000011101000000000000000000000 +01111000000000100000000000000001 +00111000010000101011111111011000 +01011100001000000000000000000011 +00101000010000010000000010101100 +11000011101000000000000000000000 +00110100001000011111111111111111 +00001000001000010000000001111100 +10110100010000010001000000000000 +00101000010000010000000100101000 +11000011101000000000000000000000 +01111000000000110000000000000001 +00111000011000111011111110111000 +01001100001000000000000000000111 +01111000000000010000000000000001 +00111000001000011011111111011000 +01011000001000100000000001001100 +00101000011000010000000000000000 +01011000001000100000000001000000 +11000011101000000000000000000000 +00100000001001000000000000001111 +00101000011000110000000000000000 +00111100100001000000000000010000 +00100000010001011111111111111111 +10111000101001000010000000000000 +01011000011001000000000001000100 +01111000000000110000000000000001 +00111000011000111011111111011000 +01011100001000000000000000000011 +01011000011000100000000010101100 +11000011101000000000000000000000 +00110100001000011111111111111111 +00001000001000010000000001111100 +10110100011000010001100000000000 +01011000011000100000000100101000 +11000011101000000000000000000000 +00110111100111001111111111001100 +01011011100010110000000000110100 +01011011100011000000000000110000 +01011011100011010000000000101100 +01011011100011100000000000101000 +01011011100011110000000000100100 +01011011100100000000000000100000 +01011011100100010000000000011100 +01011011100100100000000000011000 +01011011100100110000000000010100 +01011011100101000000000000010000 +01011011100101010000000000001100 +01011011100101100000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000001 +00111000001000011011111111011000 +00101000001000100000000000000000 +00110100000000010000000000000001 +00110100000101000000000000000000 +01011100010000010000000000000101 +01111000000000010000000000000001 +00111000001000011100000001000000 +11111011111111111111101000000000 +10111000001000001010000000000000 +01111000000100010000000000000001 +01111000000010110000000000000001 +01111000000011100000000000000001 +00110100000011010000000000000000 +00110100000011000000000000000001 +00111010001100011100001010010000 +00111001011010111011111111011000 +00110100000011110000000000000001 +00111001110011101011111110111000 +00110100000100100000000000000010 +00110100000101100000000000000011 +00110100000101010000000000000100 +11100000000000000000000001000111 +00110101100100111111111111111111 +00001010011100000000000001111100 +10110101011100001000000000000000 +00101010000000010000000011111100 +01000100001011110000000000001111 +00101001110000010000000000000000 +10111101111011000001000000000000 +00101000001000010000000000100000 +00000000001000010000000000001000 +00100000001000010000000011111111 +10100000001000100000100000000000 +01011100001000000000000000001000 +10111001100000000000100000000000 +11111011111111111111111010010000 +10111001100000000000100000000000 +00110100000000100000000000000000 +11111011111111111111110010010100 +00110101101011010000000000000001 +01011010000011110000000011111100 +00001010011000010000000001111100 +10110101011000011000000000000000 +00101010000000100000000011111100 +01000100010100100000000000010100 +01001000010100100000000000000011 +01011100010011110000000000101101 +11100000000000000000000000000100 +01000100010101100000000000010111 +01011100010101010000000000101010 +11100000000000000000000000011110 +00101001011000010000000011000000 +01000100001000000000000000100111 +00101001110000010000000000000000 +10111101111011000001000000000000 +00101000001000010000000000100000 +00000000001000010000000000001000 +00100000001000010000000011111111 +10100000001000100000100000000000 +01000100001000000000000000100000 +10111001100000000000100000000000 +11111011111111111111111001100101 +01011010000100100000000011111100 +11100000000000000000000000011011 +00101010000000010000000100111100 +01000100001000000000000000011010 +00101001011000100000000000010100 +10111001100000000000100000000000 +11111011111111111111110010101110 +01011010000101100000000011111100 +11100000000000000000000000010100 +10110101011000010000100000000000 +00110100001000010000000100000100 +11111011111111111111110000001111 +01011100001000000000000000010001 +10111001100000000000100000000000 +00110100000000100000000000000001 +11111011111111111111110001101101 +01011010000101010000000011111100 +11100000000000000000000000001011 +00101001011000010000000011000000 +01000100001000000000000000000011 +00101010000000010000000100111100 +01011100001000000000000000001000 +00001010011100110000000001111100 +10111001100000000000100000000000 +00110100000000100000000000000000 +10110101011100111001100000000000 +11111011111111111111110001100010 +01011010011011110000000011111100 +00110101101011010000000000000001 +00110101100011000000000000000001 +00101010001000010000000000000000 +01001000001011001111111110111001 +00101001011000110000000000000000 +01111000000000100000000000000001 +00111000010000101010110110000100 +01011000010000110000000000001100 +00101001011000110000000000010000 +00101000010000010000000000001000 +01111101101011010000000000000000 +01011000010000110000000000010000 +00101001011000110000000000000100 +00110100001000010000000000000010 +10110101101101001010000000000000 +01011000010000110000000000010100 +00101001011000110000000001110100 +01011000010000010000000000001000 +01111110100000010000000000000000 +01011000010000110000000000011000 +00101001011000110000000001100000 +01011000010000110000000000011100 +00101001011000110000000011000000 +01011000010000110000000000100000 +00101001011000110000000001001100 +01011000010000110000000000100100 +00101001011000110000000010101100 +01011000010000110000000000101000 +00101001011000110000000000001100 +01011000010000110000000000101100 +00101011100111010000000000000100 +00101011100010110000000000110100 +00101011100011000000000000110000 +00101011100011010000000000101100 +00101011100011100000000000101000 +00101011100011110000000000100100 +00101011100100000000000000100000 +00101011100100010000000000011100 +00101011100100100000000000011000 +00101011100100110000000000010100 +00101011100101000000000000010000 +00101011100101010000000000001100 +00101011100101100000000000001000 +00110111100111000000000000110100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +11111011111111111010101100111111 +00110100000000100000000000000000 +00110100000000011111111111111111 +11111011111111111111111101001011 +00110100000000010000000000000001 +11111011111111111111110001000000 +00111000000010111111111111111111 +10111001011000000001000000000000 +00110100000000011111111111111111 +11111011111111111111111101000101 +00110100000000010000000000000001 +11111011111111111111110000111010 +00110100000000100000000000000000 +00110100000000010000000000000000 +11111011111111111111111101000000 +00110100000000010000000000000000 +11111011111111111111110000110101 +10111001011000000001000000000000 +00110100000000010000000000000000 +11111011111111111111111100111011 +00110100000000010000000000000000 +11111011111111111111110000110000 +00110100000000010000000000000010 +11111011111111111111110000101110 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +11000011101000000000000000000000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00101000001001000000000000010100 +10111000001000000001100000000000 +10111000010000000011000000000000 +01000100100000000000000000010101 +00101000001001010000000000010000 +00100000101001010000000000000010 +01011100101000000000000000000111 +10110100100001100010000000000000 +10111000100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110100011010110000000000110000 +10110100100001100001000000000000 +10111001011000000000100000000000 +00110100000000110000000001000000 +11111000000000000000001001110001 +10111001011000000010000000000000 +10111000100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00101000001001010000000000010000 +00100000101001110000000000000100 +01011100111001001111111111101011 +00101000001001010000000000011100 +00110100000001000000000000000000 +01000100101001111111111111101011 +00110100001010110000000000110000 +00110100000001000000000001000000 +10111001011000000001100000000000 +11011000101000000000000000000000 +10111001011000000010000000000000 +11100011111111111111111111110000 +00110111100111001111111111110100 +01011011100010110000000000001000 +01011011100111010000000000000100 +00101000001000100000000000010100 +10111000001000000101100000000000 +01000100010000000000000000010011 +00101001011000010000000000001100 +10110100010000010001000000000000 +00101000010000110000000000000000 +01111000000001000000000000000001 +00111000100001001000111101001000 +00101000100000100000000000000000 +00110100000000011111111111101100 +01011100011000100000000000000111 +01111000000000100000000000000001 +00111000010000101011111110011100 +00101000010000110000000000000000 +00110100000000010000000000000000 +01011000010010110000000000000000 +01011001011000110000000001111100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00101000001000110000000000010000 +00100000011000110000000000000100 +01011100011000101111111111101100 +00101000001001010000000000011100 +00101000001000100000000000001100 +00110111100000110000000000001100 +00110100000001000000000000000100 +11011000101000000000000000000000 +00101011100000110000000000001100 +11100011111111111111111111101000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +01000100010000000000000001000111 +00101000001000100000000000001100 +01011000001000000000000010000000 +01011000001000000000000010110000 +01011000001000100000000010010000 +00110100000011000000000000000000 +10111001011000000000100000000000 +11111011111111111111111110101010 +01011001011000010000000000101000 +01000000001000100000000000111111 +01011100010000000000000000000110 +01111000000001000000000000000001 +00111000100001001000111101001000 +00101000001000110000000000000000 +00101000100000100000000000000000 +01000100011000100000000001011101 +00110100000000010000000000000000 +01000101100000000000000000110000 +00110101100000111111111111111111 +00110100011011000000000000101000 +10110101100011000000100000000000 +10110100001000010000100000000000 +10110101011000010000100000000000 +00101000001000100000000000000000 +01011100010000000000000000001111 +00110100000000010000000000000000 +01000100011000100000000000100111 +00110100011000100000000000100111 +10110100010000100001000000000000 +10110100010000100001000000000000 +10110101011000100001000000000000 +11100000000000000000000000000010 +01000100011000010000000001000100 +00101000010000010000000000000000 +00110100011000111111111111111111 +00110100010000101111111111111100 +01000100001000001111111111111100 +01011001011000110000000010110000 +00110100011011000000000000101000 +00110100011011010000000000100100 +10110101101011010110100000000000 +10110101101011010110100000000000 +10110101011011010110100000000000 +00101001101000100000000000000000 +10111001011000000000100000000000 +10110101100011000110000000000000 +11111011111111111111111110000011 +10110101100011000110000000000000 +10110101011011000001000000000000 +00101001101001000000000000000000 +00101000010000110000000000000000 +00101001011011000000000010110000 +00110100100001000000000001000000 +00110100011000111111111111111111 +01011001011000010000000000101000 +01011001101001000000000000000000 +01011000010000110000000000000000 +00110101100000110000000000100000 +10110100011000110001100000000000 +10110100011000110001100000000000 +10110101011000110001100000000000 +00101000001001000000000000001100 +00101000011000100000000000000000 +10110100010001000001000000000000 +01011001011000100000000001110100 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101000001000010000000000101000 +00101001011000110000000010110000 +00110100000001010000000000000010 +01000000001001000000000000111111 +11101100101000110010100000000000 +01100100100001000000000000000010 +10100000100001010010000000000000 +01000100100000101111111111000101 +00110100011000100000000000100000 +10110100010000100001000000000000 +10110100010000100001000000000000 +10110101011000100001000000000000 +00101000010001010000000000000000 +00110100011001000000000000100101 +00101000001000100000000000000100 +10110100100001000010000000000000 +10110100100001000010000000000000 +10110100101000100001000000000000 +10110101011001000010000000000000 +01011000100000100000000000000000 +00101000001001000000000000001100 +00110100011000010000000000100001 +10110100001000010000100000000000 +10110100001000010000100000000000 +10110101011000010000100000000000 +10110100100001010010100000000000 +00110100011011000000000000000001 +01011000001001010000000000000000 +11100011111111111111111110100011 +00110100000000010000000000000000 +01011001011000000000000010110000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110101100000100000000000100100 +10110100010000100001000000000000 +10110100010000100001000000000000 +10110101011000100001100000000000 +00101100001001010000000000000100 +00101000011001000000000000000000 +00110101100000100000000000101000 +10110100010000100001000000000000 +10110100010000100001000000000000 +10110101011000100001000000000000 +00110100101001011111111111111111 +00110100100001000000000001000000 +01011000010001010000000000000000 +01011000011001000000000000000000 +01011001011011000000000010110000 +11100011111111111111111110111110 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000110000000000000 +00110100000000100000000000000001 +10111000001000000101100000000000 +10111000011000000111000000000000 +10111000100000000110100000000000 +11111011111111111111111101110011 +10111001011000000000100000000000 +00110100000000100000000000000000 +11111011111111111111111101110000 +10111000001000000010100000000000 +01000100001000000000000000011110 +00101000101000010000000000011000 +01011100001011001111111111111010 +00101000101000010000000000011100 +01011100001011101111111111111000 +00101000101000010000000000100000 +01011100001011011111111111110110 +00101001011000010000000010110000 +01011001011001010000000000101000 +00101000101000100000000000001100 +00110100001000010000000000100000 +10110100001000010000100000000000 +10110100001000010000100000000000 +10110101011000010000100000000000 +00101000001000110000000000000000 +00110100000000010000000000000000 +10110100010000110001100000000000 +01011001011000110000000001110100 +00101000101000110000000000010100 +01011001011000000000000001111000 +00110100011000110000000000000001 +11001000011000100001000000000000 +01011001011000100000000001110000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110100000000011111111111111110 +11100011111111111111111111111000 +01011000001000000000000000101000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +11111011111111111111111111001001 +01001100001000000000000000000101 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00101001011000010000000001110100 +01011001011000000000000000101000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001001010000000000101000 +10111000001000000101100000000000 +10111000010000000110000000000000 +10111000100000000110100000000000 +00110100000000011111111111111110 +01000100101000000000000000010010 +01001100010000000000000000000010 +00101001011011000000000001111000 +00101001011000010000000001110000 +10110101100011010001000000000000 +01010100010000010000000000010011 +00101001011001000000000000010100 +01000100100000000000000000010100 +00101001011000100000000001110100 +10111000011000000000100000000000 +10111001101000000001100000000000 +10110101100000100001000000000000 +10110100100000100001000000000000 +11111000000000000000000101100000 +10111001101000000000100000000000 +01001100000000010000000000000011 +10110100001011000110000000000000 +01011001011011000000000001111000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101001011001000000000000010100 +11001000001011000110100000000000 +01011100100000001111111111101110 +00101001011000100000000001110100 +00101001011001010000000000011100 +10111001011000000000100000000000 +10110101100000100001000000000000 +10111001101000000010000000000000 +11011000101000000000000000000000 +11100011111111111111111111101110 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001001010000000000101000 +10111000001000000101100000000000 +10111000010000000110000000000000 +10111000100000000110100000000000 +00110100000000011111111111111110 +01000100101000000000000000010010 +01001100010000000000000000000010 +00101001011011000000000001111000 +00101001011000010000000001110000 +10110101100011010001000000000000 +01010100010000010000000000010011 +00101001011001000000000000010100 +01000100100000000000000000010100 +00101001011000010000000001110100 +10111000011000000001000000000000 +10111001101000000001100000000000 +10110101100000010000100000000000 +10110100100000010000100000000000 +11111000000000000000000100110100 +10111001101000000000100000000000 +01001100000000010000000000000011 +10110100001011000110000000000000 +01011001011011000000000001111000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101001011001000000000000010100 +11001000001011000110100000000000 +01011100100000001111111111101110 +00101001011000100000000001110100 +00101001011001010000000000100000 +10111001011000000000100000000000 +10110101100000100001000000000000 +10111001101000000010000000000000 +11011000101000000000000000000000 +11100011111111111111111111101110 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001001000000000000101000 +10111000001000000101100000000000 +10111000010000000110000000000000 +10111000011000000110100000000000 +00110100000000011111111111111110 +01000100100000000000000000010010 +01001100010000000000000000000010 +00101001011011000000000001111000 +00101001011000010000000001110000 +10110101100011010001000000000000 +01010100010000010000000000010011 +00101001011001000000000000010100 +01000100100000000000000000010100 +00101001011000010000000001110100 +00110100000000100000000011111111 +10111001101000000001100000000000 +10110101100000010000100000000000 +10110100100000010000100000000000 +11111000000000000000000110000110 +10111001101000000000100000000000 +01001100000000010000000000000011 +10110100001011000110000000000000 +01011001011011000000000001111000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101001011001000000000000010100 +11001000001011000110100000000000 +01011100100000001111111111101110 +00101001011000100000000001110100 +00101001011001000000000000100100 +10111001011000000000100000000000 +10110101100000100001000000000000 +10111001101000000001100000000000 +11011000100000000000000000000000 +11100011111111111111111111101110 +00100000010001011111111111111111 +00000000010001100000000000010000 +00100000100010001111111111111111 +00000000100010010000000000010000 +10001001000001010011100000000000 +10001001000001100100000000000000 +10001001001001010010100000000000 +00000000111010100000000000010000 +10001001001001100011000000000000 +10110101000001010010100000000000 +10110100101010100010100000000000 +01010000101010000000000000000011 +01111000000010000000000000000001 +10110100110010000011000000000000 +10001000010000110001000000000000 +10001000100000010010000000000000 +00000000101000010000000000010000 +00111100101001010000000000010000 +10110100110000010011000000000000 +00100000111001111111111111111111 +10110100010001000000100000000000 +10110100001001100000100000000000 +10110100101001110001000000000000 +11000011101000000000000000000000 +01000100011000000000000000001000 +00110100000001000000000000100000 +11001000100000110010000000000000 +01001000100000000000000000000110 +11001000000001000001000000000000 +00110100000000110000000000000000 +10000000001000100001000000000000 +10111000011000000000100000000000 +11000011101000000000000000000000 +10111100001001000010000000000000 +10000000010000110001000000000000 +10000000001000110001100000000000 +10111000100000100001000000000000 +10111000011000000000100000000000 +11100011111111111111111111111010 +01000100011000000000000000001000 +00110100000001000000000000100000 +11001000100000110010000000000000 +01001000100000000000000000000110 +11001000000001000000100000000000 +00110100000000110000000000000000 +10111100010000010000100000000000 +10111000011000000001000000000000 +11000011101000000000000000000000 +10000000010001000010000000000000 +10111100001000110000100000000000 +10111100010000110001100000000000 +10111000100000010000100000000000 +10111000011000000001000000000000 +11100011111111111111111111111010 +01000100011000000000000000001000 +00110100000001000000000000100000 +11001000100000110010000000000000 +01001000100000000000000000000110 +00010100001000110000000000011111 +11001000000001000001000000000000 +10010100001000100001000000000000 +10111000011000000000100000000000 +11000011101000000000000000000000 +10111100001001000010000000000000 +10000000010000110001000000000000 +10010100001000110001100000000000 +10111000100000100001000000000000 +10111000011000000000100000000000 +11100011111111111111111111111010 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01000100010000000000000000100010 +10111000010000010010000000000000 +00110100000000110000000000001111 +01010100100000110000000000001011 +01111000000000110000000000000001 +00111000011000111001010011011000 +00111100001000010000000000000100 +10110100011000100001000000000000 +10110100010000010000100000000000 +01000000001000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110100000010110000000000000000 +01001100001000000000000000000011 +11001000000000010000100000000000 +00110100000010110000000000000001 +01001100010000000000000000000011 +11001000000000100001000000000000 +00011001011010110000000000000001 +10010000110000000001100000000000 +00100000011000110000000000000010 +01000100011000000000000000001000 +10001100001000100000100000000000 +01000101011000000000000000000010 +11001000000000010000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110100000000110000000000000000 +11111000000000000000000001001010 +11100011111111111111111111111000 +10010000000000000000100000000000 +00100000001000010000000000000001 +00111100001000010000000000000001 +11010000000000010000000000000000 +10010000111000000000100000000000 +10111011101000001111000000000000 +00110100001000010000000010100000 +11000000001000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01000100010000000000000000010101 +00110100000010110000000000000000 +01001100001000000000000000000011 +11001000000000010000100000000000 +00110100000010110000000000000001 +00010100010000110000000000011111 +10010000110000000010000000000000 +10011000011000100001000000000000 +00100000100001000000000000000010 +11001000010000110001000000000000 +01000100100000000000000000001000 +11000100001000100000100000000000 +01000101011000000000000000000010 +11001000000000010000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110100000000110000000000000001 +11111000000000000000000000101010 +11100011111111111111111111111000 +10010000000000000000100000000000 +00100000001000010000000000000001 +00111100001000010000000000000001 +11010000000000010000000000000000 +10010000111000000000100000000000 +10111011101000001111000000000000 +00110100001000010000000010100000 +11000000001000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01000100010000000000000000000110 +00110100000000110000000000000000 +11111000000000000000000000011100 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +10010000000000000000100000000000 +00100000001000010000000000000001 +00111100001000010000000000000001 +11010000000000010000000000000000 +10010000111000000000100000000000 +10111011101000001111000000000000 +00110100001000010000000010100000 +11000000001000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01000100010000000000000000000110 +00110100000000110000000000000001 +11111000000000000000000000001100 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +10010000000000000000100000000000 +00100000001000010000000000000001 +00111100001000010000000000000001 +11010000000000010000000000000000 +10010000111000000000100000000000 +10111011101000001111000000000000 +00110100001000010000000010100000 +11000000001000000000000000000000 +11110100001000100010000000000000 +01000100100000000000000000011000 +00110100000001000000000000000001 +01001100010000000000000000001011 +00110100000001010000000000000000 +01010100010000010000000000000011 +11001000001000100000100000000000 +10111000101001000010100000000000 +00000000100001000000000000000001 +00000000010000100000000000000001 +01011100100000001111111111111011 +01011100011000000000000000000010 +10111000101000000000100000000000 +11000011101000000000000000000000 +00111100010000100000000000000001 +00111100100001000000000000000001 +11110100001000100010100000000000 +01111100100001100000000000000000 +10100000110001010010100000000000 +01000100101000000000000000000010 +01001100010000001111111111111010 +00110100000001010000000000000000 +01000100100000001111111111110101 +00110100000001010000000000000000 +11100011111111111111111111101101 +00110100000001000000000000000001 +00110100000001010000000000000000 +11100011111111111111111111101010 +00010100001000100000000000011111 +10011000010000010000100000000000 +11001000001000100000100000000000 +11000011101000000000000000000000 +00110100000001100000000000000011 +10111000001000000010000000000000 +10111000010000000010100000000000 +01010000110000110000000000001100 +10111000010000010011000000000000 +00100000110001100000000000000011 +01011100110000000000000000001011 +00110100000000010000000000000011 +00101000100001100000000000000000 +00101000101000100000000000000000 +01011100110000100000000000000101 +00110100011000111111111111111100 +00110100100001000000000000000100 +00110100101001010000000000000100 +01010100011000011111111111111010 +00110100000000010000000000000000 +01000100011000000000000000001110 +01000000100001100000000000000000 +01000000101000010000000000000000 +00110100011000101111111111111111 +01000100110000010000000000000110 +11100000000000000000000000001010 +01000000100001100000000000000000 +01000000101000010000000000000000 +00110100010000101111111111111111 +01011100110000010000000000000110 +00110100100001000000000000000001 +00110100101001010000000000000001 +01011100010000001111111111111010 +00110100000000010000000000000000 +11000011101000000000000000000000 +11001000110000010000100000000000 +11000011101000000000000000000000 +00110100000001000000000000001111 +10111000001000000011100000000000 +10111000010000000011000000000000 +01010000100000110000000000101101 +10111000010000010010000000000000 +00100000100001000000000000000011 +01011100100000000000000000101011 +10111000010000000010000000000000 +10111000001000000010100000000000 +10111000011000000011000000000000 +00110100000001110000000000001111 +00101000100010000000000000000000 +00110100110001101111111111110000 +01011000101010000000000000000000 +00101000100010000000000000000100 +01011000101010000000000000000100 +00101000100010000000000000001000 +01011000101010000000000000001000 +00101000100010000000000000001100 +00110100100001000000000000010000 +01011000101010000000000000001100 +00110100101001010000000000010000 +01010100110001111111111111110101 +00110100011000111111111111110000 +00000000011001100000000000000100 +00100000011000110000000000001111 +00110100110001100000000000000001 +00111100110001100000000000000100 +10110100001001100011100000000000 +10110100010001100011000000000000 +00110100000000100000000000000011 +01010000010000110000000000010001 +00110100000000100000000000000000 +00110100000010000000000000000011 +10110100110000100010000000000000 +00101000100001010000000000000000 +10110100111000100010000000000000 +00110100010000100000000000000100 +01011000100001010000000000000000 +11001000011000100010000000000000 +01010100100010001111111111111010 +00110100011000111111111111111100 +00000000011000100000000000000010 +00100000011000110000000000000011 +00110100010000100000000000000001 +00111100010000100000000000000010 +10110100111000100011100000000000 +10110100110000100011000000000000 +01000100011000000000000000001000 +00110100000000100000000000000000 +10110100110000100010000000000000 +01000000100001010000000000000000 +10110100111000100010000000000000 +00110100010000100000000000000001 +00110000100001010000000000000000 +01011100010000111111111111111011 +11000011101000000000000000000000 +10111000001000000011100000000000 +10111000010000000011000000000000 +01010000010000010000000000001100 +10110100010000110010000000000000 +01010000001001000000000000001010 +01000100011000000000000000111111 +10110100001000110001000000000000 +00110100100001001111111111111111 +01000000100001010000000000000000 +00110100010000101111111111111111 +00110100011000111111111111111111 +00110000010001010000000000000000 +01011100011000001111111111111011 +11000011101000000000000000000000 +00110100000001000000000000001111 +01010000100000110000000000101101 +10111000010000010010000000000000 +00100000100001000000000000000011 +01011100100000000000000000101011 +10111000010000000010000000000000 +10111000001000000010100000000000 +10111000011000000011000000000000 +00110100000001110000000000001111 +00101000100010000000000000000000 +00110100110001101111111111110000 +01011000101010000000000000000000 +00101000100010000000000000000100 +01011000101010000000000000000100 +00101000100010000000000000001000 +01011000101010000000000000001000 +00101000100010000000000000001100 +00110100100001000000000000010000 +01011000101010000000000000001100 +00110100101001010000000000010000 +01010100110001111111111111110101 +00110100011000111111111111110000 +00000000011001100000000000000100 +00100000011000110000000000001111 +00110100110001100000000000000001 +00111100110001100000000000000100 +10110100001001100011100000000000 +10110100010001100011000000000000 +00110100000000100000000000000011 +01010000010000110000000000010001 +00110100000000100000000000000000 +00110100000010000000000000000011 +10110100110000100010000000000000 +00101000100001010000000000000000 +10110100111000100010000000000000 +00110100010000100000000000000100 +01011000100001010000000000000000 +11001000011000100010000000000000 +01010100100010001111111111111010 +00110100011000111111111111111100 +00000000011000100000000000000010 +00100000011000110000000000000011 +00110100010000100000000000000001 +00111100010000100000000000000010 +10110100111000100011100000000000 +10110100110000100011000000000000 +01000100011000000000000000001000 +00110100000000100000000000000000 +10110100110000100010000000000000 +01000000100001010000000000000000 +10110100111000100010000000000000 +00110100010000100000000000000001 +00110000100001010000000000000000 +01011100010000111111111111111011 +11000011101000000000000000000000 +00100000001001010000000000000011 +10111000001000000010000000000000 +01000100101000000000000000001011 +01000100011000000000000000101100 +00110100011000111111111111111111 +00100000010001100000000011111111 +11100000000000000000000000000011 +01000100011000000000000000101000 +00110100011000111111111111111111 +00110000100001100000000000000000 +00110100100001000000000000000001 +00100000100001010000000000000011 +01011100101000001111111111111011 +00110100000001010000000000000011 +01010000101000110000000000011010 +00100000010001010000000011111111 +00111100101001100000000000001000 +00110100000010100000000000001111 +10111000110001010010100000000000 +00111100101001100000000000010000 +10111000100000000100000000000000 +10111000110001010011000000000000 +10111000011000000011100000000000 +10111000100000000010100000000000 +00110100000010010000000000001111 +01010100011010100000000000010111 +00110100000001000000000000000000 +00110100000001110000000000000011 +10110101000001000010100000000000 +00110100100001000000000000000100 +01011000101001100000000000000000 +11001000011001000010100000000000 +01010100101001111111111111111100 +00110100011000111111111111111100 +00000000011001000000000000000010 +00100000011000110000000000000011 +00110100100001000000000000000001 +00111100100001000000000000000010 +10110101000001000100000000000000 +10111001000000000010000000000000 +01000100011000000000000000000111 +00100000010000100000000011111111 +00110100000001010000000000000000 +10110100100001010011000000000000 +00110000110000100000000000000000 +00110100101001010000000000000001 +01011100011001011111111111111101 +11000011101000000000000000000000 +01011000101001100000000000000000 +01011000101001100000000000000100 +01011000101001100000000000001000 +01011000101001100000000000001100 +00110100111001111111111111110000 +00110100101001010000000000010000 +01010100111010011111111111111010 +00110100011000111111111111110000 +00000000011010000000000000000100 +00100000011000110000000000001111 +00110101000010000000000000000001 +00111101000010000000000000000100 +10110100100010000100000000000000 +00110100000001000000000000000011 +01010100011001001111111111011100 +10111001000000000010000000000000 +11100011111111111111111111101000 +01111000000000110000000000000001 +00111000011000111010110110000000 +00101000011001110000000000000000 +10111000001000000100100000000000 +00110100000000110000000000000000 +00110100000001100000000000000001 +11100000000000000000000000001001 +01000000100001000000000000000000 +10110100111001000100000000000000 +01000001000010000000000000000001 +00100001000010000000000000000011 +01000101000001100000000000010010 +11001000101001000000100000000000 +01011100001000000000000000010011 +01000100100000010000000000010010 +10110101001000110010100000000000 +01000000101001010000000000000000 +10110100010000110010000000000000 +00110100011000110000000000000001 +10110100111001010100000000000000 +01000001000010000000000000000001 +00100001000010000000000000000011 +01011101000001101111111111110001 +01000000100001000000000000000000 +00110100101001010000000000100000 +10110100111001000100000000000000 +01000001000010000000000000000001 +00100001000010000000000000000011 +01011101000001101111111111110000 +00110100100001000000000000100000 +11001000101001000000100000000000 +01000100001000001111111111101111 +11000011101000000000000000000000 +10111000010000010001100000000000 +00100000011000110000000000000011 +01011100011000000000000000011101 +10111000001000000010000000000000 +00101000010000110000000000000000 +00101000001000010000000000000000 +01011100001000110000000000011000 +01111000000000110000000000000001 +00111000011000111001010111011000 +00101000011001110000000000000000 +01111000000000110000000000000001 +00111000011000111001010111011100 +00101000011001100000000000000000 +10100100001000000001100000000000 +10110100001001110000100000000000 +10100000001000110001100000000000 +10100000011001100001100000000000 +00110100000000010000000000000000 +01000100011000000000000000000011 +11100000000000000000000000011100 +01011100011000000000000000011001 +00110100100001000000000000000100 +00101000100000010000000000000000 +00110100010000100000000000000100 +00101000010010000000000000000000 +10110100001001110010100000000000 +10100100001000000001100000000000 +10100000101000110001100000000000 +10100000011001100001100000000000 +01000100001010001111111111110111 +10111000100000000000100000000000 +01000000001000110000000000000000 +01011100011000000000000000000110 +11100000000000000000000000001001 +00110100001000010000000000000001 +01000000001000110000000000000000 +00110100010000100000000000000001 +01000100011000000000000000000101 +01000000010001000000000000000000 +01000100011001001111111111111011 +11001000011001000000100000000000 +11000011101000000000000000000000 +01000000010001000000000000000000 +11001000011001000000100000000000 +11000011101000000000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +11000011101000000000000000000000 +10111000010000010010100000000000 +00100000101001010000000000000011 +10111000010000000011100000000000 +10111000001000000010000000000000 +01011100101000000000000000011000 +01111000000001000000000000000001 +00111000100001001001010111011000 +00101000010000110000000000000000 +00101000100010000000000000000000 +01111000000001000000000000000001 +00111000100001001001010111011100 +00101000100001110000000000000000 +10100100011000000011000000000000 +10110100011010000010000000000000 +10100000110001000011000000000000 +10100000110001110011000000000000 +10111000001000000010000000000000 +01011100110001010000000000001010 +01011000100000110000000000000000 +00110100010000100000000000000100 +00101000010000110000000000000000 +00110100100001000000000000000100 +10100100011000000011000000000000 +10110100011010000010100000000000 +10100000110001010010100000000000 +10100000101001110010100000000000 +01000100101000001111111111111000 +10111000010000000011100000000000 +00110100000000110000000000000000 +10110100111000110010100000000000 +01000000101001010000000000000000 +10110100100000110011000000000000 +00110100011000110000000000000001 +00110000110001010000000000000000 +01011100101000001111111111111011 +11000011101000000000000000000000 +00100000001000100000000000000011 +01000100010000000000000000101100 +01000000001000110000000000000000 +00110100000000100000000000000000 +01000100011000000000000000100111 +10111000001000000001000000000000 +11100000000000000000000000000011 +01000000010000110000000000000000 +01000100011000000000000000100010 +00110100010000100000000000000001 +00100000010000110000000000000011 +01011100011000001111111111111100 +01111000000001000000000000000001 +00111000100001001001010111011000 +00101000010000110000000000000000 +00101000100001100000000000000000 +01111000000001000000000000000001 +00111000100001001001010111011100 +00101000100001010000000000000000 +10100100011000000010000000000000 +10110100011001100001100000000000 +10100000011001000001100000000000 +10100000011001010001100000000000 +01011100011000000000000000010001 +00110100010000100000000000000100 +00101000010000110000000000000000 +10110100011001100010000000000000 +10100100011000000001100000000000 +10100000100000110001100000000000 +10100000011001010001100000000000 +01011100011000000000000000001010 +00110100010000100000000000000100 +00101000010000110000000000000000 +10110100011001100010000000000000 +10100100011000000001100000000000 +10100000100000110001100000000000 +10100000011001010001100000000000 +01000100011000001111111111110011 +11100000000000000000000000000010 +00110100010000100000000000000001 +01000000010000110000000000000000 +01011100011000001111111111111110 +11001000010000010001000000000000 +10111000010000000000100000000000 +11000011101000000000000000000000 +10111000001000000001000000000000 +11100011111111111111111111011110 +00110100000001100000000000000000 +01000100011000000000000000010111 +10111000010000010011100000000000 +00100000111001110000000000000011 +00110100011001001111111111111111 +01000100111000000000000000010101 +01000000001000110000000000000000 +01000000010001010000000000000000 +01011100011001010000000000001111 +00110100000001100000000000000000 +01000100100000000000000000001110 +00110100001000010000000000000001 +00110100010000100000000000000001 +01011100011000000000000000000100 +11100000000000000000000000001010 +01000100100000000000000000110011 +01000100011000000000000000110010 +01000000001000110000000000000000 +01000000010001010000000000000000 +00110100100001001111111111111111 +00110100001000010000000000000001 +00110100010000100000000000000001 +01000100011001011111111111111001 +11001000011001010011000000000000 +10111000110000000000100000000000 +11000011101000000000000000000000 +10111000001000000010100000000000 +00110100000000010000000000000011 +10111000010000000010000000000000 +01010000001000110000000000101000 +00101000101000010000000000000000 +00101000010000100000000000000000 +01011100001000100000000000100101 +00110100011000111111111111111100 +10111000111000000011000000000000 +01000100011000001111111111110101 +01111000000000100000000000000001 +00111000010000101001010111011000 +00101000010010010000000000000000 +01111000000000100000000000000001 +00111000010000101001010111011100 +00101000010010000000000000000000 +10100100001000000001000000000000 +10110100001010010000100000000000 +10100000001000100000100000000000 +10100000001010000000100000000000 +00110100000001110000000000000011 +01011100001000001111111111101001 +00110100101001010000000000000100 +00110100100001000000000000000100 +01010100011001110000000000000110 +10111000101000000000100000000000 +10111000100000000001000000000000 +01000100011000000000000000010100 +00110100011001001111111111111111 +11100011111111111111111111001111 +00101000101000010000000000000000 +00101000100010100000000000000000 +10110100001010010011000000000000 +10100100001000000001000000000000 +10100000110000100001000000000000 +10100000010010000001000000000000 +01011100001010100000000000000111 +00110100011000111111111111111100 +01000100011000000000000000000010 +01000100010000001111111111101111 +00110100000001100000000000000000 +10111000110000000000100000000000 +11000011101000000000000000000000 +10111000100000000001000000000000 +10111000101000000000100000000000 +00110100011001001111111111111111 +11100011111111111111111110111110 +01000000101000110000000000000000 +01000000100001010000000000000000 +11001000011001010011000000000000 +11100011111111111111111111001100 +10111000010000010010000000000000 +00100000100001000000000000000011 +01110100011001010000000000000011 +01100100100001000000000000000000 +10111000010000000011000000000000 +10100000100001010010000000000000 +10111000001000000010100000000000 +01000100100000000000000000010101 +01111000000001000000000000000001 +00111000100001001001010111011000 +00101000100010010000000000000000 +01111000000001000000000000000001 +00111000100001001001010111011100 +00101000100010000000000000000000 +00110100000010100000000000000011 +11100000000000000000000000000110 +01011000101001000000000000000000 +00110100011000111111111111111100 +00110100101001010000000000000100 +00110100010000100000000000000100 +01010001010000110000000000000111 +00101000010001000000000000000000 +10100100100000000011100000000000 +10110100100010010011000000000000 +10100000111001100011000000000000 +10100000110010000011000000000000 +01000100110000001111111111110110 +10111000010000000011000000000000 +01000100011000000000000000010100 +01000000110000100000000000000000 +00110100011000111111111111111111 +00110100101001000000000000000001 +00110000101000100000000000000000 +01000100010000000000000000001001 +00110100110000100000000000000001 +01000100011000000000000000001110 +01000000010001010000000000000000 +00110100011000111111111111111111 +00110100010000100000000000000001 +00110000100001010000000000000000 +00110100100001000000000000000001 +01011100101000001111111111111010 +00110100000000100000000000000000 +01000100011000000000000000000111 +10110100100000100010100000000000 +00110000101000000000000000000000 +00110100010000100000000000000001 +01011100011000101111111111111101 +11000011101000000000000000000000 +11000011101000000000000000000000 +11000011101000000000000000000000 +00110100000000110000000000000000 +01000100010000000000000000001100 +01000000001001000000000000000000 +01000100100000000000000000001010 +00110100010000101111111111111111 +10111000001000000001100000000000 +11100000000000000000000000000100 +01000000011001000000000000000000 +00110100010000101111111111111111 +01000100100000000000000000000011 +00110100011000110000000000000001 +01011100010000001111111111111100 +11001000011000010001100000000000 +10111000011000000000100000000000 +11000011101000000000000000000000 +01010111010100100010000001000011 +01101111011100100110010100111010 +00100000011100110111010001100001 +01110010011101000110100101101110 +01100111001000000111010101110000 +00101110001011100010111000001010 +00000000000000000000000000000000 +01010101011011100110000101100010 +01101100011001010010000001110100 +01101111001000000110010001100101 +01110100011001010111001001101101 +01101001011011100110010100100000 +01001101010000010100001100100000 +01100001011001000110010001110010 +01100101011100110111001100001010 +00000000000000000000000000000000 +01001100011011110110001101100001 +01101100001000000100110101000001 +01000011001000000110000101100100 +01100100011100100110010101110011 +01110011001110100010000000100101 +00110000001100100111100000111010 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000001110100010010100110000 +00110010011110000011101000100101 +00110000001100100111100000111010 +00100101001100000011001001111000 +00001010000000000000000000000000 +01001110011001010111011100100000 +01101101011000010111100000100000 +01110010011101010110111000100000 +01110100011010010110110101100101 +00100000011001100110111101110010 +00100000011000010010000001110100 +01100001011100110110101100100000 +00100101011100110010110000100000 +01101111011011000110010000100000 +00100101011011000110010000101100 +00100000011011100110010101110111 +00100000001001010110010000001010 +00000000000000000000000000000000 +01110100011000010111001101101011 +00100000001001010111001100101100 +00100000011100100111010101101110 +00100000011001100110111101110010 +00100000001001010110010000100000 +01101101011100110000101000000000 +01110011011100000110110001101100 +00101101011000100110100000000000 +01110011011010000110010101101100 +01101100001010110110011101110101 +01101001000000000000000000000000 +01110000011101000111000000000000 +01110101011100000111010001101001 +01101101011001010000000000000000 +01100011011010000110010101100011 +01101011001011010110110001101001 +01101110011010110000000000000000 +01101001011001000110110001100101 +00000000000000000000000000000000 +01100100011010010110000101100111 +00101101011001100111001101101101 +00101101001100010010110100100101 +01110011001110100010000000100101 +00110000001110010110010000101110 +00100101001100000011001101100100 +00111010001000000000000000000000 +01000101010011100101010001000101 +01010010001000000010010101110011 +00101100001000000111000001100001 +01100011011010110110010101110100 +00100000011011000110010101101110 +00100000001001010110100100001010 +00000000000000000000000000000000 +00100101011100110011101000100000 +01110010011001010110010101101110 +01110100011001010111001000100000 +01101001011011100010000000100101 +01101001001000000110110101110011 +00001010000000000000000000000000 +01001100010001010100000101010110 +01000101001000000010010101110011 +00100000001010000110111001100101 +01111000011101000011101000100000 +00100101001100110110100100101001 +00001010000010100000000000000000 +01010010010001010100001101010110 +00100000001001010011000000110010 +01100100001000000110001001111001 +01110100011001010111001100100000 +01100001011101000010000000100101 +00111001011001000010111000100101 +00110000001110010110010000101110 +00100101001100000011001101100100 +00100000001010000111010001111001 +01110000011001010010000000100101 +01111000001011000010000000100101 +01110011001010010000101000000000 +01100110011100110110110100111010 +00100000010101010110111001101011 +01101110011011110111011101101110 +00100000011100110111010001100001 +01110100011001010010000001100110 +01101111011100100010000001110000 +01101111011100100111010000100000 +00100101011100110000101000000000 +01010111011100100110111101101110 +01100111001000000110010001101111 +01101101011000010110100101101110 +00100000001001010110100100111010 +00100000011001000110100101110011 +01100011011000010111001001100100 +00001010000000000000000000000000 +01000001011011000111010001100101 +01110010011011100110000101110100 +01100101001000000110110101100001 +01110011011101000110010101110010 +00111010001000000110010001101001 +01110011011000110110000101110010 +01100100000010100000000000000000 +01001100011011110110111101110000 +01101001011011100110011100100000 +01100110011100100110000101101101 +01100101001110100010000001100100 +01101001011100110110001101100001 +01110010011001000000101000000000 +01100110011100110110110100100000 +01100110011011110111001000100000 +00100101011100110011101000100000 +01000101011100100111001001101111 +01110010001000000010010101101001 +00100000011010010110111000100000 +00100101011100110000101000000000 +01110000011100000111001101101001 +00000000000000000000000000000000 +00100101011100110010110100100101 +01101001001011010010010101110011 +00111010001000000000000000000000 +00100101011100110011101000100000 +01100101011100100111001001101111 +01110010001000000111000001100001 +01110010011100110110100101101110 +01100111001000000010001000100101 +01110011001000100000101000000000 +01100100011010010110000101100111 +00101101011000110110111101101110 +01100110011010010110011100000000 +01100100011010010110000101100111 +00101101011001010111100001110100 +01100101011011100111001101101001 +01101111011011100000000000000000 +01100100011010010110000101100111 +00101101011000100110110101100011 +00000000000000000000000000000000 +01100100011010010110000101100111 +00101101011100110110010101110010 +01110110011011110000000000000000 +01100100011010010110000101100111 +00101101011001100111001001100001 +01101101011001010111001100000000 +01100100011010010110000101100111 +00101101011101000110100101101101 +01100101000000000000000000000000 +01100100011010010110000101100111 +00101101011001100111001101101101 +00000000000000000000000000000000 +01101110011001010111011100100000 +01110100011010010110110101100101 +01101111011101010111010000100000 +01100110011011110111001000100000 +00100101011100110011101000100000 +00100101011010010000101000000000 +01110100011010010110110101100101 +01101111011101010111010000100000 +01100101011110000111000001101001 +01110010011001010110010000111010 +00100000001001010111001100001010 +00000000000000000000000000000000 +01010010010001010101000101010101 +01000101010100110101010000000000 +01010011010110010100111001000011 +01011111010100110100010101001110 +01000100000000000000000000000000 +01000001010011100100111001011111 +01010010010001010100001101000101 +01001001010100000101010000000000 +01000001010011100100111001011111 +01010011010001010100111001000100 +00000000000000000000000000000000 +01000110010000010101010101001100 +01010100000000000000000000000000 +01010001010101010100000101001100 +00000000000000000000000000000000 +01110011011110010110111001100011 +00000000000000000000000000000000 +01100100011001010110110001100001 +01111001010111110111001001100101 +01110001000000000000000000000000 +01110000011001000110010101101100 +01100001011110010101111101110010 +01100101011100010000000000000000 +01110000011001000110010101101100 +01100001011110010101111101110010 +01100101011100110111000000000000 +01100100011001010110110001100001 +01111001010111110111001001100101 +01110011011100000000000000000000 +01110000011001000110010101101100 +01100001011110010101111101110010 +01100101011100110111000001011111 +01100110011011110110110001101100 +01101111011101110101111101110101 +01110000000000000000000000000000 +01100001011011100110111001101111 +01110101011011100110001101100101 +00000000000000000000000000000000 +01110011011010010110011101101110 +01100001011011000110100101101110 +01100111000000000000000000000000 +01101101011000010110111001100001 +01100111011001010110110101100101 +01101110011101000000000000000000 +01010000010100000101001101101001 +00100000011001100110111101110010 +00100000010101110101001001010000 +01000011001011100010000001000011 +01101111011011010110110101101001 +01110100001000000010010101110011 +00101100001000000110001001110101 +01101001011011000111010000100000 +01101111011011100010000001000100 +01100101011000110010000000110001 +00111000001000000011001000110000 +00110001001101110000101000000000 +01110000011100000111001101101001 +00101101011101100011001000110000 +00110001001101100010111000110001 +00110010001011010011100000111001 +00101101011001110110001101100010 +00110101001110010011001100110100 +01100101000000000000000000000000 +01010000010101000101000000100000 +01110011011101000110000101110010 +01110100000010100000000000000000 +01010000010101000101000000100000 +01110011011101000110111101110000 +00001010000000000000000000000000 +01001100011011110110001101101011 +01101001011011100110011100100000 +01010000010011000100110000000000 +00001010010011000110111101100011 +01101011001000000111010001101001 +01101101011001010110111101110101 +01110100001011100000000000000000 +00101110000000000000000000000000 +01110111011100100011000100000000 +00100000011010010110111001110110 +01100001011011000110100101100100 +00000000000000000000000000000000 +00100101011100110101010001001001 +01001101010001010011101000100000 +00101000001001010110110001101001 +00100000001011010010000000110000 +01111000001001010110110001111000 +00101001001000000010010101101100 +01101001001011100010010100110000 +00110110011011000110100100100101 +01110011000010100000000000000000 +00100101011100110010010101110011 +00100101001100000011001001111000 +00101101001001010011000000110010 +01111000001011010010010100110000 +00110010011110000010110100100101 +00110000001100100111100000101101 +00100101001100000011001001111000 +00101101001001010011000000110010 +01111000001011010010010100110000 +00110010011110000010110100100101 +00110000001100100111100000101101 +00100101001100000011001001111000 +00101101001001010011000000110010 +01111000000010100000000000000000 +00100101011100110010010101110011 +00100101011100110010000000101000 +01110011011010010111101001100101 +00100000001001010110100100101001 +00001010000000000000000000000000 +00100101011100110010010101110011 +00000000000000000000000000000000 +00100101001100000011001001111000 +00000000000000000000000000000000 +00100101011100110101011001000101 +01010010010100110100100101001111 +01001110001110100010000001110101 +01101110011100110111010101110000 +01110000011011110111001001110100 +01100101011001000010000000101000 +00100101011010010010100100001010 +00000000000000000000000000000000 +00100101011100110101011001000101 +01010010010100110100100101001111 +01001110001110100010000000100101 +01101001001000000010100001110100 +01111001011100000110010100100000 +00100101011010010010110000100000 +01101100011001010110111000100000 +00100101011010010010110000100000 +01100100011011110110110101100001 +01101001011011100010000000100101 +01101001001010010000101000000000 +00100101011100110100011001001100 +01000001010001110101001100111010 +00100000001100000111100000100101 +00110000001101000111100000100000 +00101000011000110110111101110010 +01110010011001010110001101110100 +01101001011011110110111000100000 +00110000011110000010010100110000 +00111000011110000011101000100101 +00110000001110000111100000100000 +00100101001100000011100001110101 +00101001000010100000000000000000 +01010000010011110101001001010100 +00111010001000000000000000000000 +00100101011100110101001001000101 +01010011010101000011101000100000 +01110011011001010111000100100000 +00100101011010010010110000100000 +01100011011101000111001001101100 +00100000001001010110100100101100 +00100000011011000110111101100111 +00101101011010010110111001110100 +01100101011100100111011001100001 +01101100001000000010010101101001 +00001010000000000000000000000000 +00100101011100110100110101000101 +01010011010100110100000101000111 +01000101001110100010000000101000 +01000101001010010010000001010011 +01011001010011100100001100001010 +00000000000000000000000000000000 +00100101011100110010010101110011 +00100101011011000111010100101110 +00100101001100000011100101101001 +00001010000000000000000000000000 +01001101010100110100011100101101 +01010011010110010100111001000011 +00111010001000000000000000000000 +00100101011100110100110101000101 +01010011010100110100000101000111 +01000101001110100010000000101000 +01000101001010010010000001000100 +01000101010011000100000101011001 +01011111010100100100010101010001 +00001010000000000000000000000000 +01001101010100110100011100101101 +01000100010001010100110001000001 +01011001010111110101001001000101 +01010001001110100010000000000000 +00100101011100110100110101000101 +01010011010100110100000101000111 +01000101001110100010000000101000 +01000111001010010010000001000110 +01001111010011000100110001001111 +01010111010111110101010101010000 +00001010000000000000000000000000 +01001101010100110100011100101101 +01000110010011110100110001001100 +01001111010101110101111101010101 +01010000001110100010000000000000 +00100101011100110100110101000101 +01010011010100110100000101000111 +01000101001110100010000000101000 +01000111001010010010000001000100 +01000101010011000100000101011001 +01011111010100100100010101010011 +01010000000010100000000000000000 +01001101010100110100011100101101 +01000100010001010100110001000001 +01011001010111110101001001000101 +01010011010100000011101000100000 +00000000000000000000000000000000 +00100101011100110100110101000101 +01010011010100110100000101000111 +01000101001110100010000000101000 +01000111001010010010000001000001 +01001110010011100100111101010101 +01001110010000110100010100001010 +00000000000000000000000000000000 +01001101010100110100011100101101 +01000001010011100100111001001111 +01010101010011100100001101000101 +00111010001000000111001101110100 +01100001011011010111000000100000 +00000000000000000000000000000000 +00100101011100110010010101110011 +00100101001100000011001001111000 +00101101001001010011000000110010 +01111000001011010010010100110000 +00110100011110000000101000000000 +01001101010100110100011100101101 +01000001010011100100111001001111 +01010101010011100100001101000101 +00111010001000000110011101110010 +01100001011011100110010001101101 +01100001011100110111010001100101 +01110010001011010111000101110101 +01100001011011000110100101110100 +01111001001000000000000000000000 +00100101011100110100110101010011 +01000111001011010100000101001110 +01001110010011110101010101001110 +01000011010001010011101000100000 +01100111011100100110000101101110 +01100100011011010110000101110011 +01110100011001010111001000101101 +01110000011100100110100101101111 +00100000001001010110100100100000 +00100101011010010000101000000000 +00100101011100110010010101110011 +00100101001100000011001001111000 +00101101001001010011000000110010 +01111000001011010010010100110000 +00110010011110000010110100100101 +00110000001100100111100000101101 +00100101001100000011001001111000 +00101101001001010011000000110010 +01111000001011010010010100110000 +00110010011110000010110100100101 +00110000001100100111100000001010 +00000000000000000000000000000000 +01001101010100110100011100101101 +01000001010011100100111001001111 +01010101010011100100001101000101 +00111010001000000110011101110010 +01100001011011100110010001101101 +01100001011100110111010001100101 +01110010001011010110100101100100 +00100000000000000000000000000000 +00100101011100110100110101000101 +01010011010100110100000101000111 +01000101001110100010000000101000 +01000111001010010010000001010011 +01001001010001110100111001000001 +01001100010010010100111001000111 +00001010000000000000000000000000 +01001101010100110100011100101101 +01010011010010010100011101001110 +01000001010011000100100101001110 +01000111001110100010000001110100 +01100001011100100110011101100101 +01110100001011010111000001101111 +01110010011101000010000000000000 +00100101011100110101010001001100 +01010110001110100010000001110100 +01101111011011110010000001110011 +01101000011011110111001001110100 +00100000001010000010010101101001 +00100000001011010010000000100101 +01101001001000000011110100100000 +00100101011010010010100100001010 +00000000000000000000000000000000 +00100101011100110101010001001100 +01010110001110100010000001110100 +01111001011100000110010100100000 +00100101001100000011010001111000 +00100000011011000110010101101110 +00100000001001010110100100100000 +01101111011101010110100100100000 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000001110100010010100110000 +00110010011110000010000001110011 +01110101011000100010000000100101 +00110000001100100111100000111010 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000000010100000000000000000 +00100101011100110101010001001100 +01010110001110100010000001110100 +01101111011011110010000001110011 +01101000011011110111001001110100 +00100000001010000110010101111000 +01110000011001010110001101110100 +01100101011001000010000000100101 +01101001001011000010000001110100 +01101111011101000110000101101100 +00100000001001010110100100101001 +00001010000000000000000000000000 +01010100010011000101011000111010 +00100000000000000000000000000000 +01110100011011000111011000101101 +01100011011011110110111001110100 +01100101011011100111010000000000 +01000100010101010100110101010000 +00111010001000000000000000000000 +01110000011000010111100101101100 +01101111011000010110010000000000 +00100101011100110101011001001100 +01000001010011100010000000100101 +01101001000010100000000000000000 +00100101011100110100010101010100 +01001000001110100010000000100101 +00110000001101000111100000100000 +00101000001001010011000000110010 +01111000001110100010010100110000 +00110010011110000011101000100101 +00110000001100100111100000111010 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000001110100010010100110000 +00110010011110000010000000101101 +00111110001000000010010100110000 +00110010011110000011101000100101 +00110000001100100111100000111010 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000001110100010010100110000 +00110010011110000011101000100101 +00110000001100100111100000101001 +00001010000000000000000000000000 +00100101011100110100100101010000 +00111010001000000010010101101001 +00100000001010000010010101101001 +00101110001001010110100100101110 +00100101011010010010111000100101 +01101001001000000010110100111110 +00100000001001010110100100101110 +00100101011010010010111000100101 +01101001001011100010010101101001 +00101001001000000110110001100101 +01101110001000000010010101101001 +00001010000000000000000000000000 +00100101011100110101010101000100 +01010000001110100010000000101000 +00100101011010010010000000101101 +00111110001000000010010101101001 +00101001001000000110110001100101 +01101110001000000010010101101001 +00001010000000000000000000000000 +00100101011100110011101000100000 +00100101011011000110100100001010 +00000000000000000000000000000000 +01010111011000010111001001101110 +01101001011011100110011100111010 +00100000001001010111001100111010 +00100000011000110110000101101110 +00100000011011100110111101110100 +00100000011000010110010001101010 +01110101011100110111010000100000 +01100110011100100110010101110001 +01011111011100000111000001100010 +00100000001001010110110001101001 +00001010000000000000000000000000 +00100101011100110011101000100000 +00100101001110010110110001110101 +00101110001001010011000000111001 +01101100011010010000101000000000 +00100101011100110011101000100000 +01110011011011100111010000111101 +00100101011001000010110000100000 +01110011011001010110001100111101 +00100101011011000110010000101100 +00100000011011100111001101100101 +01100011001111010010010101101100 +01100100000010100000000000000000 +00100101001100000011100101100100 +00100000001001010011000000111001 +01100100001000000010010100110000 +00110011011001000010000000000000 +01110011011001010110111001100100 +00111010001000000000000000000000 +01110010011001010110001101110110 +00111010001000000000000000000000 +00100101001100000011100101100100 +00100000001001010011000000111001 +01100100001000000010010100110000 +00110011011001000000000000000000 +00100000001000000010000000100101 +00111001011001000010111000100101 +00110011011001000000101000000000 +01101001011011100110100101110100 +01101001011000010110110001101001 +01111010011010010110111001100111 +00000000000000000000000000000000 +01100110011000010111010101101100 +01110100011110010000000000000000 +01100100011010010111001101100001 +01100010011011000110010101100100 +00000000000000000000000000000000 +01101100011010010111001101110100 +01100101011011100110100101101110 +01100111000000000000000000000000 +01110000011100100110010100101101 +01101101011000010111001101110100 +01100101011100100000000000000000 +01110000011000010111001101110011 +01101001011101100110010100000000 +01110101011011100110001101100001 +01101100011010010110001001110010 +01100001011101000110010101100100 +00000000000000000000000000000000 +01110011011011000110000101110110 +01100101000000000000000000000000 +01110101011011100110001101100001 +01101100011010010110001001110010 +01100001011101000110010101100100 +00101111011101110111001000101101 +01110000011100100110010101110011 +01100101011011100111010000000000 +01101101011000010111001101110100 +01100101011100100010111101110111 +01110010001011010110110100101101 +01101100011011110110001101101011 +00000000000000000000000000000000 +01110101011011100110001101100001 +01101100011010010110001001110010 +01100001011101000110010101100100 +00101111011101110111001000101101 +01110011001011010110110001101111 +01100011011010110000000000000000 +01110101011011100110001101100001 +01101100011010010110001001110010 +01100001011101000110010101100100 +00101111011101110111001000101101 +01101100011011110110001101101011 +01100101011001000000000000000000 +01110111011100100010110101100011 +01100001011011000110100101100010 +01110010011000010111010001101001 +01101111011011100000000000000000 +01110111011100100010110101100011 +01100001011011000110100101100010 +01110010011000010111010001100101 +01100100000000000000000000000000 +01110111011100100010110101110010 +01100101011100110111000000101101 +01100011011000010110110001101001 +01100010001011010111001001100101 +01110001000000000000000000000000 +01110111011100100010110101101100 +01101001011011100110101100101101 +01101111011011100000000000000000 +01100001011000100111001101101111 +01101100011101010111010001100101 +00101101011000110110000101101100 +01101001011000100111001001100001 +01110100011010010110111101101110 +00000000000000000000000000000000 +01101000011011110110111101101011 +00111010001000000010010101110011 +00001010000000000000000000000000 +01010100001100100010000001101111 +01110010001000000101010000110011 +00100000011010010110111001100011 +01101111011100100111001001100101 +01100011011101000010110000100000 +01100100011010010111001101100011 +01100001011100100110010001101001 +01101110011001110010000001110100 +01110101011100000110110001100101 +00001010000000000000000000000000 +01010100001100110010000001101111 +01110010001000000101010000110110 +00100000011010010110111001100011 +01101111011100100111001001100101 +01100011011101000010110000100000 +01100100011010010111001101100011 +01100001011100100110010001101001 +01101110011001110010000001110100 +01110101011100000110110001100101 +00001010000000000000000000000000 +01001000011000010110111001100100 +01110011011010000110000101101011 +01100101001000000110011001100001 +01101001011011000111010101110010 +01100101001110100010000001101110 +01101111011101110010000001101110 +01101111011011100010110101110111 +01110010001000000010010101110011 +00001010000000000000000000000000 +01010010011001010111010001110010 +01111001001000000110111101101110 +00100000011101000110100101101101 +01100101011011110111010101110100 +00001010000000000000000000000000 +00100101011100110011101000100000 +01110011011101010110001001110011 +01110100011000010111010001100101 +00100000001001010110100100001010 +00000000000000000000000000000000 +01010100011110000011110100111110 +00111110011100110110001101100001 +01101100011001010110010001010000 +01101001011000110110111101110011 +01100101011000110110111101101110 +01100100011100110010111001101101 +01110011011000100010000000111101 +00100000001100000111100000100101 +01111000000010100000000000000000 +01010100011110000011110100111110 +00111110011100110110001101100001 +01101100011001010110010001010000 +01101001011000110110111101110011 +01100101011000110110111101101110 +01100100011100110010111001101100 +01110011011000100010000000111101 +00100000001100000111100000100101 +01111000000010100000000000000000 +01010010011110000010000001100110 +01101001011110000110010101100100 +00100000011001000110010101101100 +01100001011110010010000000111101 +00100000001001010110010000001010 +00000000000000000000000000000000 +01010010011110000011110100111110 +00111110011100110110001101100001 +01101100011001010110010001010000 +01101001011000110110111101110011 +01100101011000110110111101101110 +01100100011100110010111001101101 +01110011011000100010000000111101 +00100000001100000111100000100101 +01111000000010100000000000000000 +01010010011110000011110100111110 +00111110011100110110001101100001 +01101100011001010110010001010000 +01101001011000110110111101110011 +01100101011000110110111101101110 +01100100011100110010111001101100 +01110011011000100010000000111101 +00100000001100000111100000100101 +01111000000010100000000000000000 +00100011001000110010001100100000 +01110100001101000010111001110000 +01101000011000010111001101100101 +00100000011010010111001100100000 +01100001011011000111001001100101 +01100001011001000111100100100000 +01100011011011110111001001110010 +01100101011000110111010001100101 +01100100001000000110011001101111 +01110010001000000110001001101001 +01110100011100110110110001101001 +01100100011001010000101000000000 +01110100001100010011101000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +01110100001101000011101000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000011000100110100101110100 +01110011011011000110100101100100 +01100101001110100010000000100101 +01100100000010100000000000000000 +00100000001000000010000000100000 +00100000001000000111001101100101 +01100011001011100010000000100000 +00100000001000000010000000100000 +00100000011011100111001100101110 +01110000011010000110000100100000 +00100000001000000010000000100000 +00100000001000000111001101100101 +01100011001011100010000000100000 +00100000001000000010000000100000 +00100000011011100111001100101110 +01110000011010000110000100001010 +00000000000000000000000000000000 +01000101010100100101001001001111 +01010010001110100010000001001110 +01100101011101110010000001100011 +01101100011000010111001101110011 +00100000001001010110100100001010 +00000000000000000000000000000000 +01000010010101010100011100111010 +00100000010101000111001001111001 +01101001011011100110011100100000 +01110100011011110010000001110011 +01100101011011100110010000100000 +01101001011011100111011001100001 +01101100011010010110010000100000 +01110111011100100101111101101101 +01110011011001110010000001101101 +01101111011001000110010100111101 +00100101011110000010000001101001 +01100100001111010010010101111000 +00000000000000000000000000000000 +01101000011000010110111001100100 +01101100011001010010000001010011 +01101001011001110110111001100001 +01101100011010010110111001100111 +00100000011011010111001101100111 +00101100001000000110011001100001 +01101001011011000110010101100100 +00101100001000000101010001101000 +01101001011100110010000001101001 +01110011001000000110111001101111 +01110100001000000110111101110010 +01100111011000010110111001101001 +01111010011000010111010001101001 +01101111011011100010000001100101 +01111000011101000110010101101110 +01110011011010010110111101101110 +00100000010101000100110001010110 +00100000001111010010000000110000 +01111000001001010111100000001010 +00000000000000000000000000000000 +01101000011000010110111001100100 +01101100011001010010000001010011 +01101001011001110110111001100001 +01101100011010010110111001100111 +00100000011011010111001101100111 +00101100001000000110011001100001 +01101001011011000110010101100100 +00101100001000000110111001101111 +01110100001000000100001101000101 +01010010010011100010011101110011 +00100000010011110101010101001001 +00100000001111010010000000110000 +01111000001001010111100000001010 +00000000000000000000000000000000 +01101000011000010110111001100100 +01101100011001010010000001010011 +01101001011001110110111001100001 +01101100011010010110111001100111 +00100000011011010111001101100111 +00101100001000000110011001100001 +01101001011011000110010101100100 +00101100001000000110111001101111 +01110100001000000101011101101000 +01101001011101000110010100100000 +01010010011000010110001001100010 +01101001011101000010000001101101 +01100001011001110110100101100011 +00100000011011100111010101101101 +01100010011001010111001000100000 +00111101001000000011000001111000 +00100101011110000000101000000000 +01101000011000010110111001100100 +01101100011001010010000001010011 +01101001011001110110111001100001 +01101100011010010110111001100111 +00100000011011010111001101100111 +00101100001000000110011001100001 +01101001011011000110010101100100 +00101100001000000110111001101111 +01110100001000000111001101110101 +01110000011100000110111101110010 +01110100011001010110010000100000 +01110110011001010111001001110011 +01101001011011110110111000100000 +01101110011101010110110101100010 +01100101011100100010000000111101 +00100000001100000111100000100101 +01111000000010100000000000000000 +00100101011100110010000000111101 +00100000001001010110110001100100 +00111010001001010011000000111001 +01101100011001000011101000100101 +00110000001100110110110001100100 +00001010000000000000000000000000 +01010101011011100110100101101110 +01101001011101000110100101100001 +01101100011010010111101001100101 +01100100000000000000000000000000 +01000101010100100101001001001111 +01010010001110100010000000100101 +01110011001110100010000001010100 +01101001011011010110010101110011 +01110100011000010110110101110000 +01110011010010010110111001100011 +01101111011100100111001001100101 +01100011011101000011101000100000 +00100101011001000010000000100101 +01100100001000000010010101100100 +00100000001001010110010000001010 +00000000000000000000000000000000 +01110011011001010111001001110110 +01101111001110100111010000110001 +00000000000000000000000000000000 +01110011011001010111001001110110 +01101111001110100111010000110010 +00000000000000000000000000000000 +01110011011001010111001001110110 +01101111001110100111010000110011 +00000000000000000000000000000000 +01110011011001010111001001110110 +01101111001110100111010000110100 +00000000000000000000000000000000 +01110011011001010111001001110110 +01101111001110100111010000110101 +00000000000000000000000000000000 +01110011011001010111001001110110 +01101111001110100111010000110110 +00000000000000000000000000000000 +00101101001111100110110101100100 +01100101011011000110000101111001 +00000000000000000000000000000000 +01000101010100100101001001001111 +01010010001110100010000000100101 +01110011001110100010000001010100 +01101001011011010110010101110011 +01110100011000010110110101110000 +01110011010010010110111001100011 +01101111011100100111001001100101 +01100011011101000011101000100000 +00100101011001000010000000100101 +01100100001000000000101000000000 +00100000001010000111011101100001 +01101001011101000010000001100110 +01101111011100100010000001101000 +01110111001010010000000000000000 +01101111011001100110011001110011 +01100101011101000101111101101000 +01110111001110100010000000100101 +01101100011010010010111000100101 +00110000001110010110110001101001 +00100000001010000010101100100101 +01101100011010010010100100001010 +00000000000000000000000000000000 +01010000010011000100110000100000 +01001111011101010111010001001111 +01100110010011000110111101100011 +01101011001011000010000001110011 +01101000011011110111010101101100 +01100100001000000111001001100101 +01110011011101000110000101110010 +01110100001000000111001101111001 +01101110011000110000101000000000 +01110011011001010111001001110110 +01101111001110100110001001110101 +01110011011110010000101000000000 +01110111011100100101111101110011 +01100101011100100111011001101111 +00100000011100110111010001100001 +01110100011001010011101000100000 +00100101011100110010010101110011 +00001010000000000000000000000000 +01101111011011000110010001110011 +01100101011101000111000000100000 +00100101011010010010110000100000 +01101111011001100110011001110011 +01100101011101000010000000100101 +01101001001110100010010100110000 +00110100011010010000101000000000 +01100001011001000110101001110101 +01110011011101000010000001110000 +01101000011000010111001101100101 +00100000001001010110100100001010 +00000000000000000000000000000000 +01010011010110010100111001000011 +01011111010011100101001101000101 +01000011000000000000000000000000 +01010011010110010100111001000011 +01011111010100110100010101000011 +00000000000000000000000000000000 +01010011010110010100111001000011 +01011111010100000100100001000001 +01010011010001010000000000000000 +01010100010100100100000101000011 +01001011010111110101000001001000 +01000001010100110100010100000000 +01010111010000010100100101010100 +01011111010011110100011001000110 +01010011010001010101010001011111 +01010011010101000100000101000010 +01001100010001010000000000000000 +01100011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000111001101100101 +01101110011001000010000001110011 +01111001011011100110001100001010 +00000000000000000000000000000000 +01100011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000111001101100101 +01101110011001000010000001100001 +01101110011011100110111101110101 +01101110011000110110010100001010 +00000000000000000000000000000000 +01100011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000111001101100101 +01101110011001000010000001110010 +01100101011100010111010101100101 +01110011011101000000101000000000 +01001110011001010111011100100000 +01100110011011110111001001100101 +01101001011001110110111000100000 +01001101011000010111001101110100 +01100101011100100010000000100101 +01101001001000000110000101100100 +01100100011001010110010000001010 +00000000000000000000000000000000 +00100101011100110011101000100000 +01100011011000010110111000100111 +01110100001000000110100101101110 +01101001011101000010000001100101 +01111000011101000110010101101110 +01110011011010010110111101101110 +00001010000000000000000000000000 +01100011011011000110111101100011 +01101011001000000110001101101100 +01100001011100110111001100100000 +00111101001000000010010101100100 +00001010000000000000000000000000 +01100011011011000110111101100011 +01101011001000000110000101100011 +01100011011101010111001001100001 +01100011011110010010000000111101 +00100000001001010110010000001010 +00000000000000000000000000000000 +01001001011001110110111001101111 +01110010011001010110010000100000 +01100110011100100110000101101101 +01100101001000000010010101101001 +00001010000000000000000000000000 +01110000011100000101111101110011 +01101100011000010111011001100101 +00100000001110100010000001000100 +01100101011011000110000101111001 +00100000010100100110010101110011 +01110000001000000110010001101111 +01100101011100110110111000100111 +01110100001000000110110101100001 +01110100011000110110100000100000 +01000100011001010110110001100001 +01111001001000000101001001100101 +01110001001000000010100001100110 +00100000001001010111100000101001 +00001010000000000000000000000000 +01110000011100000101111101110000 +01100011011011000110111101100011 +01101011001000000011101000100000 +01010000010001000110010101101100 +01100001011110010010000001010010 +01100101011100110111000000100000 +01100100011011110110010101110011 +01101110001001110111010000100000 +01101101011000010111010001100011 +01101000001000000101000001000100 +01100101011011000110000101111001 +00100000010100100110010101110001 +00001010000000000000000000000000 +00100101011100110011101000100000 +01010000010001000110010101101100 +01100001011110010010000001010010 +01100101011100110111000000100000 +01000110001011010111010101110000 +00100000011001000110111101100101 +01110011011011100010011101110100 +00100000011011010110000101110100 +01100011011010000010000001010000 +01000100011001010110110001100001 +01111001001000000101001001100101 +01110001000010100000000000000000 +01000101010100100101001001001111 +01010010001110100010000000100101 +01110011001110100010000001000110 +01101111011011000110110001101111 +01110111001000000111010101110000 +00100000011011010110010101110011 +01110011011000010110011101100101 +00100000011010010111001100100000 +01101110011011110111010000100000 +01100110011100100110111101101101 +00100000011000110111010101110010 +01110010011001010110111001110100 +00100000011100000110000101110010 +01100101011011100111010000001010 +00000000000000000000000000000000 +01000101010100100101001001001111 +01010010001110100010000000100101 +01110011001110100010000001010011 +01101100011000010111011001100101 +00100000011101110110000101110011 +00100000011011100110111101110100 +00100000011101110110000101101001 +01110100011010010110111001100111 +00100000011000010010000001100110 +01101111011011000110110001101111 +01110111001000000111010101110000 +00100000011011010110010101110011 +01110011011000010110011101100101 +00001010000000000000000000000000 +01000101010100100101001001001111 +01010010001110100010000000100101 +01110011001110100010000001010011 +01100101011100010111010101100101 +01101110011000110110010101001001 +01000100001000000010010101100100 +00100000011001000110111101100101 +01110011011011100010011101110100 +00100000011011010110000101110100 +01100011011010000010000001101100 +01100001011100110111010000100000 +01010011011110010110111001100011 +00100000011011010110010101110011 +01110011011000010110011101100101 +00100000001001010110010000001010 +00000000000000000000000000000000 +00100101011100110010100000100101 +01100100001010010010000001001101 +01100101011100110111001101100001 +01100111011001010010000001100011 +01100001011011100010011101110100 +00100000011000100110010100100000 +01110011011001010110111001110100 +00001010000000000000000000000000 +01010011010001010100111001010100 +00100000001001010011000000110010 +01100100001000000110001001111001 +01110100011001010111001100100000 +01100001011101000010000000100101 +01100100001011100010010100110000 +00111001011001000010111000100101 +00110000001100110110010000100000 +00101000001001010111001100101001 +00001010000000000000000000000000 +00100101011100110011101000100101 +01101001001110100010000001000101 +01110010011100100110111101110010 +00100000001100010000101000000000 +00100101011100110011101000100101 +01101001001110100010000001000101 +01110010011100100110111101110010 +00100000001100100000101000000000 +01110000011100100110010100101101 +00000000000000000000000000000000 +01000010011001010111001101110100 +00100000011001100110111101110010 +01100101011010010110011101101110 +00100000011011010110000101110011 +01110100011001010111001000100000 +01101001011100110010000000100101 +01101001001011110010010101101001 +00001010000000000000000000000000 +00100101011100110011101000100000 +01100101011100100111001001101111 +01110010000010100000000000000000 +00100101011100110011101000100000 +01110000011000010111001101110011 +01101001011101100110010100001010 +00000000000000000000000000000000 +00100101011100110011101000100000 +00100101011100110110110101100001 +01110011011101000110010101110010 +00001010000000000000000000000000 +01001110011001010111011100100000 +01010101010101000100001100100000 +01101111011001100110011001110011 +01100101011101000011101000100000 +00100101011010010000101000000000 +00100101011100110011101000100000 +01110011011011000110000101110110 +01100101000010100000000000000000 +00101101000000000000000000000000 +00100101011100110010010101100100 +00101110001001010011000000111001 +01100100000000000000000000000000 +01010100011100100110100101101101 +00100000011101000110111101101111 +00101101011011000110111101101110 +01100111001000000110110101110000 +01100100001110100010000000100101 +01101001000010100000000000000000 +01000001011001100111010001100101 +01110010001000000110000101110110 +01100111001010000010010101101001 +00101001001011000010000001101101 +01100101011000010110111001010000 +01100001011101000110100001000100 +01100101011011000110000101111001 +00111010001000000010010101101001 +00001010000000000000000000000000 +01100101011100100111001001101111 +01110010001000000110100101101110 +00100000011101000101111101101111 +01110000011100110010110100111110 +01110011011001010111001001110110 +01101111010111110110100101101110 +01101001011101000000000000000000 +01001001011011100110100101110100 +01101001011000010110110001101001 +01111010011001010110010000111010 +00100000011011110110001001110011 +01011111011001000111001001101001 +01100110011101000010000000100101 +01101100011011000110100100001010 +00000000000000000000000000000000 +01001111011001100110011001110011 +01100101011101000010000001100110 +01110010011011110110110100100000 +01101101011000010111001101110100 +01100101011100100011101000100000 +00100000001000000010000000100000 +00100101011100110000101000000000 +01010100001100010011101000100000 +00100101011100110000101000000000 +01010100001100100011101000100000 +00100101011100110000101000000000 +01001111011000100111001101100101 +01110010011101100110010101100100 +00100000011001000111001001101001 +01100110011101000011101000100000 +00100101001110010110100100001010 +00000000000000000000000000000000 +01100100011010010111001101100011 +01100001011100100110010000100000 +01010100001100110010111101010100 +00110100001110100010000001110111 +01100101001000000110110101101001 +01110011011100110010000001010100 +00110001001011110101010000110010 +00001010000000000000000000000000 +01010100001100110011101000100000 +00100101011100110000101000000000 +01010100001101000011101000100000 +00100101011100110000101000000000 +01001101011000010111001101110100 +01100101011100100010000001110100 +01101111001000000111001101101100 +01100001011101100110010100111010 +00100000001001010111001100001010 +00000000000000000000000000000000 +01010011011011000110000101110110 +01100101001000000111010001101111 +00100000011011010110000101110011 +01110100011001010111001000111010 +00100000001001010111001100001010 +00000000000000000000000000000000 +01101101011001010110000101101110 +01010000011000010111010001101000 +01000100011001010110110001100001 +01111001001110100010000000100101 +01110011000010100000000000000000 +01010100001101010011101000100000 +00100101011100110000101000000000 +01010100001101100011101000100000 +00100101011100110000101000000000 +01010011011011000110000101110110 +01100101001000000100111101101110 +01101100011110010010110000100000 +01100011011011000110111101100011 +01101011001000000110001101101100 +01100001011100110111001100100000 +01110011011001010111010000100000 +01110100011011110010000000100101 +01100100000010100000000000000000 +00100101001100100011000001110101 +00000000000000000000000000000000 +00100101011101010000000000000000 +00100101001100010011000101110101 +00100101001100000011100101110101 +00000000000000000000000000000000 +00100101011101010010010100110000 +00111001011101010000000000000000 +01101100011011100110101100111010 +00100101011001000010000001110010 +01111000001110100010010101100100 +00100000011101000111100000111010 +00100101011001000010000000000000 +01101100011011110110001101101011 +00111010001001010110010000100000 +00000000000000000000000000000000 +01110000011101000111000000111010 +00100101011100110010000000000000 +01110011011101100011101000100101 +01100100001000000000000000000000 +01110011011100110011101000100111 +00100101011100110010011100100000 +00000000000000000000000000000000 +01100001011101010111100000100101 +01100100001110100010010101111000 +00100000000000000000000000000000 +01110011011001010110001100111010 +00100101011001000010000001101110 +01110011011001010110001100111010 +00100101011001000010000000000000 +01101101011101010011101000100101 +01110011001000000000000000000000 +01100100011011010111001100111010 +00100101011100110010000000000000 +01100100011101000111100001101101 +00111010001001010110010000100000 +01100100011100100111100001101101 +00111010001001010110010000100000 +00000000000000000000000000000000 +01100100011101000111100001110011 +00111010001001010110010000100000 +01100100011100100111100001110011 +00111010001001010110010000100000 +00000000000000000000000000000000 +01100001011100110111100101101101 +00111010001001010110010000100000 +00000000000000000000000000000000 +01100011011100100111010001110100 +00111010001001010111001100100000 +00000000000000000000000000000000 +01100011011010110110111100111010 +00100101011001000010000000000000 +01110011011001010111010001110000 +00111010001001010110010000100000 +00000000000000000000000000000000 +01110101011000110110111001110100 +00111010001001010110010000100000 +00000000000000000000000000000000 +01101000011001000011101000100101 +01100100001000000110110101100100 +00111010001001010110010000100000 +01100001011001000011101000100101 +01100100001000000000000000000000 +01110000011000110110001000000000 +01110100011001010110110101110000 +00111010001000000010010101100100 +00101110001001010011000000110100 +01100100001000000100001100000000 +00001010000010100101000001010100 +01010000001000000111001101110100 +01100001011101000111010101110011 +00111010001000000000000000000000 +00100101011100110000000000000000 +00001010000010100101001101111001 +01101110011000110010000001101001 +01101110011001100110111100100000 +01101110011011110111010000100000 +01110110011000010110110001101001 +01100100000010100000000000000000 +00001010000010100101001101111001 +01101110011000110110100001110010 +01101111011011100110100101111010 +01100001011101000110100101101111 +01101110001000000111001101110100 +01100001011101000111010101110011 +00111010000010100000000000000000 +01010111010100100010000001010000 +01010100010100000010000001000011 +01101111011100100110010100100000 +01010011011110010110111001100011 +00100000010011010110111101101110 +01101001011101000110111101110010 +00100000001001010111001100000000 +00001010010001010111001101100011 +00100000001111010010000001100101 +01111000011010010111010000000000 +00001010000010100101010001000001 +01001001001000000101010001101001 +01101101011001010011101000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000000000000000000000000000 +00001010000010100100110001101001 +01101110011010110010000001110011 +01110100011000010111010001110101 +01110011001110100000000000000000 +00001010001001010111001100111010 +00100000000000000000000000000000 +01110111011100100111010100110001 +00000000000000000000000000000000 +01001100011010010110111001101011 +00100000011101010111000000100000 +00100000001000000000000000000000 +01001100011010010110111001101011 +00100000011001000110111101110111 +01101110001000000000000000000000 +00101000010100100101100000111010 +00100000001001010110010000101100 +00100000010101000101100000111010 +00100000001001010110010000101001 +00000000000000000000000000000000 +00100000010010010101000001110110 +00110100001110100010000000000000 +01000010010011110100111101010100 +01010000001000000111001001110101 +01101110011011100110100101101110 +01100111000000000000000000000000 +00100101011100110010000000101000 +01100110011100100110111101101101 +00100000011000100110111101101111 +01110100011100000010100100000000 +00100101011100110010000000101000 +01110011011101000110000101110100 +01101001011000110010000001100001 +01110011011100110110100101100111 +01101110011011010110010101101110 +01110100001010010000000000000000 +00001010010011010110111101100100 +01100101001110100010000000000000 +01010111010100100010000001001111 +01100110011001100000000000000000 +00001010010000110110110001101111 +01100011011010110010000001101111 +01100110011001100111001101100101 +01110100001110100010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000000000 +00100101001100100110100100101110 +00100101001100000011100101101001 +00100000011100110000000000000000 +00100101011010010010111000100101 +00110000001110010110100100100000 +01110011000000000000000000000000 +00100101001110010110100100100000 +01101110011100110000000000000000 +00001010010011110110111001100101 +00101101011101110110000101111001 +00100000011001000110010101101100 +01100001011110010010000001100001 +01110110011001010111001001100001 +01100111011001010110010000111010 +00100000001000000010000000100000 +00100000001000000010000000000000 +00001010010011110110001001110011 +01100101011100100111011001100101 +01100100001000000110010001110010 +01101001011001100111010000111010 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000000000 +01010111010100100010000001001101 +01100001011100110111010001100101 +01110010001000000010000000000000 +01010111010100100010000001010011 +01101100011000010111011001100101 +00100000001000000010000000000000 +01010111010100100010000001010101 +01101110011010110110111001101111 +01110111011011100010000000000000 +01001100011011110110001101101011 +01100101011001000010000000000000 +01001110011011110100110001101111 +01100011011010110010000000000000 +01000011011000010110110001101001 +01100010011100100110000101110100 +01100101011001000000000000000000 +01010101011011100110001101100001 +01101100011010010110001001110010 +01100001011101000110010101100100 +00000000000000000000000000000000 +01010011011001010111001001110110 +01101111001000000111001101110100 +01100001011101000110010100111010 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000000000 +01010000011010000110000101110011 +01100101001000000111010001110010 +01100001011000110110101101101001 +01101110011001110011101000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000000000 +01001111010011100000101000000000 +01001111010001100100011000001010 +00000000000000000000000000000000 +01000001011101010111100000100000 +01100011011011000110111101100011 +01101011001000000010010101100100 +00100000011100110111010001100001 +01110100011101010111001100111010 +00100000001000000010000000100000 +00100000001000000010000000100000 +00000000000000000000000000000000 +01100101011011100110000101100010 +01101100011001010110010000000000 +00101100001000000110110001101111 +01100011011010110110010101100100 +00000000000000000000000000000000 +00001010010101000110100101101101 +01101001011011100110011100100000 +01110000011000010111001001100001 +01101101011001010111010001100101 +01110010011100110011101000001010 +00000000000000000000000000000000 +01010010011011110111010101101110 +01100100001011010111010001110010 +01101001011100000010000001110100 +01101001011011010110010100100000 +00101000011011010111010100101001 +00111010001000000000000000000000 +00100101011100110010000001110000 +01110011000010100000000000000000 +01001101011000010111001101110100 +01100101011100100010110101110011 +01101100011000010111011001100101 +00100000011001000110010101101100 +01100001011110010011101000100000 +00100000001000000000000000000000 +01001101011000010111001101110100 +01100101011100100010000001010000 +01001000010110010010000001100100 +01100101011011000110000101111001 +01110011001110100010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000000000000000000000000000 +01010100010110000011101000100000 +00100101001110010110010000100000 +01110000011100110010110000100000 +01010010010110000011101000100000 +00100101001110010110010000100000 +01110000011100110000101000000000 +01010011011011000110000101110110 +01100101001000000101000001001000 +01011001001000000110010001100101 +01101100011000010111100101110011 +00111010001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000000000000000000000000000 +01010100011011110111010001100001 +01101100001000000110110001101001 +01101110011010110010000001100001 +01110011011110010110110101101101 +01100101011101000111001001111001 +00111010000000000000000000000000 +00100101001100100011000101100100 +00100000011100000111001100001010 +00000000000000000000000000000000 +01000011011000010110001001101100 +01100101001000000111001001110100 +01110100001000000110010001100101 +01101100011000010111100100111010 +00100000001000000010000000100000 +00100000001000000000000000000000 +01000011011011000110111101100011 +01101011001000000110111101100110 +01100110011100110110010101110100 +00111010000000000000000000000000 +00100101001100100011100101100100 +00100000011100000111001100001010 +00000000000000000000000000000000 +01010000011010000110000101110011 +01100101001000000111001101100101 +01110100011100000110111101101001 +01101110011101000011101000000000 +00100101001100100011011101100100 +00100000011100000111001100001010 +00000000000000000000000000000000 +01010011011010110110010101110111 +00111010001000000010000000100000 +00100000001000000000000000000000 +00100101001100110011001001100100 +00100000011100000111001100001010 +00000000000000000000000000000000 +01010101011100000110010001100001 +01110100011001010010000001100011 +01101111011101010110111001110100 +01100101011100100011101000000000 +00100101001100100011011101100100 +00001010000000000000000000000000 +01110101011011100110101101101110 +01101111011101110110111000000000 +01100100011010010110000101100111 +01110011000000000000000000000000 +01110011011101000110000101110100 +01110011000000000000000000000000 +00011011010110110011000100100101 +01100011000000000000000000000000 +01000011011011110110110101101101 +01100001011011100110010000100000 +00100010001001010111001100100010 +00111010001000000110010101110010 +01110010011011110111001000100000 +00100101011001000000101000000000 +01010101011011100111001001100101 +01100011011011110110011101101110 +01101001011110100110010101100100 +00100000011000110110111101101101 +01101101011000010110111001100100 +00100000001000100010010101110011 +00100010001011100000101000000000 +01110111011100100110001100100011 +00100000000000000000000000000000 +00100101011000110000000000000000 +01100101011110000110010101100011 +01110101011101000110100101101110 +01100111001110100010000000100101 +01110011000010100000000000000000 +01000101011011010111000001110100 +01111001001000000110100101101110 +01101001011101000010000001110011 +01100011011100100110100101110000 +01110100001011100010111000101110 +00001010000000000000000000000000 +00101101001011010010000001100010 +01110101011010010110110001110100 +00101101011010010110111000100000 +01110011011000110111001001101001 +01110000011101000010000000101101 +00101101000010100000000000000000 +00101000011001010110110101110000 +01110100011110010010100100001010 +00000000000000000000000000000000 +01010111010100100010000001000011 +01101111011100100110010100100000 +01100010011101010110100101101100 +01100100001110100010000000100101 +01110011001001010111001100001010 +00000000000000000000000000000000 +01000010011101010110100101101100 +01110100001110100010000000100101 +01110011001000000010010101110011 +00100000011000100111100100100000 +00100101011100110000101000000000 +01000010011101010110100101101100 +01110100001000000110011001101111 +01110010001000000010010101100100 +00100000011010110100001000100000 +01010010010000010100110100101100 +00100000011100110111010001100001 +01100011011010110010000001101001 +01110011001000000010010101100100 +00100000011000100111100101110100 +01100101011100110000101000000000 +01010111010000010101001001001110 +01001001010011100100011100111010 +00100000011010000110000101110010 +01100100011101110110000101110010 +01100101001000000111001101100001 +01111001011100110010000000100101 +01101001011010110100001000100000 +00111100001111010010000001010010 +01000001010011010010000000111100 +00100000001001010110100101101011 +01000010000010100000000000000000 +01110110011001010111001000000000 +00100101011100110011101100100000 +00100101011100110010000000100101 +01110011000010100000000000000000 +01010101011011100110101101101110 +01101111011101110110111000100000 +01110011011101010110001001100011 +01101111011011010110110101100001 +01101110011001000010000000100010 +00100101011100110010001000001010 +00000000000000000000000000000000 +01110011011101000110000101110010 +01110100000000000000000000000000 +01110011011101000110111101110000 +00000000000000000000000000000000 +01100101001100100110010100000000 +01100100011001010110110001100001 +01111001000000000000000000000000 +01100111011011010000000000000000 +01100001011000100111001101100011 +01100001011011000000000000000000 +01101101011011110110010001100101 +00000000000000000000000000000000 +01110011011101000110111101110000 +01110000011001010110010000000000 +01110010011101010110111001101110 +01101001011011100110011100000000 +01110000001100100111000000000000 +01000001011101100110000101101001 +01101100011000010110001001101100 +01100101001000000110001101101111 +01101101011011010110000101101110 +01100100011100110011101000001010 +00000000000000000000000000000000 +00100000001000000010010101110011 +00001010000000000000000000000000 +01101000011001010110110001110000 +00000000000000000000000000000000 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000001110100010010100110000 +00110010011110000011101000100101 +00110000001100100111100000111010 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000000000000000000000000000 +01100111011001010111010000000000 +01100111011001010111010001110000 +00000000000000000000000000000000 +01110011011001010111010000000000 +01110011011001010111010001110000 +00000000000000000000000000000000 +01001101010000010100001100101101 +01100001011001000110010001110010 +01100101011100110111001100111010 +00100000001001010111001100001010 +00000000000000000000000000000000 +01101101011000010110001100000000 +01110010011001010111001101100101 +01110100000000000000000000000000 +01101101011000010111100000000000 +01110000011100100110100101101110 +01110100010111110111010001100001 +01110011011010110101111101110100 +01101001011011010110010101011111 +01110100011010000111001001100101 +01110011011010000110111101101100 +01100100001000000010010101100100 +00001010000000000000000000000000 +00100000011010010111010001100101 +01110010011000010111010001101001 +01101111011011100111001100100000 +00100000001000000010000000100000 +01110011011001010110001101101111 +01101110011001000111001100101110 +01101101011010010110001101110010 +01101111011100110010000000100000 +00100000001000000110110101100001 +01111000010111110110110101110011 +00100000011011100110000101101101 +01100101000010100000000000000000 +00100000001000000010010100111001 +01101100011010010010000000100000 +00100000001001010011100101101100 +01101001001011100010010100110000 +00110110011011000110100100100000 +00100101001110010110110001100100 +00100000001001010111001100001010 +00000000000000000000000000000000 +01110000011100110000000000000000 +00100101011101010000101000000000 +01010101011100110110000101100111 +01100101001110100010000001110010 +01100101011001100111001001100101 +01110011011010000010000000111100 +01110011011001010110001101101111 +01101110011001000111001100111110 +00001010000000000000000000000000 +01110010011001010110011001110010 +01100101011100110110100000000000 +01110011011101000110000101110100 +01101001011100110111010001101001 +01100011011100110010000001101110 +01101111011101110010000001101111 +01100110011001100000101000000000 +01100010011101000111001100000000 +01101111011001100110011000000000 +01110011011101000110000101110100 +00000000000000000000000000000000 +01010111011100100110111101101110 +01100111001000000111000001100001 +01110010011000010110110101100101 +01110100011001010111001000001010 +00000000000000000000000000000000 +01100101011100100110000101110011 +01100101000000000000000000000000 +01000011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000110010101110010 +01100001011100110110010100100000 +01000100010000100000101000000000 +01100001011001000110010000000000 +01010011010001100101000000100000 +01000100010000100010000001101001 +01110011001000000110011001110101 +01101100011011000000101000000000 +01001001001100100100001100100000 +01100101011100100111001001101111 +01110010000010100000000000000000 +01010011010001100101000000100000 +01100100011000010111010001100001 +01100010011000010111001101100101 +00100000011001010111001001110010 +01101111011100100010000000101000 +00100101011001000010100100001010 +00000000000000000000000000000000 +00100101011001000010000001010011 +01000110010100000111001100100000 +01101001011011100010000001000100 +01000010000010100000000000000000 +01110011011010000110111101110111 +00000000000000000000000000000000 +01010011010001100101000000100000 +01100100011000010111010001100001 +01100010011000010111001101100101 +00100000011001010110110101110000 +01110100011110010000101000000000 +00100101011001000011101000100000 +01010000010011100011101000000000 +00100000011001000101010001111000 +00111010001000000010010100111000 +01100100001000000110010001010010 +01111000001110100010000000100101 +00111000011001000010000001100001 +01101100011100000110100001100001 +00111010001000000010010100111000 +01100100000010100000000000000000 +01101101011000010111010001100011 +01101000000000000000000000000000 +01001110011011110010000001010011 +01000110010100000010111000001010 +00000000000000000000000000000000 +01010011010001100101000000100000 +01110010011001010110000101100100 +00100000011001010111001001110010 +01101111011100100000101000000000 +01000011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000110110101100001 +01110100011000110110100000100000 +01110100011011110010000001000100 +01000010000010100000000000000000 +01010011010001100101000000100000 +01101101011000010111010001100011 +01101000011001010110010000101100 +00100000011001000101010001111000 +00111101001001010110010000100000 +01100100010100100111100000111101 +00100101011001000010000001100001 +01101100011100000110100001100001 +00111101001001010110010000001010 +00000000000000000000000000000000 +01100101011011100110000100000000 +01110011011001100111000000000000 +01101001011011100110100101110100 +00000000000000000000000000000000 +01100011011011000000000000000000 +01110011011100000111001100000000 +01100111011100000111001100000000 +00100101011001000010000000100101 +01100100000010100000000000000000 +01110011011001000110000101100011 +00000000000000000000000000000000 +01100111011001000110000101100011 +00000000000000000000000000000000 +01100011011010000110010101100011 +01101011011101100110001101101111 +00000000000000000000000000000000 +01110000011011000110110000000000 +01100110011011110111001001100011 +01100101000000000000000000000000 +01000110011011110111010101101110 +01100100001000000111000001101000 +01100001011100110110010100100000 +01110100011100100110000101101110 +01110011011010010111010001101001 +01101111011011100010000001101001 +01101110001000000100010101000101 +01010000010100100100111101001101 +00111010001000000010010101100100 +01110000011100110000101000000000 +01001101011001010110000101110011 +01110101011100100110100101101110 +01100111001000000111010000110010 +00101111011101000011010000100000 +01110000011010000110000101110011 +01100101001000000111010001110010 +01100001011011100111001101101001 +01110100011010010110111101101110 +00101110001011100010111000001010 +00000000000000000000000000000000 +01100011011000010110110001101001 +01100010011100100110000101110100 +01101001011011110110111000000000 +01110011011001010111010001110011 +01100101011000110000000000000000 +01110011011001010111010001101110 +01110011011001010110001100000000 +01110010011000010111011100000000 +00100101011100110010000000101011 +00100101011001000010000001101110 +01100001011011100110111101110011 +01100101011000110110111101101110 +01100100011100110010111000001010 +00000000000000000000000000000000 +01110100011010010110110101100101 +00000000000000000000000000000000 +01100111011101010110100100000000 +01100110011100110000000000000000 +01100110011100110110010100000000 +01110011011001000110001000000000 +01001111010011100000000000000000 +01001111010001100100011000000000 +01100101011011100110000101100010 +01101100011001010000000000000000 +01100100011010010111001101100001 +01100010011011000110010100000000 +01110000011010000110000101110011 +01100101001000000111010001110010 +01100001011000110110101101101001 +01101110011001110010000000100101 +01110011000010100000000000000000 +01110000011101000111001001100001 +01100011011010110000000000000000 +00100101011001000010111000100101 +01100100001011100010010101100100 +00101110001001010110010000000000 +01001001010100000010110101100001 +01100100011001000111001001100101 +01110011011100110011101000100000 +01101001011011100010000001110100 +01110010011000010110100101101110 +01101001011011100110011100001010 +00000000000000000000000000000000 +01001001010100000010110101100001 +01100100011001000111001001100101 +01110011011100110011101000100000 +00100101011100110010000000101000 +01100110011100100110111101101101 +00100000011000100110111101101111 +01110100011100000010100100001010 +00000000000000000000000000000000 +01001001010100000010110101100001 +01100100011001000111001001100101 +01110011011100110011101000100000 +00100101011100110010000000101000 +01110011011101000110000101110100 +01101001011000110010000001100001 +01110011011100110110100101100111 +01101110011011010110010101101110 +01110100001010010000101000000000 +01101001011100000000000000000000 +01010000010100000101001101001001 +00100000011101100110010101110010 +01100010011011110111001101101001 +01110100011110010011101000100000 +00100101001100000011100001101100 +01111000000010100000000000000000 +01110110011001010111001001100010 +01101111011100110110010100000000 +01000011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000110010101110010 +01100001011100110110010100100000 +01101001011011100110100101110100 +00100000011100110110001101110010 +01101001011100000111010000001010 +00000000000000000000000000000000 +01000011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000110000101100100 +01100100001000000111010001101000 +01100101001000000110001101101111 +01101101011011010110000101101110 +01100100000010100000000000000000 +01001111010010110010111000001010 +00000000000000000000000000000000 +01100010011011110110111101110100 +00000000000000000000000000000000 +00100101011010010010000000101000 +00100010001001010111001100100010 +00101001001000000110111101110101 +01110100001000000110111101100110 +00100000011100100110000101101110 +01100111011001010000101000000000 +01100011011101010111001001110010 +01100101011011100111010000100000 +01110110011011000110000101101110 +00111010001000000010010101101001 +00100000001010000011000001111000 +00100101011110000010100100001010 +00000000000000000000000000000000 +01110110011011000110000101101110 +00000000000000000000000000000000 +01000001011101010111100000100000 +01100100011010010110000101100111 +01101110011011110111001101110100 +01101001011000110111001100100000 +01101001011011100110011001101111 +00111010000010100000000000000000 +01101001011001000011101000100000 +00100101011001000010111000100101 +01100100001011000010000001110010 +00101111011101110010000001110111 +01101111011100100110010001110011 +00111010001000000010010101100100 +00101100001000000111001000101111 +01101111001000000111011101101111 +01110010011001000111001100111010 +00100000001001010110010000001010 +00000000000000000000000000000000 +01110010011011110000000000000000 +01010111011011110111001001100100 +00100000001001010110010000100000 +01101001011100110010000000110000 +01111000001001010011000000111000 +01111000000010100000000000000000 +01110010011101110000000000000000 +01110111000000000000000000000000 +01010110011000010110110001110101 +01100101001000000011000001111000 +00100101001100000011100001111000 +00100000011101110111001001101001 +01110100011101000110010101101110 +00100000011101000110111100100000 +01110100011010000110010100100000 +01110111011011110111001001100100 +00100000001001010110010000001010 +00000000000000000000000000000000 +01100100011010010110000101100111 +00000000000000000000000000000000 +00100101011100110010110000100000 +00100101011100110010000000100101 +01100100001011000010000000100101 +01100100001011000010000000100101 +00110000001100100110010000111010 +00100101001100000011001001100100 +00111010001001010011000000110010 +01100100000000000000000000000000 +00100101011100110010000000100101 +00110010011001000010000000100101 +00110000001100100110010000111010 +00100101001100000011001001100100 +00111010001001010011000000110010 +01100100000000000000000000000000 +00100101001101000110010000101101 +00100101001100000011001001100100 +00101101001001010011000000110010 +01100100001011010010010100110000 +00110010011001000011101000100101 +00110000001100100110010000111010 +00100101001100000011001001100100 +00000000000000000000000000000000 +00011011010110110011000000100101 +01100100001110110011001100100101 +01100100011011010000000000000000 +00011011010110110110110100000000 +00011011010110110010010101100100 +00111011001001010110010001100110 +00000000000000000000000000000000 +00011011010110110011001001001010 +00011011010110110011000100111011 +00110001010010000000000000000000 +01010011011101010110111000000000 +01001101011011110110111000000000 +01010100011101010110010100000000 +01010111011001010110010000000000 +01010100011010000111010100000000 +01000110011100100110100100000000 +01010011011000010111010000000000 +01001010011000010110111000000000 +01000110011001010110001000000000 +01001101011000010111001000000000 +01000001011100000111001000000000 +01001101011000010111100100000000 +01001010011101010110111000000000 +01001010011101010110110000000000 +01000001011101010110011100000000 +01010011011001010111000000000000 +01001111011000110111010000000000 +01001110011011110111011000000000 +01000100011001010110001100000000 +01001100011011110110111101110000 +01110011001000000111000001100101 +01110010001000000110101001101001 +01100110011001100111100100111010 +00100000001001010110100100001010 +00000000000000000000000000000000 +00100101011100110011101000100000 +01101110011011110010000001110011 +01101111011000110110101101100101 +01110100001000000111001101101100 +01101111011101000111001100100000 +01101100011001010110011001110100 +00001010000000000000000000000000 +01110111011100100011000000000000 +01101110011001010111010000101101 +01100010011010000000000000000000 +01101001011100000111011000110100 +00000000000000000000000000000000 +01100001011100100111000000000000 +01000100011010010111001101100011 +01101111011101100110010101110010 +01100101011001000010000001001001 +01010000001000000110000101100100 +01100100011100100110010101110011 +01110011001000000010100000100101 +01100100001011100010010101100100 +00101110001001010110010000101110 +00100101011001000010100100100001 +00001010000000000000000000000000 +01010011010011100100110101010000 +00111010001000000101001101000110 +01010000001000000111010101110000 +01100100011000010111010001100101 +01100100001000000110100101101110 +00100000011011010110010101101101 +01101111011100100111100100101100 +00100000011100100110010101110011 +01110100011000010111001001110100 +00100000010100000101010001010000 +00001010000000000000000000000000 +01001001010011100101011001000001 +01001100010010010100010000000000 +00100101011001000010111000100101 +00110000001101000110010000000000 +01110011011011100110110101110000 +00000000000000000000000000000000 +01000100011001010110001100100000 +00110001001110000010000000110010 +00110000001100010011011100100000 +00110000001110010011101000110011 +00110010001110100011010000111000 +00000000000000000000000000000000 +01101100011011000110010001110000 +00100000011101010111000001100100 +01100001011101000110010100001010 +00000000000000000000000000000000 +01101100011011000110010001110000 +00000000000000000000000000000000 +00110000001100010011001000110011 +00110100001101010011011000110111 +00111000001110010110000101100010 +01100011011001000110010101100110 +00000000000000000000000000000000 +01001001010001000011101000100000 +00100101011110000000101000000000 +01101110011011110010000001110000 +01100110011010010110110001110100 +01100101011100100010000001110010 +01110101011011000110010100101101 +01110011011001010111010000100001 +00001010000000000000000000000000 +01110000011001100110100101101100 +01110100011001010111001000111010 +00100000011101110111001001101111 +01101110011001110010000001101101 +01100001011001110110100101100011 +00100000011011100111010101101101 +01100010011001010111001000100000 +00101000011001110110111101110100 +00100000001100000111100000100101 +01111000001010010000101000000000 +01110000011001100110100101101100 +01110100011001010111001000111010 +00100000011101110111001001101111 +01101110011001110010000001110010 +01110101011011000110010100101101 +01110011011001010111010000101100 +00100000011000110110000101101110 +00100111011101000010000001100001 +01110000011100000110110001111001 +00001010000000000000000000000000 +01000101011100100111001001101111 +01110010001110100010000001001101 +01101001011011100110100101100011 +00100000010010000100010001001100 +00100000011101100110010101110010 +01110011011010010110111101101110 +00100000001001010110010000100000 +01101110011011110111010000100000 +01110011011101010111000001110000 +01101111011100100111010001100101 +01100100001000000110001001111001 +00100000011100110111011100001010 +00000000000000000000000000000000 +01010111011000010111001001101110 +01101001011011100110011100111010 +00100000010011010110100101101110 +01101001011000110010000001110010 +01100101011000110110010101101001 +01110110011001010110010000100000 +01100101011100100111001001101111 +01101110011001010110111101110101 +01110011001000000110011001110010 +01100001011011010110010100001010 +00000000000000000000000000000000 +01010111011000010111001001101110 +01101001011011100110011100111010 +00100000010011010110100101101110 +01101001011000110010000001010010 +01111000001000000110011001101001 +01100110011011110010000001100110 +01110101011011000110110000101100 +00100000011001010111100001110000 +01100101011000110111010000100000 +01110111011100100110111101101110 +01100111001000000110011001110010 +01100001011011010110010101110011 +00001010000000000000000000000000 +01010111011000010111001001101110 +01101001011011100110011100111010 +00100000011101000111100000100000 +01101110011011110111010000100000 +01110100011001010111001001101101 +01101001011011100110000101110100 +01100101011001000010000001101001 +01101110011001100110100101101110 +01101001011101000110010100100000 +01101101011000110111001000111101 +00110000011110000010010101111000 +00001010000000000000000000000000 +01010111011000010111001001101110 +01101001011011100110011100111010 +00100000011101000111100000100000 +01110100011010010110110101100101 +01110011011101000110000101101101 +01110000001000000110111001100101 +01110110011001010111001000100000 +01100010011001010110001101100001 +01101101011001010010000001100001 +01110110011000010110100101101100 +01100001011000100110110001100101 +00001010000000000000000000000000 +01100110011001010111010001100011 +01101000011010010110111001100111 +00100000011001000110100101100001 +01100111010111110111001001110111 +01011111011101110110111101110010 +01100100011100110000101000000000 +01100110011001010111010001100011 +01101000011010010110111001100111 +00100000011001000110100101100001 +01100111010111110111001001101111 +01011111011101110110111101110010 +01100100011100110000101000000000 +01100100011001010111011000100000 +00100000001100000111100000100101 +00110000001110000110110001111000 +00100000010000000010000000100101 +00110000001101100110110001111000 +00101100001000000010010101110011 +00001010000000000000000000000000 +01100110011100000110011101100001 +00101101011000010111001001100101 +01100001000000000000000000000000 +01000101011100100111001001101111 +01110010001000000010010101100100 +00100000011101110110100001101001 +01101100011001010010000001110010 +01100101011000010110010001101001 +01101110011001110010000001110100 +00110010001101000111000000100000 +01100110011100100110111101101101 +00100000011100110111010001101111 +01110010011000010110011101100101 +00001010000000000000000000000000 +01110100001100100011010001110000 +00100000011100100110010101100001 +01100100001000000110011001110010 +01101111011011010010000001110011 +01110100011011110111001001100001 +01100111011001010011101000100000 +00100101011001000010000001110000 +01110011000010100000000000000000 +01010111011000010110100101110100 +01101001011011100110011100100000 +01100110011011110111001000100000 +01101100011010010110111001101011 +00101110001011100010111000001010 +00000000000000000000000000000000 +01001100011011110110001101101011 +01101001011011100110011100100000 +01010000010011000100110000101110 +00101110001011100000101000000000 +01000011011000010110110001101001 +01100010011100100110000101110100 +01101001011011100110011100100000 +01010010010110000010000001110100 +01101001011011010110010101110011 +01110100011000010110110101110000 +01100101011100100010111000101110 +00101110000010100000000000000000 +01000110011000010110100101101100 +01100101011001000000000000000000 +01010011011101010110001101100011 +01100101011100110111001100000000 +01010111011100100110111101110100 +01100101001000000110111001100101 +01110111001000000111010000110010 +00110100011100000010000001110110 +01100001011011000111010101100101 +00111010001000000010010101100100 +00100000011100000111001100100000 +00101000001001010111001100101001 +00001010000000000000000000000000 +00100000010001010100111001001111 +01010011010100000100001100000000 +00100101011100110010010101110011 +00111010000000000000000000000000 +01110100011001010110110101110000 +00000000000000000000000000000000 +01110100011001010110110101110000 +01100101011100100110000101110100 +01110101011100100110010100000000 +01110011011001100111000000111010 +00100000011000110110111101110010 +01110010011101010111000001110100 +01100101011001000010000001100011 +01101000011001010110001101101011 +01110011011101010110110100001010 +00000000000000000000000000000000 +01110011011001000110001001100110 +01110011001110100010000001100110 +01101111011101010110111001100100 +00100000011000010111010000100000 +00100101011010010010000001101001 +01101110001000000100011001101100 +01100001011100110110100000001010 +00000000000000000000000000000000 +01110011011001000110001001100110 +01110011001110100010000001100110 +01101111011101010110111001100100 +00100000011000010111010000100000 +00100101011010010010000001101001 +01101110001000000101011100110001 +00001010000000000000000000000000 +01110011011001000110001001100110 +01110011001110100010000001100110 +01101111011101010110111001100100 +00100000011000010111010000100000 +00100101011010010010000001101001 +01101110001000000100100100110010 +01000011001010000011000001111000 +00100101001100100101100000101001 +00001010000000000000000000000000 +01100110011010010110110001100101 +00100000001100000111100000100101 +00110000001110000111100000100000 +01000000001000000010010100110100 +01101001001011000010000001101110 +01100001011011010110010100100000 +00100101011100110000101000000000 +00100101011100110011101000100000 +01010011010001000100001000100000 +01100101011100100111001001101111 +01110010000010100000000000000000 +00100101011100110011101000100000 +01010011010001000100001000100000 +01100110011010010110110001100101 +00100000011010010111001100100000 +01100101011011010111000001110100 +01111001000010100000000000000000 +00100101011100110011101000100000 +01010101011100110110100101101110 +01100111001000000101011100110001 +00100000011100110110010101110010 +01101001011000010110110000100000 +01101110011101010110110101100010 +01100101011100100000101000000000 +00100101011100110011101000100000 +01100110011000010110100101101100 +01110101011100100110010100001010 +00000000000000000000000000000000 +00100101011100110011101000100000 +01010011010001000100001000100000 +01100101011100100111001001101111 +01110010001011000010000001100011 +01100001011011100010011101110100 +00100000011100110110000101110110 +01100101000010100000000000000000 +01000001011001000110010001101001 +01101110011001110010000001101110 +01100101011101110010000001010011 +01000110010100000010000001100101 +01101110011101000111001001111001 +00001010000000000000000000000000 +01010101011100000110010001100001 +01110100011001010010000001100101 +01111000011010010111001101110100 +01101001011011100110011100100000 +01010011010001100101000000100000 +01100101011011100111010001110010 +01111001000010100000000000000000 +00101101001011010010000001110101 +01110011011001010111001000101101 +01100100011001010110011001101001 +01101110011001010110010000100000 +01110011011000110111001001101001 +01110000011101000010000000101101 +00101101000010100000000000000000 +01000101011100100110000101110011 +01101001011011100110011100100000 +01000110011011000110000101110011 +01101000001010000011000001111000 +00100101011110000010100100101110 +00101110001011100000101000000000 +01000101011100100110000101110011 +01101001011011100110011100100000 +01000101010001010101000001010010 +01001111010011010010000000100101 +01100100001000000010100000110000 +01111000001001010111100000101001 +00101110001011100010111000001010 +00000000000000000000000000000000 +01000101011100100110000101110011 +01101001011011100110011100100000 +00110001001011010101011100100000 +01000101010001010101000001010010 +01001111010011010010000000101000 +00110000011110000010010101111000 +00101001001011100010111000101110 +00001010000000000000000000000000 +01100110011010010110110001100101 +01101110011000010110110101100101 +00111010001000000010010101110011 +00111011001000000110011001101001 +01110010011100110111010000111010 +00100000001001010111100000111011 +00100000011011000110000101110011 +01110100001110100010000000100101 +01111000000010100000000000000000 +01000110011011110111001001101101 +01100001011101000111010001101001 +01101110011001110010000001010011 +01000100010000100100011001010011 +00100000011010010110111000100000 +01000110011011000110000101110011 +01101000001010000011000001111000 +00100101011110000010100100101110 +00101110001011100000101000000000 +01001001001100100100001100100000 +01000101010001010101000001010010 +01001111010011010010000001101110 +01101111011101000010000001100110 +01101111011101010110111001100100 +00001010000000000000000000000000 +01000110011011110111001001101101 +01100001011101000111010001101001 +01101110011001110010000001010011 +01000100010000100100011001010011 +00100000011010010110111000100000 +01001001001100100100001100100000 +01000101010001010101000001010010 +01001111010011010010000000100101 +01100100001000000010100000110000 +01111000001001010111100000101001 +00101110001011100010111000001010 +00000000000000000000000000000000 +00110001001011010101011101101001 +01110010011001010010000001000101 +01000101010100000101001001001111 +01001101001000000110111001101111 +01110100001000000110011001101111 +01110101011011100110010000001010 +00000000000000000000000000000000 +01000110011011110111001001101101 +01100001011101000111010001101001 +01101110011001110010000001010011 +01000100010000100100011001010011 +00100000011010010110111000100000 +00110001001011010101011100100000 +01000101010001010101000001010010 +01001111010011010010000000101000 +00110000011110000010010101111000 +00101001001011100010111000101110 +00001010000000000000000000000000 +01100101011001010111000001110010 +01101111011011010000000000000000 +01101111011001100110011001110011 +01100101011101000010000000100101 +00110100011010010010000000101000 +00110000011110000010010100110000 +00110011011110000010100100111010 +00100000001001010011001101101001 +00100000001010000011000001111000 +00100101001100000011001001111000 +00101001000010100000000000000000 +01110111011100100110100101110100 +01100101001010000011000001111000 +00100101011110000010110000100000 +00100101011010010010100100111010 +00100000011100100110010101110011 +01110101011011000111010000100000 +00111101001000000010010101101001 +00001010000000000000000000000000 +01110010011001010110000101100100 +00101000001100000111100000100101 +01111000001011000010000000100101 +01101001001010010011101000100000 +01110010011001010111001101110101 +01101100011101000010000000111101 +00100000001001010110100100001010 +00000000000000000000000000000000 +01100100011001010111011001101001 +01100011011001010010000000100101 +01101001001110100010000000100101 +00110000001110000111100000100101 +00110000001110000111100000001010 +00000000000000000000000000000000 +01110100011001010110110101110000 +00111010001000000010010101100100 +00101110001001010011000000110100 +01100100000010100000000000000000 +01110111001100010000000000000000 +01110111001100010111001000000000 +01110111001100010111011100000000 +00111100010101010110111001101011 +01101110011011110111011101101110 +00111110000000000000000000000000 +01110011011011110110011001110100 +01110000011011000110110000111010 +00100000011010010111001001110001 +01110011001000000010010101100100 +00100000011100110110010101110001 +00100000001001010111001100100000 +01101101011011110110010001100101 +00100000001001010110010000100000 +01100001011011000110100101100111 +01101110011011010110010101101110 +01110100010111110111001101110100 +01100001011101000110010100100000 +00100101011001000010000001001000 +01001100001001010110010000100000 +01001101010011000010010101100100 +00100000010010000101100100111101 +00100101011001000010000001001101 +01011001001111010010010101100100 +00100000010001000110010101101100 +01000011011011100111010000111101 +00100101011001000000101000000000 +01110011011101000110000101110010 +01110100001011010110010101111000 +01110100000000000000000000000000 +01110111011000010110100101110100 +00101101011001010111100001110100 +00000000000000000000000000000000 +01110011011101000110000101110010 +01110100001011010110100001100101 +01101100011100000110010101110010 +00000000000000000000000000000000 +01110111011000010110100101110100 +00101101011010000110010101101100 +01110000011001010111001000000000 +01110011011101000110000101110010 +01110100001011010110110101100001 +01101001011011100000000000000000 +01110111011000010110100101110100 +00101101011011010110000101101001 +01101110000000000000000000000000 +01110010011001010110000101100100 +01111001000000000000000000000000 +01100011011011000110010101100001 +01110010001011010110010001100001 +01100011011100110000000000000000 +01110111011000010110100101110100 +00101101011000110110110001100101 +01100001011100100010110101100100 +01100001011000110111001100000000 +10111010110111000000111111111110 +00111011100110101100101000000000 +00000000000011110100001001000000 +01000001110001100100111001101101 +01111111111111111111111111111111 +00000000000010000000000000110000 +11000100011001010011011000000000 +11111111111100001011110111000000 +00000000000001111101000000000000 +00111011100110101100100111111111 +00000000000000010000000001000011 +00000000000000010000000001000100 +00000000000000010101000110000000 +10000011101010100111111010000000 +01111111111111111111111111111110 +10000000000000000000000000000001 +00000000000001100010000000000000 +00000000010111101110000000000000 +00000001000000000000000000000001 +00010001001000100011001101000100 +11100000000000000001111111111111 +00000000001001000110000000000000 +00000001010101010100000000000000 +00000010010001101000000000000000 +00010011010101111000000000000000 +00001111111111111111111111111111 +00000101100101101000001011110000 +00001110111001101011001001111111 +00000001001100010010110100000010 +00000001001100010010110100001010 +01000110011010010110110001100101 +01000100011000010111010001100001 +01110011011001100111000000101101 +01010011010001000100001000101101 +01101101011000010110001100101101 +01100011011000010110110001101001 +01110111011100100010110101101001 +00000000001111010000000100110111 +10000000000000000000000000011111 +00000000100110001001010110110110 +11000100000000000000000000000001 +00000000000000011000011010100000 +00000000111111111111111111111111 +11111111111111011011011000010000 +00000000000000100100100111110000 +00000101111101011110000100000000 +00001011111010111100001000000000 +11111010000010100001111100000000 +00000001001100010010110100000011 +00000001000110110001100100000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000001100000001100001000000000 +00000000000011100000000000000000 +00000000000000000000000000101100 +00000000000000000000000000101100 +00000000000000000000000000110110 +00000000000000000000000000110110 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000101100 +00000000000000000000000000110110 +00000000000000000000000000110110 +00000000000000000000000001000000 +00000000000000000000000000100010 +00000000000000000000000000110000 +01110000011100000101111101100100 +01101001011000010110011101011111 +01110000011000010111001001110011 +01100101000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110100101100100 +00000000000000010110100101110000 +00000000000000010110100110000000 +00000000000000010110100110001100 +00000000000000010110100110011000 +00000000000000010110100110100100 +00000000000000010110100110110000 +00000000000000000001110010000100 +00000000000000000001110011110100 +00000000000000000010000000001100 +00000000000000000010000000001100 +00000000000000000010000000001100 +00000000000000000010000000001100 +00000000000000000010000000001100 +00000000000000000010000000001100 +00000000000000000001110101110000 +00000000000000000001110111100000 +00000000000000000010000000001100 +00000000000000000001111001110100 +00000000000000000001111111100000 +01110111011100100111000001100011 +01011111011101000110100101101101 +01100101010111110110000101100100 +01101010011101010111001101110100 +01011111011011110110011001100110 +01110011011001010111010000000000 +01110111011100100101111101110011 +00110001000000000000000000000000 +01110111011100100111000001100011 +01011111011101000110100101101101 +01100101010111110110000101100100 +01101010011101010111001101110100 +00000000000000000000000000000000 +01110111011100100111000001100011 +01011111011101000110100101101101 +01100101010111110111001101100101 +01110100000000000000000000000000 +01110111011100100111000001100011 +01011111011101000110100101101101 +01100101010111110110011101100101 +01110100000000000000000000000000 +01110111011100100111000001100011 +01011111011011100110010101110100 +01011111011100110110010101101110 +01100100000000000000000000000000 +00000001000110110001100100000000 +00000000000000000000000110000000 +11000010000000000000000000001110 +01110111011100100101111101110101 +01101110011100000110000101100011 +01101011010111110110000101101110 +01101110011011110111010101101110 +01100011011001010000000000000000 +01110111011100100101111101110000 +01100001011000110110101101011111 +01100001011011100110111001101111 +01110101011011100110001101100101 +00000000000000000000000000000000 +01100111011001010111010001011111 +01110000011001010111001001110011 +01101001011100110111010001100101 +01101110011101000101111101101101 +01100001011000110000000000000000 +01110111011100100101111101101000 +01100001011011100110010001101100 +01100101010111110110011001101111 +01101100011011000110111101110111 +01110101011100000000000000000000 +01110111011100100101111101101000 +01100001011011100110010001101100 +01100101010111110110000101101110 +01101110011011110111010101101110 +01100011011001010000000000000000 +01110111011100100101111101100101 +01111000011001010110001101110101 +01110100011001010101111101110011 +01101100011000010111011001100101 +00000000000000000000000000000000 +01110111011100100101111101101000 +01100001011011100110010001101100 +01100101010111110111001001100101 +01110011011100000000000000000000 +01110111011100100101111101101110 +01100101011101110101111101110011 +01101100011000010111011001100101 +00000000000000000000000000000000 +01110111011100100101111101101101 +01100001011100110111010001100101 +01110010010111110110110101110011 +01100111000000000000000000000000 +01110111011100100101111101101100 +01101001011100110111010001100101 +01101110011010010110111001100111 +00000000000000000000000000000000 +01110111011100100101111101101111 +01110000011001010110111000000000 +01110111011100100101111101101001 +01101110011010010111010000000000 +00000000000000000011010110010100 +00000000000000000011010110111100 +00000000000000000011010111011100 +00000000000000000011011001001100 +00000000000000000011011001101100 +00000000000000000011011010001000 +00000000000000000011011010101000 +00000000000000000011011100110100 +00000000000000000011011101010100 +01110111011100100101111101100011 +01100001011011000110100101100010 +01110010011000010111010001101001 +01101111011011100000000000000000 +00000000000000000100110000001000 +00000000000000000100101111110000 +00000000000000000100110000110000 +00000000000000000100110011101000 +00000000000000000100110010000100 +00000000000000010111010010101100 +00000000000000010111011000010000 +00000000000000010111011000011100 +00000000000000010111011000101000 +00000000000000010111011000110100 +00000000000000010111011001000000 +01110111011100100101111101100101 +00110010011001010101111101101111 +01100110011001100111001101100101 +01110100000000000000000000000000 +01110000011100000101111101101001 +01101110011010010111010001101001 +01100001011011000110100101111010 +01101001011011100110011100000000 +00000000000000000101111011110000 +00000000000000000101011011110100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000101000111101100 +00000000000000000101110100000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000101110111101000 +00000000000000000101100101010000 +00000000000000000000000000000000 +00000000000000000101000111101100 +01110011011101000101111101100011 +01101111011011010101111101110011 +01101100011000010111011001100101 +01011111011010000110000101101110 +01100100011011000110010101011111 +01100110011011110110110001101100 +01101111011101110111010101110000 +00000000000000000000000000000000 +01100010011011010110001101011111 +01100100011000010111010001100001 +01110011011001010111010001011111 +01100011011011010111000000000000 +01100010011011010110001101011111 +01110011011101000110000101110100 +01100101010111110110010001100101 +01100011011010010111001101101001 +01101111011011100000000000000000 +00000000000000011000000100010100 +00000000000000011000000100011100 +00000000000000011000000011110100 +00000000000000011000000100100100 +00000000000000000000000000000000 +00000000000000011000000100000000 +00000000000000010111000001101100 +00000000000000010111000010001100 +00000000000000011000000100000100 +00000000000000000000000000011111 +00000000000000000000000000011100 +00000000000000000000000000011111 +00000000000000000000000000011110 +00000000000000000000000000011111 +00000000000000000000000000011110 +00000000000000000000000000011111 +00000000000000000000000000011111 +00000000000000000000000000011110 +00000000000000000000000000011111 +00000000000000000000000000011110 +00000000000000000000000000011111 +00000000000000000000000000011111 +00000000000000000000000000011101 +00000000000000000000000000011111 +00000000000000000000000000011110 +00000000000000000000000000011111 +00000000000000000000000000011110 +00000000000000000000000000011111 +00000000000000000000000000011111 +00000000000000000000000000011110 +00000000000000000000000000011111 +00000000000000000000000000011110 +00000000000000000000000000011111 +00000000000000011000011011011100 +00000000000000011000011011100000 +00000000000000011000011011100100 +00000000000000011000011011101000 +00000000000000011000011011101100 +00000000000000011000011011110000 +00000000000000011000011011110100 +00000000000000011000011011111000 +00000000000000011000011011111100 +00000000000000011000011100000000 +00000000000000011000011100000100 +00000000000000011000011100001000 +00000000000000011000011100001100 +00000000000000011000011100010000 +00000000000000011000011100010100 +00000000000000011000011100011000 +00000000000000011000011100011100 +00000000000000011000011100100000 +00000000000000011000011100100100 +01110000011101000111000001100100 +01011111011011100110010101110100 +01101001011001100101111101100011 +01110010011001010110000101110100 +01100101010111110111001101101111 +01100011011010110110010101110100 +00000000000000000000000000000000 +00000000000000001100100110001100 +00000000000000001100100110011100 +00000000000000001100101000000000 +00000000000000001100101000000000 +00000000000000001100100110101100 +00000000000000001100101000000000 +00000000000000001100101000000000 +00110000111111110000001000000001 +11111010000001000000011001110000 +01110101011000100110110001101001 +01100011111111011111111100000010 +11111001000000100000000111111100 +00000010000000011111101100110000 +11111111001100001111111100000110 +00000000000000001101101011110100 +00000000000000001101101100000100 +00000000000000001101101100101000 +00000000000000001101101101011100 +00000000000000001101101110001100 +00000000000000001101101111001000 +00000000000000001101110010000100 +00000000000000001101110110110000 +00000000000000001101110100100000 +01110011011001010111010001011111 +01110000011001010111001001110011 +01101001011100110111010001100101 +01101110011101000101111101101101 +01100001011000110000000000000000 +00000000000000000000000000000000 +00000000000000000000000100000000 +00000000000000000000001000000000 +00000000000000000000001100000000 +00000000000101110000000000000000 +00000000001011100000000000000000 +00000000011000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000001000000 +00000000000000000000000010000000 +00000000000000000000000100000000 +00000000000000000000001000000000 +00000000000000000000010000000000 +00000000000000000000000011001000 +00000000000000000011100111010000 +00000000000000010011101101111100 +00000000000000010011110000000000 +00000000000000010011110000111000 +00000000000000010011110010111000 +00000000000000010011110101000100 +00000000000000010011110101011100 +00000000000000010011110001011100 +00000000000000010011101110100100 +00000000000000010011101100000000 +00000000000000010011101100110100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010100100010001000 +00000000000000010100100010101000 +00000000000000010100100010110100 +00000000000000010100100011000100 +00000000000000010100100011100100 +00000000000000010100100011110100 +00000000000000010100100101011100 +00000000000000010100100100010100 +00000000000000010100100000011100 +00000000000000010100100001100000 +00000000000000000000000000000000 +00000000000000011000111001010100 +00000000000000011000111001100000 +00000000000000011000111001101100 +00000000000000011000111001111100 +00000000000000011000111010001000 +00000000000000011000111010010100 +00000000000000010111000001010000 +00000000000000011000111010100000 +00000000000000011000111010101000 +00000000000000011000111010110100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000100000000100000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000110000000100000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000001000000001000000001 +00000001000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000001010000001000000001 +00000001000000010000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000001100000001100000010 +00000001000000010000000100000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000001110000001100000010 +00000001000000010000000100000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000010000000010000000010 +00000010000000010000000100000001 +00000001000000000000000000000000 +00000000000000000000000000000000 +00000000000010010000010000000011 +00000010000000010000000100000001 +00000001000000010000000000000000 +00000000000000000000000000000000 +00000000000010100000010100000011 +00000010000000100000000100000001 +00000001000000010000000100000000 +00000000000000000000000000000000 +00000000000010110000010100000011 +00000010000000100000000100000001 +00000001000000010000000100000001 +00000000000000000000000000000000 +00000000000011000000011000000100 +00000011000000100000001000000001 +00000001000000010000000100000001 +00000001000000000000000000000000 +00000000000011010000011000000100 +00000011000000100000001000000001 +00000001000000010000000100000001 +00000001000000010000000000000000 +00000000000011100000011100000100 +00000011000000100000001000000010 +00000001000000010000000100000001 +00000001000000010000000100000000 +00000000000011110000011100000101 +00000011000000110000001000000010 +00000001000000010000000100000001 +00000001000000010000000100000001 +11111110111111101111111011111111 +10000000100000001000000010000000 +00000000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010100000101000 +00101000001010000010100000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000100010000001000000010000 +00010000000100000001000000010000 +00010000000100000001000000010000 +00010000000100000001000000010000 +00010000000001000000010000000100 +00000100000001000000010000000100 +00000100000001000000010000010000 +00010000000100000001000000010000 +00010000000100000100000101000001 +01000001010000010100000101000001 +00000001000000010000000100000001 +00000001000000010000000100000001 +00000001000000010000000100000001 +00000001000000010000000100000001 +00000001000000010000000100000001 +00010000000100000001000000010000 +00010000000100000100001001000010 +01000010010000100100001001000010 +00000010000000100000001000000010 +00000010000000100000001000000010 +00000010000000100000001000000010 +00000010000000100000001000000010 +00000010000000100000001000000010 +00010000000100000001000000010000 +00100000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011010110110111000 +00000000000000011010110111011000 +00000000000000011010110111101000 +00000000000000011010110111111000 +00000000000000000000001111101000 +00000000000000000000000000000001 +00000000000000000000100101010101 +00000000000000000000000000000001 +00000000000000010110100111101100 +00000000000000000000000000000010 +00000000000000000000000000000000 +00000000000000010110100111110100 +00000000000000000000000000000001 +00000000000000000000000000000000 +00000000000000010110101000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110101000001100 +00000000000000000000000000000001 +00000000000000000000000000000000 +00000000000000010110101000011000 +00000000000000000000000000000000 +00000000000000000000111110100000 +00000000000000010110101000100000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110101000101000 +00000000001011000000000100000000 +00000000000000010000000000000000 +00000000000000010110101000110000 +00000000001011000000000100000000 +00000001011111110000000000000000 +00000000000000010110101000111100 +00000000001101100000000100000001 +00000101011111110000000000000000 +00000000000000010110101001001000 +00000000001101100000000100000001 +00000101011111110000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110101001101100 +00000000001011000000000000000000 +00000010000000010000000000000000 +00000000000000010110101001010100 +00000000001101100000000000000000 +00000011000000100000000000000000 +00000000000000010110101001100000 +00000000001101100000000000000001 +00000101011111110000000000000000 +00000000000000010110101001111000 +00000000010000000000000000000000 +00000101000000000000000000000000 +00000000000000010110101010000100 +11111111111111110000000000000000 +00000101011111110000000000000000 +00000000000000010110101010010000 +11111111111111110000000000000000 +00000100011111110000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011001110001000000 +00000000000000011001110101100000 +00000000000000011001110101000100 +00000000000000011011000011100100 +00000000000000011011000101100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011001110010001000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110101100100000 +00000000000000010110101100100000 +00000000000000000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011001100000101000 +00000000000000011011000111101000 +00000000000000000000000000000000 +00000000000000011011001000101000 +00000000000000011011001001010000 +00000000000000011011001010000000 +00000000000000011011001010101000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011011001011001000 +00000000000000000000001111101000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011001110010011100 +00000000000000011001110100001000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000001000011110000 +00000000000000000001000100101000 +00000000000000000001000110111000 +00000000000000000001000111000000 +00000000000000000001001000011000 +00000000000000000001001001000100 +00000000000000000001001010011100 +00000000000000000001001011000000 +00000000000000000001001110000100 +00000000000000000001001110001100 +00000000000000000001001110010100 +00000000000000000001001111111000 +00000000000000000001010000010100 +00000000000000000001000111100100 +00000000000000000000000000000000 +00000000000000000010010001100000 +00000000000000000010001111011000 +00000000000000000010001101111100 +00000000000000000010001100100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000010001011111100 +00000000000000000010100011010000 +00000000000000000010100010110000 +00000000000000000010011010101000 +00000000000000000010010011110100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000001000000000 +00000000000000000000000000000000 +00000000000000011011001111101000 +00000000000000000000000000000001 +00000000000000010111000000111000 +00000000000000000101001111001000 +00000000000000000000000000000010 +00000000000000010111000001001000 +00000000000000000101010111010100 +00000000000000000000000000000011 +00000000000000010111000001010000 +00000000000000000101011000100000 +00000000000000000000000000000100 +00000000000000010111000001011100 +00000000000000000101011000110000 +00000000000000000000000000000101 +00000000000000010111000001101000 +00000000000000000101011100100000 +00000000000000000000000000000110 +00000000000000010111000001101100 +00000000000000000101011100100000 +00000000000000000000000000000111 +00000000000000010111000001110100 +00000000000000000101100010001100 +00000000000000000000000000001000 +00000000000000010111000001111100 +00000000000000000101100011100000 +00000000000000000000000000001001 +00000000000000010111000010001100 +00000000000000000101101001101100 +00000000000000000000000001100100 +00000000000000010111000010010100 +00000000000000000011000101001100 +00000000000000000000000001100110 +00000000000000010111000010101100 +00000000000000000011001000110100 +00000000000000000000000001100101 +00000000000000010111000011000000 +00000000000000000011001100001000 +00000000000000000000000001100111 +00000000000000010111000011011000 +00000000000000000011001111101100 +00000000000000000000000001101000 +00000000000000010111000011110000 +00000000000000000011010011000000 +00000000000000000000000001101001 +00000000000000010111000100000000 +00000000000000000011011110010100 +00000000000000000000000001101010 +00000000000000010111000100010000 +00000000000000000011100001101000 +00000000000000000000000001101011 +00000000000000010111000100100100 +00000000000000000011100110100000 +00000000000000000000000001110101 +00000000000000010111000100110000 +00000000000000000100111100011000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000001 +00000000000000010111000000111000 +00000000000000000101001111001000 +00000000000000000000000000000010 +00000000000000010111000001001000 +00000000000000000101010111010100 +00000000000000000000000000000011 +00000000000000010111000001010000 +00000000000000000101011000100000 +00000000000000000000000000000100 +00000000000000010111000001011100 +00000000000000000101011000110000 +00000000000000000000000000000101 +00000000000000010111000001101000 +00000000000000000101011100100000 +00000000000000000000000000000110 +00000000000000010111000001101100 +00000000000000000101011100100000 +00000000000000000000000000000111 +00000000000000010111000001110100 +00000000000000000101100010001100 +00000000000000000000000000001000 +00000000000000010111000001111100 +00000000000000000101100011100000 +00000000000000000000000000001001 +00000000000000010111000010001100 +00000000000000000101101001101100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000010101101000100 +00000000000000000010101001100100 +00000000000000000000000000000000 +00000000000000000010101000011100 +00000000000000000010111101010000 +00000000000000000010111100001000 +00000000000000000010111000011100 +00000000000000000010100110001100 +00000000000000000010110110101000 +00000000000000000010110100101100 +00000000000000000010110010111000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000010110001010000 +00000000000000000010101111100100 +00000000000000000000000000000001 +00000000000000000000000010111011 +00000000000000000000000011111110 +11111111111111111111000001100000 +00000000000000000000000000000001 +00000000000000000000000000000000 +00000000000010100000001111101000 +00000000000001100000000100000000 +00000000000000000000000000000000 +00000000000000000000000010000000 +00000000000000000000000010000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011001100000101000 +01110110011011000110000101101110 +00100000011011110110011001100110 +00111011011100000111010001110000 +00100000011100110111010001101111 +01110000001110110111001101100110 +01110000001000000110110101100001 +01110100011000110110100000111011 +01101101011011110110010001100101 +00100000011100110110110001100001 +01110110011001010011101101110000 +01110100011100000010000001110011 +01110100011000010111001001110100 +00000000000000000000000000000000 +00000000000000011001111101111000 +00000000000000011000000011100100 +00000000000000000001011111011000 +00000000000000000000000000000001 +00000000000000011000000011101100 +00000000000000000001011111011000 +00000000000000000000000000000000 +00000000000000011000000011110100 +00000000000000000001010001110100 +00000000000000000000000000000000 +00000000000000011000000011111000 +00000000000000000001010001110100 +00000000000000000000000000000000 +00000000000000011000000100000000 +00000000000000000001010110110100 +00000000000000000000000000000001 +00000000000000010111000001101100 +00000000000000000001010110110100 +00000000000000000000000000000010 +00000000000000010111000010001100 +00000000000000000001010110110100 +00000000000000000000000000000011 +00000000000000011000000100000100 +00000000000000000001010110110100 +00000000000000000000000000000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000001000000000 +00000000000000000000000000000000 +00000000000000011011100100010100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000001100000 +00000000000000000000000000000000 +00000000000000011011101100010100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000010000000 +00000000000000000000000000000000 +00000000000000011011101101110100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000010000000 +00000000000000000000000000000000 +00000000000000011011101111111000 +00000000000000011010000111011100 +00000000000000001100111011011100 +00000000000000011010000111101000 +00001001000000000000000000000000 +00000000000000011010001001001100 +00000000000000001100111011011100 +00000000000000011010001001011000 +00001001000000000000000000000000 +00000000000000011010001010101000 +00000000000000001100110011001100 +00000000000000011010001010110100 +00001010000000000000000000000000 +00000000000000011010001011110000 +00000000000000001100111011011100 +00000000000000011010001011111100 +00001001000000000000000000000000 +00000000000000011010001111000100 +00000000000000001100111011011100 +00000000000000011010001111010000 +00001001000000000000000000000000 +00000000000000011010010100111000 +00000000000000001100111011011100 +00000000000000011010010101000100 +00001001000000000000000000000000 +00000000000000011010010111010000 +00000000000000001100111011011100 +00000000000000011010010111011100 +00001001000000000000000000000000 +00000000000000011010011001010100 +00000000000000001100110011001100 +00000000000000011010011001100000 +00001010000000000000000000000000 +00000000000000011010000110010000 +00000000000000001100011000011100 +00000000000000011010011011000100 +00001100000000000000000000000000 +00000000000000011010000110011100 +00000000000000001100011000011100 +00000000000000011010011011101100 +00001100000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00101011000001100000000100000100 +00000001011000000110010100000010 +00000000000000000000000100000001 +00101011000001100000000100000100 +00000001011000000110010100000010 +00000000000000000000001000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000100000000 +00000000000000000000000000000000 +00000000000000011011110010101000 +00101011000001100000000100000100 +00000001011000000110010100000001 +00000001000000000000000000000000 +00000000000000011010011100010100 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011100001010000100 +00000010000001000000000000000101 +00000000000000011010011100011000 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011001011011101000 +00000010000001000000000000000100 +00000000000000011010011100011100 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011001011011110100 +00000010000001000000000000000100 +00000000000000011010011100100000 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011010011100100100 +00000010000001000000000000000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00101011000001100000000100000100 +00000001011000000110010100000001 +00000010000000000000000000000000 +00000000000000011010011100101000 +00000000000000001101100101000100 +00000000000000000000000000000000 +00000000000000000000000000000100 +00000010010001100000000000000001 +00000000000000011010011100101100 +00000000000000001101100101000100 +00000000000000000000000000000000 +00000000000000000000000000000101 +00000010000001000000000000000001 +00000000000000011010011100110000 +00000000000000001101100101000100 +00000000000000000000000000000000 +00000000000000000000000000000010 +00000010010000110000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00101011000001100000000100000100 +00000001011000000110010100000001 +00000011000000010000000000000000 +00000000000000011010011100110100 +00000000000000001101100000010100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000001000001000000000000000001 +00000000000000011010011100111000 +00000000000000001101100000010100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000001000001000000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00101011000001100000000100000100 +00000001011000000110010100000001 +00000100000000000000000000000000 +00000000000000011010011100111100 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011010110110010000 +00000010000000100000000000000100 +00000000000000011010011101000000 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011010110110010100 +00000010010000010000000000000100 +00000000000000011010011101000100 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011010110110011000 +00000010000000100000000000000100 +00000000000000011010011101001000 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011010110110011100 +00000010000000100000000000000100 +00000000000000011010011101001100 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011010110110100000 +00000010010000010000000000000100 +00000000000000011010011101010000 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011010110110100100 +00000010010000010000000000000100 +00000000000000011010011101010100 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011010110110101000 +00000010000000100000000000000100 +00000000000000011010011101011000 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011010110110101100 +00000010000000100000000000000100 +00000000000000011010011101011100 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011010110110110000 +00000010010000010000000000000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00101011000001100000000100000100 +00000001011000000110010100000001 +00000101000000000000000000000000 +00000000000000011010011101100000 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001111100 +00000010000000100001010000000100 +00000000000000011010011101100100 +00000000000000001101001111000100 +00000000000000000000000000000000 +00000000000000011011110001111100 +00000010000000101000100000001000 +00000000000000011010011101101000 +00000000000000001101001111000100 +00000000000000000000000000000000 +00000000000000011011110001111100 +00000010000000101000000000001000 +00000000000000011010011101101100 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001111100 +00000010010001100100000000001000 +00000000000000011010011101110000 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001111100 +00000010010000010101100000000100 +00000000000000011010011101110100 +00000000000000001101001010110000 +00000000000000000000000000000000 +00000000000000000000000000000001 +00000010010001100000000000000001 +00000000000000011010011101111000 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001111100 +00000010000000100001100000000100 +00000000000000011010011101111100 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001111100 +00000010000000100001110000000100 +00000000000000011010011110000000 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001111100 +00000010000000100010000000000100 +00000000000000011010011110000100 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001111100 +00000010000000100010010000000100 +00000000000000011010011110001000 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001111100 +00000010010000011001000000000100 +00000000000000011010011110001100 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001111100 +00000010010000011001010000000100 +00000000000000011010011110010000 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001111100 +00000010010000011001100000000100 +00000000000000011010011110010100 +00000000000000001101001010110000 +00000000000000000000000000000000 +00000000000000000000000000000010 +00000010010001100000000000000001 +00000000000000011010011110011000 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011001110000111000 +00000010010000010000000000000100 +00000000000000011010011110011100 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011001110000111100 +00000010010000010000000000000100 +00000000000000011010011110100000 +00000000000000001101010001010000 +00000000000000000000000000000000 +00000000000000011011110001111100 +00000010000000100010100000000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00101011000001100000000100000100 +00000001011000000110010100000001 +00000110000000000000000000000000 +00000000000000011010011110100100 +00000000000000001101010001111100 +00000000000000001101011000110100 +00000000000000011011110110101000 +00000010000000100000000000000100 +00000000000000011010011110101000 +00000000000000001101010001111100 +00000000000000001101011010010100 +00000000000000011011110110101100 +00000010000000100000000000000100 +00000000000000011010011110101100 +00000000000000001101010001111100 +00000000000000001100110010101000 +00000000000000011011110010000000 +00000010000001000000000000010000 +00000000000000011010011110110000 +00000000000000001101010001111100 +00000000000000001100110010101000 +00000000000000011011110010010100 +00000010000000100000000000000100 +00000000000000011010011110110100 +00000000000000001101010001111100 +00000000000000001100110010101000 +00000000000000011011110010011000 +00000010000000100000000000000100 +00000000000000011010011110111000 +00000000000000001101010001111100 +00000000000000001100110010101000 +00000000000000011011110010010000 +00000010000000100000000000000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00101011000001100000000100000100 +00000001011000000110010100000001 +00000111000000000000000000000000 +00000000000000011010011110111100 +00000000000000001101010111010100 +00000000000000000000000000000000 +00000000000000000000000000000001 +00000010000000100000000000000001 +00000000000000011010011111000000 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011011111110111100 +00000010000001000000000000010000 +00000000000000011010011111000100 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011011111101001000 +00000010000000100000000000000100 +00000000000000011010011111001000 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011100001001111100 +00000010010000010000000000000100 +00000000000000011010011111001100 +00000000000000001101010001111100 +00000000000000000000000000000000 +00000000000000011100001010000000 +00000010010000010000000000000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00101011000001100000000100000100 +00000001011000000110010100000001 +00001000000000010000000000000000 +00000000000000011010011111010000 +00000000000000001101010010100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000001000001000000000000000001 +00000000000000011010011111010100 +00000000000000001101010010100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000001000000100000000000000001 +00000000000000011010011111011000 +00000000000000001101010010100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000001000000100000000000000001 +00000000000000011010011111011100 +00000000000000001101010010100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000001000000100000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001101001010010100 +00000000000000000000000000000000 +00000000000000000000000000000001 +00000100010000100000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001101001010010100 +00000000000000001101001001111000 +00000000000000000000000000000000 +00000100010000100000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000001000000000000000000000000 +00000010000000000000000000000000 +00000011000000000000000000000000 +00000100000000000000000000000000 +00000000000000011000011111100000 +00000001000000000000000000000000 +00000010000000000000000000000000 +00000011000000000000000000000000 +00000010000000000000000000000000 +00000011000000000000000000000000 +00000001000000000000000000000000 +00000010000000000000000000000000 +00000011000000000000000000000000 +00000100000000000000000000000000 +00000101000000000000000000000000 +00000110000000000000000000000000 +00000111000000000000000000000000 +00001000000000000000000000000000 +00001001000000000000000000000000 +00000101000000000000000000000000 +00001000000000000000000000000000 +00001001000000000000000000000000 +00001010000000000000000000000000 +00001100000000000000000000000000 +00001101000000000000000000000000 +00001110000000000000000000000000 +00001111000000000000000000000000 +00010000000000000000000000000000 +00010001000000000000000000000000 +00010010000000000000000000000000 +00010011000000000000000000000000 +00010100000000000000000000000000 +00010110000000000000000000000000 +00010111000000000000000000000000 +00011000000000000000000000000000 +00011010000000000000000000000000 +00000001000000000000000000000000 +00000010000000000000000000000000 +00000011000000000000000000000000 +00000100000000000000000000000000 +00000101000000000000000000000000 +00000110000000000000000000000000 +00000001000000000000000000000000 +00000010000000000000000000000000 +00000011000000000000000000000000 +00000100000000000000000000000000 +00000101000000000000000000000000 +00000010000000000000000000000000 +00000011000000000000000000000000 +00000100000000000000000000000000 +00000101000000000000000000000000 +00000000000000011010101001011100 +00000000000000011010101101011000 +00000000000000011010101101011000 +00000000000000011010110000111100 +00000000000000000000000000000100 +00000000000000000000000000001000 +00000000000000000000000000001111 +00000000000000000000000100000000 +00000000000000000000001000000000 +00000000000000000000000100101100 +00000100011000110110001010100000 +00000000000000000000000000000000 +00000000000000011100001010111100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001100111001000010 +10101011001010000110001100111010 +00000000000000000000000000000000 +00000000000000011011111110100000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001100111001000010 +01100101000011000010110101001111 +00000000000000000000000000000000 +00000000000000011100001011000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001100111001000010 +01100101000101011000110111000000 +00000000000000000000000000000000 +00000000000000011011111111010100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001100111001000010 +11011110000011011000110011101101 +00000000000000000000000000000000 +00000000000000011100001011000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001100111001000010 +11111111000001111111110001000111 +00000000000000000000000000000000 +00000000000000011100001010001100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001100111001000010 +11100010110100010011110100000100 +00000000000000000000000000000000 +00000000000000011100001001111000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001100111001000010 +01110111100111000101010001000011 +00000000000000000000000000000000 +00000000000000011100001010111000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000011001010001 +01101000001000000010101100100010 +00000000000000000000000000000000 +00000000000000011000100111010100 +00000000000000000000000000000000 +00000000000000000000000000000001 +00000000000000110000000000000000 +00000000000000000000000000000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011000110101010100 +00000000000000011011111101111000 +00000000000000000000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010000110101011100 +00000000000000010000111100011000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010010101011110100 +00000000000000010010101100101000 +00000000000000010010101101011000 +00000000000000010111101110111000 +10000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +01000100001100110010001000010001 +00000000000000000000000000000000 +00000100000000000000000000000000 +00010011100000000100011011100010 +00000001000000000000000000000000 +10010000000000001100111111101010 +00000001000000000000000000000000 +00010000100000010101011111110011 +00000001000000000000000000000000 +00001011111000001111111111111111 +00000001000000000000000000000000 +10001000111000001111111111111111 +00000001000000000000000000000000 +00001000111000011111111111111111 +00000001000000000000000000000000 +00011011000000000010000011100000 +00000001000000000000000000000000 +10011000000000001100000011101011 +00000001000000000000000000000000 +01101011001000010011000011100000 +00000001000000000000000000000000 +01101001011000010000110111100000 +00000001000000000000000000000000 +00010000101000111000100100000000 +00000100000000000000000000000000 +01101011000000110010000011110000 +00000001000000000000000000000000 +10111011000011011000000000000001 +00000100000000000000000000000000 +00110011111000110001111011110001 +00000001000000000000000000000000 +00110001110000110101111111111001 +00000001000000000000000000000000 +00101011000000110000000011100001 +00000001000000000000000000000000 +01000011110000110000000011100001 +00000001000000000000000000000000 +01111001010000010001010000000000 +00000100000000000000000000000000 +11001011001001010000000001100000 +00000000000000000000000000000000 +11010011001001010000001001100000 +00000000000000000000000000000000 +01010000111010101000000100000001 +00000100000000000000000000000000 +10000001110010001000000000000001 +00000100000000000000000000000000 +10000000001011111100000100000000 +00000100000000000000000000000000 +01011011000010010000000010000000 +00000001000000000000000000000000 +01011001000010010010000010000000 +00000001000000000000000000000000 +11000000011010101100000100000000 +00000100000000000000000000000000 +01100011000010010111101011111101 +00000001000000000000000000000000 +11111000100010101000000100000001 +00000100000000000000000000000000 +11110100100010101000000100000001 +00000100000000000000000000000000 +00000000000000000000000000000000 +00001000000000000000000000000000 +01000100001100110010001000010001 +00000000000000000000000000000000 +00000100000000000000000000000000 +00010011100000000100011011100010 +00000001000000000000000000000000 +10010000000000001100111111101010 +00000001000000000000000000000000 +00010000100000010101011111110011 +00000001000000000000000000000000 +00001011111000001111111111111111 +00000001000000000000000000000000 +10001000111000001111111111111111 +00000001000000000000000000000000 +00001000111000011111111111111111 +00000001000000000000000000000000 +00011011000000000010000011100000 +00000001000000000000000000000000 +10011000000000001100000011101011 +00000001000000000000000000000000 +01101011001000010011000011100000 +00000001000000000000000000000000 +01101001011000010000110111100000 +00000001000000000000000000000000 +00010000101000111000100100000000 +00000100000000000000000000000000 +01101011000000110010000011110000 +00000001000000000000000000000000 +10111111000011011000000000000001 +00000100000000000000000000000000 +10100011010000110101010111100001 +00000000000000000000000000000000 +00110011111001000001111011110001 +00000001000000000000000000000000 +00110001110001000101111111111001 +00000001000000000000000000000000 +00101011000001000000000011100001 +00000001000000000000000000000000 +01000011110001000000000011100001 +00000001000000000000000000000000 +10000001001000101001100000000000 +00000100000000000000000000000000 +11000000100100001000000000000001 +00000100000000000000000000000000 +01101001001000101000000000000001 +00000100000000000000000000000000 +10100011010000110000000111100000 +00000000000000000000000000000000 +10100001011000110000000111100000 +00000000000000000000000000000000 +11111000100011011000000000000001 +00000100000000000000000000000000 +10100011100000110000001011100000 +00000000000000000000000000000000 +11110000100011011000000000000001 +00000100000000000000000000000000 +00000000000000000000000000000000 +00001000000000000000000000000000 +01010011010001000100001000101101 +00000000000001010000000100000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000001101111111 +01000110011010010110110001100101 +01000100011000010111010001100001 +00101110001000000010000000100000 +00000000000000000000000000000001 +00000000000000000000000000000000 +00101110001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000000000 +00000000000000000000000000000000 +00000000000000000000000000000110 +00000000000000000000000000000000 +00000000000000000000000101000000 +00000000000000000000000000000000 +00000000000000000000001000111111 +01000110011010010110110001100101 +01000100011000010111010001100001 +01110111011100100010110101101001 +00000000000000000000000000000001 +00000000000000000000000000000000 +01110111011100100010110101101001 +01101110011010010111010000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000000001 +00000000000000000000000000000000 +00000000000000000000000000000110 +00000000000000000000000000000000 +00000000000000000000001001000000 +00000000000000000000000000000000 +00000000000000000000001010111111 +01000110011010010110110001100101 +01000100011000010111010001100001 +01100011011000010110110001101001 +00000000000000000000000000000001 +00000000000000000000000000000000 +01100011011000010110110001101001 +01100010011100100110000101110100 +01101001011011110110111000100000 +00100000001000000010000000100000 +00100000001000000010000000000001 +00000000000000000000000000000000 +00000000000000000000000000000110 +00000000000000000000000000000000 +00000000000000000000001011000000 +00000000000000000000000000000000 +00000000000000000000001011000101 +01000110011010010110110001100101 +01000100011000010111010001100001 +01101101011000010110001100101101 +00000000000000000000000000000001 +00000000000000000000000000000000 +01101101011000010110001100101101 +01100001011001000110010001110010 +01100101011100110111001100100000 +00100000001000000010000000100000 +00100000001000000010000000000001 +00000000000000000000000000000000 +00000000000000000000000000000110 +00000000000000000000000000000000 +00000000000000000000001100000000 +00000000000000000000000000000000 +00000000000000000000001101111111 +01000110011010010110110001100101 +01000100011000010111010001100001 +01110011011001100111000000101101 +00000000000000000000000000000001 +00000000000000000000000000000000 +01110011011001100111000000101101 +01100100011000010111010001100001 +01100010011000010111001101100101 +00100000001000000010000000100000 +00100000001000000010000000000001 +11111111111111111111111111111111 +00000000000000011001010111100000 +01011011000100010101011110100111 +00000000000000000000000000000011 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +01110111011100100111000001100011 +00101101011101100011010000101110 +00110010000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +01000100011001010110001100100000 +00110001001110000010000000110010 +00110000001100010011011100000000 +00000000000000000000000000000000 +00110000001110010011101000110011 +00110010001110100011010100110000 +00000000000000000000000000000000 +00000000000000000000000000000000 +01000111011100100111101001100101 +01100111011011110111001001111010 +00100000010001000110000101101110 +01101001011011000111010101101011 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011000000010111000 +00000000000000001001011001000000 +00000000000000011000000100001100 +00000000000000001001011100000000 +00000000000000010110011111110100 +00000000000000001001011100000000 +00000000000000011000000101001000 +00000000000000001001100000111100 +00000000000000011000000110011100 +00000000000000001001100101010100 +00000000000000011000001000011100 +00000000000000001001101001100100 +00000000000000010110011111111000 +00000000000000001001101110011100 +00000000000000011000001001000000 +00000000000000001001101111001100 +00000000000000011000001001100100 +00000000000000001001110000101100 +00000000000000011000001110010100 +00000000000000001001110100110000 +00000000000000011000001111010000 +00000000000000001010000011001000 +00000000000000011000010000101100 +00000000000000001010001100110000 +00000000000000011000010001100100 +00000000000000001010010000001000 +00000000000000011000010001101100 +00000000000000001010010101101000 +00000000000000011000010001111000 +00000000000000001010010110000000 +00000000000000011000010010101000 +00000000000000001010011100101000 +00000000000000011000010100011100 +00000000000000001010100001111000 +00000000000000011000010100111000 +00000000000000001010100101101000 +00000000000000011000001110011000 +00000000000000001010100110110000 +00000000000000011000010111000000 +00000000000000001010101010010100 +00000000000000011000011001010100 +00000000000000001010101101111000 +00000000000000011000101010111000 +00000000000000010000101010100100 +00000000000000011000110111101000 +00000000000000010010110110100100 +00000000000000011000110111101100 +00000000000000010010110010101000 +00000000000000011000110111110000 +00000000000000010010101110101100 +00000000000000010011011010100000 +00000000000000000000000000000000 +00000000000000011010101001001100 +00000000000000010110100000001100 +00000000000000000000000000000000 +00000000000000000000001010100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110011111100000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010101001001101000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110011111101000 +00000000000000000000000000000000 +00000000000000001001010011000000 +00000000000000000000010011100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110011111110100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000001100000011000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110011111111000 +00000000000000000000000000000000 +00000000000000000000001010000000 +00000000000000000000001000010100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010110100000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000001111110100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010111111110010100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001000001010100000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010111111110011100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000111111011101000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011000011101100000 +00000000000000011100001010100100 +00000000000000000000000000000000 +00000000000000001011001010011100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011000011101101000 +00000000000000011100001010100100 +00000000000000001011101000010000 +00000000000000001011101111111000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011000011101110000 +00000000000000011100001010100100 +00000000000000001011111111101100 +00000000000000001011111001100000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011000011111011000 +00000000000000011100001010100100 +00000000000000001101100111110000 +00000000000000001100100011000100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011000100000001000 +00000000000000000000000000000000 +00000000000000001101111101100100 +00000000000000001101111001010100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000011000101011000000 +00000000000000000000000000000000 +00000000000000010000011101111100 +00000000000000010000011111001000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8.mif b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8.mif new file mode 100644 index 000000000..83f979eb6 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8.mif @@ -0,0 +1,32775 @@ +DEPTH = 32768; +WIDTH = 32; +ADDRESS_RADIX = HEX; +DATA_RADIX = HEX; +CONTENT +BEGIN +0 : 98000000; +1 : D0000000; +2 : D0200000; +3 : 78010000; +4 : 38210000; +5 : D0E10000; +6 : F800003A; +7 : 34000000; +8 : 00000000; +9 : 00000000; +a : 00000000; +b : 00000000; +c : 00000000; +d : 00000000; +e : 00000000; +f : 00000000; +10 : 00000000; +11 : 00000000; +12 : 00000000; +13 : 00000000; +14 : 00000000; +15 : 00000000; +16 : 00000000; +17 : 00000000; +18 : 00000000; +19 : 00000000; +1a : 00000000; +1b : 00000000; +1c : 00000000; +1d : 00000000; +1e : 00000000; +1f : 00000000; +20 : 57525043; +21 : 2D2D2D2D; +22 : 01234567; +23 : 89ABCDEF; +24 : 0001BFD8; +25 : 00000000; +26 : 00019828; +27 : 0001AD84; +28 : 00000000; +29 : 02140000; +2a : 00000000; +2b : 00000000; +2c : 00000000; +2d : 00000000; +2e : 00000000; +2f : 00000000; +30 : 5B9D0000; +31 : F800001E; +32 : 34010002; +33 : F800519E; +34 : E000002E; +35 : 34000000; +36 : 34000000; +37 : 34000000; +38 : 00000000; +39 : 00000000; +3a : 00000000; +3b : 00000000; +3c : 00000000; +3d : 00000000; +3e : 00000000; +3f : 00000000; +40 : 98000000; +41 : 781C0001; +42 : 3B9CFFFC; +43 : 78010001; +44 : 3821B0B0; +45 : 34020000; +46 : 78030001; +47 : 3863C2C8; +48 : C8611800; +49 : F800580B; +4a : 34010000; +4b : 34020000; +4c : 34030000; +4d : F8000109; +4e : E0000000; +4f : 379CFFC4; +50 : 5B810004; +51 : 5B820008; +52 : 5B83000C; +53 : 5B840010; +54 : 5B850014; +55 : 5B860018; +56 : 5B87001C; +57 : 5B880020; +58 : 5B890024; +59 : 5B8A0028; +5a : 5B9E0034; +5b : 5B9F0038; +5c : 2B81003C; +5d : 5B810030; +5e : BB800800; +5f : 3421003C; +60 : 5B81002C; +61 : C3A00000; +62 : 2B810004; +63 : 2B820008; +64 : 2B83000C; +65 : 2B840010; +66 : 2B850014; +67 : 2B860018; +68 : 2B87001C; +69 : 2B880020; +6a : 2B890024; +6b : 2B8A0028; +6c : 2B9D0030; +6d : 2B9E0034; +6e : 2B9F0038; +6f : 2B9C002C; +70 : 34000000; +71 : C3C00000; +72 : 90001000; +73 : 3401FFFE; +74 : A0410800; +75 : D0010000; +76 : 90201000; +77 : 3401FFFE; +78 : A0410800; +79 : D0210000; +7a : C3A00000; +7b : 90001000; +7c : 3401FFFE; +7d : A0410800; +7e : D0010000; +7f : 90201000; +80 : 38420001; +81 : D0220000; +82 : 38210001; +83 : D0010000; +84 : C3A00000; +85 : 379CFFFC; +86 : 5B9D0004; +87 : F8003D83; +88 : 78020001; +89 : 78030001; +8a : 3863B0C4; +8b : 3842B0C8; +8c : 28640000; +8d : 28450000; +8e : 58610000; +8f : 340303E8; +90 : C8A42000; +91 : B4812000; +92 : 58440000; +93 : 34010000; +94 : 50640009; +95 : 78010000; +96 : 382100A0; +97 : 3484FC18; +98 : 58440000; +99 : 28220000; +9a : 34420001; +9b : 58220000; +9c : 34010001; +9d : 2B9D0004; +9e : 379C0004; +9f : C3A00000; +a0 : 379CFFFC; +a1 : 5B9D0004; +a2 : F8003D68; +a3 : 78020001; +a4 : 3842B0C4; +a5 : 58410000; +a6 : 2B9D0004; +a7 : 379C0004; +a8 : C3A00000; +a9 : 379CFFF4; +aa : 5B9D0004; +ab : F8003EDF; +ac : F800384D; +ad : 78010001; +ae : 38216720; +af : F800376F; +b0 : 34010001; +b1 : F8003D47; +b2 : 78010001; +b3 : 3821C284; +b4 : F8003D29; +b5 : F8004808; +b6 : F8004A2D; +b7 : 78010001; +b8 : 3821C1F0; +b9 : 58200000; +ba : F8004953; +bb : F8004054; +bc : 34010000; +bd : F8003B6C; +be : 34010000; +bf : 34020050; +c0 : F8004403; +c1 : 37820008; +c2 : 34010000; +c3 : F80044CC; +c4 : 3402FFFF; +c5 : 5C220006; +c6 : 78010001; +c7 : 3821673C; +c8 : F8003756; +c9 : 34010022; +ca : 33810008; +cb : 4384000A; +cc : 4385000B; +cd : 4386000C; +ce : 4387000D; +cf : 43830009; +d0 : 43820008; +d1 : 78010001; +d2 : 38216760; +d3 : F800374B; +d4 : F8003DB5; +d5 : 37810008; +d6 : F8003950; +d7 : 340100C8; +d8 : F8003D37; +d9 : 34020001; +da : 34010001; +db : F800389D; +dc : F8003B80; +dd : F80041E3; +de : F800042E; +df : 78020001; +e0 : 38429700; +e1 : 34010002; +e2 : F8003FB9; +e3 : F80051B1; +e4 : F8002B51; +e5 : F8002322; +e6 : 78030001; +e7 : 38638EC4; +e8 : 78010001; +e9 : 28620000; +ea : 3821B0B0; +eb : 58200000; +ec : 78010001; +ed : 3821F800; +ee : 58220000; +ef : 34010003; +f0 : F800047D; +f1 : F8000430; +f2 : 78020001; +f3 : 3842B0B8; +f4 : 34010000; +f5 : F800421A; +f6 : F8003D14; +f7 : 78020001; +f8 : 3842B0BC; +f9 : 58410000; +fa : 2B9D0004; +fb : 379C000C; +fc : C3A00000; +fd : 379CFFF8; +fe : 5B8B0008; +ff : 5B9D0004; +100 : 34010000; +101 : F80038A9; +102 : B8205800; +103 : 78010001; +104 : 3821B0C0; +105 : 28240000; +106 : 7D620000; +107 : 64830000; +108 : A0431800; +109 : 4460000D; +10a : 78010001; +10b : 3821C2AC; +10c : 28210000; +10d : 34020002; +10e : 58220004; +10f : F8003DDC; +110 : F8000411; +111 : 78010001; +112 : 3821C2A4; +113 : 34020001; +114 : 58220000; +115 : E0000014; +116 : 65610000; +117 : 7C840000; +118 : A0240800; +119 : 44230012; +11a : 78010001; +11b : 3821C2AC; +11c : 28210000; +11d : 34020002; +11e : 58220008; +11f : 78010001; +120 : 3821C2A4; +121 : 58220000; +122 : F8000425; +123 : 34010002; +124 : 34020000; +125 : 34030001; +126 : F8005179; +127 : 34010000; +128 : F8004217; +129 : 34010001; +12a : E0000008; +12b : FC411000; +12c : 78010001; +12d : C8021000; +12e : 3821C2A4; +12f : 20420003; +130 : 58220000; +131 : 34010000; +132 : 78020001; +133 : 3842B0C0; +134 : 584B0000; +135 : 2B9D0004; +136 : 2B8B0008; +137 : 379C0008; +138 : C3A00000; +139 : 379CFFF8; +13a : 5B8B0008; +13b : 5B9D0004; +13c : 78010001; +13d : 3821B0B0; +13e : 28220000; +13f : 34010001; +140 : 5C41000F; +141 : F8001FFC; +142 : B8205800; +143 : F80037E4; +144 : 3402001B; +145 : 44220005; +146 : 78020001; +147 : 384296F8; +148 : 28410000; +149 : 5C200008; +14a : F80022BD; +14b : 78020001; +14c : 3842B0B0; +14d : 58400000; +14e : E0000003; +14f : F80022C2; +150 : B8205800; +151 : B9600800; +152 : 2B9D0004; +153 : 2B8B0008; +154 : 379C0008; +155 : C3A00000; +156 : 379CFFC8; +157 : 5B8B0034; +158 : 5B8C0030; +159 : 5B8D002C; +15a : 5B8E0028; +15b : 5B8F0024; +15c : 5B900020; +15d : 5B91001C; +15e : 5B920018; +15f : 5B930014; +160 : 5B940010; +161 : 5B95000C; +162 : 5B960008; +163 : 5B9D0004; +164 : 780B0001; +165 : 780C0001; +166 : F80053EA; +167 : 396BAEEC; +168 : 398CB0AC; +169 : E0000005; +16a : 29610008; +16b : 44200002; +16c : D8200000; +16d : 356B0020; +16e : 558BFFFC; +16f : 780B0001; +170 : 78010001; +171 : 396BAEEC; +172 : 78140001; +173 : 78100001; +174 : 38218EC8; +175 : 780F0001; +176 : 780E0001; +177 : 78120001; +178 : 78110001; +179 : 3A94B0AC; +17a : 3A10B0B8; +17b : 28330000; +17c : 39EFB0BC; +17d : 39CEB0B4; +17e : 3A5267C8; +17f : 3A316794; +180 : B960A800; +181 : E000003C; +182 : 2961000C; +183 : 5C200005; +184 : 29610010; +185 : 34210001; +186 : 59610010; +187 : E000000B; +188 : 29620004; +189 : 44400003; +18a : 28420000; +18b : 44400007; +18c : D8200000; +18d : 29620010; +18e : B9606000; +18f : B4411000; +190 : 59620010; +191 : 5C200002; +192 : BAA06000; +193 : 37820038; +194 : 34010000; +195 : F800417A; +196 : F8003C74; +197 : B820B000; +198 : 2A020000; +199 : 2B810038; +19a : C8221000; +19b : 4C400002; +19c : B4531000; +19d : 29830018; +19e : B4431000; +19f : 59820018; +1a0 : 52620006; +1a1 : C8531000; +1a2 : 59820018; +1a3 : 29820014; +1a4 : 34420001; +1a5 : 59820014; +1a6 : 29ED0000; +1a7 : 5A010000; +1a8 : CACD6800; +1a9 : 4DA00002; +1aa : 35AD03E8; +1ab : 2983001C; +1ac : 506D0008; +1ad : 29C10000; +1ae : 44200005; +1af : 29820000; +1b0 : BA200800; +1b1 : B9A02000; +1b2 : F800366C; +1b3 : 598D001C; +1b4 : 29C10000; +1b5 : 44200006; +1b6 : 502D0005; +1b7 : 29820000; +1b8 : BA400800; +1b9 : B9A01800; +1ba : F8003664; +1bb : 59F60000; +1bc : 356B0020; +1bd : 568BFFC5; +1be : F8005391; +1bf : BAA05800; +1c0 : E3FFFFFD; +1c1 : 379CFFC0; +1c2 : 5B8B0014; +1c3 : 5B8C0010; +1c4 : 5B8D000C; +1c5 : 5B8E0008; +1c6 : 5B9D0004; +1c7 : 5B83002C; +1c8 : 78030001; +1c9 : 3863B0CC; +1ca : 5B820028; +1cb : 5B840030; +1cc : 5B850034; +1cd : 5B860038; +1ce : 5B87003C; +1cf : 5B880040; +1d0 : 286D0000; +1d1 : B8205800; +1d2 : B8407000; +1d3 : 34030000; +1d4 : 44200002; +1d5 : 2823001C; +1d6 : B86D1800; +1d7 : 0063001C; +1d8 : 4460001E; +1d9 : 780C0001; +1da : 398CB0CC; +1db : 39A10001; +1dc : 59810000; +1dd : 29610038; +1de : 37820018; +1df : 28230000; +1e0 : B9600800; +1e1 : D8600000; +1e2 : 598D0000; +1e3 : 2B840020; +1e4 : 2F830024; +1e5 : 296B03D4; +1e6 : 3C840010; +1e7 : 780C0001; +1e8 : B8830800; +1e9 : 78030001; +1ea : 38638ECC; +1eb : 28620000; +1ec : 398C6814; +1ed : F800553B; +1ee : 2B83001C; +1ef : B8202000; +1f0 : B9601000; +1f1 : B9800800; +1f2 : F800362C; +1f3 : B9C00800; +1f4 : 3782002C; +1f5 : F8003607; +1f6 : 2B9D0004; +1f7 : 2B8B0014; +1f8 : 2B8C0010; +1f9 : 2B8D000C; +1fa : 2B8E0008; +1fb : 379C0040; +1fc : C3A00000; +1fd : 379CFFFC; +1fe : 5B9D0004; +1ff : B8402800; +200 : 5C600005; +201 : 78020001; +202 : 38426830; +203 : B8A01800; +204 : E000000C; +205 : 34020001; +206 : 5C620006; +207 : 78020001; +208 : 3842684C; +209 : B8A01800; +20a : 28240008; +20b : E0000005; +20c : 28240004; +20d : 78020001; +20e : 38426864; +20f : B8A01800; +210 : FBFFFFB1; +211 : 2B9D0004; +212 : 379C0004; +213 : C3A00000; +214 : 379CFFDC; +215 : 5B8B0024; +216 : 5B8C0020; +217 : 5B8D001C; +218 : 5B8E0018; +219 : 5B8F0014; +21a : 5B900010; +21b : 5B9D000C; +21c : B8205800; +21d : B8407000; +21e : B8606800; +21f : 4C0300B6; +220 : 40430000; +221 : 2828010C; +222 : 28290108; +223 : 2063000F; +224 : 28260104; +225 : 5B830004; +226 : 0863000C; +227 : 78020001; +228 : 01070010; +229 : 38429768; +22a : 2108FFFF; +22b : B4431000; +22c : 090803E8; +22d : 28420000; +22e : 3D290010; +22f : 78040001; +230 : 01080010; +231 : 5B820008; +232 : 34030001; +233 : 34020005; +234 : 3884687C; +235 : B9A02800; +236 : B9273800; +237 : F80000A2; +238 : 34010021; +239 : 4C2D009C; +23a : 41C10000; +23b : 3402000D; +23c : 2021000F; +23d : 48220010; +23e : 3C210002; +23f : 78020001; +240 : 38428FA0; +241 : B4411000; +242 : 28410000; +243 : 482D000A; +244 : 41C20001; +245 : 34010002; +246 : 2042000F; +247 : 5C410006; +248 : B9600800; +249 : B9C01000; +24a : B9A01800; +24b : F80017D2; +24c : 44200003; +24d : 340D0000; +24e : 340E0000; +24f : 296C0010; +250 : 5960000C; +251 : 29610000; +252 : 45800003; +253 : 29820000; +254 : 44410013; +255 : 34020001; +256 : 780C0001; +257 : 5962000C; +258 : 398C9DA8; +259 : E0000006; +25a : 5C410004; +25b : 596C0010; +25c : 5D80000B; +25d : E0000004; +25e : 358C000C; +25f : 29820000; +260 : 5C40FFFA; +261 : 296203D4; +262 : 78010001; +263 : 382168AC; +264 : F80035BA; +265 : 34012710; +266 : E0000066; +267 : 59610004; +268 : 2961000C; +269 : 59600008; +26a : 44200006; +26b : 29820004; +26c : B9600800; +26d : 34030000; +26e : B9A02000; +26f : FBFFFF8E; +270 : 45C00033; +271 : 29610030; +272 : 416503A6; +273 : 2821000C; +274 : 4021001E; +275 : 44250008; +276 : 78040001; +277 : B9600800; +278 : 34020005; +279 : 34030001; +27a : 388468CC; +27b : F800005E; +27c : E0000025; +27d : 417003A7; +27e : 22100001; +27f : 46000007; +280 : 78040001; +281 : B9600800; +282 : 34020005; +283 : 34030001; +284 : 388468E8; +285 : E000000C; +286 : 29620358; +287 : 356F03C0; +288 : B9E00800; +289 : 3403000A; +28a : F800552B; +28b : 5C300008; +28c : 78040001; +28d : B9600800; +28e : 34020005; +28f : 34030001; +290 : 38846904; +291 : F8000048; +292 : E000000F; +293 : 416203A1; +294 : 3401000B; +295 : 5C41000E; +296 : 29620358; +297 : B9E00800; +298 : 34030008; +299 : F800551C; +29a : 5C200009; +29b : 29610358; +29c : 2D6203C8; +29d : 2C210008; +29e : 50410003; +29f : 34010007; +2a0 : 59610004; +2a1 : 340D0000; +2a2 : 340E0000; +2a3 : 29610004; +2a4 : 29620000; +2a5 : 5C410013; +2a6 : 5DA00003; +2a7 : 3401000F; +2a8 : 316103A1; +2a9 : 29840008; +2aa : B9A01800; +2ab : B9600800; +2ac : B9C01000; +2ad : D8800000; +2ae : B8201800; +2af : 44200006; +2b0 : 296203D4; +2b1 : 29840004; +2b2 : 78010001; +2b3 : 3821691C; +2b4 : F800356A; +2b5 : 29610004; +2b6 : 29620000; +2b7 : 4441000F; +2b8 : 59610000; +2b9 : B9600800; +2ba : F80000E6; +2bb : 41610020; +2bc : 29620010; +2bd : 34030002; +2be : 202100F9; +2bf : 31610020; +2c0 : 28420004; +2c1 : B9600800; +2c2 : 34040000; +2c3 : FBFFFF3A; +2c4 : 34010000; +2c5 : E0000007; +2c6 : 29820004; +2c7 : B9600800; +2c8 : 34030001; +2c9 : 34040000; +2ca : FBFFFF33; +2cb : 29610008; +2cc : 2B9D000C; +2cd : 2B8B0024; +2ce : 2B8C0020; +2cf : 2B8D001C; +2d0 : 2B8E0018; +2d1 : 2B8F0014; +2d2 : 2B900010; +2d3 : 379C0024; +2d4 : C3A00000; +2d5 : 34010000; +2d6 : 340D0000; +2d7 : 340E0000; +2d8 : E3FFFF66; +2d9 : 379CFFE4; +2da : 5B8B0008; +2db : 5B9D0004; +2dc : 5B84000C; +2dd : 5B850010; +2de : B8805800; +2df : 5B860014; +2e0 : 78040001; +2e1 : 5B870018; +2e2 : 5B88001C; +2e3 : 38846938; +2e4 : 34050000; +2e5 : 44200003; +2e6 : 282403D4; +2e7 : 2825001C; +2e8 : 78060001; +2e9 : 38C6B0CC; +2ea : 28C10000; +2eb : 3C420002; +2ec : B8A12800; +2ed : 80A22800; +2ee : 20A5000F; +2ef : 5465000C; +2f0 : 78050001; +2f1 : 38A58FE8; +2f2 : B4A22800; +2f3 : 78060001; +2f4 : 28A20000; +2f5 : B8C00800; +2f6 : 38216940; +2f7 : F8003527; +2f8 : B9600800; +2f9 : 37820010; +2fa : F8003502; +2fb : 2B9D0004; +2fc : 2B8B0008; +2fd : 379C001C; +2fe : C3A00000; +2ff : 379CFFF8; +300 : 5B8B0008; +301 : 5B9D0004; +302 : 3402001C; +303 : B8201800; +304 : 340B0000; +305 : 3405FFFC; +306 : 34040003; +307 : E0000009; +308 : 3421FFD0; +309 : 202600FF; +30a : 50860002; +30b : E0000008; +30c : BC220800; +30d : 34630001; +30e : B9615800; +30f : 3442FFFC; +310 : 40610000; +311 : 44200007; +312 : 5C45FFF6; +313 : 78010001; +314 : 78020001; +315 : 3821694C; +316 : 38428FD8; +317 : F8003507; +318 : B9600800; +319 : 2B9D0004; +31a : 2B8B0008; +31b : 379C0008; +31c : C3A00000; +31d : 28240358; +31e : 78020001; +31f : 38429708; +320 : 1083000A; +321 : 34050001; +322 : 28210030; +323 : 58430008; +324 : 3463000C; +325 : BCA31800; +326 : 28210010; +327 : 58430038; +328 : 1083000D; +329 : 2C210000; +32a : 58430014; +32b : 1083000B; +32c : 4084000C; +32d : 34210001; +32e : 5843002C; +32f : BC832000; +330 : 088403E8; +331 : 58440020; +332 : 340403E8; +333 : BC831800; +334 : 88231800; +335 : 58430044; +336 : C3A00000; +337 : 379CFFF0; +338 : 5B8B0010; +339 : 5B8C000C; +33a : 5B8D0008; +33b : 5B9D0004; +33c : B8406800; +33d : 28220038; +33e : B8606000; +33f : B8205800; +340 : 28430018; +341 : B9801000; +342 : D8600000; +343 : 35A200D6; +344 : 3C420002; +345 : 09AD000C; +346 : B5621000; +347 : 58410004; +348 : 78010001; +349 : 38219708; +34a : B42D6800; +34b : 29A50000; +34c : 78040001; +34d : B9600800; +34e : 34020006; +34f : 34030003; +350 : 388469BC; +351 : B9803000; +352 : FBFFFF87; +353 : 2B9D0004; +354 : 2B8B0010; +355 : 2B8C000C; +356 : 2B8D0008; +357 : 379C0010; +358 : C3A00000; +359 : 379CFFF0; +35a : 5B8B0010; +35b : 5B8C000C; +35c : 5B8D0008; +35d : 5B9D0004; +35e : B8406000; +35f : B8206800; +360 : 0981000C; +361 : 78020001; +362 : 78030001; +363 : 38429708; +364 : 3863B0D0; +365 : B4411000; +366 : 28610000; +367 : 28440008; +368 : 5C200005; +369 : 29A10030; +36a : 2821000C; +36b : 28210008; +36c : 58610000; +36d : 78030001; +36e : 78010001; +36f : 3863B0D0; +370 : 38218ED0; +371 : 28620000; +372 : 28250000; +373 : 340B0019; +374 : 88451000; +375 : 34423039; +376 : 00410010; +377 : 88451000; +378 : 202107FF; +379 : 34423039; +37a : 58620000; +37b : 3C23000A; +37c : 00410010; +37d : 34820004; +37e : 202103FF; +37f : 98230800; +380 : 0983000C; +381 : BD625800; +382 : 78020001; +383 : 38429708; +384 : B4431000; +385 : 28420004; +386 : 34030001; +387 : 44430005; +388 : 34030002; +389 : 44430008; +38a : 5C40000C; +38b : E000000A; +38c : B9601000; +38d : 3D6B0001; +38e : F80053F7; +38f : B42B5800; +390 : E0000006; +391 : 09620005; +392 : F80053F3; +393 : B8205800; +394 : E0000002; +395 : B8805800; +396 : B9A00800; +397 : B9801000; +398 : B9601800; +399 : FBFFFF9E; +39a : 2B9D0004; +39b : 2B8B0010; +39c : 2B8C000C; +39d : 2B8D0008; +39e : 379C0010; +39f : C3A00000; +3a0 : 379CFFF0; +3a1 : 5B8B0010; +3a2 : 5B8C000C; +3a3 : 5B8D0008; +3a4 : 5B9D0004; +3a5 : 340B0000; +3a6 : B8206000; +3a7 : 340D0008; +3a8 : B9601000; +3a9 : B9800800; +3aa : 356B0001; +3ab : FBFFFFAE; +3ac : 5D6DFFFC; +3ad : B9800800; +3ae : 34020003; +3af : 34030014; +3b0 : FBFFFF87; +3b1 : 2B9D0004; +3b2 : 2B8B0010; +3b3 : 2B8C000C; +3b4 : 2B8D0008; +3b5 : 379C0010; +3b6 : C3A00000; +3b7 : 379CFFF4; +3b8 : 5B8B000C; +3b9 : 5B8C0008; +3ba : 5B9D0004; +3bb : B8406000; +3bc : 28220038; +3bd : B8205800; +3be : 28430018; +3bf : 34020000; +3c0 : D8600000; +3c1 : 358200D6; +3c2 : 3C420002; +3c3 : B5621000; +3c4 : 28420004; +3c5 : C8221000; +3c6 : 34010000; +3c7 : 4802000D; +3c8 : 098C000C; +3c9 : 78010001; +3ca : 38219708; +3cb : B42C6000; +3cc : 29850000; +3cd : 78040001; +3ce : B9600800; +3cf : 34020006; +3d0 : 34030001; +3d1 : 388469D4; +3d2 : FBFFFF07; +3d3 : 34010001; +3d4 : 2B9D0004; +3d5 : 2B8B000C; +3d6 : 2B8C0008; +3d7 : 379C000C; +3d8 : C3A00000; +3d9 : 379CFFF4; +3da : 5B8B000C; +3db : 5B8C0008; +3dc : 5B9D0004; +3dd : B8406000; +3de : 28220038; +3df : B8205800; +3e0 : 28430018; +3e1 : 34020000; +3e2 : D8600000; +3e3 : 358200D6; +3e4 : 3C420002; +3e5 : B5625800; +3e6 : 29620004; +3e7 : C8410800; +3e8 : A4201000; +3e9 : 1442001F; +3ea : A0220800; +3eb : 2B9D0004; +3ec : 2B8B000C; +3ed : 2B8C0008; +3ee : 379C000C; +3ef : C3A00000; +3f0 : 379CFFF0; +3f1 : 5B8B0010; +3f2 : 5B8C000C; +3f3 : 5B8D0008; +3f4 : 5B9D0004; +3f5 : B8406800; +3f6 : 28220038; +3f7 : B8205800; +3f8 : B8606000; +3f9 : 28440018; +3fa : 34020000; +3fb : D8800000; +3fc : 35A200D6; +3fd : 358300D6; +3fe : 3C630002; +3ff : 3C420002; +400 : B5621000; +401 : B5635800; +402 : 28420004; +403 : 29630004; +404 : C8411000; +405 : C8610800; +406 : 4C410002; +407 : B8400800; +408 : A4201000; +409 : 1442001F; +40a : A0220800; +40b : 2B9D0004; +40c : 2B8B0010; +40d : 2B8C000C; +40e : 2B8D0008; +40f : 379C0010; +410 : C3A00000; +411 : 379CFFEC; +412 : 5B8B0014; +413 : 5B8C0010; +414 : 5B8D000C; +415 : 5B8E0008; +416 : 5B9D0004; +417 : B8407000; +418 : 28220038; +419 : B8205800; +41a : B8606800; +41b : 28450018; +41c : 34020000; +41d : B8806000; +41e : D8A00000; +41f : 35C200D6; +420 : 35A300D6; +421 : 3C420002; +422 : 3C630002; +423 : B5621000; +424 : B5631800; +425 : 28450004; +426 : 28620004; +427 : C8A12800; +428 : C8411000; +429 : 4CA20002; +42a : B8A01000; +42b : 358400D6; +42c : 3C840002; +42d : B5645800; +42e : 29630004; +42f : C8610800; +430 : 4C220002; +431 : B8201000; +432 : A4400800; +433 : 1421001F; +434 : A0410800; +435 : 2B9D0004; +436 : 2B8B0014; +437 : 2B8C0010; +438 : 2B8D000C; +439 : 2B8E0008; +43a : 379C0014; +43b : C3A00000; +43c : 379CFFFC; +43d : 5B9D0004; +43e : 34030001; +43f : 34010003; +440 : 34020000; +441 : F8004E5E; +442 : 34010000; +443 : 34020001; +444 : F8004FFD; +445 : F8003B82; +446 : 34010000; +447 : 2B9D0004; +448 : 379C0004; +449 : C3A00000; +44a : 379CFFF4; +44b : 5B8B000C; +44c : 5B8C0008; +44d : 5B9D0004; +44e : 34010000; +44f : B8406000; +450 : F8004F19; +451 : 45800005; +452 : 64220000; +453 : C8021000; +454 : 38420001; +455 : E0000013; +456 : 780B0001; +457 : 396BB0D4; +458 : 5C2C0004; +459 : 59600000; +45a : 3402FFFF; +45b : E000000D; +45c : 296C0000; +45d : 34020001; +45e : 5D80000A; +45f : 78020001; +460 : 38429700; +461 : 34010003; +462 : F8003C39; +463 : 34020002; +464 : 49810004; +465 : 34010001; +466 : 59610000; +467 : 34020001; +468 : B8400800; +469 : 2B9D0004; +46a : 2B8B000C; +46b : 2B8C0008; +46c : 379C000C; +46d : C3A00000; +46e : 34010000; +46f : C3A00000; +470 : 379CFFFC; +471 : 5B9D0004; +472 : 34010000; +473 : 34020001; +474 : F8004FCD; +475 : 34010000; +476 : 2B9D0004; +477 : 379C0004; +478 : C3A00000; +479 : 379CFFFC; +47a : 5B9D0004; +47b : 28210358; +47c : 28210010; +47d : 2823000C; +47e : 44430004; +47f : 5822000C; +480 : B8400800; +481 : F8003EBE; +482 : 34010000; +483 : 2B9D0004; +484 : 379C0004; +485 : C3A00000; +486 : 379CFFFC; +487 : 5B9D0004; +488 : F8003EB0; +489 : 34020001; +48a : 5C200003; +48b : F8004FA6; +48c : 7C220000; +48d : B8400800; +48e : 2B9D0004; +48f : 379C0004; +490 : C3A00000; +491 : 379CFFF8; +492 : 5B8B0008; +493 : 5B9D0004; +494 : B8202800; +495 : B8220800; +496 : B8402000; +497 : B8605800; +498 : 44200005; +499 : 34010001; +49a : B8A01000; +49b : B8801800; +49c : F8003E35; +49d : 45600005; +49e : 1562001F; +49f : 34010002; +4a0 : B9601800; +4a1 : F8003E30; +4a2 : 34010000; +4a3 : 2B9D0004; +4a4 : 2B8B0008; +4a5 : 379C0008; +4a6 : C3A00000; +4a7 : 379CFFFC; +4a8 : 5B9D0004; +4a9 : B8201000; +4aa : 3401FFFF; +4ab : F8004ECF; +4ac : 34010000; +4ad : 2B9D0004; +4ae : 379C0004; +4af : C3A00000; +4b0 : 379CFF24; +4b1 : 5B8B0014; +4b2 : 5B8C0010; +4b3 : 5B8D000C; +4b4 : 5B8E0008; +4b5 : 5B9D0004; +4b6 : B8406000; +4b7 : 282203D0; +4b8 : B8807000; +4b9 : 37810018; +4ba : B8605800; +4bb : B8A06800; +4bc : F8001E65; +4bd : 45C00005; +4be : 78010001; +4bf : 3821A808; +4c0 : 28210000; +4c1 : 59C10000; +4c2 : 45A00003; +4c3 : 2B8100CC; +4c4 : 59A10000; +4c5 : 2B82006C; +4c6 : 3401FFFD; +4c7 : 44400013; +4c8 : 45800007; +4c9 : 2B820060; +4ca : 2B810058; +4cb : B4410800; +4cc : 2B8200A0; +4cd : B4220800; +4ce : 59810000; +4cf : 2B820068; +4d0 : 3401FFFD; +4d1 : 44400009; +4d2 : 34010000; +4d3 : 45600007; +4d4 : 2B830064; +4d5 : 2B82005C; +4d6 : B4621000; +4d7 : 2B8300A4; +4d8 : B4431000; +4d9 : 59620000; +4da : 2B9D0004; +4db : 2B8B0014; +4dc : 2B8C0010; +4dd : 2B8D000C; +4de : 2B8E0008; +4df : 379C00DC; +4e0 : C3A00000; +4e1 : 34010000; +4e2 : C3A00000; +4e3 : 34010000; +4e4 : C3A00000; +4e5 : 379CFFEC; +4e6 : 5B8B000C; +4e7 : 5B8C0008; +4e8 : 5B9D0004; +4e9 : 34040000; +4ea : B8406000; +4eb : B8605800; +4ec : 37820010; +4ed : 37830014; +4ee : 34050000; +4ef : 5B800014; +4f0 : 5B800010; +4f1 : FBFFFFBF; +4f2 : 34010001; +4f3 : 5D810003; +4f4 : 2B810010; +4f5 : E0000002; +4f6 : 2B810014; +4f7 : 59610000; +4f8 : 34010001; +4f9 : 2B9D0004; +4fa : 2B8B000C; +4fb : 2B8C0008; +4fc : 379C0014; +4fd : C3A00000; +4fe : 379CFFFC; +4ff : 5B9D0004; +500 : F80034EB; +501 : 34010000; +502 : 2B9D0004; +503 : 379C0004; +504 : C3A00000; +505 : 379CFFFC; +506 : 5B9D0004; +507 : F80034EF; +508 : 34010000; +509 : 2B9D0004; +50a : 379C0004; +50b : C3A00000; +50c : 379CFFFC; +50d : 5B9D0004; +50e : F8003A7C; +50f : F80033EA; +510 : 78010001; +511 : 78020001; +512 : 38426ACC; +513 : 38216A9C; +514 : F800330A; +515 : 34010000; +516 : 2B9D0004; +517 : 379C0004; +518 : C3A00000; +519 : 78010001; +51a : 3821B0D8; +51b : 28210000; +51c : C3A00000; +51d : 78010001; +51e : 38219828; +51f : 2821002C; +520 : C3A00000; +521 : 379CFFF8; +522 : 5B8B0008; +523 : 5B9D0004; +524 : 78010001; +525 : 38216AE8; +526 : F80032F8; +527 : 78010001; +528 : 78020001; +529 : 38429F44; +52a : 38219C40; +52b : 780B0001; +52c : F80019FF; +52d : 396B9828; +52e : 34030000; +52f : B9600800; +530 : 34020000; +531 : FBFFFCE3; +532 : 78020001; +533 : 38429C84; +534 : 58410000; +535 : F80038D5; +536 : 78020001; +537 : 3842B0E0; +538 : 58410000; +539 : 29610358; +53a : 28210010; +53b : 58200068; +53c : B9600800; +53d : F8000B31; +53e : 78010001; +53f : 3821B0DC; +540 : 34020001; +541 : 58220000; +542 : 34010000; +543 : 2B9D0004; +544 : 2B8B0008; +545 : 379C0008; +546 : C3A00000; +547 : 379CFFF4; +548 : 5B8B000C; +549 : 5B8C0008; +54a : 5B9D0004; +54b : 780B0001; +54c : 396B9828; +54d : 29610358; +54e : 282C0010; +54f : 78010001; +550 : 38216AF4; +551 : F80032CD; +552 : 29810000; +553 : 34020000; +554 : 28230034; +555 : B9600800; +556 : D8600000; +557 : 78010001; +558 : 34020000; +559 : 34030230; +55a : 59800040; +55b : 31800035; +55c : 38219950; +55d : F80052F7; +55e : 78010001; +55f : 3821B0DC; +560 : 58200000; +561 : B9600800; +562 : 0D600120; +563 : F8000B0B; +564 : 78010001; +565 : 38219C40; +566 : F8001A10; +567 : 34010000; +568 : 2B9D0004; +569 : 2B8B000C; +56a : 2B8C0008; +56b : 379C000C; +56c : C3A00000; +56d : 379CFFEC; +56e : 5B8B0014; +56f : 5B8C0010; +570 : 5B8D000C; +571 : 5B8E0008; +572 : 5B9D0004; +573 : 780B0001; +574 : 396B9828; +575 : B8206000; +576 : 29610358; +577 : 282D0010; +578 : 78010001; +579 : 3821B0D8; +57a : 58200000; +57b : FBFFFFCC; +57c : 34010002; +57d : 4581001F; +57e : 49810003; +57f : 34010001; +580 : E0000004; +581 : 34020003; +582 : 4582002F; +583 : 34010004; +584 : 5D810039; +585 : 34010001; +586 : 780B0001; +587 : 396B9828; +588 : 31A10004; +589 : 34010001; +58a : 59610024; +58b : 78010001; +58c : 38219F44; +58d : 340E0006; +58e : 34020000; +58f : 34030001; +590 : 582E0000; +591 : 34010001; +592 : F8004D0D; +593 : 34010001; +594 : F8003DB7; +595 : 29610030; +596 : 2821000C; +597 : 582E0010; +598 : B9600800; +599 : F80012ED; +59a : 380BEA60; +59b : E0000023; +59c : 34010001; +59d : 31A10004; +59e : 34010001; +59f : 59610024; +5a0 : 78010001; +5a1 : 38219F44; +5a2 : 340E00BB; +5a3 : 34020000; +5a4 : 34030001; +5a5 : 582E0000; +5a6 : 34010002; +5a7 : F8004CF8; +5a8 : 34010001; +5a9 : F8003DA2; +5aa : 29610030; +5ab : 2821000C; +5ac : 582E0010; +5ad : B9600800; +5ae : F80012D8; +5af : 340B0FA0; +5b0 : E000000E; +5b1 : 31A10004; +5b2 : 59610024; +5b3 : 78010001; +5b4 : 38219F44; +5b5 : 340200FF; +5b6 : 58220000; +5b7 : 34030001; +5b8 : 34010003; +5b9 : 34020000; +5ba : F8004CE5; +5bb : 34010000; +5bc : F8003D8F; +5bd : 340B0000; +5be : F800384C; +5bf : 78020001; +5c0 : B8207000; +5c1 : B8400800; +5c2 : 38216B00; +5c3 : F800325B; +5c4 : 29A20000; +5c5 : 780D0001; +5c6 : 39AD6B1C; +5c7 : 28430034; +5c8 : 78020001; +5c9 : B8400800; +5ca : 38219828; +5cb : 34020000; +5cc : D8600000; +5cd : E000000E; +5ce : F8004ECC; +5cf : 340103E8; +5d0 : F800383F; +5d1 : F8003839; +5d2 : C82E1000; +5d3 : 51620006; +5d4 : 78010001; +5d5 : 38216B0C; +5d6 : F8003248; +5d7 : 340BFF8C; +5d8 : E0000008; +5d9 : B9A00800; +5da : F8003244; +5db : 34010000; +5dc : F8004D8D; +5dd : 5C200002; +5de : 5D61FFF0; +5df : 340B0000; +5e0 : 78010001; +5e1 : 38218798; +5e2 : F800323C; +5e3 : 7D620000; +5e4 : 65810001; +5e5 : A0410800; +5e6 : 44200005; +5e7 : 78010001; +5e8 : 38219F44; +5e9 : 34020034; +5ea : 58220000; +5eb : 78010001; +5ec : 3821B0D8; +5ed : 582C0000; +5ee : B9600800; +5ef : 2B9D0004; +5f0 : 2B8B0014; +5f1 : 2B8C0010; +5f2 : 2B8D000C; +5f3 : 2B8E0008; +5f4 : 379C0014; +5f5 : C3A00000; +5f6 : 379CFFFC; +5f7 : 5B9D0004; +5f8 : 44200004; +5f9 : 34020001; +5fa : 5C220006; +5fb : E0000003; +5fc : FBFFFF4B; +5fd : E0000006; +5fe : FBFFFF23; +5ff : E0000004; +600 : 78010001; +601 : 3821B0DC; +602 : 28210000; +603 : 2B9D0004; +604 : 379C0004; +605 : C3A00000; +606 : 379CFFEC; +607 : 5B8B0014; +608 : 5B8C0010; +609 : 5B8D000C; +60a : 5B8E0008; +60b : 5B9D0004; +60c : 78010001; +60d : 3821B0DC; +60e : 28210000; +60f : 340E0000; +610 : 44200024; +611 : 780B0001; +612 : 396B9828; +613 : 29610034; +614 : 29620048; +615 : 78040001; +616 : 28250008; +617 : 3403007C; +618 : B9600800; +619 : 38849928; +61a : D8A00000; +61b : B8201800; +61c : 4C010005; +61d : 29610414; +61e : 34210001; +61f : 59610414; +620 : E000000C; +621 : 5C20000B; +622 : 780D0001; +623 : F80037E7; +624 : 39ADB0E0; +625 : 29A20000; +626 : 780C0001; +627 : 398C9C84; +628 : C8220800; +629 : 29820000; +62a : 5441000A; +62b : E0000011; +62c : 78010001; +62d : 38219828; +62e : 28220050; +62f : FBFFFBE5; +630 : 78020001; +631 : 38429C84; +632 : 58410000; +633 : 340E0001; +634 : B9C00800; +635 : 2B9D0004; +636 : 2B8B0014; +637 : 2B8C0010; +638 : 2B8D000C; +639 : 2B8E0008; +63a : 379C0014; +63b : C3A00000; +63c : F80037CE; +63d : 59A10000; +63e : 34020000; +63f : B9600800; +640 : 34030000; +641 : FBFFFBD3; +642 : 59810000; +643 : E3FFFFF0; +644 : 379CFFF0; +645 : 5B8B0010; +646 : 5B8C000C; +647 : 5B8D0008; +648 : 5B9D0004; +649 : 28450008; +64a : 2C44000C; +64b : 284D0000; +64c : 3CA50010; +64d : B8206000; +64e : 284B0004; +64f : B8A40800; +650 : 340203E8; +651 : F80050D7; +652 : 15A20018; +653 : B8203000; +654 : 78070001; +655 : 204200C0; +656 : 34010080; +657 : 38E780E0; +658 : 5C410003; +659 : 78070001; +65a : 38E76B24; +65b : 78040001; +65c : B8800800; +65d : B9801000; +65e : B9601800; +65f : B9602000; +660 : B9602800; +661 : 38216B30; +662 : F80031BC; +663 : 2B9D0004; +664 : 2B8B0010; +665 : 2B8C000C; +666 : 2B8D0008; +667 : 379C0010; +668 : C3A00000; +669 : 379CFFE8; +66a : 5B9D0018; +66b : B8205000; +66c : 40610005; +66d : 40640000; +66e : 40650001; +66f : 40660002; +670 : 40670003; +671 : 40680004; +672 : 5B810004; +673 : 40610006; +674 : B8404800; +675 : B9401000; +676 : 5B810008; +677 : 40610007; +678 : 5B81000C; +679 : 40610008; +67a : 5B810010; +67b : 40610009; +67c : B9201800; +67d : 5B810014; +67e : 78010001; +67f : 38216B54; +680 : F800319E; +681 : 2B9D0018; +682 : 379C0018; +683 : C3A00000; +684 : 379CFFD0; +685 : 5B8B0030; +686 : 5B8C002C; +687 : 5B8D0028; +688 : 5B8E0024; +689 : 5B8F0020; +68a : 5B90001C; +68b : 5B910018; +68c : 5B920014; +68d : 5B930010; +68e : 5B94000C; +68f : 5B950008; +690 : 5B9D0004; +691 : B8603000; +692 : B8209800; +693 : B8409000; +694 : 78010001; +695 : B880A800; +696 : 38216B8C; +697 : BA601000; +698 : BA401800; +699 : B8C02000; +69a : B8A0A000; +69b : 78110001; +69c : F8003182; +69d : 78100001; +69e : 780F0001; +69f : 780E0001; +6a0 : 780D0001; +6a1 : B8205800; +6a2 : 340C0000; +6a3 : 3A316BA0; +6a4 : 3A106BA8; +6a5 : 39EF7C58; +6a6 : 39CE8798; +6a7 : 39AD7F20; +6a8 : E0000017; +6a9 : 5CC00006; +6aa : BA200800; +6ab : BA601000; +6ac : BA401800; +6ad : F8003171; +6ae : B5615800; +6af : B6AC1000; +6b0 : 40420000; +6b1 : BA000800; +6b2 : 358C0001; +6b3 : F800316B; +6b4 : 21820003; +6b5 : B42B5800; +6b6 : B9E03000; +6b7 : 5C400005; +6b8 : 2181000F; +6b9 : B9C03000; +6ba : 44220002; +6bb : B9A03000; +6bc : B8C00800; +6bd : F8003161; +6be : B5615800; +6bf : 2186000F; +6c0 : 4A8CFFE9; +6c1 : 44C00005; +6c2 : 78010001; +6c3 : 38218798; +6c4 : F800315A; +6c5 : B42B5800; +6c6 : B9600800; +6c7 : 2B9D0004; +6c8 : 2B8B0030; +6c9 : 2B8C002C; +6ca : 2B8D0028; +6cb : 2B8E0024; +6cc : 2B8F0020; +6cd : 2B90001C; +6ce : 2B910018; +6cf : 2B920014; +6d0 : 2B930010; +6d1 : 2B94000C; +6d2 : 2B950008; +6d3 : 379C0030; +6d4 : C3A00000; +6d5 : 379CFFB8; +6d6 : 5B8B0048; +6d7 : 5B8C0044; +6d8 : 5B8D0040; +6d9 : 5B8E003C; +6da : 5B8F0038; +6db : 5B900034; +6dc : 5B910030; +6dd : 5B92002C; +6de : 5B930028; +6df : 5B940024; +6e0 : 5B950020; +6e1 : 5B96001C; +6e2 : 5B970018; +6e3 : 5B980014; +6e4 : 5B9D0010; +6e5 : B8608000; +6e6 : 40430001; +6e7 : B8206000; +6e8 : 34010002; +6e9 : 2063000F; +6ea : B8406800; +6eb : 404E0000; +6ec : 44610006; +6ed : 78010001; +6ee : B9801000; +6ef : 38216BB0; +6f0 : F800312E; +6f1 : E0000150; +6f2 : 40450002; +6f3 : 40460003; +6f4 : 21CE000F; +6f5 : 3CA50008; +6f6 : 78010001; +6f7 : B8C52800; +6f8 : 41A60004; +6f9 : 34030002; +6fa : B9C02000; +6fb : 344B0022; +6fc : 38216BD0; +6fd : B9801000; +6fe : F8003120; +6ff : 41A30006; +700 : 41A40007; +701 : 29A5000C; +702 : 3C630008; +703 : 78010001; +704 : B8831800; +705 : 29A40008; +706 : B8A03000; +707 : B9801000; +708 : 38216BFC; +709 : F8003115; +70a : 78020001; +70b : B9800800; +70c : 38426C2C; +70d : 35A30014; +70e : FBFFFF5B; +70f : 41A3001E; +710 : 41A4001F; +711 : 41A50021; +712 : 3C630008; +713 : 78010001; +714 : B8831800; +715 : 41A40020; +716 : 38216C34; +717 : B9801000; +718 : F8003106; +719 : 3401000C; +71a : 55C100E9; +71b : 78010001; +71c : 3DCE0002; +71d : 38219008; +71e : B42E0800; +71f : 28210000; +720 : C0200000; +721 : 78010001; +722 : B9801000; +723 : 38216C60; +724 : F80030FA; +725 : 41620002; +726 : 41610003; +727 : 41640004; +728 : 3C420018; +729 : 3C210010; +72a : 3C840008; +72b : B8220800; +72c : B8812000; +72d : 41620006; +72e : 41610007; +72f : 41650008; +730 : 3C420018; +731 : 3C210010; +732 : 3CA50008; +733 : B8220800; +734 : B8A12800; +735 : 78030001; +736 : 78010001; +737 : 41670005; +738 : 41660009; +739 : 38216C78; +73a : B9801000; +73b : 38636C88; +73c : E000001C; +73d : 78010001; +73e : B9801000; +73f : 38216C94; +740 : F80030DE; +741 : 41620002; +742 : 41610003; +743 : 41640004; +744 : 3C420018; +745 : 3C210010; +746 : 3C840008; +747 : B8220800; +748 : B8812000; +749 : 41620006; +74a : 41610007; +74b : 41650008; +74c : 3C420018; +74d : 3C210010; +74e : 3CA50008; +74f : B8220800; +750 : 41670005; +751 : 41660009; +752 : B8A12800; +753 : 78030001; +754 : 78010001; +755 : 38216C78; +756 : B9801000; +757 : 38636CB0; +758 : B8E42000; +759 : B8C52800; +75a : F80030C4; +75b : E00000A6; +75c : 78010001; +75d : B9801000; +75e : 38216CC0; +75f : F80030BF; +760 : 41620002; +761 : 41610003; +762 : 41640004; +763 : 3C420018; +764 : 3C210010; +765 : 3C840008; +766 : B8220800; +767 : B8812000; +768 : 41620006; +769 : 41610007; +76a : 41650008; +76b : 3C420018; +76c : 3C210010; +76d : 3CA50008; +76e : B8220800; +76f : B8A12800; +770 : 78030001; +771 : 78010001; +772 : 41670005; +773 : 41660009; +774 : 38216C78; +775 : B9801000; +776 : 38636CDC; +777 : E3FFFFE1; +778 : 78010001; +779 : B9801000; +77a : 38216CEC; +77b : F80030A3; +77c : 41620002; +77d : 41610003; +77e : 41640004; +77f : 3C420018; +780 : 3C210010; +781 : 3C840008; +782 : B8220800; +783 : B8812000; +784 : 41620006; +785 : 41610007; +786 : 41650008; +787 : 3C420018; +788 : 3C210010; +789 : 41670005; +78a : 41660009; +78b : 3CA50008; +78c : B8220800; +78d : 780E0001; +78e : 39CE6D08; +78f : B8A12800; +790 : 78010001; +791 : B9801000; +792 : B9C01800; +793 : B8E42000; +794 : B8C52800; +795 : 38216C78; +796 : F8003088; +797 : 3563000A; +798 : B9800800; +799 : B9C01000; +79a : FBFFFECF; +79b : 340B0036; +79c : E0000098; +79d : 78010001; +79e : B9801000; +79f : 38216D1C; +7a0 : F800307E; +7a1 : 41620002; +7a2 : 41610003; +7a3 : 41640004; +7a4 : 3C420018; +7a5 : 3C210010; +7a6 : 3C840008; +7a7 : B8220800; +7a8 : B8812000; +7a9 : 41620006; +7aa : 41610007; +7ab : 41650008; +7ac : 3C420018; +7ad : 3C210010; +7ae : 41670005; +7af : 41660009; +7b0 : 3CA50008; +7b1 : B8220800; +7b2 : B8A12800; +7b3 : 78030001; +7b4 : 78010001; +7b5 : B8E42000; +7b6 : B8C52800; +7b7 : B9801000; +7b8 : 38636D38; +7b9 : 38216C78; +7ba : F8003064; +7bb : 4162000E; +7bc : 4161000F; +7bd : 41640010; +7be : 3C420018; +7bf : 3C210010; +7c0 : 3C840008; +7c1 : B8220800; +7c2 : B8812000; +7c3 : 41620012; +7c4 : 41610013; +7c5 : 41650014; +7c6 : 3C420018; +7c7 : 3C210010; +7c8 : 3CA50008; +7c9 : B8220800; +7ca : B8A12800; +7cb : 41620016; +7cc : 41610017; +7cd : 41660018; +7ce : 3C420018; +7cf : 3C210010; +7d0 : 41690011; +7d1 : 41680015; +7d2 : 41670019; +7d3 : 3CC60008; +7d4 : B8220800; +7d5 : B8C13000; +7d6 : 78030001; +7d7 : 78010001; +7d8 : B9242000; +7d9 : B9052800; +7da : B8E63000; +7db : B9801000; +7dc : 38636D64; +7dd : 38216D50; +7de : F8003040; +7df : 4163000D; +7e0 : 4164001A; +7e1 : 78010001; +7e2 : B9801000; +7e3 : 38216D88; +7e4 : F800303A; +7e5 : 41610020; +7e6 : 4164001B; +7e7 : 4165001C; +7e8 : 4166001D; +7e9 : 4167001E; +7ea : 4168001F; +7eb : 5B810004; +7ec : 41610021; +7ed : 78030001; +7ee : B9801000; +7ef : 5B810008; +7f0 : 41610022; +7f1 : 38636DE0; +7f2 : 340B0040; +7f3 : 5B81000C; +7f4 : 78010001; +7f5 : 38216DB0; +7f6 : F8003028; +7f7 : E000003D; +7f8 : 78010001; +7f9 : B9801000; +7fa : 38216E00; +7fb : F8003023; +7fc : 78020001; +7fd : B9800800; +7fe : 38426E1C; +7ff : B9601800; +800 : FBFFFE69; +801 : 340B002C; +802 : E0000032; +803 : 340B0022; +804 : E0000030; +805 : 55F70009; +806 : 78010001; +807 : B9801000; +808 : BA001800; +809 : B9602000; +80a : B9E02800; +80b : 38216E38; +80c : F8003012; +80d : E0000034; +80e : B5AB7000; +80f : 41D60002; +810 : 41C10003; +811 : 41C30000; +812 : 3ED60008; +813 : 41C40001; +814 : B836B000; +815 : 41C10008; +816 : 41C50004; +817 : 41C60005; +818 : 41C70006; +819 : 41C80007; +81a : 5B810004; +81b : 41C10009; +81c : 3C630008; +81d : 36D10004; +81e : 5B810008; +81f : B8831800; +820 : BAA00800; +821 : B9801000; +822 : BA202000; +823 : F8002FFB; +824 : 4DF10007; +825 : BA400800; +826 : B9801000; +827 : BA201800; +828 : B9E02000; +829 : F8002FF5; +82a : E0000008; +82b : B9800800; +82c : BA801000; +82d : BA601800; +82e : 35C4000A; +82f : 36C5FFFA; +830 : FBFFFE54; +831 : BA207800; +832 : B56F5800; +833 : E000000B; +834 : 78150001; +835 : 78140001; +836 : 78130001; +837 : 78120001; +838 : 34180002; +839 : 34170009; +83a : 3AB56E5C; +83b : 3A946EC8; +83c : 3A736ED0; +83d : 3A526E9C; +83e : 4D700003; +83f : CA0B7800; +840 : 49F8FFC5; +841 : 78020001; +842 : 78030001; +843 : B9800800; +844 : 38426EDC; +845 : 38636EE4; +846 : B9A02000; +847 : BA002800; +848 : FBFFFE3C; +849 : 2B9D0010; +84a : 2B8B0048; +84b : 2B8C0044; +84c : 2B8D0040; +84d : 2B8E003C; +84e : 2B8F0038; +84f : 2B900034; +850 : 2B910030; +851 : 2B92002C; +852 : 2B930028; +853 : 2B940024; +854 : 2B950020; +855 : 2B96001C; +856 : 2B970018; +857 : 2B980014; +858 : 379C0048; +859 : C3A00000; +85a : 379CFFF0; +85b : 5B8B000C; +85c : 5B8C0008; +85d : 5B9D0004; +85e : B8206000; +85f : B8405800; +860 : 44800005; +861 : B8801000; +862 : 5B830010; +863 : FBFFFDE1; +864 : 2B830010; +865 : B9800800; +866 : B9601000; +867 : FBFFFE6E; +868 : 34010000; +869 : 2B9D0004; +86a : 2B8B000C; +86b : 2B8C0008; +86c : 379C0010; +86d : C3A00000; +86e : 379CFFE8; +86f : 5B8B0018; +870 : 5B8C0014; +871 : 5B8D0010; +872 : 5B8E000C; +873 : 5B8F0008; +874 : 5B9D0004; +875 : 282D0000; +876 : B8207800; +877 : 282E0004; +878 : B8406000; +879 : 340B0000; +87a : 34010000; +87b : 34040000; +87c : 544D0006; +87d : B9A00800; +87e : F8004EF7; +87f : 882C1000; +880 : B9602000; +881 : C9A26800; +882 : 34030000; +883 : 34020001; +884 : E000000B; +885 : 3D850001; +886 : 3D6B0001; +887 : F5856000; +888 : 3C630001; +889 : B58B5800; +88a : B8A06000; +88b : 3C450001; +88c : F4451000; +88d : B4431800; +88e : B8A01000; +88f : 1565001F; +890 : C8AC3000; +891 : F4C53000; +892 : C8AB2800; +893 : C8A62800; +894 : 00A5001F; +895 : 34060001; +896 : 55AB0004; +897 : 5DAB0002; +898 : 55CC0002; +899 : 34060000; +89a : A0A63000; +89b : 5CC0FFEA; +89c : 556D000D; +89d : 5D6D0002; +89e : 558E000B; +89f : C9CC2800; +8a0 : F4AE7000; +8a1 : C9AB6800; +8a2 : C9AE6800; +8a3 : B8A07000; +8a4 : B4822800; +8a5 : F4852000; +8a6 : B4230800; +8a7 : B4810800; +8a8 : B8A02000; +8a9 : 3C65001F; +8aa : 00420001; +8ab : 00630001; +8ac : B8A21000; +8ad : B8622800; +8ae : 44A00006; +8af : 3D65001F; +8b0 : 018C0001; +8b1 : 016B0001; +8b2 : B8AC6000; +8b3 : E3FFFFE9; +8b4 : 59E10000; +8b5 : B9C00800; +8b6 : 59E40004; +8b7 : 2B9D0004; +8b8 : 2B8B0018; +8b9 : 2B8C0014; +8ba : 2B8D0010; +8bb : 2B8E000C; +8bc : 2B8F0008; +8bd : 379C0018; +8be : C3A00000; +8bf : 379CFFF8; +8c0 : 5B8B0008; +8c1 : 5B9D0004; +8c2 : B8405800; +8c3 : F8003547; +8c4 : B42B0800; +8c5 : 2B9D0004; +8c6 : 2B8B0008; +8c7 : 379C0008; +8c8 : C3A00000; +8c9 : 379CFFF8; +8ca : 5B8B0008; +8cb : 5B9D0004; +8cc : 78040001; +8cd : B8405800; +8ce : 78050001; +8cf : 34020006; +8d0 : 34030001; +8d1 : 38846F94; +8d2 : 38A5903C; +8d3 : B9603000; +8d4 : FBFFFA05; +8d5 : 45600005; +8d6 : 1562001F; +8d7 : 34010002; +8d8 : B9601800; +8d9 : F80039F8; +8da : 34010000; +8db : 2B9D0004; +8dc : 2B8B0008; +8dd : 379C0008; +8de : C3A00000; +8df : 379CFFF4; +8e0 : 5B8B000C; +8e1 : 5B8C0008; +8e2 : 5B9D0004; +8e3 : B8206000; +8e4 : B8405800; +8e5 : B8603000; +8e6 : 44600008; +8e7 : 78040001; +8e8 : 78050001; +8e9 : 34020006; +8ea : 34030001; +8eb : 38846FA0; +8ec : 38A5905C; +8ed : FBFFF9EC; +8ee : B9800800; +8ef : B9601000; +8f0 : FBFFFFD9; +8f1 : 2B9D0004; +8f2 : 2B8B000C; +8f3 : 2B8C0008; +8f4 : 379C000C; +8f5 : C3A00000; +8f6 : 379CFFF0; +8f7 : 5B8B0010; +8f8 : 5B8C000C; +8f9 : 5B8D0008; +8fa : 5B9D0004; +8fb : B8206800; +8fc : 44400015; +8fd : 28410008; +8fe : 2C4B000C; +8ff : 284C0004; +900 : 3C210010; +901 : 34040003; +902 : B82B5800; +903 : 28410000; +904 : B9601800; +905 : B9801000; +906 : F80039E9; +907 : 78040001; +908 : 78050001; +909 : B9A00800; +90a : 34020006; +90b : 34030001; +90c : 38846FCC; +90d : 38A59070; +90e : B9803000; +90f : B9603800; +910 : FBFFF9C9; +911 : 34010000; +912 : 2B9D0004; +913 : 2B8B0010; +914 : 2B8C000C; +915 : 2B8D0008; +916 : 379C0010; +917 : C3A00000; +918 : 379CFFE8; +919 : 5B8B000C; +91a : 5B8C0008; +91b : 5B9D0004; +91c : B8405800; +91d : B8206000; +91e : 37820018; +91f : 37810010; +920 : F80039EF; +921 : 2B870018; +922 : 2B810010; +923 : 2B860014; +924 : 00E20010; +925 : 59610000; +926 : 59620008; +927 : 3CE10010; +928 : 78020001; +929 : 3842B0CC; +92a : 5961000C; +92b : 28410000; +92c : 59660004; +92d : 20210001; +92e : 5C200009; +92f : 78040001; +930 : 78050001; +931 : B9800800; +932 : 34020006; +933 : 34030002; +934 : 38846FCC; +935 : 38A59080; +936 : FBFFF9A3; +937 : 34010000; +938 : 2B9D0004; +939 : 2B8B000C; +93a : 2B8C0008; +93b : 379C0018; +93c : C3A00000; +93d : 379CFFB0; +93e : 5B8B001C; +93f : 5B8C0018; +940 : 5B8D0014; +941 : 5B8E0010; +942 : 5B8F000C; +943 : 5B900008; +944 : 5B9D0004; +945 : 0884000C; +946 : B8205800; +947 : 342D0110; +948 : 78010001; +949 : 38219768; +94a : B4240800; +94b : B8407800; +94c : 40220007; +94d : 78050001; +94e : 378C0040; +94f : 08420006; +950 : 38A590A0; +951 : 29700068; +952 : 340188F7; +953 : B4451000; +954 : B8607000; +955 : 0F81004C; +956 : 34030006; +957 : B9800800; +958 : F8004E7E; +959 : B9801000; +95a : BA000800; +95b : B9E01800; +95c : B9C02000; +95d : 37850020; +95e : F80024F0; +95f : B8206000; +960 : 45A0001F; +961 : 2B810028; +962 : 2B820024; +963 : 2B830020; +964 : 1425001F; +965 : 00240010; +966 : 3CA50010; +967 : 3C210010; +968 : B8852800; +969 : 2B84003C; +96a : 59630110; +96b : 59620114; +96c : 59650118; +96d : 5961011C; +96e : 5C800004; +96f : 78048F00; +970 : B8641800; +971 : 59630110; +972 : 3CA90010; +973 : 00280010; +974 : 29670114; +975 : 78040001; +976 : 78050001; +977 : B9600800; +978 : 34020005; +979 : 34030002; +97a : 38846FDC; +97b : 38A59090; +97c : B9803000; +97d : B9284000; +97e : FBFFF95B; +97f : 78010001; +980 : 3821B0D8; +981 : 28220000; +982 : 34010004; +983 : 5C41000D; +984 : 2964011C; +985 : 29650118; +986 : 29620114; +987 : 00830010; +988 : 2084FFFF; +989 : 088403E8; +98a : 3CA50010; +98b : 78010001; +98c : 00840010; +98d : 38216FFC; +98e : B8A31800; +98f : F8002E8F; +990 : 4C0C0010; +991 : 78010001; +992 : 3821B0CC; +993 : 28220000; +994 : 2961001C; +995 : B8410800; +996 : 00210014; +997 : 34020001; +998 : 2021000F; +999 : 50410007; +99a : 78010001; +99b : 3821700C; +99c : B9E01000; +99d : B9C01800; +99e : B9A02000; +99f : FBFFFEBB; +9a0 : B9800800; +9a1 : 2B9D0004; +9a2 : 2B8B001C; +9a3 : 2B8C0018; +9a4 : 2B8D0014; +9a5 : 2B8E0010; +9a6 : 2B8F000C; +9a7 : 2B900008; +9a8 : 379C0050; +9a9 : C3A00000; +9aa : 379CFF90; +9ab : 5B8B001C; +9ac : 5B8C0018; +9ad : 5B8D0014; +9ae : 5B8E0010; +9af : 5B8F000C; +9b0 : 5B900008; +9b1 : 5B9D0004; +9b2 : B8206000; +9b3 : 28210068; +9b4 : B8602800; +9b5 : B8407000; +9b6 : B8805800; +9b7 : 37820040; +9b8 : B8A02000; +9b9 : B9C01800; +9ba : 37850020; +9bb : F8002420; +9bc : B8206800; +9bd : 4C010065; +9be : 45600021; +9bf : 2B81002C; +9c0 : 2B8F0024; +9c1 : 2B900020; +9c2 : 3C210010; +9c3 : 340203E8; +9c4 : 59700000; +9c5 : 596F0004; +9c6 : F8004D62; +9c7 : 2B850028; +9c8 : B8202000; +9c9 : 1422001F; +9ca : 14A1001F; +9cb : 00A30010; +9cc : 3CA50010; +9cd : 3C210010; +9ce : B4852800; +9cf : B8610800; +9d0 : F4852000; +9d1 : B4410800; +9d2 : B4810800; +9d3 : 59610008; +9d4 : 2B81003C; +9d5 : 5965000C; +9d6 : 5C200009; +9d7 : 78010001; +9d8 : 3821B0D8; +9d9 : 28220000; +9da : 34010004; +9db : 44410004; +9dc : 78018F00; +9dd : BA018000; +9de : 59700000; +9df : 78010001; +9e0 : 3821B0CC; +9e1 : 2982001C; +9e2 : 28210000; +9e3 : B8220800; +9e4 : 00210014; +9e5 : 34020001; +9e6 : 2021000F; +9e7 : 50410007; +9e8 : 78010001; +9e9 : 38217014; +9ea : B9C01000; +9eb : B9A01800; +9ec : B9602000; +9ed : FBFFFE6D; +9ee : 78010001; +9ef : 3821B0D8; +9f0 : 28220000; +9f1 : 34010004; +9f2 : 5C410030; +9f3 : 29640000; +9f4 : 29630004; +9f5 : 29620008; +9f6 : 2961000C; +9f7 : 5B840064; +9f8 : 5B830068; +9f9 : 5B82006C; +9fa : 5B810070; +9fb : F8002FCD; +9fc : 3C210010; +9fd : 340203E8; +9fe : 5B800058; +9ff : 5B800054; +a00 : F8004D28; +a01 : 1422001F; +a02 : 378B0064; +a03 : 5B810060; +a04 : 5B82005C; +a05 : B9600800; +a06 : 37820054; +a07 : F8001255; +a08 : 2B840070; +a09 : 2B85006C; +a0a : 2B820068; +a0b : 00830010; +a0c : 2084FFFF; +a0d : 088403E8; +a0e : 3CA50010; +a0f : 78010001; +a10 : 00840010; +a11 : B8A31800; +a12 : 3821701C; +a13 : F8002E0B; +a14 : B9600800; +a15 : 35820110; +a16 : F8001246; +a17 : 2B830070; +a18 : 2B84006C; +a19 : 78010001; +a1a : 00620010; +a1b : 2063FFFF; +a1c : 086303E8; +a1d : 3C840010; +a1e : 3821702C; +a1f : 00630010; +a20 : B8821000; +a21 : F8002DFD; +a22 : B9A00800; +a23 : 2B9D0004; +a24 : 2B8B001C; +a25 : 2B8C0018; +a26 : 2B8D0014; +a27 : 2B8E0010; +a28 : 2B8F000C; +a29 : 2B900008; +a2a : 379C0070; +a2b : C3A00000; +a2c : 379CFFFC; +a2d : 5B9D0004; +a2e : 28210068; +a2f : F8002352; +a30 : 34010000; +a31 : 2B9D0004; +a32 : 379C0004; +a33 : C3A00000; +a34 : 379CFFD4; +a35 : 5B8B0010; +a36 : 5B8C000C; +a37 : 5B8D0008; +a38 : 5B9D0004; +a39 : B8205800; +a3a : 28210068; +a3b : 44200002; +a3c : F8002345; +a3d : B9600800; +a3e : F8000CAF; +a3f : 378C0014; +a40 : 340188F7; +a41 : 78020001; +a42 : 0F810020; +a43 : 38428F88; +a44 : B9800800; +a45 : 34030006; +a46 : F8004D90; +a47 : 78010001; +a48 : B9801000; +a49 : 38219D74; +a4a : 34030001; +a4b : 34040000; +a4c : F80022EC; +a4d : B8206000; +a4e : 4420000E; +a4f : 378D0028; +a50 : B9A01000; +a51 : F80022D6; +a52 : B9A01000; +a53 : 34030006; +a54 : 35610070; +a55 : F8004D81; +a56 : 3561005C; +a57 : 596C0068; +a58 : B9A01000; +a59 : 34030006; +a5a : F8004D7C; +a5b : 596C0054; +a5c : 34010000; +a5d : 2B9D0004; +a5e : 2B8B0010; +a5f : 2B8C000C; +a60 : 2B8D0008; +a61 : 379C002C; +a62 : C3A00000; +a63 : 379CFFF4; +a64 : 5B8B000C; +a65 : 5B8C0008; +a66 : 5B9D0004; +a67 : 78040001; +a68 : 78050001; +a69 : B8606000; +a6a : 34020002; +a6b : 34030002; +a6c : 38847148; +a6d : 38A59054; +a6e : B8205800; +a6f : FBFFF86A; +a70 : 2982002C; +a71 : 29610358; +a72 : 20430003; +a73 : 28210010; +a74 : 7C640000; +a75 : 58240038; +a76 : 20440008; +a77 : 20420004; +a78 : 7C840000; +a79 : 7C420000; +a7a : 30230035; +a7b : 58220044; +a7c : 58240040; +a7d : 29610030; +a7e : 28220010; +a7f : 29610358; +a80 : 2C210008; +a81 : 0C410028; +a82 : 2B9D0004; +a83 : 2B8B000C; +a84 : 2B8C0008; +a85 : 379C000C; +a86 : C3A00000; +a87 : 379CFFF8; +a88 : 5B8B0008; +a89 : 5B9D0004; +a8a : 28220358; +a8b : 78040001; +a8c : 78050001; +a8d : 284B0010; +a8e : 34030002; +a8f : 34020002; +a90 : 38847148; +a91 : 38A59154; +a92 : FBFFF847; +a93 : 34010000; +a94 : 31600005; +a95 : 2B9D0004; +a96 : 2B8B0008; +a97 : 379C0008; +a98 : C3A00000; +a99 : 379CFFF8; +a9a : 5B8B0008; +a9b : 5B9D0004; +a9c : 78040001; +a9d : 78050001; +a9e : B8205800; +a9f : 34020002; +aa0 : 34010000; +aa1 : 34030002; +aa2 : 38847148; +aa3 : 38A59164; +aa4 : FBFFF835; +aa5 : 29610024; +aa6 : 44200006; +aa7 : 34020000; +aa8 : 34030001; +aa9 : 34040002; +aaa : 34060003; +aab : E000001F; +aac : 29610000; +aad : 29620040; +aae : 58220018; +aaf : E000001D; +ab0 : 29650000; +ab1 : 08410418; +ab2 : B4A10800; +ab3 : 29650040; +ab4 : 58250018; +ab5 : 28250408; +ab6 : 5CA30010; +ab7 : 28250024; +ab8 : 44A30004; +ab9 : 28210358; +aba : 5CA40009; +abb : E0000005; +abc : 28210358; +abd : 28210010; +abe : 30230004; +abf : E000000A; +ac0 : 28210010; +ac1 : 30240004; +ac2 : E0000007; +ac3 : 28210010; +ac4 : 30260004; +ac5 : E0000004; +ac6 : 28210358; +ac7 : 28210010; +ac8 : 30200004; +ac9 : 34420001; +aca : 29610024; +acb : 4822FFE5; +acc : 34010000; +acd : 2B9D0004; +ace : 2B8B0008; +acf : 379C0008; +ad0 : C3A00000; +ad1 : 379CFFF4; +ad2 : 5B8B000C; +ad3 : 5B8C0008; +ad4 : 5B9D0004; +ad5 : 28220358; +ad6 : 78040001; +ad7 : 78050001; +ad8 : 284B0010; +ad9 : 34030002; +ada : 34020002; +adb : 38847148; +adc : 38A5916C; +add : B8206000; +ade : FBFFF7FB; +adf : 41630004; +ae0 : 3401012C; +ae1 : 59610028; +ae2 : 34020001; +ae3 : 34010BB8; +ae4 : 59610030; +ae5 : 59600008; +ae6 : 31600035; +ae7 : 59600040; +ae8 : 59620014; +ae9 : 20630003; +aea : 29610000; +aeb : 5C620004; +aec : 28230034; +aed : B9800800; +aee : E0000004; +aef : 28230034; +af0 : 34020000; +af1 : B9800800; +af2 : D8600000; +af3 : 34010000; +af4 : 2B9D0004; +af5 : 2B8B000C; +af6 : 2B8C0008; +af7 : 379C000C; +af8 : C3A00000; +af9 : 379CFFF0; +afa : 5B8B0010; +afb : 5B8C000C; +afc : 5B8D0008; +afd : 5B9D0004; +afe : 78040001; +aff : 78050001; +b00 : 2C2D0002; +b01 : B8205800; +b02 : B8406000; +b03 : 34010000; +b04 : 34020002; +b05 : 34030002; +b06 : 38847148; +b07 : 38A590AC; +b08 : FBFFF7D1; +b09 : 34010040; +b0a : 4C2D0004; +b0b : B9600800; +b0c : B9801000; +b0d : F80003ED; +b0e : 2B9D0004; +b0f : 2B8B0010; +b10 : 2B8C000C; +b11 : 2B8D0008; +b12 : 379C0010; +b13 : C3A00000; +b14 : 379CFFF8; +b15 : 5B8B0008; +b16 : 5B9D0004; +b17 : 78040001; +b18 : 78050001; +b19 : 34020002; +b1a : 34030002; +b1b : 38847148; +b1c : 38A590C0; +b1d : B8205800; +b1e : FBFFF7BB; +b1f : 29610358; +b20 : 34020040; +b21 : 28210010; +b22 : 40210004; +b23 : 44200006; +b24 : 34030002; +b25 : 44230004; +b26 : B9600800; +b27 : F8000391; +b28 : 3402004E; +b29 : B8400800; +b2a : 2B9D0004; +b2b : 2B8B0008; +b2c : 379C0008; +b2d : C3A00000; +b2e : 379CFFF4; +b2f : 5B8B000C; +b30 : 5B8C0008; +b31 : 5B9D0004; +b32 : 78040001; +b33 : 78050001; +b34 : 34030002; +b35 : B8406000; +b36 : 38847148; +b37 : 34020002; +b38 : 38A590E8; +b39 : B8205800; +b3a : FBFFF79F; +b3b : 29610358; +b3c : 34030000; +b3d : 28210010; +b3e : 28210008; +b3f : 44200006; +b40 : 356300A8; +b41 : B9600800; +b42 : B9801000; +b43 : F80005B1; +b44 : 34030001; +b45 : B8600800; +b46 : 2B9D0004; +b47 : 2B8B000C; +b48 : 2B8C0008; +b49 : 379C000C; +b4a : C3A00000; +b4b : 379CFFF8; +b4c : 5B8B0008; +b4d : 5B9D0004; +b4e : 78040001; +b4f : 78050001; +b50 : 34020002; +b51 : 34030002; +b52 : 38847148; +b53 : 38A590FC; +b54 : B8205800; +b55 : FBFFF784; +b56 : 29610358; +b57 : 28220010; +b58 : 40410004; +b59 : 20210002; +b5a : 4420000B; +b5b : 40410035; +b5c : 20210001; +b5d : 44200008; +b5e : 28410008; +b5f : 44200003; +b60 : 28410040; +b61 : 5C200004; +b62 : B9600800; +b63 : 34020009; +b64 : F80000A5; +b65 : 34010000; +b66 : 2B9D0004; +b67 : 2B8B0008; +b68 : 379C0008; +b69 : C3A00000; +b6a : 379CFFF8; +b6b : 5B8B0008; +b6c : 5B9D0004; +b6d : 78040001; +b6e : 78050001; +b6f : 34020002; +b70 : 34030002; +b71 : 38847148; +b72 : 38A59110; +b73 : B8205800; +b74 : FBFFF765; +b75 : B9600800; +b76 : 34020004; +b77 : FBFFF840; +b78 : 44200003; +b79 : B9600800; +b7a : F80004F4; +b7b : 29610358; +b7c : 28220010; +b7d : 34010000; +b7e : 28430064; +b7f : 44600004; +b80 : 34010001; +b81 : 59610004; +b82 : 58400064; +b83 : 2B9D0004; +b84 : 2B8B0008; +b85 : 379C0008; +b86 : C3A00000; +b87 : 379CFFF0; +b88 : 5B8B0010; +b89 : 5B8C000C; +b8a : 5B8D0008; +b8b : 5B9D0004; +b8c : 28220030; +b8d : 78040001; +b8e : 78050001; +b8f : 284D0010; +b90 : 28220358; +b91 : 34030002; +b92 : 38847148; +b93 : 284C0010; +b94 : 38A59124; +b95 : 34020002; +b96 : B8205800; +b97 : FBFFF742; +b98 : 29810008; +b99 : 5C20001E; +b9a : 116200A8; +b9b : 34010080; +b9c : 204200C0; +b9d : 44410004; +b9e : 116200B8; +b9f : 204200C0; +ba0 : 5C410008; +ba1 : 78040001; +ba2 : B9600800; +ba3 : 34020004; +ba4 : 34030001; +ba5 : 38847154; +ba6 : FBFFF733; +ba7 : E0000014; +ba8 : B9600800; +ba9 : F80012D8; +baa : 29A2000C; +bab : 29A10008; +bac : B8220800; +bad : 29820000; +bae : 44200005; +baf : 28430034; +bb0 : B9600800; +bb1 : 34020000; +bb2 : E0000004; +bb3 : 28430034; +bb4 : B9600800; +bb5 : 34020001; +bb6 : D8600000; +bb7 : B9600800; +bb8 : F8000553; +bb9 : B9600800; +bba : F800069D; +bbb : 34010000; +bbc : 2B9D0004; +bbd : 2B8B0010; +bbe : 2B8C000C; +bbf : 2B8D0008; +bc0 : 379C0010; +bc1 : C3A00000; +bc2 : 379CFFF8; +bc3 : 5B8B0008; +bc4 : 5B9D0004; +bc5 : 78040001; +bc6 : 78050001; +bc7 : 34020002; +bc8 : 34030002; +bc9 : 38847148; +bca : 38A59134; +bcb : B8205800; +bcc : FBFFF70D; +bcd : B9600800; +bce : F80004C5; +bcf : 34010000; +bd0 : 2B9D0004; +bd1 : 2B8B0008; +bd2 : 379C0008; +bd3 : C3A00000; +bd4 : 379CFFE0; +bd5 : 5B8B0010; +bd6 : 5B8C000C; +bd7 : 5B8D0008; +bd8 : 5B9D0004; +bd9 : B8406800; +bda : 3402000F; +bdb : B8205800; +bdc : B8806000; +bdd : 44820025; +bde : 78040001; +bdf : 78050001; +be0 : 34020002; +be1 : 34030002; +be2 : 38847148; +be3 : 38A59144; +be4 : FBFFF6F5; +be5 : 34010001; +be6 : 45810004; +be7 : 3401000C; +be8 : 5D81001A; +be9 : E0000006; +bea : B9600800; +beb : 35620100; +bec : F8000FC1; +bed : 340C000F; +bee : E0000014; +bef : 29610358; +bf0 : B9A01000; +bf1 : 37830014; +bf2 : 28240010; +bf3 : B9600800; +bf4 : 340C000F; +bf5 : 3484003C; +bf6 : F800039A; +bf7 : 29610358; +bf8 : 34021000; +bf9 : 28210010; +bfa : 2C23003C; +bfb : 5C620007; +bfc : 40210004; +bfd : 20210001; +bfe : 44200004; +bff : B9600800; +c00 : 34020006; +c01 : F8000008; +c02 : B9800800; +c03 : 2B9D0004; +c04 : 2B8B0010; +c05 : 2B8C000C; +c06 : 2B8D0008; +c07 : 379C0020; +c08 : C3A00000; +c09 : 28230358; +c0a : 34040006; +c0b : 28630010; +c0c : 44440004; +c0d : 34040009; +c0e : 5C440008; +c0f : E0000004; +c10 : 34020001; +c11 : 30620005; +c12 : E0000007; +c13 : 34020002; +c14 : 30620005; +c15 : E0000006; +c16 : 40630005; +c17 : 34020001; +c18 : 5C620003; +c19 : 34020066; +c1a : E0000002; +c1b : 34020064; +c1c : 58220004; +c1d : C3A00000; +c1e : 379CFFF4; +c1f : 5B8B000C; +c20 : 5B8C0008; +c21 : 5B9D0004; +c22 : B8205800; +c23 : 28210358; +c24 : 78050001; +c25 : 38A5708C; +c26 : 282C0010; +c27 : 34010001; +c28 : 41820005; +c29 : 5C410003; +c2a : 78050001; +c2b : 38A5706C; +c2c : 78040001; +c2d : B9600800; +c2e : 34020002; +c2f : 34030001; +c30 : 388471A4; +c31 : FBFFF6A8; +c32 : 41820005; +c33 : 34010001; +c34 : 5C410003; +c35 : 34010006; +c36 : E0000002; +c37 : 34010009; +c38 : 59610004; +c39 : 31800005; +c3a : 2B9D0004; +c3b : 2B8B000C; +c3c : 2B8C0008; +c3d : 379C000C; +c3e : C3A00000; +c3f : 379CFFFC; +c40 : 5B9D0004; +c41 : 28220358; +c42 : 28420010; +c43 : 4043002C; +c44 : 4460000A; +c45 : 3463FFFF; +c46 : 78040001; +c47 : 3043002C; +c48 : 388471C8; +c49 : 34020002; +c4a : 34030001; +c4b : FBFFF68E; +c4c : 34010001; +c4d : E0000003; +c4e : FBFFFFD0; +c4f : 34010000; +c50 : 2B9D0004; +c51 : 379C0004; +c52 : C3A00000; +c53 : 379CFFDC; +c54 : 5B8B0014; +c55 : 5B8C0010; +c56 : 5B8D000C; +c57 : 5B8E0008; +c58 : 5B9D0004; +c59 : B8407000; +c5a : 28220358; +c5b : B8205800; +c5c : 284D0010; +c5d : 2822000C; +c5e : 44400004; +c5f : 34010003; +c60 : 31A1002C; +c61 : E0000008; +c62 : 34020006; +c63 : FBFFF754; +c64 : 340C0000; +c65 : 442C000C; +c66 : B9600800; +c67 : FBFFFFD8; +c68 : 4420001D; +c69 : B9600800; +c6a : 34020006; +c6b : 340303E8; +c6c : FBFFF6CB; +c6d : B9600800; +c6e : 34021000; +c6f : F8000391; +c70 : B8206000; +c71 : 416203A1; +c72 : 3401000C; +c73 : 5C41000B; +c74 : B9600800; +c75 : B9C01000; +c76 : 37830018; +c77 : 35A4003C; +c78 : F8000318; +c79 : 2DA2003C; +c7a : 34011001; +c7b : 5C410003; +c7c : 34010065; +c7d : 59610004; +c7e : 5D800003; +c7f : B9600800; +c80 : F8000A94; +c81 : 29610358; +c82 : 28210010; +c83 : 28210028; +c84 : 59610008; +c85 : B9800800; +c86 : 2B9D0004; +c87 : 2B8B0014; +c88 : 2B8C0010; +c89 : 2B8D000C; +c8a : 2B8E0008; +c8b : 379C0024; +c8c : C3A00000; +c8d : 379CFFDC; +c8e : 5B8B0014; +c8f : 5B8C0010; +c90 : 5B8D000C; +c91 : 5B8E0008; +c92 : 5B9D0004; +c93 : B8407000; +c94 : 28220358; +c95 : B8205800; +c96 : 284C0010; +c97 : 2822000C; +c98 : 44400004; +c99 : 34010003; +c9a : 3181002C; +c9b : E0000008; +c9c : 34020006; +c9d : FBFFF71A; +c9e : 340D0000; +c9f : 442D000C; +ca0 : B9600800; +ca1 : FBFFFF9E; +ca2 : 44200018; +ca3 : 34021001; +ca4 : B9600800; +ca5 : F800035B; +ca6 : B8206800; +ca7 : 34020006; +ca8 : B9600800; +ca9 : 34033A98; +caa : FBFFF68D; +cab : 416203A1; +cac : 3401000C; +cad : 5C41000B; +cae : B9600800; +caf : B9C01000; +cb0 : 37830018; +cb1 : 3584003C; +cb2 : F80002DE; +cb3 : 2D82003C; +cb4 : 34011002; +cb5 : 5C410003; +cb6 : 34010068; +cb7 : 59610004; +cb8 : 29810028; +cb9 : 59610008; +cba : B9A00800; +cbb : 2B9D0004; +cbc : 2B8B0014; +cbd : 2B8C0010; +cbe : 2B8D000C; +cbf : 2B8E0008; +cc0 : 379C0024; +cc1 : C3A00000; +cc2 : 379CFFF0; +cc3 : 5B8B0010; +cc4 : 5B8C000C; +cc5 : 5B8D0008; +cc6 : 5B9D0004; +cc7 : 28220358; +cc8 : 282D000C; +cc9 : B8205800; +cca : 284C0010; +ccb : 45A00004; +ccc : 34010003; +ccd : 3181002C; +cce : E000000B; +ccf : 34020006; +cd0 : FBFFF6E7; +cd1 : 442D0010; +cd2 : 29810000; +cd3 : 28220008; +cd4 : B9600800; +cd5 : D8400000; +cd6 : B9600800; +cd7 : FBFFFF68; +cd8 : 4420001C; +cd9 : 29810000; +cda : 28220000; +cdb : B9600800; +cdc : D8400000; +cdd : B9600800; +cde : 34020006; +cdf : 34033A98; +ce0 : FBFFF657; +ce1 : 29810028; +ce2 : 34020000; +ce3 : 59610008; +ce4 : 29810000; +ce5 : 28230004; +ce6 : B9600800; +ce7 : D8600000; +ce8 : 34020001; +ce9 : 5C220008; +cea : 34010067; +ceb : 59610004; +cec : 29810000; +ced : 28220008; +cee : B9600800; +cef : D8400000; +cf0 : E0000004; +cf1 : 34020002; +cf2 : 5C220002; +cf3 : 59600008; +cf4 : 34010000; +cf5 : 2B9D0004; +cf6 : 2B8B0010; +cf7 : 2B8C000C; +cf8 : 2B8D0008; +cf9 : 379C0010; +cfa : C3A00000; +cfb : 379CFFDC; +cfc : 5B8B0014; +cfd : 5B8C0010; +cfe : 5B8D000C; +cff : 5B8E0008; +d00 : 5B9D0004; +d01 : B8407000; +d02 : 28220358; +d03 : B8205800; +d04 : 284C0010; +d05 : 2822000C; +d06 : 44400004; +d07 : 34010003; +d08 : 3181002C; +d09 : E0000008; +d0a : 34020006; +d0b : FBFFF6AC; +d0c : 340D0000; +d0d : 442D000C; +d0e : B9600800; +d0f : FBFFFF30; +d10 : 44200018; +d11 : 29830028; +d12 : B9600800; +d13 : 34020006; +d14 : FBFFF623; +d15 : B9600800; +d16 : 34021002; +d17 : F80002E9; +d18 : B8206800; +d19 : 416203A1; +d1a : 3401000C; +d1b : 5C41000B; +d1c : B9600800; +d1d : B9C01000; +d1e : 37830018; +d1f : 3584003C; +d20 : F8000270; +d21 : 2D82003C; +d22 : 34011003; +d23 : 5C410003; +d24 : 3401006A; +d25 : 59610004; +d26 : 29810028; +d27 : 59610008; +d28 : B9A00800; +d29 : 2B9D0004; +d2a : 2B8B0014; +d2b : 2B8C0010; +d2c : 2B8D000C; +d2d : 2B8E0008; +d2e : 379C0024; +d2f : C3A00000; +d30 : 379CFFEC; +d31 : 5B8B0010; +d32 : 5B8C000C; +d33 : 5B8D0008; +d34 : 5B9D0004; +d35 : 28220358; +d36 : 282D000C; +d37 : B8206000; +d38 : 284B0010; +d39 : 45A00004; +d3a : 34010003; +d3b : 3161002C; +d3c : E0000007; +d3d : 34020006; +d3e : FBFFF679; +d3f : 442D0011; +d40 : B9800800; +d41 : FBFFFEFE; +d42 : 4420009C; +d43 : 29630030; +d44 : B9800800; +d45 : 34020006; +d46 : FBFFF5F1; +d47 : B9800800; +d48 : 34021003; +d49 : F80002B7; +d4a : 3401006C; +d4b : 31610010; +d4c : 29610014; +d4d : 44200003; +d4e : 3401006E; +d4f : 31610010; +d50 : 41660010; +d51 : 78040001; +d52 : 78050001; +d53 : B9800800; +d54 : 34020002; +d55 : 34030001; +d56 : 388471DC; +d57 : 38A59198; +d58 : 34C6FF94; +d59 : FBFFF580; +d5a : 41620010; +d5b : 34010008; +d5c : 3442FF94; +d5d : 204200FF; +d5e : 5441007E; +d5f : 78010001; +d60 : 3C420002; +d61 : 38219174; +d62 : B4220800; +d63 : 28210000; +d64 : C0200000; +d65 : 29610000; +d66 : 34020000; +d67 : 34030000; +d68 : 2825002C; +d69 : 34040000; +d6a : B9800800; +d6b : D8A00000; +d6c : 5C200070; +d6d : 3401006D; +d6e : 31610010; +d6f : 29610000; +d70 : 34020001; +d71 : 28230024; +d72 : B9800800; +d73 : D8600000; +d74 : 5C200068; +d75 : 3401006E; +d76 : 31610010; +d77 : 29610000; +d78 : 34020001; +d79 : 37830014; +d7a : 28240028; +d7b : B9800800; +d7c : D8800000; +d7d : 34020001; +d7e : 5C22005E; +d7f : 2B810014; +d80 : 78040001; +d81 : 34020002; +d82 : 00250010; +d83 : 3C210010; +d84 : 5965001C; +d85 : 59610018; +d86 : 34030001; +d87 : B9800800; +d88 : 388471F0; +d89 : FBFFF550; +d8a : 29650018; +d8b : 78040001; +d8c : B9800800; +d8d : 34020002; +d8e : 34030001; +d8f : 38847214; +d90 : FBFFF549; +d91 : 3401006F; +d92 : 31610010; +d93 : 29610000; +d94 : 34020001; +d95 : 28230020; +d96 : B9800800; +d97 : D8600000; +d98 : 5C200044; +d99 : 34010070; +d9a : 31610010; +d9b : 29610000; +d9c : 28220030; +d9d : B9800800; +d9e : D8400000; +d9f : 5C20003D; +da0 : 34010071; +da1 : 31610010; +da2 : 29610000; +da3 : 34020002; +da4 : 28230024; +da5 : B9800800; +da6 : D8600000; +da7 : 5C200035; +da8 : 34010072; +da9 : 31610010; +daa : 29610000; +dab : 34020002; +dac : 37830014; +dad : 28240028; +dae : B9800800; +daf : D8800000; +db0 : 34020001; +db1 : 5C22002B; +db2 : 2B850014; +db3 : 78040001; +db4 : B9800800; +db5 : 34020002; +db6 : 34030001; +db7 : 38847238; +db8 : FBFFF521; +db9 : 2B810014; +dba : 78040001; +dbb : 34020002; +dbc : 00250010; +dbd : 3C210010; +dbe : 59650024; +dbf : 59610020; +dc0 : 34030001; +dc1 : B9800800; +dc2 : 38847250; +dc3 : FBFFF516; +dc4 : 29650020; +dc5 : 78040001; +dc6 : B9800800; +dc7 : 34020002; +dc8 : 34030001; +dc9 : 38847274; +dca : FBFFF50F; +dcb : 34010073; +dcc : 31610010; +dcd : 29610000; +dce : 34020002; +dcf : 28230020; +dd0 : B9800800; +dd1 : D8600000; +dd2 : 5C20000A; +dd3 : 34010074; +dd4 : 31610010; +dd5 : B9800800; +dd6 : 34021004; +dd7 : F8000229; +dd8 : 34010069; +dd9 : 59810004; +dda : 34010001; +ddb : 59610014; +ddc : 29610028; +ddd : 59810008; +dde : 34010000; +ddf : 2B9D0004; +de0 : 2B8B0010; +de1 : 2B8C000C; +de2 : 2B8D0008; +de3 : 379C0014; +de4 : C3A00000; +de5 : 379CFFE0; +de6 : 5B8B0010; +de7 : 5B8C000C; +de8 : 5B8D0008; +de9 : 5B9D0004; +dea : B8406800; +deb : 28220358; +dec : B8205800; +ded : 284C0010; +dee : 2822000C; +def : 44400004; +df0 : 29830028; +df1 : 34020006; +df2 : FBFFF545; +df3 : B9600800; +df4 : 34020006; +df5 : FBFFF5C2; +df6 : 44200004; +df7 : B9600800; +df8 : FBFFFE26; +df9 : E000001A; +dfa : 416203A1; +dfb : 3401000C; +dfc : 5C410015; +dfd : B9600800; +dfe : B9A01000; +dff : 37830014; +e00 : 3584003C; +e01 : F800018F; +e02 : 2D81003C; +e03 : 34021003; +e04 : 5C220006; +e05 : 41820005; +e06 : 34010001; +e07 : 5C41000A; +e08 : 3401006A; +e09 : E0000007; +e0a : 34021005; +e0b : 5C220006; +e0c : 41820005; +e0d : 34010002; +e0e : 5C410003; +e0f : 3401006B; +e10 : 59610004; +e11 : 29810028; +e12 : 59610008; +e13 : 34010000; +e14 : 2B9D0004; +e15 : 2B8B0010; +e16 : 2B8C000C; +e17 : 2B8D0008; +e18 : 379C0020; +e19 : C3A00000; +e1a : 379CFFD8; +e1b : 5B8B0018; +e1c : 5B8C0014; +e1d : 5B8D0010; +e1e : 5B8E000C; +e1f : 5B8F0008; +e20 : 5B9D0004; +e21 : B8407800; +e22 : 28220358; +e23 : 282E000C; +e24 : B8206000; +e25 : 284B0010; +e26 : 2D6D0048; +e27 : 7DAD0000; +e28 : 45C00004; +e29 : 34010003; +e2a : 3161002C; +e2b : E000000C; +e2c : 34020006; +e2d : FBFFF58A; +e2e : 442E0018; +e2f : 45A00005; +e30 : 29610000; +e31 : 28230030; +e32 : B9800800; +e33 : D8600000; +e34 : B9800800; +e35 : FBFFFE0A; +e36 : 44200029; +e37 : 45A00008; +e38 : 29610000; +e39 : 34020000; +e3a : 34030000; +e3b : 2825002C; +e3c : 34040000; +e3d : B9800800; +e3e : D8A00000; +e3f : 2961004C; +e40 : 340203E8; +e41 : F8004934; +e42 : B8201800; +e43 : 34020006; +e44 : B9800800; +e45 : FBFFF4F2; +e46 : 418203A1; +e47 : 3401000C; +e48 : 5C410015; +e49 : B9800800; +e4a : B9E01000; +e4b : 3783001C; +e4c : 3564003C; +e4d : F8000143; +e4e : 2D62003C; +e4f : 34011004; +e50 : 5C41000D; +e51 : 45A00005; +e52 : 29610000; +e53 : 28220030; +e54 : B9800800; +e55 : D8400000; +e56 : 41620005; +e57 : 34010001; +e58 : 5C410003; +e59 : 3401006B; +e5a : E0000002; +e5b : 34010068; +e5c : 59810004; +e5d : 29610028; +e5e : 59810008; +e5f : 34010000; +e60 : 2B9D0004; +e61 : 2B8B0018; +e62 : 2B8C0014; +e63 : 2B8D0010; +e64 : 2B8E000C; +e65 : 2B8F0008; +e66 : 379C0028; +e67 : C3A00000; +e68 : 379CFFF0; +e69 : 5B8B0010; +e6a : 5B8C000C; +e6b : 5B8D0008; +e6c : 5B9D0004; +e6d : 28220358; +e6e : 340D0001; +e6f : B8205800; +e70 : 284C0010; +e71 : 29820000; +e72 : 598D0008; +e73 : 2842000C; +e74 : D8400000; +e75 : 41820005; +e76 : 34010000; +e77 : 5C4D0004; +e78 : B9600800; +e79 : 34021005; +e7a : F8000186; +e7b : 34020001; +e7c : 59820040; +e7d : 340DFFFF; +e7e : 5C20001B; +e7f : 41820005; +e80 : 34010002; +e81 : 5C410003; +e82 : 34010009; +e83 : E0000002; +e84 : 34010006; +e85 : 59610004; +e86 : 78010001; +e87 : 3821B0D8; +e88 : 28220000; +e89 : 34010004; +e8a : 340D0000; +e8b : 5C41000E; +e8c : 34010075; +e8d : 59610004; +e8e : 78010001; +e8f : 38217298; +e90 : F800298E; +e91 : F8002B37; +e92 : B8201000; +e93 : 78010001; +e94 : 382172C8; +e95 : F8002989; +e96 : 78010001; +e97 : 38217304; +e98 : F8002986; +e99 : B9A00800; +e9a : 2B9D0004; +e9b : 2B8B0010; +e9c : 2B8C000C; +e9d : 2B8D0008; +e9e : 379C0010; +e9f : C3A00000; +ea0 : 00430018; +ea1 : 30220003; +ea2 : 30230000; +ea3 : 00430010; +ea4 : 30230001; +ea5 : 00430008; +ea6 : 30230002; +ea7 : C3A00000; +ea8 : 40220000; +ea9 : 40230003; +eaa : 3C420018; +eab : B8621000; +eac : 40230001; +ead : 40210002; +eae : 3C630010; +eaf : 3C210008; +eb0 : B8431000; +eb1 : B8410800; +eb2 : C3A00000; +eb3 : 40220000; +eb4 : 40210001; +eb5 : 3C420008; +eb6 : B8410800; +eb7 : C3A00000; +eb8 : 379CFFF0; +eb9 : 5B8B0010; +eba : 5B8C000C; +ebb : 5B8D0008; +ebc : 5B9D0004; +ebd : 28230030; +ebe : 28220358; +ebf : B8205800; +ec0 : 2863000C; +ec1 : 28420010; +ec2 : 282C004C; +ec3 : 28640010; +ec4 : 340300BA; +ec5 : 48830017; +ec6 : 28420000; +ec7 : 28430004; +ec8 : 34020001; +ec9 : D8600000; +eca : 7C210001; +ecb : C8016800; +ecc : B9600800; +ecd : F80009B9; +ece : 29610030; +ecf : 21AD002E; +ed0 : 35AD0006; +ed1 : 2821000C; +ed2 : 28210010; +ed3 : 45A10009; +ed4 : 78010001; +ed5 : 38217338; +ed6 : B9A01000; +ed7 : F8002947; +ed8 : 29610030; +ed9 : 2821000C; +eda : 582D0010; +edb : 318D0030; +edc : 3401004E; +edd : 0D810002; +ede : 34010003; +edf : 0D810040; +ee0 : 3401000A; +ee1 : 0D810042; +ee2 : 34010800; +ee3 : 0D810044; +ee4 : 340130DE; +ee5 : 0D810046; +ee6 : 3401AD01; +ee7 : 0D810048; +ee8 : 34012000; +ee9 : 0D81004A; +eea : 29610358; +eeb : 28220010; +eec : 28430014; +eed : 40410004; +eee : 44600002; +eef : 38210004; +ef0 : 28420008; +ef1 : 44400002; +ef2 : 38210008; +ef3 : 0D81004C; +ef4 : 2B9D0004; +ef5 : 2B8B0010; +ef6 : 2B8C000C; +ef7 : 2B8D0008; +ef8 : 379C0010; +ef9 : C3A00000; +efa : 379CFFF4; +efb : 5B8B000C; +efc : 5B8C0008; +efd : 5B9D0004; +efe : B8205800; +eff : 34210040; +f00 : B8406000; +f01 : FBFFFFB2; +f02 : 2D650044; +f03 : 2D640046; +f04 : 78070001; +f05 : 3CA50008; +f06 : 00860008; +f07 : 38E78ED8; +f08 : B8A62800; +f09 : 28E60000; +f0a : 64210003; +f0b : 2D630048; +f0c : E4A62800; +f0d : 2D62004A; +f0e : A0250800; +f0f : 44200010; +f10 : 3C840008; +f11 : 00610008; +f12 : 2084FFFF; +f13 : B8812000; +f14 : 206300FF; +f15 : 3801DEAD; +f16 : E4812000; +f17 : 64630001; +f18 : A0831800; +f19 : 44600006; +f1a : 34012000; +f1b : 5C410004; +f1c : 3561004C; +f1d : FBFFFF96; +f1e : 5981002C; +f1f : 2B9D0004; +f20 : 2B8B000C; +f21 : 2B8C0008; +f22 : 379C000C; +f23 : C3A00000; +f24 : 379CFFF0; +f25 : 5B8B0010; +f26 : 5B8C000C; +f27 : 5B8D0008; +f28 : 5B9D0004; +f29 : B8206000; +f2a : 28210358; +f2b : 204DFFFF; +f2c : 28210010; +f2d : 40250005; +f2e : 44A00003; +f2f : 34012000; +f30 : 5DA1000A; +f31 : 78040001; +f32 : B9800800; +f33 : 34020005; +f34 : 34030001; +f35 : 38847350; +f36 : B9A03000; +f37 : FBFFF3A2; +f38 : 34010000; +f39 : E0000051; +f3a : 298B004C; +f3b : 34030008; +f3c : 41610000; +f3d : 202100F0; +f3e : 3821000C; +f3f : 31610000; +f40 : 34010005; +f41 : 31610020; +f42 : 29820030; +f43 : 35610022; +f44 : 28420014; +f45 : F8004891; +f46 : 29810030; +f47 : 28210014; +f48 : 2C210008; +f49 : 0D6D0036; +f4a : 00220008; +f4b : 3161002B; +f4c : 34010003; +f4d : 0D61002C; +f4e : 34010800; +f4f : 0D610030; +f50 : 340130DE; +f51 : 0D610032; +f52 : 3401AD01; +f53 : 0D610034; +f54 : 3162002A; +f55 : 34011003; +f56 : 45A10005; +f57 : 34011004; +f58 : 34020008; +f59 : 5DA1002D; +f5a : E0000017; +f5b : 29810358; +f5c : 35620038; +f5d : 28210010; +f5e : 28230014; +f5f : 44600005; +f60 : 40210034; +f61 : 31610038; +f62 : 30400001; +f63 : E0000007; +f64 : 40210034; +f65 : 3C210008; +f66 : 38210001; +f67 : 00230008; +f68 : 31630038; +f69 : 30410001; +f6a : 29810358; +f6b : 28220010; +f6c : 3561003A; +f6d : 28420030; +f6e : FBFFFF32; +f6f : 34020014; +f70 : E0000016; +f71 : 29810358; +f72 : 28220010; +f73 : 35610038; +f74 : 2842001C; +f75 : FBFFFF2B; +f76 : 29810358; +f77 : 28220010; +f78 : 3561003C; +f79 : 28420018; +f7a : FBFFFF26; +f7b : 29810358; +f7c : 28220010; +f7d : 35610040; +f7e : 28420024; +f7f : FBFFFF21; +f80 : 29810358; +f81 : 28220010; +f82 : 35610044; +f83 : 28420020; +f84 : FBFFFF1C; +f85 : 34020018; +f86 : 34410030; +f87 : 31600002; +f88 : 31610003; +f89 : 0D62002E; +f8a : 2B9D0004; +f8b : 2B8B0010; +f8c : 2B8C000C; +f8d : 2B8D0008; +f8e : 379C0010; +f8f : C3A00000; +f90 : 379CFFEC; +f91 : 5B8B0014; +f92 : 5B8C0010; +f93 : 5B8D000C; +f94 : 5B8E0008; +f95 : 5B9D0004; +f96 : B8405800; +f97 : B8607000; +f98 : 34420022; +f99 : B8206000; +f9a : B8600800; +f9b : 34030008; +f9c : B8806800; +f9d : F8004839; +f9e : 3561002A; +f9f : FBFFFF14; +fa0 : 0DC10008; +fa1 : 3561002C; +fa2 : FBFFFF11; +fa3 : B8202800; +fa4 : 34040003; +fa5 : 2D630030; +fa6 : 2D620032; +fa7 : 2D610034; +fa8 : 44A40007; +fa9 : 78040001; +faa : B9800800; +fab : 34020005; +fac : 34030001; +fad : 38847384; +fae : E0000022; +faf : 3C650008; +fb0 : 78040001; +fb1 : 00430008; +fb2 : 38848ED8; +fb3 : B8A32800; +fb4 : 28830000; +fb5 : 44A30007; +fb6 : 78040001; +fb7 : B9800800; +fb8 : 34020005; +fb9 : 34030001; +fba : 388473D4; +fbb : E0000015; +fbc : 3C450008; +fbd : 00230008; +fbe : 20A5FFFF; +fbf : B8A32800; +fc0 : 3802DEAD; +fc1 : 44A20007; +fc2 : 78040001; +fc3 : B9800800; +fc4 : 34020005; +fc5 : 34030001; +fc6 : 3884740C; +fc7 : E0000009; +fc8 : 202500FF; +fc9 : 34010001; +fca : 44A10008; +fcb : 78040001; +fcc : B9800800; +fcd : 34020005; +fce : 34030001; +fcf : 38847450; +fd0 : FBFFF309; +fd1 : E0000028; +fd2 : 2D610036; +fd3 : 45A00002; +fd4 : 0DA10000; +fd5 : 34021003; +fd6 : 44220004; +fd7 : 34021004; +fd8 : 5C220021; +fd9 : E0000012; +fda : 29810358; +fdb : 356E0038; +fdc : 282D0010; +fdd : B9C00800; +fde : FBFFFED5; +fdf : 202100FF; +fe0 : 0DA10048; +fe1 : B9C00800; +fe2 : FBFFFED1; +fe3 : 00210008; +fe4 : 31A10050; +fe5 : 3561003A; +fe6 : FBFFFEC2; +fe7 : 29820358; +fe8 : 28420010; +fe9 : 5841004C; +fea : E000000F; +feb : 29810358; +fec : 282C0010; +fed : 35610038; +fee : FBFFFEBA; +fef : 59810058; +ff0 : 3561003C; +ff1 : FBFFFEB7; +ff2 : 59810054; +ff3 : 35610040; +ff4 : FBFFFEB4; +ff5 : 59810060; +ff6 : 35610044; +ff7 : FBFFFEB1; +ff8 : 5981005C; +ff9 : 2B9D0004; +ffa : 2B8B0014; +ffb : 2B8C0010; +ffc : 2B8D000C; +ffd : 2B8E0008; +ffe : 379C0014; +fff : C3A00000; +1000 : 379CFFF8; +1001 : 5B8B0008; +1002 : 5B9D0004; +1003 : 2042FFFF; +1004 : B8205800; +1005 : FBFFFF1F; +1006 : B8201000; +1007 : 34030000; +1008 : B9600800; +1009 : F80007B5; +100a : 2B9D0004; +100b : 2B8B0008; +100c : 379C0008; +100d : C3A00000; +100e : 379CFFE8; +100f : 5B8B0008; +1010 : 5B9D0004; +1011 : 20C8FFFF; +1012 : 090803E8; +1013 : B8405000; +1014 : 38028000; +1015 : 3CAB0010; +1016 : 00C70010; +1017 : B5024000; +1018 : B8804800; +1019 : 5B840010; +101a : 01080010; +101b : 78040001; +101c : 5B83000C; +101d : 5B850014; +101e : 5B860018; +101f : 34020004; +1020 : 34030002; +1021 : 38847494; +1022 : B9402800; +1023 : B9203000; +1024 : B9673800; +1025 : FBFFF2B4; +1026 : 2B9D0004; +1027 : 2B8B0008; +1028 : 379C0018; +1029 : C3A00000; +102a : 379CFFD8; +102b : 5B8B0018; +102c : 5B8C0014; +102d : 5B8D0010; +102e : 5B8E000C; +102f : 5B8F0008; +1030 : 5B9D0004; +1031 : 142B001F; +1032 : B8202800; +1033 : 396B0001; +1034 : 156D001F; +1035 : B8402000; +1036 : B8606000; +1037 : B9A00800; +1038 : B8A01800; +1039 : B9601000; +103a : F80046A9; +103b : 5B81001C; +103c : 5B820020; +103d : 3781001C; +103e : 340203E8; +103f : FBFFF82F; +1040 : B8207800; +1041 : 2B81001C; +1042 : 78030001; +1043 : 38638EC8; +1044 : 5B810024; +1045 : 2B810020; +1046 : 28620000; +1047 : 5B810028; +1048 : 37810024; +1049 : FBFFF825; +104a : B8207000; +104b : 3DE10010; +104c : 340203E8; +104d : F80046DB; +104e : 3DC20010; +104f : B8202000; +1050 : 1423001F; +1051 : B4821000; +1052 : 01C10010; +1053 : F4822000; +1054 : B4610800; +1055 : B4810800; +1056 : B9A01800; +1057 : B9602000; +1058 : F800468B; +1059 : 2B830024; +105a : 2B840028; +105b : 59810008; +105c : 5982000C; +105d : B9A00800; +105e : B9601000; +105f : F8004684; +1060 : 59810000; +1061 : 59820004; +1062 : 2B9D0004; +1063 : 2B8B0018; +1064 : 2B8C0014; +1065 : 2B8D0010; +1066 : 2B8E000C; +1067 : 2B8F0008; +1068 : 379C0028; +1069 : C3A00000; +106a : 78020001; +106b : 38429F40; +106c : 58410000; +106d : C3A00000; +106e : 379CFFE8; +106f : 5B8B0018; +1070 : 5B8C0014; +1071 : 5B8D0010; +1072 : 5B8E000C; +1073 : 5B8F0008; +1074 : 5B9D0004; +1075 : 282B0018; +1076 : B8206800; +1077 : 45600014; +1078 : 780C0001; +1079 : 398CC2A8; +107a : 29810000; +107b : 34020001; +107c : F80012DB; +107d : 34020000; +107e : 31A00020; +107f : B9600800; +1080 : 34030120; +1081 : 296F0090; +1082 : 296E0094; +1083 : 296D0098; +1084 : F80047D0; +1085 : 29810000; +1086 : 596F0090; +1087 : 596E0094; +1088 : 596D0098; +1089 : 34020000; +108a : F80012CD; +108b : 2B9D0004; +108c : 2B8B0018; +108d : 2B8C0014; +108e : 2B8D0010; +108f : 2B8E000C; +1090 : 2B8F0008; +1091 : 379C0018; +1092 : C3A00000; +1093 : 379CFFF0; +1094 : 5B8B0010; +1095 : 5B8C000C; +1096 : 5B8D0008; +1097 : 5B9D0004; +1098 : B8206800; +1099 : 28210358; +109a : 34020001; +109b : 29AB0018; +109c : 282C0010; +109d : 78010001; +109e : 3821C2A8; +109f : 28210000; +10a0 : F80012B7; +10a1 : 29810000; +10a2 : 34020000; +10a3 : 34030000; +10a4 : 2826001C; +10a5 : 35640028; +10a6 : B9A00800; +10a7 : 3565002C; +10a8 : D8C00000; +10a9 : 3402FFFF; +10aa : 5C200043; +10ab : 29810000; +10ac : 34020000; +10ad : 28230034; +10ae : B9A00800; +10af : D8600000; +10b0 : 35A203F8; +10b1 : B9600800; +10b2 : 34030010; +10b3 : F80048D3; +10b4 : 29610048; +10b5 : 2962002C; +10b6 : 4C410003; +10b7 : F800469E; +10b8 : 59610048; +10b9 : 29810000; +10ba : 28220018; +10bb : 29610048; +10bc : D8400000; +10bd : 29810058; +10be : 2D820054; +10bf : 59600118; +10c0 : 3C210010; +10c1 : 59600014; +10c2 : B8220800; +10c3 : 59610018; +10c4 : 29810060; +10c5 : 2D82005C; +10c6 : 3C210010; +10c7 : B8220800; +10c8 : 5961001C; +10c9 : 2981001C; +10ca : 2D820018; +10cb : 3C210010; +10cc : B8220800; +10cd : 59610020; +10ce : 29810024; +10cf : 2D820020; +10d0 : 3C210010; +10d1 : B8220800; +10d2 : 78020001; +10d3 : 59610024; +10d4 : 384274AC; +10d5 : 35610060; +10d6 : F8004810; +10d7 : 29610010; +10d8 : 356200A0; +10d9 : 59600058; +10da : 38210001; +10db : 59610010; +10dc : 29A10038; +10dd : 28230000; +10de : B9A00800; +10df : D8600000; +10e0 : 78010001; +10e1 : 38219F40; +10e2 : 28210000; +10e3 : 34020000; +10e4 : 5961005C; +10e5 : 78010001; +10e6 : 3821B5E8; +10e7 : 58200000; +10e8 : 78010001; +10e9 : 3821C2A8; +10ea : 28210000; +10eb : F800126C; +10ec : 34020000; +10ed : B8400800; +10ee : 2B9D0004; +10ef : 2B8B0010; +10f0 : 2B8C000C; +10f1 : 2B8D0008; +10f2 : 379C0010; +10f3 : C3A00000; +10f4 : 28450004; +10f5 : 28440008; +10f6 : 28460000; +10f7 : 28210018; +10f8 : 2842000C; +10f9 : 582600B0; +10fa : 582500B4; +10fb : 582400B8; +10fc : 582200BC; +10fd : 28620008; +10fe : 28650000; +10ff : 28640004; +1100 : 2863000C; +1101 : 582200C8; +1102 : 582500C0; +1103 : 582400C4; +1104 : 582300CC; +1105 : 78010001; +1106 : 3821B5E8; +1107 : 34020001; +1108 : 58220000; +1109 : 34010000; +110a : C3A00000; +110b : 379CFFF0; +110c : 5B8B0010; +110d : 5B8C000C; +110e : 5B8D0008; +110f : 5B9D0004; +1110 : 780D0001; +1111 : 39ADC2A8; +1112 : 282C0018; +1113 : B8205800; +1114 : 29A10000; +1115 : 34020001; +1116 : F8001241; +1117 : 296100C4; +1118 : 296400B8; +1119 : 296300BC; +111a : 296200C0; +111b : 598100DC; +111c : 296100D4; +111d : 598400D0; +111e : 598300D4; +111f : 296400C8; +1120 : 296300CC; +1121 : 598200D8; +1122 : 296200D0; +1123 : 598100EC; +1124 : 29A10000; +1125 : 598200E8; +1126 : 598400E0; +1127 : 598300E4; +1128 : 34020000; +1129 : F800122E; +112a : 34010000; +112b : 2B9D0004; +112c : 2B8B0010; +112d : 2B8C000C; +112e : 2B8D0008; +112f : 379C0010; +1130 : C3A00000; +1131 : 379CFFC0; +1132 : 5B8B0020; +1133 : 5B8C001C; +1134 : 5B8D0018; +1135 : 5B8E0014; +1136 : 5B8F0010; +1137 : 5B90000C; +1138 : 5B910008; +1139 : 5B9D0004; +113a : B8405800; +113b : B8206000; +113c : B8606800; +113d : 28210358; +113e : 116300B0; +113f : 28220010; +1140 : 206300C0; +1141 : 34010080; +1142 : 4461000A; +1143 : 116400C0; +1144 : 208400C0; +1145 : 44810007; +1146 : 116400D0; +1147 : 208400C0; +1148 : 44810004; +1149 : 116400E0; +114a : 208400C0; +114b : 5C810019; +114c : 78010001; +114d : 3821B5EC; +114e : 28220000; +114f : 340C0000; +1150 : 34420001; +1151 : 58220000; +1152 : 34010005; +1153 : 4C2200F9; +1154 : 116400C0; +1155 : 116500D0; +1156 : 116600E0; +1157 : 208400C0; +1158 : 20A500C0; +1159 : 20C600C0; +115a : 78010001; +115b : 78020001; +115c : 7C630080; +115d : 7C840080; +115e : 7CA50080; +115f : 7CC60080; +1160 : 384291D4; +1161 : 382174BC; +1162 : F80026BC; +1163 : E00000E9; +1164 : 28410000; +1165 : 28230038; +1166 : 44600004; +1167 : B9600800; +1168 : 34020000; +1169 : D8600000; +116a : 78010001; +116b : 3821B5EC; +116c : 58200000; +116d : 29610058; +116e : 356200A0; +116f : 378E0034; +1170 : 34210001; +1171 : 59610058; +1172 : 29810038; +1173 : 357100C0; +1174 : 28230000; +1175 : B9800800; +1176 : D8600000; +1177 : 78010001; +1178 : 3821B5E8; +1179 : 296200E8; +117a : 58200000; +117b : 296100EC; +117c : 296400E0; +117d : 296300E4; +117e : 5B82002C; +117f : 5B810030; +1180 : 356200B0; +1181 : 37810024; +1182 : 5B840024; +1183 : 5B830028; +1184 : F8000AD8; +1185 : 296200D8; +1186 : 296100DC; +1187 : 296400D0; +1188 : 296300D4; +1189 : 5B82003C; +118a : 5B810040; +118b : BA201000; +118c : B9C00800; +118d : 5B840034; +118e : 5B830038; +118f : F8000ACD; +1190 : 2B810024; +1191 : B9C01000; +1192 : 59610030; +1193 : 2B810028; +1194 : 59610034; +1195 : 2B81002C; +1196 : 59610038; +1197 : 2B810030; +1198 : 5961003C; +1199 : 35610030; +119a : F8000AC2; +119b : 78010001; +119c : 3821B0CC; +119d : 28210000; +119e : 2982001C; +119f : B8220800; +11a0 : 00210010; +11a1 : 2021000F; +11a2 : 44200029; +11a3 : 296300B0; +11a4 : 296400B4; +11a5 : 296500B8; +11a6 : 296600BC; +11a7 : 78020001; +11a8 : B9800800; +11a9 : 384274EC; +11aa : FBFFFE64; +11ab : 296300C0; +11ac : 296400C4; +11ad : 296500C8; +11ae : 296600CC; +11af : 78020001; +11b0 : B9800800; +11b1 : 384274F8; +11b2 : FBFFFE5C; +11b3 : 296300D0; +11b4 : 296400D4; +11b5 : 296500D8; +11b6 : 296600DC; +11b7 : 78020001; +11b8 : B9800800; +11b9 : 38427504; +11ba : FBFFFE54; +11bb : 296300E0; +11bc : 296400E4; +11bd : 296500E8; +11be : 296600EC; +11bf : 78020001; +11c0 : B9800800; +11c1 : 38427510; +11c2 : FBFFFE4C; +11c3 : 29630030; +11c4 : 29640034; +11c5 : 29650038; +11c6 : 2966003C; +11c7 : 78020001; +11c8 : B9800800; +11c9 : 38427534; +11ca : FBFFFE44; +11cb : 29610038; +11cc : 2962003C; +11cd : 34030000; +11ce : 340403E8; +11cf : F8004514; +11d0 : 380C8000; +11d1 : B44C6000; +11d2 : F44C1800; +11d3 : 78050001; +11d4 : B4610800; +11d5 : 3C220010; +11d6 : 018C0010; +11d7 : 38A58EC8; +11d8 : B84C6000; +11d9 : 28A40000; +11da : 142E0010; +11db : 29620034; +11dc : 29610030; +11dd : 34030000; +11de : F8004505; +11df : B5823000; +11e0 : F5866000; +11e1 : B5C10800; +11e2 : 29670018; +11e3 : 29630020; +11e4 : B5816000; +11e5 : 2961001C; +11e6 : 29640024; +11e7 : B4E31800; +11e8 : B4611800; +11e9 : B4641800; +11ea : 1465001F; +11eb : 596C0040; +11ec : 59660044; +11ed : 48AC0004; +11ee : 5CAC0005; +11ef : 54660002; +11f0 : E0000003; +11f1 : 59650040; +11f2 : 59630044; +11f3 : 29620044; +11f4 : 29610040; +11f5 : 148F001F; +11f6 : C8431800; +11f7 : F4621000; +11f8 : C8250800; +11f9 : C8220800; +11fa : B4872800; +11fb : 14E2001F; +11fc : F4852000; +11fd : B5E27800; +11fe : 006C0001; +11ff : 3C22001F; +1200 : B48F7800; +1201 : 29640028; +1202 : B84C6000; +1203 : 00220001; +1204 : B4AC6000; +1205 : F4AC2800; +1206 : B5E27800; +1207 : B8601000; +1208 : 1483001F; +1209 : B4AF7800; +120a : F80044D9; +120b : 142E0008; +120c : 1421001F; +120d : B58E7000; +120e : F58E6000; +120f : B5E10800; +1210 : B5817800; +1211 : 296200B8; +1212 : 296100BC; +1213 : 296400B0; +1214 : 296300B4; +1215 : 37900034; +1216 : 5B82003C; +1217 : 5B810040; +1218 : BA201000; +1219 : BA000800; +121a : 5B840034; +121b : 378C0024; +121c : 5B830038; +121d : F8000A3F; +121e : B9801800; +121f : B9E00800; +1220 : B9C01000; +1221 : FBFFFE09; +1222 : BA000800; +1223 : B9801000; +1224 : F8000A1E; +1225 : 2B81003C; +1226 : 2B910034; +1227 : 2B900038; +1228 : 2B820040; +1229 : 34030000; +122a : 59B10000; +122b : 59B00004; +122c : 59A10008; +122d : 59A2000C; +122e : 340403E8; +122f : F80044B4; +1230 : 380C8000; +1231 : B44C6000; +1232 : F44C1000; +1233 : 78050001; +1234 : B4411800; +1235 : 38A58EC8; +1236 : 3C610010; +1237 : 018C0010; +1238 : 28A40000; +1239 : B82C6000; +123a : 146D0010; +123b : BA200800; +123c : 34030000; +123d : BA001000; +123e : F80044A5; +123f : B5821000; +1240 : F5826000; +1241 : B5A10800; +1242 : 78030001; +1243 : B5810800; +1244 : 38639F40; +1245 : 59610088; +1246 : 28610000; +1247 : 5962008C; +1248 : 596F0050; +1249 : 5961005C; +124a : 596E0054; +124b : 340C0001; +124c : B9800800; +124d : 2B9D0004; +124e : 2B8B0020; +124f : 2B8C001C; +1250 : 2B8D0018; +1251 : 2B8E0014; +1252 : 2B8F0010; +1253 : 2B90000C; +1254 : 2B910008; +1255 : 379C0040; +1256 : C3A00000; +1257 : 379CFFC8; +1258 : 5B8B0028; +1259 : 5B8C0024; +125a : 5B8D0020; +125b : 5B8E001C; +125c : 5B8F0018; +125d : 5B900014; +125e : 5B910010; +125f : 5B92000C; +1260 : 5B930008; +1261 : 5B9D0004; +1262 : B8207000; +1263 : 28210358; +1264 : 29CB0018; +1265 : 282D0010; +1266 : 78010001; +1267 : 3821B5E8; +1268 : 28210000; +1269 : 4420013C; +126a : 78010001; +126b : 3821C2A8; +126c : 28210000; +126d : 34020001; +126e : F80010E9; +126f : B9C00800; +1270 : B9601000; +1271 : 3783002C; +1272 : 29720040; +1273 : 29700044; +1274 : FBFFFEBD; +1275 : 44200125; +1276 : 2961002C; +1277 : 340203E8; +1278 : F80044B0; +1279 : B8209800; +127a : 2B810038; +127b : 2B8C0034; +127c : 2B910030; +127d : 202FFFFF; +127e : 09EF03E8; +127f : 3D8C0010; +1280 : 00210010; +1281 : 15EF0010; +1282 : B9816000; +1283 : 4C0C0008; +1284 : B9800800; +1285 : BA601000; +1286 : F80044CF; +1287 : B8201800; +1288 : 082103E8; +1289 : C9836000; +128a : B5E17800; +128b : BA201800; +128c : 4D800006; +128d : 78020001; +128e : 38428EC8; +128f : 28410000; +1290 : 3623FFFF; +1291 : B5816000; +1292 : 69820000; +1293 : 6461FFFF; +1294 : A0410800; +1295 : 44200006; +1296 : 78020001; +1297 : 38428EDC; +1298 : 28410000; +1299 : 34030000; +129a : B5816000; +129b : 64630000; +129c : 0181001F; +129d : A0611800; +129e : 44600006; +129f : C8139800; +12a0 : 4A6C0004; +12a1 : 098C03E8; +12a2 : B5EC7800; +12a3 : 340C0000; +12a4 : 78040001; +12a5 : B9C00800; +12a6 : 34020004; +12a7 : 34030002; +12a8 : 38847578; +12a9 : BA202800; +12aa : B9803000; +12ab : B9E03800; +12ac : FBFFF02D; +12ad : 29A10000; +12ae : 34020000; +12af : 28230004; +12b0 : B9C00800; +12b1 : D8600000; +12b2 : 3421FFFF; +12b3 : 34020001; +12b4 : 5041000C; +12b5 : 78040001; +12b6 : B9C00800; +12b7 : 34020004; +12b8 : 34030001; +12b9 : 38847598; +12ba : FBFFF01F; +12bb : 29A10000; +12bc : 34020000; +12bd : 28230034; +12be : B9C00800; +12bf : D8600000; +12c0 : 29A10000; +12c1 : 28210010; +12c2 : D8200000; +12c3 : 5C20000A; +12c4 : 29630010; +12c5 : 3402FFFD; +12c6 : A0431000; +12c7 : 59620010; +12c8 : 2B820030; +12c9 : 2B83002C; +12ca : B8621000; +12cb : 5C410009; +12cc : E000000A; +12cd : 78040001; +12ce : B9C00800; +12cf : 34020004; +12d0 : 34030001; +12d1 : 388475BC; +12d2 : FBFFF007; +12d3 : E00000C7; +12d4 : 34010002; +12d5 : E0000006; +12d6 : 34010001; +12d7 : 5D820004; +12d8 : 29610014; +12d9 : 5C2C0003; +12da : 34010003; +12db : 59610014; +12dc : 29620014; +12dd : 78010001; +12de : 382191BC; +12df : 3C420002; +12e0 : 78060001; +12e1 : B4220800; +12e2 : 28250000; +12e3 : 78040001; +12e4 : 38C680E0; +12e5 : B9C00800; +12e6 : 34020004; +12e7 : 34030001; +12e8 : 388475C8; +12e9 : FBFFEFF0; +12ea : 29620014; +12eb : 78010001; +12ec : 382191BC; +12ed : 3C420002; +12ee : B4221000; +12ef : 28420000; +12f0 : 35610060; +12f1 : F80045F5; +12f2 : 29620014; +12f3 : 34010004; +12f4 : 3442FFFF; +12f5 : 5441006E; +12f6 : 78010001; +12f7 : 3C420002; +12f8 : 382191A8; +12f9 : B4220800; +12fa : 28210000; +12fb : C0200000; +12fc : 29A10000; +12fd : 2B820030; +12fe : 34030000; +12ff : 28240014; +1300 : 2B81002C; +1301 : E0000006; +1302 : 29A10000; +1303 : 34020000; +1304 : B9801800; +1305 : 28240014; +1306 : 34010000; +1307 : D8800000; +1308 : 29610010; +1309 : 38210002; +130a : 59610010; +130b : E0000042; +130c : 29650048; +130d : 78040001; +130e : B9C00800; +130f : 34020004; +1310 : 34030002; +1311 : 388475E0; +1312 : B9803000; +1313 : B9E03800; +1314 : FBFFEFC5; +1315 : 29A20000; +1316 : 29610048; +1317 : 28420018; +1318 : B5E10800; +1319 : 59610048; +131a : D8400000; +131b : 29610010; +131c : 38210002; +131d : 59610010; +131e : 34010005; +131f : 59610014; +1320 : E0000043; +1321 : 15E1001F; +1322 : 3402003B; +1323 : 982F7800; +1324 : C9E10800; +1325 : 4822000D; +1326 : 29A10000; +1327 : 34020001; +1328 : 28230034; +1329 : B9C00800; +132a : D8600000; +132b : 29610050; +132c : 59610110; +132d : 29610054; +132e : 59610114; +132f : 34010004; +1330 : 59610014; +1331 : E0000004; +1332 : 29610118; +1333 : 34210001; +1334 : 59610118; +1335 : 29620118; +1336 : 34010009; +1337 : 4C22002C; +1338 : 59600118; +1339 : E0000014; +133a : 29630054; +133b : 29610114; +133c : 29640050; +133d : 29620110; +133e : C8610800; +133f : F4231800; +1340 : 59610084; +1341 : 78010001; +1342 : 38219F40; +1343 : C8821000; +1344 : 28210000; +1345 : C8431000; +1346 : 59620080; +1347 : 4420001C; +1348 : 15E1001F; +1349 : 34030078; +134a : 982F1000; +134b : C8411000; +134c : 4C620003; +134d : 34010003; +134e : E3FFFFD1; +134f : 0021001E; +1350 : 29A20000; +1351 : B42F7800; +1352 : 29610048; +1353 : 15EF0002; +1354 : 28420018; +1355 : B5E10800; +1356 : 59610048; +1357 : D8400000; +1358 : 29650048; +1359 : 78040001; +135a : B9C00800; +135b : 34020006; +135c : 34030001; +135d : 388475FC; +135e : FBFFEF7B; +135f : 29610050; +1360 : 59610110; +1361 : 29610054; +1362 : 59610114; +1363 : 29620014; +1364 : 34010004; +1365 : 44410004; +1366 : 29610090; +1367 : 34210001; +1368 : 59610090; +1369 : 29640088; +136a : 2963008C; +136b : 1481001F; +136c : 98611800; +136d : C8611000; +136e : 98812000; +136f : F4431800; +1370 : C8810800; +1371 : C8230800; +1372 : 48200005; +1373 : 5C200007; +1374 : 340101F4; +1375 : 54410002; +1376 : E0000004; +1377 : 29610094; +1378 : 34210001; +1379 : 59610094; +137a : 29650044; +137b : 29640040; +137c : CA051800; +137d : F4700800; +137e : CA441000; +137f : C8411000; +1380 : 48020007; +1381 : 34010001; +1382 : 48400013; +1383 : 5C400011; +1384 : 340203E8; +1385 : 54620010; +1386 : E000000E; +1387 : C8100800; +1388 : 7C220000; +1389 : C8121800; +138a : C8621800; +138b : C8251000; +138c : F4410800; +138d : C8641800; +138e : C8611800; +138f : 34010001; +1390 : 48600005; +1391 : 5C600003; +1392 : 340303E8; +1393 : 54430002; +1394 : 34010000; +1395 : 202100FF; +1396 : 44200004; +1397 : 29610098; +1398 : 34210001; +1399 : 59610098; +139a : 78010001; +139b : 3821C2A8; +139c : 28210000; +139d : 34020000; +139e : F8000FB9; +139f : 29A10000; +13a0 : 28230038; +13a1 : 44600004; +13a2 : B9600800; +13a3 : 34020001; +13a4 : D8600000; +13a5 : 34010000; +13a6 : 2B9D0004; +13a7 : 2B8B0028; +13a8 : 2B8C0024; +13a9 : 2B8D0020; +13aa : 2B8E001C; +13ab : 2B8F0018; +13ac : 2B900014; +13ad : 2B910010; +13ae : 2B92000C; +13af : 2B930008; +13b0 : 379C0038; +13b1 : C3A00000; +13b2 : 379CFFF8; +13b3 : 5B8B0008; +13b4 : 5B9D0004; +13b5 : 28230038; +13b6 : B8405800; +13b7 : 28630000; +13b8 : D8600000; +13b9 : 29620008; +13ba : 2D61000C; +13bb : 78030001; +13bc : 3C420010; +13bd : 38638EE0; +13be : B8410800; +13bf : 28620000; +13c0 : F8004368; +13c1 : 342103E8; +13c2 : 2B9D0004; +13c3 : 2B8B0008; +13c4 : 379C0008; +13c5 : C3A00000; +13c6 : 379CFFDC; +13c7 : 5B8B0014; +13c8 : 5B8C0010; +13c9 : 5B8D000C; +13ca : 5B8E0008; +13cb : 5B9D0004; +13cc : 282D000C; +13cd : B8205800; +13ce : 378C0018; +13cf : 45A00008; +13d0 : B9801000; +13d1 : FBFFFFE1; +13d2 : 342303DE; +13d3 : 34020006; +13d4 : B9600800; +13d5 : FBFFEF62; +13d6 : E0000032; +13d7 : B9801000; +13d8 : FBFFFFDA; +13d9 : B8207000; +13da : 34020006; +13db : B9600800; +13dc : FBFFEFDB; +13dd : 442D0026; +13de : 2B8E001C; +13df : 2B8D0018; +13e0 : 29610038; +13e1 : B9801000; +13e2 : 28230000; +13e3 : B9600800; +13e4 : D8600000; +13e5 : 2B820018; +13e6 : 2B81001C; +13e7 : 5C4D0002; +13e8 : 442EFFF8; +13e9 : 29610038; +13ea : 378C0018; +13eb : B9801000; +13ec : 28230000; +13ed : B9600800; +13ee : D8600000; +13ef : B9801000; +13f0 : B9600800; +13f1 : F800068C; +13f2 : B8201000; +13f3 : 34030001; +13f4 : B9600800; +13f5 : F80003C9; +13f6 : B9801000; +13f7 : B9600800; +13f8 : FBFFFFBA; +13f9 : 3423FFF6; +13fa : 34020006; +13fb : B9600800; +13fc : FBFFEF3B; +13fd : B9600800; +13fe : B9801000; +13ff : FBFFFFB3; +1400 : 3421FFF6; +1401 : 59610008; +1402 : E0000006; +1403 : 35C2FFF6; +1404 : EC410800; +1405 : C8010800; +1406 : A0411000; +1407 : 59620008; +1408 : 34010000; +1409 : 2B9D0004; +140a : 2B8B0014; +140b : 2B8C0010; +140c : 2B8D000C; +140d : 2B8E0008; +140e : 379C0024; +140f : C3A00000; +1410 : 379CFFF4; +1411 : 5B8B000C; +1412 : 5B8C0008; +1413 : 5B9D0004; +1414 : 34020001; +1415 : B8205800; +1416 : FBFFEFA1; +1417 : 340C0000; +1418 : 44200014; +1419 : B9600800; +141a : 34020001; +141b : FBFFEF3E; +141c : 296303E4; +141d : 34020001; +141e : 34010000; +141f : 5C620002; +1420 : 296103E0; +1421 : 0D610092; +1422 : B9600800; +1423 : F8000739; +1424 : B8206000; +1425 : 44200007; +1426 : 78040001; +1427 : B9600800; +1428 : 34020005; +1429 : 34030001; +142a : 38847654; +142b : FBFFEEAE; +142c : B9800800; +142d : 2B9D0004; +142e : 2B8B000C; +142f : 2B8C0008; +1430 : 379C000C; +1431 : C3A00000; +1432 : 379CFFF4; +1433 : 5B8B000C; +1434 : 5B8C0008; +1435 : 5B9D0004; +1436 : 34020003; +1437 : B8205800; +1438 : FBFFEF7F; +1439 : 340C0000; +143a : 44200014; +143b : B9600800; +143c : 34020003; +143d : FBFFEF1C; +143e : 296303E4; +143f : 34020001; +1440 : 34010000; +1441 : 5C620002; +1442 : 296103E0; +1443 : 0D610092; +1444 : B9600800; +1445 : F80006B2; +1446 : B8206000; +1447 : 44200007; +1448 : 78040001; +1449 : B9600800; +144a : 34020005; +144b : 34030001; +144c : 3884766C; +144d : FBFFEE8C; +144e : B9800800; +144f : 2B9D0004; +1450 : 2B8B000C; +1451 : 2B8C0008; +1452 : 379C000C; +1453 : C3A00000; +1454 : 379CFFF4; +1455 : 5B8B000C; +1456 : 5B8C0008; +1457 : 5B9D0004; +1458 : 34020000; +1459 : B8205800; +145a : FBFFEF5D; +145b : 340C0000; +145c : 44200019; +145d : 34020000; +145e : B9600800; +145f : FBFFEEFA; +1460 : B9600800; +1461 : F8000728; +1462 : B8206000; +1463 : 29640110; +1464 : 2961011C; +1465 : 29630114; +1466 : 29620118; +1467 : 596100C4; +1468 : 596400B8; +1469 : 596300BC; +146a : 596200C0; +146b : 3401FFFF; +146c : 5D810008; +146d : 78040001; +146e : B9600800; +146f : 34020005; +1470 : 34030001; +1471 : 38847688; +1472 : FBFFEE67; +1473 : E0000002; +1474 : 340C0000; +1475 : B9800800; +1476 : 2B9D0004; +1477 : 2B8B000C; +1478 : 2B8C0008; +1479 : 379C000C; +147a : C3A00000; +147b : 379CFFE4; +147c : 5B8B001C; +147d : 5B8C0018; +147e : 5B8D0014; +147f : 5B8E0010; +1480 : 5B8F000C; +1481 : 5B900008; +1482 : 5B9D0004; +1483 : 340C0000; +1484 : B8205800; +1485 : B8407000; +1486 : 342F03A0; +1487 : 343003C0; +1488 : E0000012; +1489 : 098D0070; +148a : BA000800; +148b : 3403000A; +148c : 35A20128; +148d : B5621000; +148e : F8004327; +148f : 5C20000A; +1490 : 35A10168; +1491 : B9E01000; +1492 : B5610800; +1493 : F8000253; +1494 : B56D1000; +1495 : B9C00800; +1496 : 34420134; +1497 : F8000610; +1498 : E000001F; +1499 : 358C0001; +149a : 2D630120; +149b : 486CFFEE; +149c : 34010004; +149d : 54610003; +149e : 34630001; +149f : 0D630120; +14a0 : 2D6D0120; +14a1 : 3403000A; +14a2 : 356203C0; +14a3 : 35ADFFFF; +14a4 : 09AC0070; +14a5 : 35810128; +14a6 : B5610800; +14a7 : F800432F; +14a8 : 35810168; +14a9 : B9E01000; +14aa : B5610800; +14ab : F800023B; +14ac : B56C1000; +14ad : B9C00800; +14ae : 34420134; +14af : F80005F8; +14b0 : 78040001; +14b1 : B9600800; +14b2 : 34020003; +14b3 : 34030001; +14b4 : 388476A0; +14b5 : B9A02800; +14b6 : FBFFEE23; +14b7 : B9600800; +14b8 : F8000402; +14b9 : 59610004; +14ba : 34020002; +14bb : B9600800; +14bc : FBFFEE9D; +14bd : 78010001; +14be : 38219F04; +14bf : 28220024; +14c0 : 34010000; +14c1 : 44400003; +14c2 : B9600800; +14c3 : D8400000; +14c4 : 2B9D0004; +14c5 : 2B8B001C; +14c6 : 2B8C0018; +14c7 : 2B8D0014; +14c8 : 2B8E0010; +14c9 : 2B8F000C; +14ca : 2B900008; +14cb : 379C001C; +14cc : C3A00000; +14cd : 28220000; +14ce : 78050001; +14cf : 38A58ED4; +14d0 : 28430014; +14d1 : 2842000C; +14d2 : 28440004; +14d3 : 58640000; +14d4 : 28420008; +14d5 : 3404FFFF; +14d6 : 58620004; +14d7 : 28230000; +14d8 : 28620014; +14d9 : 2863000C; +14da : 0C44000A; +14db : 28A40000; +14dc : 5844000C; +14dd : 28640004; +14de : 58440010; +14df : 28630008; +14e0 : 58430014; +14e1 : 28220000; +14e2 : 28430014; +14e3 : 2842000C; +14e4 : 28460010; +14e5 : 28450014; +14e6 : 28440018; +14e7 : 58660018; +14e8 : 5865001C; +14e9 : 58640020; +14ea : 4042001C; +14eb : 30620024; +14ec : 28210000; +14ed : 28220014; +14ee : 2821000C; +14ef : 4021001D; +14f0 : 30410025; +14f1 : C3A00000; +14f2 : 379CFFE4; +14f3 : 5B8B001C; +14f4 : 5B8C0018; +14f5 : 5B8D0014; +14f6 : 5B8E0010; +14f7 : 5B8F000C; +14f8 : 5B900008; +14f9 : 5B9D0004; +14fa : B8408000; +14fb : 28220030; +14fc : B8205800; +14fd : B8607800; +14fe : 284D0008; +14ff : 28220034; +1500 : 282C0358; +1501 : 28440000; +1502 : D8800000; +1503 : 48010066; +1504 : 356E0030; +1505 : B9C00800; +1506 : FBFFFFC7; +1507 : 29610030; +1508 : 2824000C; +1509 : 4161005C; +150a : 30810004; +150b : 4161005D; +150c : 30810005; +150d : 4161005E; +150e : 30810006; +150f : 3401FFFF; +1510 : 30810007; +1511 : 3401FFFE; +1512 : 30810008; +1513 : 4161005F; +1514 : 30810009; +1515 : 41610060; +1516 : 3081000A; +1517 : 41610061; +1518 : 3081000B; +1519 : B9C00800; +151a : FBFFFFB3; +151b : 29610030; +151c : 34030008; +151d : 2824000C; +151e : B9800800; +151f : 34820004; +1520 : F80042B6; +1521 : 29610030; +1522 : 35620418; +1523 : 28210000; +1524 : 3180000A; +1525 : C8410800; +1526 : 14210003; +1527 : 08214E2B; +1528 : 0D810008; +1529 : 41A1001A; +152a : 3181000B; +152b : 34010014; +152c : 3181000C; +152d : 29A1001C; +152e : 3181000D; +152f : 34010002; +1530 : 3181000E; +1531 : B9600800; +1532 : FBFFEDEB; +1533 : 78010001; +1534 : 38219F04; +1535 : 28240000; +1536 : 4480000F; +1537 : B9600800; +1538 : BA001000; +1539 : B9E01800; +153a : D8800000; +153b : 4420000A; +153c : 78040001; +153d : 78050001; +153e : B9600800; +153f : 34020002; +1540 : 34030001; +1541 : 388476C0; +1542 : 38A591E4; +1543 : FBFFED96; +1544 : E0000025; +1545 : 29610030; +1546 : 78040001; +1547 : 34020003; +1548 : 2825000C; +1549 : 34030001; +154a : B9600800; +154b : 28A50010; +154c : 388476DC; +154d : FBFFED8C; +154e : 29610030; +154f : 78040001; +1550 : 34020003; +1551 : 2825000C; +1552 : 34030001; +1553 : B9600800; +1554 : 28A50014; +1555 : 388476F0; +1556 : FBFFED83; +1557 : 2962004C; +1558 : B9600800; +1559 : F8000507; +155a : 29620024; +155b : 34010001; +155c : 44410003; +155d : 34010004; +155e : E0000002; +155f : 34010006; +1560 : 59610004; +1561 : 78010001; +1562 : 3821B0D8; +1563 : 28220000; +1564 : 34010004; +1565 : 5C410006; +1566 : 3401006B; +1567 : 59610004; +1568 : E0000003; +1569 : 340103E8; +156a : 59610008; +156b : 34010000; +156c : 2B9D0004; +156d : 2B8B001C; +156e : 2B8C0018; +156f : 2B8D0014; +1570 : 2B8E0010; +1571 : 2B8F000C; +1572 : 2B900008; +1573 : 379C001C; +1574 : C3A00000; +1575 : 379CFFF8; +1576 : 5B8B0008; +1577 : 5B9D0004; +1578 : 34020004; +1579 : B8205800; +157a : FBFFEE3D; +157b : 44200004; +157c : 34010001; +157d : 59610004; +157e : E0000005; +157f : B9600800; +1580 : 34020004; +1581 : FBFFEE58; +1582 : 59610008; +1583 : 34010000; +1584 : 2B9D0004; +1585 : 2B8B0008; +1586 : 379C0008; +1587 : C3A00000; +1588 : 340203E8; +1589 : 58220008; +158a : 34010000; +158b : C3A00000; +158c : 379CFFF0; +158d : 5B8B0010; +158e : 5B8C000C; +158f : 5B8D0008; +1590 : 5B9D0004; +1591 : B8406800; +1592 : 34020004; +1593 : B8205800; +1594 : B8606000; +1595 : FBFFEDC4; +1596 : 78010001; +1597 : 38219F04; +1598 : 2824000C; +1599 : 44800006; +159a : B9600800; +159b : B9A01000; +159c : B9801800; +159d : D8800000; +159e : 5C200012; +159f : 416103A1; +15a0 : 44200008; +15a1 : 3402000B; +15a2 : 5C22000B; +15a3 : B9600800; +15a4 : B9A01000; +15a5 : B9801800; +15a6 : FBFFFED5; +15a7 : E0000005; +15a8 : B9600800; +15a9 : B9A01000; +15aa : B9801800; +15ab : F8000211; +15ac : 5C200004; +15ad : B9600800; +15ae : F8000166; +15af : 44200003; +15b0 : 34010002; +15b1 : 59610004; +15b2 : B9600800; +15b3 : 34020002; +15b4 : FBFFEE25; +15b5 : 59610008; +15b6 : 34010000; +15b7 : 2B9D0004; +15b8 : 2B8B0010; +15b9 : 2B8C000C; +15ba : 2B8D0008; +15bb : 379C0010; +15bc : C3A00000; +15bd : 379CFFFC; +15be : 5B9D0004; +15bf : 28240000; +15c0 : 34030006; +15c1 : 5C830003; +15c2 : 34220100; +15c3 : F80005EA; +15c4 : 34010000; +15c5 : 2B9D0004; +15c6 : 379C0004; +15c7 : C3A00000; +15c8 : 379CFFF0; +15c9 : 5B8B0010; +15ca : 5B8C000C; +15cb : 5B8D0008; +15cc : 5B9D0004; +15cd : B8606000; +15ce : 28230000; +15cf : B8406800; +15d0 : 34020005; +15d1 : B8205800; +15d2 : 5C620007; +15d3 : FBFFEDE4; +15d4 : 44200008; +15d5 : 34010006; +15d6 : 59610004; +15d7 : 340C0000; +15d8 : E0000044; +15d9 : FBFFFE37; +15da : B9600800; +15db : FBFFFE57; +15dc : B9600800; +15dd : 34020000; +15de : FBFFED7B; +15df : 78010001; +15e0 : 38219F04; +15e1 : 28260010; +15e2 : 416503A1; +15e3 : 44C00008; +15e4 : B8A02000; +15e5 : B9600800; +15e6 : B9A01000; +15e7 : B9801800; +15e8 : D8C00000; +15e9 : B8202800; +15ea : 4801002B; +15eb : 3401000B; +15ec : 54A1000E; +15ed : 78010001; +15ee : 3CA20002; +15ef : 382191F4; +15f0 : B4220800; +15f1 : 28240000; +15f2 : 44800008; +15f3 : B9801800; +15f4 : B9600800; +15f5 : B9A01000; +15f6 : D8800000; +15f7 : B8206000; +15f8 : 5C20000D; +15f9 : E0000011; +15fa : 7CA1000F; +15fb : 7D8C0000; +15fc : A02C6000; +15fd : 4580000D; +15fe : 78040001; +15ff : B9600800; +1600 : 34020005; +1601 : 34030001; +1602 : 38847708; +1603 : FBFFECD6; +1604 : E0000006; +1605 : 34010001; +1606 : 4581000F; +1607 : 3401FFFF; +1608 : 5D81000E; +1609 : E000000C; +160a : 29610030; +160b : 2821000C; +160c : 28220010; +160d : 340100FF; +160e : 44410005; +160f : 29620024; +1610 : 34010002; +1611 : 340C0000; +1612 : 5C410004; +1613 : 34010004; +1614 : 59610004; +1615 : 340C0000; +1616 : B9600800; +1617 : 34020003; +1618 : 34030001; +1619 : 34040000; +161a : FBFFEDF7; +161b : 59610008; +161c : B9800800; +161d : 2B9D0004; +161e : 2B8B0010; +161f : 2B8C000C; +1620 : 2B8D0008; +1621 : 379C0010; +1622 : C3A00000; +1623 : 379CFFF8; +1624 : 5B8B0008; +1625 : 5B9D0004; +1626 : 402403A1; +1627 : B8205800; +1628 : 44800005; +1629 : 3405000B; +162a : 5C850005; +162b : FBFFFE50; +162c : E0000002; +162d : F800018F; +162e : 5C200003; +162f : B9600800; +1630 : F80000E4; +1631 : 340103E8; +1632 : 59610008; +1633 : 34010000; +1634 : 2B9D0004; +1635 : 2B8B0008; +1636 : 379C0008; +1637 : C3A00000; +1638 : 379CFFF8; +1639 : 5B8B0008; +163a : 5B9D0004; +163b : 402403A1; +163c : B8205800; +163d : 44800007; +163e : 34050008; +163f : 44850007; +1640 : 3405000B; +1641 : 5C850007; +1642 : FBFFFE39; +1643 : E0000004; +1644 : F80000FD; +1645 : E0000002; +1646 : F8000134; +1647 : 5C200004; +1648 : B9600800; +1649 : F80000CB; +164a : 44200003; +164b : 34010002; +164c : 59610004; +164d : 340103E8; +164e : 59610008; +164f : 34010000; +1650 : 2B9D0004; +1651 : 2B8B0008; +1652 : 379C0008; +1653 : C3A00000; +1654 : 379CFFD4; +1655 : 5B8B000C; +1656 : 5B8C0008; +1657 : 5B9D0004; +1658 : B8205800; +1659 : B8400800; +165a : 37820010; +165b : F8000482; +165c : 29610358; +165d : 37820020; +165e : 34030008; +165f : F8004156; +1660 : 5C20000B; +1661 : 2D620380; +1662 : 2D6103CA; +1663 : 5C410008; +1664 : 29610358; +1665 : 2C220008; +1666 : 2F810028; +1667 : 5C410004; +1668 : 41610020; +1669 : 20210001; +166a : 5C20000A; +166b : 41650020; +166c : 78040001; +166d : B9600800; +166e : 34020005; +166f : 34030001; +1670 : 3884771C; +1671 : FBFFEC68; +1672 : 340C0000; +1673 : E0000022; +1674 : 2B810010; +1675 : 356203B0; +1676 : 596100C8; +1677 : 2B810014; +1678 : 596100CC; +1679 : 2B810018; +167a : 596100D0; +167b : 2B81001C; +167c : 596100D4; +167d : 356100C8; +167e : F80005C4; +167f : B9600800; +1680 : 34020004; +1681 : FBFFECD8; +1682 : 78010001; +1683 : 38219F04; +1684 : 28220018; +1685 : 44400006; +1686 : B9600800; +1687 : D8400000; +1688 : B8206000; +1689 : 44200004; +168a : E000000B; +168b : B9600800; +168c : F80007F5; +168d : 29610358; +168e : 116203CC; +168f : 340C0000; +1690 : 1023000A; +1691 : 44620004; +1692 : 3022000A; +1693 : B9600800; +1694 : FBFFEC89; +1695 : B9800800; +1696 : 2B9D0004; +1697 : 2B8B000C; +1698 : 2B8C0008; +1699 : 379C002C; +169a : C3A00000; +169b : 379CFFEC; +169c : 5B8B0014; +169d : 5B8C0010; +169e : 5B8D000C; +169f : 5B8E0008; +16a0 : 5B9D0004; +16a1 : B8205800; +16a2 : 2821000C; +16a3 : B8407000; +16a4 : B8606800; +16a5 : 44200011; +16a6 : 34020000; +16a7 : 34030010; +16a8 : 35610098; +16a9 : F80041AB; +16aa : B9600800; +16ab : F800074C; +16ac : 78010001; +16ad : 38219F04; +16ae : 28240014; +16af : 44800007; +16b0 : B9600800; +16b1 : B9C01000; +16b2 : B9A01800; +16b3 : D8800000; +16b4 : B8206000; +16b5 : 5C20001B; +16b6 : B9600800; +16b7 : FBFFFD9D; +16b8 : 416503A1; +16b9 : 3401000B; +16ba : 54A1000C; +16bb : 78010001; +16bc : 3CA20002; +16bd : 38219224; +16be : B4220800; +16bf : 28240000; +16c0 : 44800006; +16c1 : B9600800; +16c2 : B9C01000; +16c3 : B9A01800; +16c4 : D8800000; +16c5 : E0000008; +16c6 : 45A00007; +16c7 : 78040001; +16c8 : B9600800; +16c9 : 34020005; +16ca : 34030001; +16cb : 38847708; +16cc : FBFFEC0D; +16cd : B9600800; +16ce : F8000046; +16cf : B8206000; +16d0 : 7D810001; +16d1 : 29620004; +16d2 : C8010800; +16d3 : A1816000; +16d4 : 29610000; +16d5 : 44410004; +16d6 : B9600800; +16d7 : F8000720; +16d8 : E0000006; +16d9 : B9600800; +16da : 34020002; +16db : 34030000; +16dc : FBFFED14; +16dd : 59610008; +16de : B9800800; +16df : 2B9D0004; +16e0 : 2B8B0014; +16e1 : 2B8C0010; +16e2 : 2B8D000C; +16e3 : 2B8E0008; +16e4 : 379C0014; +16e5 : C3A00000; +16e6 : 379CFFFC; +16e7 : 5B9D0004; +16e8 : 34030030; +16e9 : F80040ED; +16ea : 2B9D0004; +16eb : 379C0004; +16ec : C3A00000; +16ed : 28220028; +16ee : 34030001; +16ef : 4443000A; +16f0 : 34030002; +16f1 : 44430003; +16f2 : 5C400009; +16f3 : E0000006; +16f4 : 34020012; +16f5 : 58220084; +16f6 : 3402000E; +16f7 : 58220088; +16f8 : E0000003; +16f9 : 58200084; +16fa : 58200088; +16fb : 28240084; +16fc : 2825003C; +16fd : 34020000; +16fe : B4A42800; +16ff : 20A30003; +1700 : 44600003; +1701 : 34020004; +1702 : C8431000; +1703 : B4A22800; +1704 : 28260040; +1705 : 28220088; +1706 : 5825004C; +1707 : 34030000; +1708 : B4C23000; +1709 : 20C70003; +170a : 44E00003; +170b : 34030004; +170c : C8671800; +170d : B4C31800; +170e : C8A42000; +170f : C8621000; +1710 : 58230050; +1711 : 58240044; +1712 : 58220048; +1713 : C3A00000; +1714 : 379CFFF8; +1715 : 5B8B0008; +1716 : 5B9D0004; +1717 : 78020001; +1718 : 38429F04; +1719 : 28420020; +171a : B8205800; +171b : 44400006; +171c : D8400000; +171d : B8201000; +171e : 34010001; +171f : 4441001C; +1720 : 4802001C; +1721 : B9600800; +1722 : 34020002; +1723 : FBFFEC94; +1724 : 5C200006; +1725 : 34020004; +1726 : B9600800; +1727 : FBFFEC90; +1728 : 34020000; +1729 : 44220013; +172a : 29610030; +172b : 0D600120; +172c : 2821000C; +172d : 28220010; +172e : 340100FF; +172f : 44410007; +1730 : 29620024; +1731 : 34010002; +1732 : 44410004; +1733 : 34010006; +1734 : 59610004; +1735 : E0000006; +1736 : 34010004; +1737 : 59610004; +1738 : 34020002; +1739 : B9600800; +173a : FBFFEC1F; +173b : 34020000; +173c : B8400800; +173d : 2B9D0004; +173e : 2B8B0008; +173f : 379C0008; +1740 : C3A00000; +1741 : 379CFFE8; +1742 : 5B8B0008; +1743 : 5B9D0004; +1744 : B8205800; +1745 : B8400800; +1746 : 41620020; +1747 : 20420001; +1748 : 4440002D; +1749 : 2962010C; +174a : 29650100; +174b : 29640104; +174c : 29630108; +174d : 596200B4; +174e : 596500A8; +174f : 3782000C; +1750 : 596400AC; +1751 : 596300B0; +1752 : F800034B; +1753 : 416203A7; +1754 : 41610020; +1755 : 20420002; +1756 : 4440000E; +1757 : 38210002; +1758 : 31610020; +1759 : 2D6103CA; +175a : 296403B0; +175b : 296303B4; +175c : 0D61037C; +175d : 296203B8; +175e : 296103BC; +175f : 59640098; +1760 : 5963009C; +1761 : 596200A0; +1762 : 596100A4; +1763 : E0000012; +1764 : 202100FD; +1765 : 31610020; +1766 : 2B81000C; +1767 : 356203B0; +1768 : 59610098; +1769 : 2B810010; +176a : 5961009C; +176b : 2B810014; +176c : 596100A0; +176d : 2B810018; +176e : 596100A4; +176f : 35610098; +1770 : F80004D2; +1771 : B9600800; +1772 : 596000F8; +1773 : 596000FC; +1774 : F80006FB; +1775 : 34010000; +1776 : 2B9D0004; +1777 : 2B8B0008; +1778 : 379C0018; +1779 : C3A00000; +177a : 379CFFE0; +177b : 5B8B0010; +177c : 5B8C000C; +177d : 5B8D0008; +177e : 5B9D0004; +177f : B8205800; +1780 : B8400800; +1781 : 41620020; +1782 : 20430001; +1783 : 5C600004; +1784 : 78010001; +1785 : 382177B8; +1786 : E0000005; +1787 : 20420002; +1788 : 5C400007; +1789 : 78010001; +178a : 382177F4; +178b : 78020001; +178c : 38429254; +178d : F8002091; +178e : E0000027; +178f : 2D64037C; +1790 : 2D6303CA; +1791 : 44830007; +1792 : 78010001; +1793 : 78020001; +1794 : 38429254; +1795 : 3821782C; +1796 : F8002088; +1797 : E000001E; +1798 : 378D0014; +1799 : B9A01000; +179a : F8000339; +179b : 41610020; +179c : 356C0098; +179d : B9A01000; +179e : 202100FD; +179f : 31610020; +17a0 : B9800800; +17a1 : F80004A1; +17a2 : B9800800; +17a3 : 356203B0; +17a4 : F800049E; +17a5 : 296103B8; +17a6 : 596100F8; +17a7 : 296103BC; +17a8 : 596100FC; +17a9 : 78010001; +17aa : 38219F04; +17ab : 28230028; +17ac : 44600007; +17ad : B9801000; +17ae : B9600800; +17af : D8600000; +17b0 : 34020001; +17b1 : 44220004; +17b2 : 48010004; +17b3 : B9600800; +17b4 : F80006BB; +17b5 : 34010000; +17b6 : 2B9D0004; +17b7 : 2B8B0010; +17b8 : 2B8C000C; +17b9 : 2B8D0008; +17ba : 379C0020; +17bb : C3A00000; +17bc : 34010000; +17bd : C3A00000; +17be : 379CFFE8; +17bf : 5B8B0018; +17c0 : 5B8C0014; +17c1 : 5B8D0010; +17c2 : 5B8E000C; +17c3 : 5B9D0008; +17c4 : B8406000; +17c5 : 2822004C; +17c6 : B8607000; +17c7 : 28230084; +17c8 : 404D0000; +17c9 : 28220034; +17ca : B5831800; +17cb : 21AD000F; +17cc : 2845000C; +17cd : 28220044; +17ce : B9A02000; +17cf : B8205800; +17d0 : D8A00000; +17d1 : B8201000; +17d2 : 3403FFFE; +17d3 : 34010000; +17d4 : 4443002F; +17d5 : 78090001; +17d6 : 39299768; +17d7 : 09A1000C; +17d8 : 4C4C000C; +17d9 : B5214800; +17da : 29250000; +17db : 78040001; +17dc : B9600800; +17dd : 34020005; +17de : 34030001; +17df : 3884786C; +17e0 : B9A03000; +17e1 : FBFFEAF8; +17e2 : 3401FFFF; +17e3 : E0000020; +17e4 : 2968011C; +17e5 : 296A0118; +17e6 : B5214800; +17e7 : 01070010; +17e8 : 2108FFFF; +17e9 : 090803E8; +17ea : 29210000; +17eb : 3D4A0010; +17ec : 29660114; +17ed : 78040001; +17ee : 01080010; +17ef : 5B810004; +17f0 : 34020005; +17f1 : B9600800; +17f2 : 34030001; +17f3 : 3884788C; +17f4 : B9802800; +17f5 : B9473800; +17f6 : FBFFEAE3; +17f7 : 34010001; +17f8 : 5DC10005; +17f9 : 11620110; +17fa : 34010080; +17fb : 204200C0; +17fc : 44410006; +17fd : 29610410; +17fe : 34210001; +17ff : 59610410; +1800 : 34010000; +1801 : E0000002; +1802 : 34010001; +1803 : 2B9D0008; +1804 : 2B8B0018; +1805 : 2B8C0014; +1806 : 2B8D0010; +1807 : 2B8E000C; +1808 : 379C0018; +1809 : C3A00000; +180a : 379CFFFC; +180b : 5B9D0004; +180c : 34030008; +180d : F8003FA8; +180e : 2B9D0004; +180f : 379C0004; +1810 : C3A00000; +1811 : 379CFFE0; +1812 : 5B8B0020; +1813 : 5B8C001C; +1814 : 5B8D0018; +1815 : 5B8E0014; +1816 : 5B8F0010; +1817 : 5B90000C; +1818 : 5B910008; +1819 : 5B9D0004; +181a : 780E0001; +181b : 39CE9274; +181c : 78040001; +181d : B8406800; +181e : B8606000; +181f : 34020003; +1820 : 34030002; +1821 : 388479E8; +1822 : B9C02800; +1823 : B8207800; +1824 : 35B10029; +1825 : FBFFEAB4; +1826 : 35900029; +1827 : BA200800; +1828 : BA001000; +1829 : FBFFFFE1; +182a : 5C200033; +182b : 2D810032; +182c : 2DAB0032; +182d : C9615800; +182e : 35620001; +182f : 34010002; +1830 : 54410043; +1831 : 29E20030; +1832 : 34030001; +1833 : 35A10060; +1834 : 28420014; +1835 : 5D63000B; +1836 : FBFFFFD4; +1837 : 5C20003C; +1838 : 78040001; +1839 : B9E00800; +183a : 34020003; +183b : 34030001; +183c : 388478B4; +183d : B9C02800; +183e : 34060090; +183f : E000000E; +1840 : 3403FFFF; +1841 : 358C0060; +1842 : 5D63000E; +1843 : B9800800; +1844 : FBFFFFC6; +1845 : 5C20002E; +1846 : 78040001; +1847 : B9E00800; +1848 : 34020003; +1849 : 34030001; +184a : 388478B4; +184b : B9C02800; +184c : 34060099; +184d : FBFFEA8C; +184e : 340B0000; +184f : E0000024; +1850 : B9801000; +1851 : FBFFFFB9; +1852 : B8205800; +1853 : 5C200020; +1854 : 78040001; +1855 : B9E00800; +1856 : 34020003; +1857 : 34030001; +1858 : 388478C4; +1859 : B9C02800; +185a : 340600A1; +185b : FBFFEA7E; +185c : E0000017; +185d : 41AB001A; +185e : 4181001A; +185f : 5D61000E; +1860 : 29AB001C; +1861 : 2981001C; +1862 : 5D61000B; +1863 : 29AB0020; +1864 : 29810020; +1865 : 5D610008; +1866 : 29A20024; +1867 : 29810024; +1868 : 340B0000; +1869 : 5C41000A; +186a : 41AB0028; +186b : 41810028; +186c : 45610003; +186d : C9615800; +186e : E0000005; +186f : BA200800; +1870 : BA001000; +1871 : FBFFFF99; +1872 : B8205800; +1873 : B9600800; +1874 : 2B9D0004; +1875 : 2B8B0020; +1876 : 2B8C001C; +1877 : 2B8D0018; +1878 : 2B8E0014; +1879 : 2B8F0010; +187a : 2B90000C; +187b : 2B910008; +187c : 379C0020; +187d : C3A00000; +187e : 379CFFFC; +187f : 5B9D0004; +1880 : 34020000; +1881 : 34030010; +1882 : F8003FD2; +1883 : 2B9D0004; +1884 : 379C0004; +1885 : C3A00000; +1886 : 379CFFF0; +1887 : 5B8B0010; +1888 : 5B8C000C; +1889 : 5B8D0008; +188a : 5B9D0004; +188b : B8206800; +188c : 28210030; +188d : 282C0014; +188e : 282B000C; +188f : 28210010; +1890 : 0C200000; +1891 : 34210008; +1892 : FBFFFFEC; +1893 : 29A10030; +1894 : 28210010; +1895 : 34210018; +1896 : FBFFFFE8; +1897 : B9800800; +1898 : 34020000; +1899 : 34030028; +189a : F8003FBA; +189b : 29610004; +189c : 59810000; +189d : 29610008; +189e : 0D800008; +189f : 59810004; +18a0 : 29610004; +18a1 : 59810010; +18a2 : 29610008; +18a3 : 59810014; +18a4 : 29620014; +18a5 : 29610018; +18a6 : 29630010; +18a7 : 5982001C; +18a8 : 59810020; +18a9 : 59830018; +18aa : 4161001C; +18ab : 34020001; +18ac : 31810024; +18ad : 4161001D; +18ae : 31810025; +18af : 29A10030; +18b0 : 28210018; +18b1 : 58220018; +18b2 : 3402FFA0; +18b3 : 3022001C; +18b4 : 2B9D0004; +18b5 : 2B8B0010; +18b6 : 2B8C000C; +18b7 : 2B8D0008; +18b8 : 379C0010; +18b9 : C3A00000; +18ba : 379CFF74; +18bb : 5B8B0018; +18bc : 5B8C0014; +18bd : 5B8D0010; +18be : 5B8E000C; +18bf : 5B8F0008; +18c0 : 5B9D0004; +18c1 : 2C220120; +18c2 : B8205800; +18c3 : 340D0000; +18c4 : 340C0001; +18c5 : 5C400014; +18c6 : 28230000; +18c7 : B8406800; +18c8 : 34020006; +18c9 : 5C620010; +18ca : FBFFFFBC; +18cb : 296C0000; +18cc : E0000113; +18cd : 09820070; +18ce : 09A30070; +18cf : B9600800; +18d0 : 34420128; +18d1 : 34630128; +18d2 : B5621000; +18d3 : B5631800; +18d4 : FBFFFF3D; +18d5 : 48010002; +18d6 : E0000002; +18d7 : B9806800; +18d8 : 358C0001; +18d9 : 2D660120; +18da : 48CCFFF3; +18db : 78040001; +18dc : B9600800; +18dd : 34020003; +18de : 34030001; +18df : 388478DC; +18e0 : B9A02800; +18e1 : FBFFE9F8; +18e2 : 1D610122; +18e3 : 442D0022; +18e4 : 0D6D0122; +18e5 : 296C0030; +18e6 : 340F0000; +18e7 : 340E0001; +18e8 : E0000015; +18e9 : 29820000; +18ea : 09C10418; +18eb : B4410800; +18ec : 2C230120; +18ed : 4460000F; +18ee : 09E40418; +18ef : 1C230122; +18f0 : B4442000; +18f1 : 1C820122; +18f2 : 08630070; +18f3 : 08420070; +18f4 : 34630128; +18f5 : B4231800; +18f6 : 34420128; +18f7 : B4821000; +18f8 : FBFFFF19; +18f9 : 48010002; +18fa : E0000002; +18fb : B9C07800; +18fc : 35CE0001; +18fd : 2981000C; +18fe : 2C21000C; +18ff : 482EFFEA; +1900 : 2981001C; +1901 : 442F0004; +1902 : 34010001; +1903 : 598F001C; +1904 : 59810020; +1905 : 29620024; +1906 : 34010002; +1907 : 4441006C; +1908 : 2D610120; +1909 : 5C200004; +190a : 29610000; +190b : 340C0004; +190c : 442C00D3; +190d : 29610030; +190e : 09AC0070; +190f : 2821000C; +1910 : 40240009; +1911 : 4023000A; +1912 : 4022000B; +1913 : 40290004; +1914 : 40280005; +1915 : 40270006; +1916 : 40260007; +1917 : 40250008; +1918 : 33890049; +1919 : 3388004A; +191a : 3387004B; +191b : 3386004C; +191c : 3385004D; +191d : 3384004E; +191e : 3383004F; +191f : 33820050; +1920 : 28220018; +1921 : 28240010; +1922 : 28230014; +1923 : 5B820044; +1924 : 4022001C; +1925 : 5B830040; +1926 : 35830128; +1927 : 3382003A; +1928 : 4022001D; +1929 : B5631800; +192a : 5B84003C; +192b : 33820048; +192c : 28220004; +192d : 0F800052; +192e : 5B820080; +192f : 28210008; +1930 : 37820020; +1931 : 5B810084; +1932 : B9600800; +1933 : FBFFFEDE; +1934 : 29620024; +1935 : 34040001; +1936 : 4444002A; +1937 : 29620030; +1938 : 78050001; +1939 : 3406007F; +193a : 2843000C; +193b : 38A59284; +193c : 28670010; +193d : 48E60004; +193e : 48010023; +193f : 5C200019; +1940 : E0000006; +1941 : 48010020; +1942 : 44200004; +1943 : 2C61000C; +1944 : 5C24000A; +1945 : E000002E; +1946 : 78040001; +1947 : B9600800; +1948 : 34020003; +1949 : 34030001; +194a : 388478FC; +194b : FBFFE98E; +194c : 340C0002; +194d : E0000092; +194e : 296303D8; +194f : 2841001C; +1950 : 44610023; +1951 : B56C1000; +1952 : 37810049; +1953 : 34420151; +1954 : 5B85001C; +1955 : FBFFFEB5; +1956 : 2B85001C; +1957 : 5C200010; +1958 : 78040001; +1959 : B9600800; +195a : 34020003; +195b : 34030001; +195c : 38847908; +195d : FBFFE97C; +195e : 340C0007; +195f : E0000080; +1960 : 4C200007; +1961 : B9600800; +1962 : FBFFFF24; +1963 : 78060001; +1964 : 340C0006; +1965 : 38C680E0; +1966 : E0000004; +1967 : 78060001; +1968 : 340C0005; +1969 : 38C678D4; +196a : 78040001; +196b : 78050001; +196c : B9600800; +196d : 34020003; +196e : 34030001; +196f : 38847918; +1970 : 38A59284; +1971 : FBFFE968; +1972 : E000006D; +1973 : 09A30070; +1974 : 29620030; +1975 : B5631800; +1976 : 2C64015A; +1977 : 28410014; +1978 : 284C0018; +1979 : 28420010; +197a : 34840001; +197b : 0C440000; +197c : 34620188; +197d : 28440004; +197e : 28650188; +197f : 58240004; +1980 : 58250000; +1981 : 2C420008; +1982 : 0C220008; +1983 : 34620148; +1984 : 404E0009; +1985 : 4046000E; +1986 : 4045000F; +1987 : 40440010; +1988 : 404A000A; +1989 : 4049000B; +198a : 4048000C; +198b : 4047000D; +198c : 302E0010; +198d : 30240017; +198e : 302A0011; +198f : 30290012; +1990 : 30280013; +1991 : 30270014; +1992 : 30260015; +1993 : 30250016; +1994 : 34640140; +1995 : 28850008; +1996 : 28860004; +1997 : 2884000C; +1998 : 346E0138; +1999 : 5825001C; +199a : 58260018; +199b : 58240020; +199c : 41C4000A; +199d : 30240024; +199e : 40420008; +199f : 30220025; +19a0 : 4061015C; +19a1 : 3181001C; +19a2 : 1DC50008; +19a3 : 1D810000; +19a4 : 4425000E; +19a5 : 78040001; +19a6 : B9600800; +19a7 : 34020003; +19a8 : 34030001; +19a9 : 38847928; +19aa : FBFFE92F; +19ab : 2DC10008; +19ac : 34020000; +19ad : 0D810000; +19ae : 29610038; +19af : 28230004; +19b0 : B9600800; +19b1 : D8600000; +19b2 : 09AD0070; +19b3 : B56D0800; +19b4 : 34210169; +19b5 : 40220007; +19b6 : 20420004; +19b7 : 7C420000; +19b8 : 59820004; +19b9 : 40220007; +19ba : 20420002; +19bb : 7C420000; +19bc : 59820008; +19bd : 40220007; +19be : 20420001; +19bf : 5982000C; +19c0 : 40220007; +19c1 : 20420010; +19c2 : 7C420000; +19c3 : 59820010; +19c4 : 40220007; +19c5 : 20420020; +19c6 : 7C420000; +19c7 : 59820014; +19c8 : 40210007; +19c9 : 20210008; +19ca : 7C210000; +19cb : 59810018; +19cc : 78010001; +19cd : 38219F04; +19ce : 2824001C; +19cf : 44800007; +19d0 : 35A20168; +19d1 : B56D6800; +19d2 : B9600800; +19d3 : B5621000; +19d4 : 35A30134; +19d5 : D8800000; +19d6 : 78040001; +19d7 : 78050001; +19d8 : B9600800; +19d9 : 34020003; +19da : 34030001; +19db : 3884793C; +19dc : 38A59284; +19dd : FBFFE8FC; +19de : 340C0009; +19df : B9800800; +19e0 : 2B9D0004; +19e1 : 2B8B0018; +19e2 : 2B8C0014; +19e3 : 2B8D0010; +19e4 : 2B8E000C; +19e5 : 2B8F0008; +19e6 : 379C008C; +19e7 : C3A00000; +19e8 : 379CFFE8; +19e9 : 5B8B0018; +19ea : 5B8C0014; +19eb : 5B8D0010; +19ec : 5B8E000C; +19ed : 5B8F0008; +19ee : 5B9D0004; +19ef : B8206800; +19f0 : 282B004C; +19f1 : 3401000F; +19f2 : 340F0000; +19f3 : 54410021; +19f4 : 084E000C; +19f5 : 78010001; +19f6 : 38219768; +19f7 : B42E7000; +19f8 : 2DCF0004; +19f9 : 41CC0009; +19fa : 35610008; +19fb : 31620000; +19fc : 0D6F0002; +19fd : 34020000; +19fe : 34030008; +19ff : F8003E55; +1a00 : 0D600006; +1a01 : 41C10008; +1a02 : 31610020; +1a03 : 34010001; +1a04 : 45810008; +1a05 : 45800004; +1a06 : 34010002; +1a07 : 5D81000C; +1a08 : E0000008; +1a09 : 29A10358; +1a0a : 4021000B; +1a0b : E0000003; +1a0c : 29A10358; +1a0d : 4021000D; +1a0e : 31610021; +1a0f : E0000005; +1a10 : 29A10358; +1a11 : 4021000A; +1a12 : E3FFFFFC; +1a13 : 316C0021; +1a14 : B9E00800; +1a15 : 2B9D0004; +1a16 : 2B8B0018; +1a17 : 2B8C0014; +1a18 : 2B8D0010; +1a19 : 2B8E000C; +1a1a : 2B8F0008; +1a1b : 379C0018; +1a1c : C3A00000; +1a1d : 379CFFF0; +1a1e : 5B8B0010; +1a1f : 5B8C000C; +1a20 : 5B8D0008; +1a21 : 5B9D0004; +1a22 : B8205800; +1a23 : 40410000; +1a24 : B8406000; +1a25 : 34030002; +1a26 : 00210004; +1a27 : 356D03C0; +1a28 : 316103A0; +1a29 : 40410000; +1a2a : 2021000F; +1a2b : 316103A1; +1a2c : 40410001; +1a2d : 2021000F; +1a2e : 316103A2; +1a2f : 2C410002; +1a30 : 0D6103A4; +1a31 : 40410004; +1a32 : 34420006; +1a33 : 316103A6; +1a34 : 356103A7; +1a35 : F8003DA1; +1a36 : 29820008; +1a37 : 2981000C; +1a38 : 34030008; +1a39 : 596203B8; +1a3a : 596103BC; +1a3b : 35820014; +1a3c : 596003B0; +1a3d : 596003B4; +1a3e : B9A00800; +1a3f : F8003D97; +1a40 : 2D81001C; +1a41 : 0D6103C8; +1a42 : 2D81001E; +1a43 : 0D6103CA; +1a44 : 41810021; +1a45 : 316103CC; +1a46 : 29610030; +1a47 : 28210014; +1a48 : 2C220008; +1a49 : 4440000A; +1a4a : B9A01000; +1a4b : 34030008; +1a4c : F8003D69; +1a4d : 5C200009; +1a4e : 29610030; +1a4f : 28210014; +1a50 : 2C220008; +1a51 : 2D6103C8; +1a52 : 5C410004; +1a53 : 41610020; +1a54 : 38210001; +1a55 : E0000003; +1a56 : 41610020; +1a57 : 202100FE; +1a58 : 31610020; +1a59 : 34010000; +1a5a : 2B9D0004; +1a5b : 2B8B0010; +1a5c : 2B8C000C; +1a5d : 2B8D0008; +1a5e : 379C0010; +1a5f : C3A00000; +1a60 : 379CFFF4; +1a61 : 5B8B000C; +1a62 : 5B8C0008; +1a63 : 5B9D0004; +1a64 : 34030022; +1a65 : B8205800; +1a66 : B8406000; +1a67 : B8400800; +1a68 : 34020000; +1a69 : F8003DEB; +1a6a : 29610358; +1a6b : 34030008; +1a6c : 4021000E; +1a6d : 31810001; +1a6e : 29610030; +1a6f : 2821000C; +1a70 : 4021001E; +1a71 : 31810004; +1a72 : 29620358; +1a73 : 35810014; +1a74 : F8003D62; +1a75 : 29610358; +1a76 : 2C210008; +1a77 : 0D81001C; +1a78 : 2B9D0004; +1a79 : 2B8B000C; +1a7a : 2B8C0008; +1a7b : 379C000C; +1a7c : C3A00000; +1a7d : 379CFFF0; +1a7e : 5B8B0010; +1a7f : 5B8C000C; +1a80 : 5B8D0008; +1a81 : 5B9D0004; +1a82 : B8405800; +1a83 : 34020000; +1a84 : 282D004C; +1a85 : B8206000; +1a86 : FBFFFF62; +1a87 : 2D82037E; +1a88 : 34420001; +1a89 : 0D82037E; +1a8a : 34020002; +1a8b : 31A20006; +1a8c : 2D82037E; +1a8d : 0DA2001E; +1a8e : 29630000; +1a8f : 29620004; +1a90 : 0DA30022; +1a91 : 59A20024; +1a92 : 29630008; +1a93 : 2D62000C; +1a94 : 3C630010; +1a95 : B8621000; +1a96 : 59A20028; +1a97 : 2B9D0004; +1a98 : 2B8B0010; +1a99 : 2B8C000C; +1a9a : 2B8D0008; +1a9b : 379C0010; +1a9c : C3A00000; +1a9d : 28230028; +1a9e : 2C240022; +1a9f : 28210024; +1aa0 : 58440000; +1aa1 : 58410004; +1aa2 : 00610010; +1aa3 : 3C630010; +1aa4 : 58410008; +1aa5 : 5843000C; +1aa6 : C3A00000; +1aa7 : 379CFFF4; +1aa8 : 5B8B000C; +1aa9 : 5B8C0008; +1aaa : 5B9D0004; +1aab : B8205800; +1aac : 2C210022; +1aad : B8406000; +1aae : 34030008; +1aaf : 0C410004; +1ab0 : 29610024; +1ab1 : 58410000; +1ab2 : 29610028; +1ab3 : 58410008; +1ab4 : 2D61002C; +1ab5 : 0C41000C; +1ab6 : 4161002F; +1ab7 : 3041000E; +1ab8 : 41610030; +1ab9 : 58410010; +1aba : 41610031; +1abb : 58410014; +1abc : 2D610032; +1abd : 58410018; +1abe : 41610034; +1abf : 3041001C; +1ac0 : 3441001D; +1ac1 : 35620035; +1ac2 : F8003D14; +1ac3 : 2D61003D; +1ac4 : 0D810026; +1ac5 : 4161003F; +1ac6 : 31810028; +1ac7 : 78010001; +1ac8 : 38219F04; +1ac9 : 28230038; +1aca : 44600004; +1acb : B9600800; +1acc : B9801000; +1acd : D8600000; +1ace : 2B9D0004; +1acf : 2B8B000C; +1ad0 : 2B8C0008; +1ad1 : 379C000C; +1ad2 : C3A00000; +1ad3 : 28230028; +1ad4 : 2C240022; +1ad5 : 28210024; +1ad6 : 58440000; +1ad7 : 58410004; +1ad8 : 00610010; +1ad9 : 3C630010; +1ada : 58410008; +1adb : 5843000C; +1adc : C3A00000; +1add : 379CFFF4; +1ade : 5B8B000C; +1adf : 5B8C0008; +1ae0 : 5B9D0004; +1ae1 : B8406000; +1ae2 : B8205800; +1ae3 : 2C220022; +1ae4 : 28210028; +1ae5 : 29630024; +1ae6 : 59820000; +1ae7 : 00220010; +1ae8 : 3C210010; +1ae9 : 59830004; +1aea : 59820008; +1aeb : 5981000C; +1aec : 3562002C; +1aed : 35810010; +1aee : 34030008; +1aef : F8003CE7; +1af0 : 2D610034; +1af1 : 0D810018; +1af2 : 2B9D0004; +1af3 : 2B8B000C; +1af4 : 2B8C0008; +1af5 : 379C000C; +1af6 : C3A00000; +1af7 : 379CFFD8; +1af8 : 5B8B0010; +1af9 : 5B8C000C; +1afa : 5B8D0008; +1afb : 5B9D0004; +1afc : 3402000B; +1afd : B8205800; +1afe : 282C004C; +1aff : FBFFFEE9; +1b00 : B8206800; +1b01 : 2D610394; +1b02 : 35850007; +1b03 : 37840014; +1b04 : 34210001; +1b05 : 0D610394; +1b06 : 29610030; +1b07 : 34020001; +1b08 : 28230018; +1b09 : 3461000C; +1b0a : 5B810014; +1b0b : 34610008; +1b0c : 5B810018; +1b0d : 34610004; +1b0e : 5B81001C; +1b0f : 34610018; +1b10 : 5B810020; +1b11 : 34610010; +1b12 : 34630014; +1b13 : 5B810024; +1b14 : 5B830028; +1b15 : 31800006; +1b16 : 31800007; +1b17 : 34030000; +1b18 : 34010006; +1b19 : 28860000; +1b1a : 28C60000; +1b1b : 44C00005; +1b1c : 40A70000; +1b1d : BC433000; +1b1e : B8C73000; +1b1f : 30A60000; +1b20 : 34630001; +1b21 : 34840004; +1b22 : 5C61FFF7; +1b23 : 2D610394; +1b24 : 34020000; +1b25 : 3403000A; +1b26 : 0D81001E; +1b27 : 35810022; +1b28 : F8003D2C; +1b29 : 29610030; +1b2a : 28220018; +1b2b : 28210014; +1b2c : 2C420000; +1b2d : 0D82002C; +1b2e : 40210024; +1b2f : 3181002F; +1b30 : 29610030; +1b31 : 28210014; +1b32 : 28210018; +1b33 : 31810030; +1b34 : 29610030; +1b35 : 28210014; +1b36 : 2821001C; +1b37 : 31810031; +1b38 : 29610030; +1b39 : 28230014; +1b3a : 28610020; +1b3b : 0D810032; +1b3c : 40610025; +1b3d : 34030008; +1b3e : 31810034; +1b3f : 29610030; +1b40 : 28220014; +1b41 : 35810035; +1b42 : 34420010; +1b43 : F8003C93; +1b44 : 29610030; +1b45 : 78030001; +1b46 : 38639F04; +1b47 : 28220010; +1b48 : 28210018; +1b49 : 2C420000; +1b4a : 0D82003D; +1b4b : 4021001C; +1b4c : 3181003F; +1b4d : 28630034; +1b4e : 44600004; +1b4f : B9600800; +1b50 : D8600000; +1b51 : B8206800; +1b52 : B9600800; +1b53 : B9A01000; +1b54 : 34030000; +1b55 : FBFFFC69; +1b56 : 2B9D0004; +1b57 : 2B8B0010; +1b58 : 2B8C000C; +1b59 : 2B8D0008; +1b5a : 379C0028; +1b5b : C3A00000; +1b5c : 379CFFE4; +1b5d : 5B8B000C; +1b5e : 5B8C0008; +1b5f : 5B9D0004; +1b60 : 28220038; +1b61 : 378C0010; +1b62 : B8205800; +1b63 : 28430000; +1b64 : B9801000; +1b65 : D8600000; +1b66 : B9801000; +1b67 : B9600800; +1b68 : FBFFFF15; +1b69 : B8201000; +1b6a : 34030001; +1b6b : B9600800; +1b6c : FBFFFC52; +1b6d : 5C200017; +1b6e : 34020008; +1b6f : B9600800; +1b70 : 296C004C; +1b71 : FBFFFE77; +1b72 : B8201000; +1b73 : 2D61037E; +1b74 : 0D81001E; +1b75 : 29630110; +1b76 : 29610114; +1b77 : 0D830022; +1b78 : 59810024; +1b79 : 2961011C; +1b7a : 29640118; +1b7b : 00230010; +1b7c : 3C840010; +1b7d : 2021FFFF; +1b7e : B8831800; +1b7f : 59830028; +1b80 : 5981000C; +1b81 : 34030000; +1b82 : B9600800; +1b83 : FBFFFC3B; +1b84 : 2B9D0004; +1b85 : 2B8B000C; +1b86 : 2B8C0008; +1b87 : 379C001C; +1b88 : C3A00000; +1b89 : 379CFFE4; +1b8a : 5B8B000C; +1b8b : 5B8C0008; +1b8c : 5B9D0004; +1b8d : 28220038; +1b8e : B8205800; +1b8f : 28430000; +1b90 : 37820010; +1b91 : D8600000; +1b92 : B9600800; +1b93 : 34020001; +1b94 : 296C004C; +1b95 : FBFFFE53; +1b96 : B8201000; +1b97 : 2D610380; +1b98 : 34210001; +1b99 : 2021FFFF; +1b9a : 0D610380; +1b9b : 0D81001E; +1b9c : 2B810014; +1b9d : 2B830010; +1b9e : 59810024; +1b9f : 0D830022; +1ba0 : 2B810018; +1ba1 : 2F83001C; +1ba2 : 3C210010; +1ba3 : B8231800; +1ba4 : 59830028; +1ba5 : B9600800; +1ba6 : 34030001; +1ba7 : FBFFFC17; +1ba8 : 2B9D0004; +1ba9 : 2B8B000C; +1baa : 2B8C0008; +1bab : 379C001C; +1bac : C3A00000; +1bad : 379CFFEC; +1bae : 5B8B0014; +1baf : 5B8C0010; +1bb0 : 5B8D000C; +1bb1 : 5B8E0008; +1bb2 : 5B9D0004; +1bb3 : 282B004C; +1bb4 : B8406800; +1bb5 : 34020009; +1bb6 : B8206000; +1bb7 : FBFFFE31; +1bb8 : 59600008; +1bb9 : 29A3000C; +1bba : B8207000; +1bbb : 29A10008; +1bbc : 2062FFFF; +1bbd : 5962000C; +1bbe : 2D8203CA; +1bbf : 3C210010; +1bc0 : 00630010; +1bc1 : 0D62001E; +1bc2 : 29A20000; +1bc3 : 29A40004; +1bc4 : B8231800; +1bc5 : 0D620022; +1bc6 : 59640024; +1bc7 : 59630028; +1bc8 : 358203C0; +1bc9 : 3561002C; +1bca : 34030008; +1bcb : F8003C0B; +1bcc : 2D8103C8; +1bcd : B9C01000; +1bce : 34030000; +1bcf : 0D610034; +1bd0 : B9800800; +1bd1 : FBFFFBED; +1bd2 : 2B9D0004; +1bd3 : 2B8B0014; +1bd4 : 2B8C0010; +1bd5 : 2B8D000C; +1bd6 : 2B8E0008; +1bd7 : 379C0014; +1bd8 : C3A00000; +1bd9 : 379CFFE8; +1bda : 5B8B0018; +1bdb : 5B8C0014; +1bdc : 5B8D0010; +1bdd : 5B8E000C; +1bde : 5B8F0008; +1bdf : 5B9D0004; +1be0 : 28230000; +1be1 : B8205800; +1be2 : 28240004; +1be3 : 48030006; +1be4 : B8640800; +1be5 : 340D0000; +1be6 : 340C0001; +1be7 : 44200009; +1be8 : E000000E; +1be9 : 14620018; +1bea : 34010080; +1beb : 204200C0; +1bec : 340DFFFF; +1bed : 340CFFFF; +1bee : 5C410008; +1bef : E0000005; +1bf0 : 29620008; +1bf1 : 340DFFFF; +1bf2 : 340CFFFF; +1bf3 : 48220003; +1bf4 : 340D0000; +1bf5 : 340C0001; +1bf6 : B9A00800; +1bf7 : B9801000; +1bf8 : F8003AEB; +1bf9 : 2964000C; +1bfa : 29630008; +1bfb : 59610000; +1bfc : 59620004; +1bfd : B9A00800; +1bfe : B9801000; +1bff : F8003AE4; +1c00 : 59610008; +1c01 : 5962000C; +1c02 : 7804CA00; +1c03 : E000000F; +1c04 : 29660004; +1c05 : 29650000; +1c06 : 34213B9A; +1c07 : 34C3FFFF; +1c08 : F4C33000; +1c09 : 59630004; +1c0a : B4441800; +1c0b : F4431000; +1c0c : 34A5FFFF; +1c0d : B4C52800; +1c0e : B4410800; +1c0f : 59650000; +1c10 : 59610008; +1c11 : 5963000C; +1c12 : 29610008; +1c13 : 2962000C; +1c14 : 4801FFF0; +1c15 : E000000F; +1c16 : 29650004; +1c17 : 29660000; +1c18 : 35EFC465; +1c19 : 34A20001; +1c1a : F4A22800; +1c1b : 59620004; +1c1c : B5C31000; +1c1d : F5C27000; +1c1e : B4A62800; +1c1f : B5CF7000; +1c20 : 59650000; +1c21 : 596E0008; +1c22 : 5962000C; +1c23 : E0000004; +1c24 : 34013B9A; +1c25 : 7804CA00; +1c26 : 78033600; +1c27 : 296F0008; +1c28 : 296E000C; +1c29 : 49E1FFED; +1c2a : 5DE10002; +1c2b : 55C4FFEB; +1c2c : 29630000; +1c2d : 29640004; +1c2e : B9A00800; +1c2f : B9801000; +1c30 : F8003AB3; +1c31 : 59610000; +1c32 : 59620004; +1c33 : B9E00800; +1c34 : B9C01000; +1c35 : B9A01800; +1c36 : B9802000; +1c37 : F8003AAC; +1c38 : 59610008; +1c39 : 5962000C; +1c3a : 2B9D0004; +1c3b : 2B8B0018; +1c3c : 2B8C0014; +1c3d : 2B8D0010; +1c3e : 2B8E000C; +1c3f : 2B8F0008; +1c40 : 379C0018; +1c41 : C3A00000; +1c42 : 379CFFFC; +1c43 : 5B9D0004; +1c44 : 28460004; +1c45 : 28240004; +1c46 : 28470000; +1c47 : 28250000; +1c48 : B4C42000; +1c49 : F4C43000; +1c4a : B4E52800; +1c4b : B4C52800; +1c4c : 58250000; +1c4d : 58240004; +1c4e : 2844000C; +1c4f : 28450008; +1c50 : 2822000C; +1c51 : 28260008; +1c52 : B4821000; +1c53 : F4822000; +1c54 : B4A62800; +1c55 : B4852000; +1c56 : 58240008; +1c57 : 5822000C; +1c58 : FBFFFF81; +1c59 : 2B9D0004; +1c5a : 379C0004; +1c5b : C3A00000; +1c5c : 379CFFFC; +1c5d : 5B9D0004; +1c5e : 28440004; +1c5f : 28260004; +1c60 : 28450000; +1c61 : 28270000; +1c62 : C8C42000; +1c63 : F4863000; +1c64 : C8E52800; +1c65 : C8A62800; +1c66 : 58250000; +1c67 : 58240004; +1c68 : 28460008; +1c69 : 2825000C; +1c6a : 2842000C; +1c6b : 28240008; +1c6c : C8A21000; +1c6d : F4452800; +1c6e : C8862000; +1c6f : C8852000; +1c70 : 58240008; +1c71 : 5822000C; +1c72 : FBFFFF67; +1c73 : 2B9D0004; +1c74 : 379C0004; +1c75 : C3A00000; +1c76 : 379CFFE8; +1c77 : 5B8B0018; +1c78 : 5B8C0014; +1c79 : 5B8D0010; +1c7a : 5B8E000C; +1c7b : 5B8F0008; +1c7c : 5B9D0004; +1c7d : B8205800; +1c7e : 282F0008; +1c7f : 296C000C; +1c80 : 282D0000; +1c81 : 282E0004; +1c82 : 018C0001; +1c83 : 3DE1001F; +1c84 : 15EF0001; +1c85 : B82C6000; +1c86 : 15A2001F; +1c87 : 596F0008; +1c88 : 596C000C; +1c89 : 21C10001; +1c8a : 38420001; +1c8b : 4420000B; +1c8c : 1441001F; +1c8d : 34031DCD; +1c8e : 78046500; +1c8f : F8003A54; +1c90 : B44C6000; +1c91 : F44C1000; +1c92 : B42F0800; +1c93 : B4410800; +1c94 : 59610008; +1c95 : 596C000C; +1c96 : 3DA2001F; +1c97 : 01C10001; +1c98 : 15AD0001; +1c99 : B8410800; +1c9a : 596D0000; +1c9b : 59610004; +1c9c : 2B9D0004; +1c9d : 2B8B0018; +1c9e : 2B8C0014; +1c9f : 2B8D0010; +1ca0 : 2B8E000C; +1ca1 : 2B8F0008; +1ca2 : 379C0018; +1ca3 : C3A00000; +1ca4 : 379CFFF8; +1ca5 : 5B8B0008; +1ca6 : 5B9D0004; +1ca7 : 28220004; +1ca8 : 28250000; +1ca9 : 78030001; +1caa : C8022000; +1cab : 38637948; +1cac : 4805000C; +1cad : 78030001; +1cae : B8A22000; +1caf : 38637C58; +1cb0 : 5C800007; +1cb1 : 28250008; +1cb2 : 78030001; +1cb3 : 38637948; +1cb4 : 48850003; +1cb5 : 78030001; +1cb6 : 38637C58; +1cb7 : B8402000; +1cb8 : 28220008; +1cb9 : 2821000C; +1cba : 3C460010; +1cbb : 00250010; +1cbc : B8C52800; +1cbd : 14460010; +1cbe : 48060002; +1cbf : E0000008; +1cc0 : C8010800; +1cc1 : 7C250000; +1cc2 : C8021000; +1cc3 : C8452800; +1cc4 : 3CA50010; +1cc5 : 00210010; +1cc6 : B8A12800; +1cc7 : 780B0001; +1cc8 : 396BB5F0; +1cc9 : 78020001; +1cca : B9600800; +1ccb : 3842794C; +1ccc : F8001B44; +1ccd : B9600800; +1cce : 2B9D0004; +1ccf : 2B8B0008; +1cd0 : 379C0008; +1cd1 : C3A00000; +1cd2 : 379CFFCC; +1cd3 : 5B8B002C; +1cd4 : 5B8C0028; +1cd5 : 5B8D0024; +1cd6 : 5B8E0020; +1cd7 : 5B8F001C; +1cd8 : 5B900018; +1cd9 : 5B910014; +1cda : 5B920010; +1cdb : 5B93000C; +1cdc : 5B940008; +1cdd : 5B9D0004; +1cde : 284D0010; +1cdf : B8207000; +1ce0 : B8405800; +1ce1 : B8606000; +1ce2 : 28530014; +1ce3 : 49A0000C; +1ce4 : 5DA00002; +1ce5 : 5E6D000A; +1ce6 : 29810000; +1ce7 : 59610008; +1ce8 : 29810004; +1ce9 : 5961000C; +1cea : 29810000; +1ceb : 48010002; +1cec : E0000003; +1ced : 59600008; +1cee : 5960000C; +1cef : 29C10030; +1cf0 : 29720008; +1cf1 : 2971000C; +1cf2 : 28210008; +1cf3 : 340F003F; +1cf4 : 1C210018; +1cf5 : 3430FFFF; +1cf6 : C9E17800; +1cf7 : B9E01800; +1cf8 : BA400800; +1cf9 : BA201000; +1cfa : F8003A1F; +1cfb : B8220800; +1cfc : 36140001; +1cfd : 35EF0001; +1cfe : 3610FFFF; +1cff : 5C20FFF8; +1d00 : BA801800; +1d01 : 34020001; +1d02 : F8003A08; +1d03 : B8201800; +1d04 : 49A30004; +1d05 : 5DA30005; +1d06 : 56620002; +1d07 : E0000003; +1d08 : 59630010; +1d09 : 59620014; +1d0a : 29640010; +1d0b : 29650014; +1d0c : 48640004; +1d0d : 5C640008; +1d0e : 54450002; +1d0f : E0000006; +1d10 : 34A10001; +1d11 : F4A12800; +1d12 : 59610014; +1d13 : B4A42000; +1d14 : 59640010; +1d15 : 29810000; +1d16 : 48010002; +1d17 : E0000003; +1d18 : 59920000; +1d19 : 59910004; +1d1a : 29810000; +1d1b : 48010002; +1d1c : E0000003; +1d1d : 59800000; +1d1e : 59800004; +1d1f : 2963000C; +1d20 : 29660008; +1d21 : 29810000; +1d22 : 3C620001; +1d23 : 3CC50001; +1d24 : F4623800; +1d25 : B4431800; +1d26 : B4E52800; +1d27 : F4431000; +1d28 : B4A62800; +1d29 : B4451000; +1d2a : 29840004; +1d2b : 48220004; +1d2c : 5C22001D; +1d2d : 54830002; +1d2e : E000001B; +1d2f : 3C260010; +1d30 : 00850010; +1d31 : 78040001; +1d32 : B9C00800; +1d33 : 34020004; +1d34 : 34030001; +1d35 : 38847958; +1d36 : B8C52800; +1d37 : FBFFE5A2; +1d38 : 29640014; +1d39 : 29630010; +1d3a : 2965000C; +1d3b : 34810001; +1d3c : F4812000; +1d3d : 3CA20001; +1d3e : B4832000; +1d3f : 29630008; +1d40 : F4A22800; +1d41 : B4221000; +1d42 : 3C630001; +1d43 : F4220800; +1d44 : B4A31800; +1d45 : B4831800; +1d46 : B4230800; +1d47 : 59810000; +1d48 : 59820004; +1d49 : 296D0014; +1d4a : 29610010; +1d4b : 2964000C; +1d4c : 35A2FFFF; +1d4d : F5A21800; +1d4e : 3421FFFF; +1d4f : B4610800; +1d50 : 29630008; +1d51 : F8003992; +1d52 : 29830004; +1d53 : 29840000; +1d54 : B4621000; +1d55 : F4621800; +1d56 : B4810800; +1d57 : B4610800; +1d58 : 5B810030; +1d59 : 5B820034; +1d5a : 37810030; +1d5b : B9A01000; +1d5c : FBFFEB12; +1d5d : 2B810034; +1d5e : 2B860030; +1d5f : 78040001; +1d60 : 5961000C; +1d61 : 59660008; +1d62 : 59860000; +1d63 : 59810004; +1d64 : 00270010; +1d65 : 29650014; +1d66 : 3CC60010; +1d67 : B9C00800; +1d68 : 34020004; +1d69 : 34030001; +1d6a : 38847970; +1d6b : B8C73000; +1d6c : FBFFE56D; +1d6d : 2B9D0004; +1d6e : 2B8B002C; +1d6f : 2B8C0028; +1d70 : 2B8D0024; +1d71 : 2B8E0020; +1d72 : 2B8F001C; +1d73 : 2B900018; +1d74 : 2B910014; +1d75 : 2B920010; +1d76 : 2B93000C; +1d77 : 2B940008; +1d78 : 379C0034; +1d79 : C3A00000; +1d7a : 379CFFD4; +1d7b : 5B8B001C; +1d7c : 5B8C0018; +1d7d : 5B8D0014; +1d7e : 5B8E0010; +1d7f : 5B8F000C; +1d80 : 5B900008; +1d81 : 5B9D0004; +1d82 : 282E0000; +1d83 : B8208000; +1d84 : 28410004; +1d85 : 29CB0004; +1d86 : 284D0000; +1d87 : B8406000; +1d88 : 296F0024; +1d89 : 29620020; +1d8a : 78050001; +1d8b : B42F7800; +1d8c : F42F0800; +1d8d : B5A26800; +1d8e : B42D6800; +1d8f : 29C10008; +1d90 : 38A58EE4; +1d91 : 28A40000; +1d92 : 1C220016; +1d93 : 34030000; +1d94 : 596D0020; +1d95 : 1441001F; +1d96 : 596F0024; +1d97 : F800394C; +1d98 : 00440010; +1d99 : 3C230010; +1d9a : 3C420010; +1d9b : B8831800; +1d9c : 49A3000B; +1d9d : 5DA30002; +1d9e : 55E20009; +1d9f : C8021000; +1da0 : 7C410000; +1da1 : C8031800; +1da2 : C8611800; +1da3 : 486D0004; +1da4 : 5C6D0005; +1da5 : 544F0002; +1da6 : E0000003; +1da7 : 59630020; +1da8 : 59620024; +1da9 : 29620020; +1daa : 29630024; +1dab : 48400003; +1dac : 5C400004; +1dad : 44620003; +1dae : 340B0000; +1daf : E0000002; +1db0 : 340BFFFF; +1db1 : 5B820028; +1db2 : 5B83002C; +1db3 : 45600007; +1db4 : C8031800; +1db5 : 7C610000; +1db6 : C8021000; +1db7 : C8411000; +1db8 : 5B820028; +1db9 : 5B83002C; +1dba : 29C20008; +1dbb : 37810028; +1dbc : 1C420016; +1dbd : FBFFEAB1; +1dbe : 45600009; +1dbf : 2B81002C; +1dc0 : 2B820028; +1dc1 : C8010800; +1dc2 : 7C230000; +1dc3 : C8021000; +1dc4 : C8431000; +1dc5 : 5B820028; +1dc6 : 5B81002C; +1dc7 : 29820000; +1dc8 : 29830004; +1dc9 : 48400003; +1dca : 5C400004; +1dcb : 44620003; +1dcc : 340B0000; +1dcd : E0000002; +1dce : 340BFFFF; +1dcf : 5B820020; +1dd0 : 5B830024; +1dd1 : 45600007; +1dd2 : C8031800; +1dd3 : 7C610000; +1dd4 : C8021000; +1dd5 : C8411000; +1dd6 : 5B820020; +1dd7 : 5B830024; +1dd8 : 2A010000; +1dd9 : 28220008; +1dda : 37810020; +1ddb : 1C420014; +1ddc : FBFFEA92; +1ddd : 45600009; +1dde : 2B810024; +1ddf : 2B820020; +1de0 : C8010800; +1de1 : 7C230000; +1de2 : C8021000; +1de3 : C8431000; +1de4 : 5B820020; +1de5 : 5B810024; +1de6 : 2B83002C; +1de7 : 2B820024; +1de8 : 2B810020; +1de9 : 2B840028; +1dea : B4621000; +1deb : F4621800; +1dec : B4810800; +1ded : B4610800; +1dee : 2B9D0004; +1def : 2B8B001C; +1df0 : 2B8C0018; +1df1 : 2B8D0014; +1df2 : 2B8E0010; +1df3 : 2B8F000C; +1df4 : 2B900008; +1df5 : 379C002C; +1df6 : C3A00000; +1df7 : 379CFFF8; +1df8 : 5B8B0008; +1df9 : 5B9D0004; +1dfa : 28220030; +1dfb : 28240038; +1dfc : B8205800; +1dfd : 28430004; +1dfe : 58600038; +1dff : 5860003C; +1e00 : 28430014; +1e01 : 0C200120; +1e02 : 0C600008; +1e03 : 28830014; +1e04 : 44600013; +1e05 : D8600000; +1e06 : 3402FFFF; +1e07 : 5C220008; +1e08 : 78040001; +1e09 : B9600800; +1e0a : 34020004; +1e0b : 34030001; +1e0c : 38847994; +1e0d : FBFFE4CC; +1e0e : 34010000; +1e0f : 29620030; +1e10 : C8010800; +1e11 : 3C21000A; +1e12 : 28420004; +1e13 : 1423001F; +1e14 : 58410024; +1e15 : 58430020; +1e16 : E000000D; +1e17 : 28420008; +1e18 : 28420010; +1e19 : 20420001; +1e1a : 5C430005; +1e1b : 28840008; +1e1c : 34020000; +1e1d : 34030000; +1e1e : D8800000; +1e1f : 29610030; +1e20 : 28210004; +1e21 : 58200020; +1e22 : 58200024; +1e23 : B9600800; +1e24 : 34020004; +1e25 : FBFFE534; +1e26 : 29610030; +1e27 : 78040001; +1e28 : 34020004; +1e29 : 28260004; +1e2a : 34030001; +1e2b : B9600800; +1e2c : 28C50020; +1e2d : 28C60024; +1e2e : 388479B0; +1e2f : FBFFE4AA; +1e30 : 2B9D0004; +1e31 : 2B8B0008; +1e32 : 379C0008; +1e33 : C3A00000; +1e34 : 379CFFE0; +1e35 : 5B8B0010; +1e36 : 5B8C000C; +1e37 : 5B8D0008; +1e38 : 5B9D0004; +1e39 : B8606000; +1e3a : 28850000; +1e3b : 28830004; +1e3c : B8205800; +1e3d : 28810008; +1e3e : 2884000C; +1e3f : 59850000; +1e40 : 59830004; +1e41 : 5984000C; +1e42 : 59810008; +1e43 : B9800800; +1e44 : FBFFFE18; +1e45 : B9800800; +1e46 : FBFFFE5E; +1e47 : 78040001; +1e48 : B8202800; +1e49 : 34020004; +1e4a : B9600800; +1e4b : 34030001; +1e4c : 388479D0; +1e4d : FBFFE48C; +1e4e : 29810004; +1e4f : 29820000; +1e50 : B8411000; +1e51 : 34010000; +1e52 : 44400017; +1e53 : 29620030; +1e54 : 28420008; +1e55 : 28420010; +1e56 : 20420001; +1e57 : 5C400012; +1e58 : 29610038; +1e59 : 378D0014; +1e5a : B9A01000; +1e5b : 28230000; +1e5c : B9600800; +1e5d : D8600000; +1e5e : B9A00800; +1e5f : B9801000; +1e60 : FBFFFDFC; +1e61 : 29610038; +1e62 : B9A01000; +1e63 : 28230004; +1e64 : B9600800; +1e65 : D8600000; +1e66 : B9600800; +1e67 : FBFFFF90; +1e68 : 34010001; +1e69 : 2B9D0004; +1e6a : 2B8B0010; +1e6b : 2B8C000C; +1e6c : 2B8D0008; +1e6d : 379C0020; +1e6e : C3A00000; +1e6f : 379CFFFC; +1e70 : 5B9D0004; +1e71 : B8201000; +1e72 : 28210030; +1e73 : 284600A8; +1e74 : 284500AC; +1e75 : 284400B0; +1e76 : 284300B4; +1e77 : 28210004; +1e78 : 34420098; +1e79 : 58260000; +1e7a : 58250004; +1e7b : 58240008; +1e7c : 5823000C; +1e7d : FBFFFDDF; +1e7e : 2B9D0004; +1e7f : 379C0004; +1e80 : C3A00000; +1e81 : 379CFFE4; +1e82 : 5B8B001C; +1e83 : 5B8C0018; +1e84 : 5B8D0014; +1e85 : 5B8E0010; +1e86 : 5B8F000C; +1e87 : 5B900008; +1e88 : 5B9D0004; +1e89 : 28220030; +1e8a : 2823009C; +1e8b : B8205800; +1e8c : 284D0004; +1e8d : 284C0010; +1e8e : 28220098; +1e8f : B8431000; +1e90 : 5C40000B; +1e91 : 282300A0; +1e92 : 282400A4; +1e93 : B8641800; +1e94 : 5C620007; +1e95 : 78040001; +1e96 : 34020004; +1e97 : 34030002; +1e98 : 38847A14; +1e99 : FBFFE440; +1e9a : E0000088; +1e9b : 296400C8; +1e9c : 296300CC; +1e9d : 296200D0; +1e9e : 296100D4; +1e9f : 35AE0010; +1ea0 : 357000B8; +1ea1 : 59A40010; +1ea2 : 59A30014; +1ea3 : 59A20018; +1ea4 : 59A1001C; +1ea5 : BA001000; +1ea6 : B9C00800; +1ea7 : FBFFFDB5; +1ea8 : 35610098; +1ea9 : FBFFFDFB; +1eaa : 78040001; +1eab : B8202800; +1eac : 34020004; +1ead : 34030002; +1eae : 388479EC; +1eaf : B9600800; +1eb0 : FBFFE429; +1eb1 : 356100A8; +1eb2 : FBFFFDF2; +1eb3 : 78040001; +1eb4 : B8202800; +1eb5 : 34020004; +1eb6 : 34030002; +1eb7 : 388479F4; +1eb8 : B9600800; +1eb9 : FBFFE420; +1eba : BA000800; +1ebb : FBFFFDE9; +1ebc : 78040001; +1ebd : B8202800; +1ebe : 34020004; +1ebf : 34030002; +1ec0 : 38847A34; +1ec1 : B9600800; +1ec2 : FBFFE417; +1ec3 : 356100C8; +1ec4 : FBFFFDE0; +1ec5 : 78040001; +1ec6 : B8202800; +1ec7 : 34020004; +1ec8 : 34030002; +1ec9 : 38847A3C; +1eca : B9600800; +1ecb : FBFFE40E; +1ecc : B9A00800; +1ecd : FBFFFDD7; +1ece : 78040001; +1ecf : B8202800; +1ed0 : 34020004; +1ed1 : 34030001; +1ed2 : 38847A44; +1ed3 : B9600800; +1ed4 : FBFFE405; +1ed5 : B9C00800; +1ed6 : FBFFFDCE; +1ed7 : 78040001; +1ed8 : B8202800; +1ed9 : 34020004; +1eda : B9600800; +1edb : 34030001; +1edc : 38847A5C; +1edd : FBFFE3FC; +1ede : 29610030; +1edf : 358F0018; +1ee0 : 28230004; +1ee1 : 28650000; +1ee2 : 28640004; +1ee3 : 28620008; +1ee4 : 2861000C; +1ee5 : 59850018; +1ee6 : 5984001C; +1ee7 : 59820020; +1ee8 : 59810024; +1ee9 : 34620010; +1eea : B9E00800; +1eeb : FBFFFD57; +1eec : B9E00800; +1eed : FBFFFD89; +1eee : B9E00800; +1eef : FBFFFDB5; +1ef0 : 78040001; +1ef1 : B8202800; +1ef2 : 34020004; +1ef3 : B9600800; +1ef4 : 34030001; +1ef5 : 38847A74; +1ef6 : FBFFE3E3; +1ef7 : 2981001C; +1ef8 : 298E0018; +1ef9 : B9C17000; +1efa : 5DC00028; +1efb : 35A20028; +1efc : B9600800; +1efd : 35830020; +1efe : FBFFFDD4; +1eff : B9A02000; +1f00 : B9600800; +1f01 : B9E01000; +1f02 : 35830008; +1f03 : FBFFFF31; +1f04 : B8206800; +1f05 : 5C2E001D; +1f06 : 35610030; +1f07 : 35820010; +1f08 : FBFFFE72; +1f09 : 29630030; +1f0a : 28630008; +1f0b : 28640010; +1f0c : 20840001; +1f0d : 5C8D000B; +1f0e : 3C210010; +1f0f : 00420010; +1f10 : B8221000; +1f11 : 29610038; +1f12 : C8021000; +1f13 : 28230010; +1f14 : 5C640002; +1f15 : 2823000C; +1f16 : B9600800; +1f17 : D8600000; +1f18 : 29610030; +1f19 : 78040001; +1f1a : 34020004; +1f1b : 28210004; +1f1c : 34030002; +1f1d : 388479FC; +1f1e : 28250024; +1f1f : B9600800; +1f20 : 14A5000A; +1f21 : FBFFE3B8; +1f22 : 2B9D0004; +1f23 : 2B8B001C; +1f24 : 2B8C0018; +1f25 : 2B8D0014; +1f26 : 2B8E0010; +1f27 : 2B8F000C; +1f28 : 2B900008; +1f29 : 379C001C; +1f2a : C3A00000; +1f2b : 379CFFF0; +1f2c : 5B8B0010; +1f2d : 5B8C000C; +1f2e : 5B8D0008; +1f2f : 5B9D0004; +1f30 : 282B000C; +1f31 : B8206000; +1f32 : 34010001; +1f33 : 59610000; +1f34 : 29810024; +1f35 : 48200002; +1f36 : 34010001; +1f37 : 0D61000C; +1f38 : 29810008; +1f39 : 5C200002; +1f3a : 59820008; +1f3b : 298D0008; +1f3c : 35610010; +1f3d : 3403000C; +1f3e : B9A01000; +1f3f : F8003897; +1f40 : 2D62000C; +1f41 : 34010001; +1f42 : 5C410004; +1f43 : 29810000; +1f44 : 28210024; +1f45 : 64210002; +1f46 : 59610020; +1f47 : 29A10020; +1f48 : 2D67000C; +1f49 : 34020000; +1f4a : 3161001C; +1f4b : 29A10024; +1f4c : 34060002; +1f4d : 34050001; +1f4e : 3161001D; +1f4f : 29A10028; +1f50 : 3404FFFF; +1f51 : 3161001E; +1f52 : E000000D; +1f53 : 08410418; +1f54 : 29880000; +1f55 : B5010800; +1f56 : 44600004; +1f57 : 28230024; +1f58 : 44660002; +1f59 : 59600020; +1f5a : 582203D8; +1f5b : 58250000; +1f5c : 58200010; +1f5d : 0C240122; +1f5e : 34420001; +1f5f : 29630020; +1f60 : 48E2FFF3; +1f61 : 44600007; +1f62 : 340100FF; +1f63 : 59610010; +1f64 : 78010001; +1f65 : 38217A98; +1f66 : 340200FF; +1f67 : F80018B7; +1f68 : 78010001; +1f69 : 38219F04; +1f6a : 28230004; +1f6b : 34010000; +1f6c : 44600004; +1f6d : B9800800; +1f6e : B9A01000; +1f6f : D8600000; +1f70 : 2B9D0004; +1f71 : 2B8B0010; +1f72 : 2B8C000C; +1f73 : 2B8D0008; +1f74 : 379C0010; +1f75 : C3A00000; +1f76 : 379CFFFC; +1f77 : 5B9D0004; +1f78 : 78020001; +1f79 : 38429F04; +1f7a : 28430008; +1f7b : 34020000; +1f7c : 44600003; +1f7d : D8600000; +1f7e : B8201000; +1f7f : B8400800; +1f80 : 2B9D0004; +1f81 : 379C0004; +1f82 : C3A00000; +1f83 : 78010001; +1f84 : 38219F74; +1f85 : 28220000; +1f86 : 78010001; +1f87 : 38219DA8; +1f88 : E0000004; +1f89 : 28440000; +1f8a : 44640004; +1f8b : 3421000C; +1f8c : 28230000; +1f8d : 5C60FFFC; +1f8e : 28210004; +1f8f : C3A00000; +1f90 : 379CFFF0; +1f91 : 5B8B0008; +1f92 : 5B9D0004; +1f93 : 5B81000C; +1f94 : 5B820010; +1f95 : B8605800; +1f96 : B8401800; +1f97 : 5C20000E; +1f98 : 78020001; +1f99 : 38428EE8; +1f9a : 28410000; +1f9b : 5461000A; +1f9c : 78010001; +1f9d : 78020001; +1f9e : 3821B60C; +1f9f : 38427ABC; +1fa0 : 5D600003; +1fa1 : 78020001; +1fa2 : 38427AC4; +1fa3 : F800186D; +1fa4 : E0000010; +1fa5 : 78030001; +1fa6 : 38638EC8; +1fa7 : 28620000; +1fa8 : 3781000C; +1fa9 : FBFFE8C5; +1faa : B8202000; +1fab : 78020001; +1fac : 78010001; +1fad : 2B830010; +1fae : 3821B60C; +1faf : 38427AC8; +1fb0 : 5D600003; +1fb1 : 78020001; +1fb2 : 38427AD4; +1fb3 : F800185D; +1fb4 : 78010001; +1fb5 : 3821B60C; +1fb6 : 2B9D0004; +1fb7 : 2B8B0008; +1fb8 : 379C0010; +1fb9 : C3A00000; +1fba : 379CFF10; +1fbb : 5B8B0010; +1fbc : 5B8C000C; +1fbd : 5B8D0008; +1fbe : 5B9D0004; +1fbf : 78010001; +1fc0 : 38219F74; +1fc1 : 28210000; +1fc2 : 282B0018; +1fc3 : 78010001; +1fc4 : 3821C294; +1fc5 : 28220000; +1fc6 : 34010000; +1fc7 : 444000DB; +1fc8 : 780C0001; +1fc9 : 398CB608; +1fca : 29810000; +1fcb : 5C200008; +1fcc : F8001E3E; +1fcd : 78020001; +1fce : 384296F8; +1fcf : 28420000; +1fd0 : A4401000; +1fd1 : B4410800; +1fd2 : 59810000; +1fd3 : 78010001; +1fd4 : 3821BFB4; +1fd5 : 28210000; +1fd6 : 29620058; +1fd7 : 5C220007; +1fd8 : 78010001; +1fd9 : 3821B0D8; +1fda : 28230000; +1fdb : 34020003; +1fdc : 34010000; +1fdd : 446200C5; +1fde : F8001E2C; +1fdf : 78030001; +1fe0 : 78020001; +1fe1 : 386396F8; +1fe2 : 3842B608; +1fe3 : 28630000; +1fe4 : 28420000; +1fe5 : B4621000; +1fe6 : C8220800; +1fe7 : 4C200007; +1fe8 : 78010001; +1fe9 : 3821B0D8; +1fea : 28230000; +1feb : 34020003; +1fec : 34010000; +1fed : 5C6200B5; +1fee : F8001E1C; +1fef : 78020001; +1ff0 : 3842B608; +1ff1 : 58410000; +1ff2 : 29620058; +1ff3 : 78010001; +1ff4 : 3821BFB4; +1ff5 : 58220000; +1ff6 : 378100DC; +1ff7 : 378200E8; +1ff8 : F8002317; +1ff9 : 34020000; +1ffa : 37810014; +1ffb : F8000326; +1ffc : 378100F0; +1ffd : 378200EC; +1ffe : F8001DD8; +1fff : 2B8300EC; +2000 : 2B8400F0; +2001 : 2B820040; +2002 : 78010001; +2003 : 38217ADC; +2004 : F800181A; +2005 : 2B820048; +2006 : 78010001; +2007 : 38217AF0; +2008 : 7C420000; +2009 : F8001815; +200a : FBFFFF79; +200b : B8201000; +200c : 78010001; +200d : 38217AFC; +200e : F8001810; +200f : 78010001; +2010 : 3821B0D8; +2011 : 28220000; +2012 : 34010003; +2013 : 5C41000A; +2014 : 29620010; +2015 : 78010001; +2016 : 38217B04; +2017 : 20420001; +2018 : F8001806; +2019 : 78010001; +201a : 38217B0C; +201b : 35620060; +201c : F8001802; +201d : 34010000; +201e : 378200E4; +201f : 780D0001; +2020 : F80033E2; +2021 : 340C0000; +2022 : 39AD7B18; +2023 : E0000008; +2024 : B9800800; +2025 : F8003442; +2026 : B8201800; +2027 : B9801000; +2028 : B9A00800; +2029 : F80017F5; +202a : 358C0001; +202b : 2B8100E4; +202c : 482CFFF8; +202d : 2B8200E0; +202e : 2B8300E8; +202f : 78010001; +2030 : 38217B24; +2031 : F80017ED; +2032 : 78010001; +2033 : 3821B0D8; +2034 : 28220000; +2035 : 34010003; +2036 : 5C41004E; +2037 : 29620044; +2038 : 29610040; +2039 : 34030000; +203a : FBFFFF56; +203b : B8201000; +203c : 78010001; +203d : 38217B34; +203e : F80017E0; +203f : 29620054; +2040 : 29610050; +2041 : 34030000; +2042 : FBFFFF4E; +2043 : B8201000; +2044 : 78010001; +2045 : 38217B3C; +2046 : F80017D8; +2047 : 29620018; +2048 : 2963001C; +2049 : 78010001; +204a : 38217B44; +204b : F80017D3; +204c : 29620020; +204d : 29630024; +204e : 78010001; +204f : 38217B58; +2050 : F80017CE; +2051 : 29620054; +2052 : 29630044; +2053 : 78010001; +2054 : 3C420001; +2055 : 38217B6C; +2056 : C8621000; +2057 : F80017C7; +2058 : 29620018; +2059 : 29610044; +205a : 29630040; +205b : 1444001F; +205c : C8221000; +205d : F4410800; +205e : C8641800; +205f : C8611800; +2060 : 2961001C; +2061 : 1424001F; +2062 : C8410800; +2063 : F4221000; +2064 : C8641800; +2065 : C8621000; +2066 : 29630020; +2067 : 1464001F; +2068 : C8231800; +2069 : F4610800; +206a : C8441000; +206b : C8410800; +206c : 29620024; +206d : 1444001F; +206e : C8621000; +206f : F4431800; +2070 : C8240800; +2071 : C8230800; +2072 : 34030000; +2073 : FBFFFF1D; +2074 : B8201000; +2075 : 78010001; +2076 : 38217B78; +2077 : F80017A7; +2078 : 2962008C; +2079 : 78010001; +207a : 38217B84; +207b : F80017A3; +207c : 29620048; +207d : 78010001; +207e : 38217B8C; +207f : F800179F; +2080 : 29620058; +2081 : 78010001; +2082 : 38217B98; +2083 : F800179B; +2084 : 3401FFFF; +2085 : F80033ED; +2086 : B8206000; +2087 : 34010000; +2088 : F80033EA; +2089 : B8205800; +208a : 34010001; +208b : F80033E7; +208c : 78050001; +208d : B8202000; +208e : B8A00800; +208f : B9801000; +2090 : B9601800; +2091 : 38217BA4; +2092 : F800178C; +2093 : 78010001; +2094 : 38217BB8; +2095 : F8002175; +2096 : 2023FFFF; +2097 : 08632710; +2098 : B8201000; +2099 : 14420010; +209a : 14630010; +209b : 78010001; +209c : 38217BBC; +209d : F8001781; +209e : 78010001; +209f : 38218798; +20a0 : F800177E; +20a1 : 34010001; +20a2 : 2B9D0004; +20a3 : 2B8B0010; +20a4 : 2B8C000C; +20a5 : 2B8D0008; +20a6 : 379C00F0; +20a7 : C3A00000; +20a8 : 379CFF0C; +20a9 : 5B8B0014; +20aa : 5B8C0010; +20ab : 5B9D000C; +20ac : F8001DF6; +20ad : B8205800; +20ae : F8001DFA; +20af : A02B1000; +20b0 : 34010000; +20b1 : 5C40005F; +20b2 : 780B0001; +20b3 : 396BB624; +20b4 : 29610000; +20b5 : 5C220004; +20b6 : F8001D54; +20b7 : 3421FC17; +20b8 : 59610000; +20b9 : 780B0001; +20ba : F8001D50; +20bb : 396BB624; +20bc : 29620000; +20bd : C8220800; +20be : 3422FC18; +20bf : 34010000; +20c0 : 48020050; +20c1 : F8001D49; +20c2 : 59610000; +20c3 : 34010000; +20c4 : F8001DCC; +20c5 : 378100F4; +20c6 : 378200F0; +20c7 : F8001D0F; +20c8 : 2B8100F4; +20c9 : 2B8200F0; +20ca : 780B0001; +20cb : 396B9F74; +20cc : F8001E0D; +20cd : 378100E0; +20ce : 378200EC; +20cf : F8002240; +20d0 : 2B8300EC; +20d1 : 2B8100E0; +20d2 : 2B8200E4; +20d3 : F8001E0C; +20d4 : 34020000; +20d5 : 37810018; +20d6 : F800024B; +20d7 : 2B810044; +20d8 : 2B82004C; +20d9 : 7C210000; +20da : 7C420000; +20db : F8001DE9; +20dc : 29610000; +20dd : 40210003; +20de : F8001DEF; +20df : 78010001; +20e0 : 3821B0D8; +20e1 : 28220000; +20e2 : 34010003; +20e3 : 5C410012; +20e4 : 29610000; +20e5 : 28290018; +20e6 : 292A0048; +20e7 : 29260054; +20e8 : 29240044; +20e9 : 29210010; +20ea : 29230040; +20eb : 29250050; +20ec : 41220017; +20ed : 2928008C; +20ee : 5B8A0004; +20ef : 3CC70001; +20f0 : 29290058; +20f1 : 20210001; +20f2 : C8873800; +20f3 : 5B890008; +20f4 : F8001DBB; +20f5 : 34010000; +20f6 : 378200E8; +20f7 : F800330B; +20f8 : 2B8200E8; +20f9 : 34010008; +20fa : 4C220002; +20fb : 5B8100E8; +20fc : 340B0000; +20fd : 340C0000; +20fe : E0000007; +20ff : B9600800; +2100 : F8003367; +2101 : 20210001; +2102 : BC2B0800; +2103 : 356B0001; +2104 : B9816000; +2105 : 2B8100E8; +2106 : 482BFFF9; +2107 : B9800800; +2108 : F8001DCB; +2109 : 78010001; +210a : 38217BB8; +210b : F80020FF; +210c : F8001DDA; +210d : 34010001; +210e : F8001D82; +210f : 34010001; +2110 : 2B9D000C; +2111 : 2B8B0014; +2112 : 2B8C0010; +2113 : 379C00F4; +2114 : C3A00000; +2115 : 379CFFF4; +2116 : 5B8B000C; +2117 : 5B8C0008; +2118 : 5B9D0004; +2119 : 780B0001; +211a : 396B9F74; +211b : 29610000; +211c : 78020001; +211d : 38427BCC; +211e : 282C0018; +211f : 34010004; +2120 : F8000AC8; +2121 : FBFFFE62; +2122 : 78020001; +2123 : B8201800; +2124 : 38427BDC; +2125 : 34010007; +2126 : F8000AC2; +2127 : 29810010; +2128 : 44200005; +2129 : 29610000; +212a : 28220000; +212b : 34010009; +212c : 44410007; +212d : 78020001; +212e : 34010001; +212f : 38427BE0; +2130 : F8000AB8; +2131 : 34010000; +2132 : E0000006; +2133 : 78020001; +2134 : 34010004; +2135 : 38427BF8; +2136 : F8000AB2; +2137 : 34010001; +2138 : 2B9D0004; +2139 : 2B8B000C; +213a : 2B8C0008; +213b : 379C000C; +213c : C3A00000; +213d : 379CFEE4; +213e : 5B8B0020; +213f : 5B8C001C; +2140 : 5B8D0018; +2141 : 5B8E0014; +2142 : 5B8F0010; +2143 : 5B90000C; +2144 : 5B910008; +2145 : 5B9D0004; +2146 : 78010001; +2147 : 38219F74; +2148 : 28210000; +2149 : 780C0001; +214a : 398CB62C; +214b : 282B0018; +214c : 29810000; +214d : 5C200008; +214e : F8001CBC; +214f : 78020001; +2150 : 384296F8; +2151 : 28420000; +2152 : A4401000; +2153 : B4410800; +2154 : 59810000; +2155 : F8001CB5; +2156 : 78030001; +2157 : 78020001; +2158 : 386396F8; +2159 : 3842B62C; +215a : 28630000; +215b : 28420000; +215c : B4621000; +215d : C8220800; +215e : 4C200007; +215f : 78010001; +2160 : 3821B628; +2161 : 28210000; +2162 : 29620058; +2163 : 340C0000; +2164 : 442201B2; +2165 : F8001CA5; +2166 : 78020001; +2167 : 3842B62C; +2168 : 58410000; +2169 : 29620058; +216a : 78010001; +216b : 3821B628; +216c : 58220000; +216d : F8000A9A; +216e : 78030001; +216f : 386396E8; +2170 : 28630000; +2171 : 78020001; +2172 : 34010004; +2173 : 38427C14; +2174 : F8000A74; +2175 : 78020001; +2176 : 34010087; +2177 : 38427C30; +2178 : F8000A70; +2179 : 37810104; +217a : 37820114; +217b : F8002194; +217c : 78020001; +217d : 34010004; +217e : 38427C3C; +217f : F8000A69; +2180 : 2B820108; +2181 : 2B810104; +2182 : 34030000; +2183 : F80009B4; +2184 : 78020001; +2185 : B8201800; +2186 : 38427BDC; +2187 : 34010007; +2188 : F8000A60; +2189 : 34020000; +218a : 37810028; +218b : F8000196; +218c : 78020001; +218d : 34010004; +218e : 38427C5C; +218f : F8000A59; +2190 : 78020001; +2191 : 78030001; +2192 : 34010007; +2193 : 38427C6C; +2194 : 38637C74; +2195 : F8000A53; +2196 : 2B810054; +2197 : 44200005; +2198 : 78020001; +2199 : 34010002; +219a : 38427C7C; +219b : E0000004; +219c : 78020001; +219d : 34010001; +219e : 38427C88; +219f : F8000A49; +21a0 : 3781011C; +21a1 : 37820118; +21a2 : F8001C34; +21a3 : 2B830118; +21a4 : 2B84011C; +21a5 : 78020001; +21a6 : 34010087; +21a7 : 38427C94; +21a8 : F8000A40; +21a9 : 2B810054; +21aa : 340C0001; +21ab : 4420016B; +21ac : 78020001; +21ad : 38427CA8; +21ae : 34010007; +21af : F8000A39; +21b0 : 378D010C; +21b1 : B9A00800; +21b2 : F8000D0E; +21b3 : 378300F0; +21b4 : B8600800; +21b5 : B9A01000; +21b6 : 5B830024; +21b7 : F8000856; +21b8 : 78010001; +21b9 : 3821B8F8; +21ba : 28210000; +21bb : 2B830024; +21bc : 442C000A; +21bd : 44200004; +21be : 34020002; +21bf : 5C22000F; +21c0 : E000000A; +21c1 : 78020001; +21c2 : 34010001; +21c3 : 38427CB0; +21c4 : F8000A24; +21c5 : E0000009; +21c6 : 78020001; +21c7 : 34010002; +21c8 : 38427CC0; +21c9 : E0000004; +21ca : 78020001; +21cb : 34010002; +21cc : 38427CD0; +21cd : F8000A1B; +21ce : 78020001; +21cf : 34010087; +21d0 : 38427CE8; +21d1 : 780D0001; +21d2 : F8000A16; +21d3 : 39AD9F74; +21d4 : 29A10000; +21d5 : 28210358; +21d6 : 28210010; +21d7 : 282E0008; +21d8 : 5DC0004B; +21d9 : 78020001; +21da : 34010001; +21db : 38427CF0; +21dc : F8000A0C; +21dd : FBFFFF38; +21de : 340C0001; +21df : 442E0137; +21e0 : 78020001; +21e1 : 34010087; +21e2 : 38427CF8; +21e3 : F8000A05; +21e4 : 29A10000; +21e5 : 28210030; +21e6 : 28210010; +21e7 : 28250008; +21e8 : 2823000C; +21e9 : 28220010; +21ea : 28240014; +21eb : B8A32800; +21ec : 44A00014; +21ed : 3C420010; +21ee : 00840010; +21ef : B8442000; +21f0 : 48600005; +21f1 : 6C820000; +21f2 : 64610000; +21f3 : A0410800; +21f4 : 44200006; +21f5 : 78020001; +21f6 : 34010007; +21f7 : 38427D18; +21f8 : F80009F0; +21f9 : E000011C; +21fa : 78020001; +21fb : 34010007; +21fc : 38427D24; +21fd : C8042000; +21fe : F80009EA; +21ff : E0000117; +2200 : 00840010; +2201 : 3C430010; +2202 : 780B0001; +2203 : 396B7D30; +2204 : B8641800; +2205 : B9601000; +2206 : 34010007; +2207 : F80009E1; +2208 : 78020001; +2209 : 34010087; +220a : 38427D38; +220b : F80009DD; +220c : 29A10000; +220d : B9601000; +220e : 28210030; +220f : 28210010; +2210 : 28240020; +2211 : 2C230024; +2212 : 34010007; +2213 : 3C840010; +2214 : B8831800; +2215 : F80009D3; +2216 : 78020001; +2217 : 34010087; +2218 : 38427D58; +2219 : F80009CF; +221a : 29A10000; +221b : B9601000; +221c : 28210030; +221d : 28240004; +221e : 34010007; +221f : 28830020; +2220 : 28840024; +2221 : F80009C7; +2222 : E00000F4; +2223 : 78010001; +2224 : 3821B0D8; +2225 : 28210000; +2226 : 34020001; +2227 : 4841000E; +2228 : 34020002; +2229 : 4C410004; +222a : 34020003; +222b : 5C22000A; +222c : E0000005; +222d : 78020001; +222e : 34010007; +222f : 38427D78; +2230 : E0000008; +2231 : 78020001; +2232 : 34010007; +2233 : 38427D84; +2234 : E0000004; +2235 : 78020001; +2236 : 34010001; +2237 : 38427D90; +2238 : F80009B0; +2239 : 2B81005C; +223a : 44200005; +223b : 78020001; +223c : 34010002; +223d : 38427D9C; +223e : E0000004; +223f : 78020001; +2240 : 34010001; +2241 : 38427DA4; +2242 : F80009A6; +2243 : 2B810078; +2244 : 44200007; +2245 : 2B81007C; +2246 : 44200005; +2247 : 78020001; +2248 : 34010002; +2249 : 38427DAC; +224a : E0000004; +224b : 78020001; +224c : 34010001; +224d : 38427DB8; +224e : F800099A; +224f : FBFFFEC6; +2250 : 340C0001; +2251 : 442000C5; +2252 : 78020001; +2253 : 34010087; +2254 : 38427DC8; +2255 : F8000993; +2256 : 78020001; +2257 : 34010007; +2258 : 384279E8; +2259 : 35630060; +225a : F800098E; +225b : 78020001; +225c : 34010087; +225d : 38427DE4; +225e : F800098A; +225f : 2961005C; +2260 : 44200005; +2261 : 78020001; +2262 : 34010002; +2263 : 38427E00; +2264 : E0000004; +2265 : 78020001; +2266 : 34010001; +2267 : 38427E04; +2268 : F8000980; +2269 : 34010000; +226a : 37820110; +226b : 78100001; +226c : 780F0001; +226d : 780E0001; +226e : 780D0001; +226f : F8003193; +2270 : 340C0000; +2271 : 3A107E0C; +2272 : 39EF7E2C; +2273 : 39CE7E34; +2274 : 39AD8798; +2275 : E0000015; +2276 : 34010087; +2277 : BA001000; +2278 : B9801800; +2279 : F800096F; +227a : B9800800; +227b : F80031EC; +227c : B8208800; +227d : 20210001; +227e : 44200004; +227f : 34010002; +2280 : B9E01000; +2281 : F8000967; +2282 : 22310002; +2283 : 46200004; +2284 : 34010002; +2285 : B9C01000; +2286 : F8000962; +2287 : B9A00800; +2288 : F8001596; +2289 : 358C0001; +228a : 2B810110; +228b : 482CFFEB; +228c : 78020001; +228d : 34010004; +228e : 38427E40; +228f : F8000959; +2290 : 78020001; +2291 : 34010087; +2292 : 38427E58; +2293 : F8000955; +2294 : 29620044; +2295 : 29610040; +2296 : 34030001; +2297 : 780C0001; +2298 : FBFFFCF8; +2299 : 398C7E70; +229a : B8201800; +229b : B9801000; +229c : 34010007; +229d : F800094B; +229e : 78020001; +229f : 34010087; +22a0 : 38427E78; +22a1 : F8000947; +22a2 : 29620054; +22a3 : 29610050; +22a4 : 34030001; +22a5 : 780D0001; +22a6 : FBFFFCEA; +22a7 : B8201800; +22a8 : B9801000; +22a9 : 34010007; +22aa : F800093E; +22ab : 78020001; +22ac : 34010087; +22ad : 38427E90; +22ae : F800093A; +22af : 29630018; +22b0 : 2964001C; +22b1 : 39AD7EB0; +22b2 : B9A01000; +22b3 : 34010007; +22b4 : F8000934; +22b5 : 78020001; +22b6 : 34010087; +22b7 : 38427EC8; +22b8 : F8000930; +22b9 : 29640024; +22ba : 29630020; +22bb : B9A01000; +22bc : 34010007; +22bd : F800092B; +22be : 296D0054; +22bf : 29610044; +22c0 : 78020001; +22c1 : 3DAD0001; +22c2 : 38427EE8; +22c3 : C82D6800; +22c4 : 34010087; +22c5 : F8000923; +22c6 : 78020001; +22c7 : B9A01800; +22c8 : 34010007; +22c9 : 38427F00; +22ca : F800091E; +22cb : 29610018; +22cc : 29620044; +22cd : 296E0040; +22ce : 1423001F; +22cf : C8410800; +22d0 : F4221000; +22d1 : C9C37000; +22d2 : C9C27000; +22d3 : 2962001C; +22d4 : 296D0024; +22d5 : 1443001F; +22d6 : C8221000; +22d7 : F4410800; +22d8 : C9C37000; +22d9 : C9C17000; +22da : 29610020; +22db : 1423001F; +22dc : C8410800; +22dd : F4221000; +22de : C9C37000; +22df : 15A3001F; +22e0 : C82D6800; +22e1 : C9C27000; +22e2 : F5A10800; +22e3 : C9C37000; +22e4 : 78020001; +22e5 : C9C17000; +22e6 : 38427F0C; +22e7 : 34010087; +22e8 : F8000900; +22e9 : B9A01000; +22ea : 34030001; +22eb : B9C00800; +22ec : FBFFFCA4; +22ed : B8201800; +22ee : B9801000; +22ef : 34010007; +22f0 : F80008F8; +22f1 : 78020001; +22f2 : 34010087; +22f3 : 38427F24; +22f4 : F80008F4; +22f5 : 2963008C; +22f6 : 78020001; +22f7 : 34010007; +22f8 : 38427F34; +22f9 : F80008EF; +22fa : 78020001; +22fb : 34010087; +22fc : 38427F40; +22fd : F80008EB; +22fe : 29630048; +22ff : 78020001; +2300 : 34010007; +2301 : 38427F50; +2302 : F80008E6; +2303 : 78020001; +2304 : 34010087; +2305 : 38427F5C; +2306 : F80008E2; +2307 : 29630084; +2308 : 78020001; +2309 : 34010007; +230a : 38427F68; +230b : F80008DD; +230c : 78020001; +230d : 34010087; +230e : 38427F74; +230f : F80008D9; +2310 : 29630058; +2311 : 78020001; +2312 : 34010007; +2313 : 38427F84; +2314 : F80008D4; +2315 : 340C0001; +2316 : B9800800; +2317 : 2B9D0004; +2318 : 2B8B0020; +2319 : 2B8C001C; +231a : 2B8D0018; +231b : 2B8E0014; +231c : 2B8F0010; +231d : 2B90000C; +231e : 2B910008; +231f : 379C011C; +2320 : C3A00000; +2321 : 379CFFF4; +2322 : 5B8B0008; +2323 : 5B9D0004; +2324 : B8205800; +2325 : FBFFE1F4; +2326 : 34020003; +2327 : 5C220003; +2328 : 34010002; +2329 : E0000002; +232a : 34010001; +232b : 59610028; +232c : 3562004C; +232d : 35610048; +232e : F80016A4; +232f : 34010000; +2330 : 59600040; +2331 : 59600044; +2332 : 59600088; +2333 : 5960008C; +2334 : 3782000C; +2335 : 34030000; +2336 : F8003098; +2337 : 44200006; +2338 : 2B81000C; +2339 : 596100A0; +233a : 34010001; +233b : 596100A4; +233c : E0000003; +233d : 596000A0; +233e : 596000A4; +233f : 34010000; +2340 : F800166A; +2341 : 5961002C; +2342 : 34010001; +2343 : 59610054; +2344 : 59610050; +2345 : 34010000; +2346 : F8003023; +2347 : 59610034; +2348 : 34011F40; +2349 : 596100B4; +234a : 78010001; +234b : 38219700; +234c : 28210000; +234d : 596100B8; +234e : 596100BC; +234f : 35610014; +2350 : F800160F; +2351 : 34010000; +2352 : 5960001C; +2353 : 2B9D0004; +2354 : 2B8B0008; +2355 : 379C000C; +2356 : C3A00000; +2357 : C3A00000; +2358 : 379CFFFC; +2359 : 5B9D0004; +235a : B8201000; +235b : 78010001; +235c : 38217FA4; +235d : F80014C1; +235e : 2B9D0004; +235f : 379C0004; +2360 : C3A00000; +2361 : 379CFFF8; +2362 : 5B8B0008; +2363 : 5B9D0004; +2364 : 780B0001; +2365 : 396BB684; +2366 : 29650000; +2367 : 78020001; +2368 : 34240001; +2369 : B8201800; +236a : 3842B630; +236b : B4220800; +236c : C8A31800; +236d : B4821000; +236e : F80034A1; +236f : 29610000; +2370 : 3421FFFF; +2371 : 59610000; +2372 : 2B9D0004; +2373 : 2B8B0008; +2374 : 379C0008; +2375 : C3A00000; +2376 : 379CFFCC; +2377 : 5B8B0010; +2378 : 5B8C000C; +2379 : 5B8D0008; +237a : 5B9D0004; +237b : 378B0014; +237c : 34020000; +237d : 34030024; +237e : B9600800; +237f : F80034D5; +2380 : 78030001; +2381 : B9600800; +2382 : 34040000; +2383 : 34020000; +2384 : 3863B630; +2385 : 34080020; +2386 : 34070008; +2387 : E0000004; +2388 : 34840001; +2389 : 34210004; +238a : 44870017; +238b : B4432800; +238c : E0000004; +238d : 30A00000; +238e : 34420001; +238f : 34A50001; +2390 : 40A60000; +2391 : 44C8FFFC; +2392 : 44C0000D; +2393 : B4432800; +2394 : 58250000; +2395 : E0000002; +2396 : 34420001; +2397 : B4432800; +2398 : 40A50000; +2399 : 7CA90000; +239a : 7CA60020; +239b : A1263000; +239c : 5CC0FFFA; +239d : 5CA6FFEB; +239e : E0000003; +239f : 340C0000; +23a0 : 448C0021; +23a1 : 2B810014; +23a2 : 340C0000; +23a3 : 40220000; +23a4 : 34010023; +23a5 : 4441001C; +23a6 : 780B0001; +23a7 : 780C0001; +23a8 : 396BAE18; +23a9 : 398CAEE0; +23aa : E0000011; +23ab : 29610000; +23ac : F80034E9; +23ad : B8206800; +23ae : 5C20000C; +23af : 29620004; +23b0 : 37810018; +23b1 : D8400000; +23b2 : B8206000; +23b3 : 4C2D000E; +23b4 : 29620000; +23b5 : 78010001; +23b6 : B9801800; +23b7 : 38217FAC; +23b8 : F8001466; +23b9 : E0000008; +23ba : 356B0008; +23bb : 2B820014; +23bc : 558BFFEF; +23bd : 78010001; +23be : 38217FC4; +23bf : F800145F; +23c0 : 340CFFEA; +23c1 : B9800800; +23c2 : 2B9D0004; +23c3 : 2B8B0010; +23c4 : 2B8C000C; +23c5 : 2B8D0008; +23c6 : 379C0034; +23c7 : C3A00000; +23c8 : 78010001; +23c9 : 38219FAC; +23ca : 78020001; +23cb : 28260000; +23cc : 3405003B; +23cd : 34010000; +23ce : 3842B630; +23cf : 34040050; +23d0 : E0000005; +23d1 : B4223800; +23d2 : 30E30000; +23d3 : 34210001; +23d4 : 44240005; +23d5 : B4C11800; +23d6 : 40630000; +23d7 : 44600002; +23d8 : 5C65FFF9; +23d9 : 78020001; +23da : 3842B630; +23db : B4411000; +23dc : 30400000; +23dd : 78020001; +23de : 38429FAC; +23df : 28430000; +23e0 : 3404003B; +23e1 : B4611800; +23e2 : 58430000; +23e3 : 40650000; +23e4 : 5CA40003; +23e5 : 34630001; +23e6 : 58430000; +23e7 : 5C200006; +23e8 : 78020001; +23e9 : 78030001; +23ea : 38429FAC; +23eb : 38639F78; +23ec : 58430000; +23ed : C3A00000; +23ee : 379CFFF8; +23ef : 5B8B0008; +23f0 : 5B9D0004; +23f1 : B8201000; +23f2 : 78010001; +23f3 : 3821B630; +23f4 : 44410003; +23f5 : 34030050; +23f6 : F8003590; +23f7 : 78010001; +23f8 : 3821B630; +23f9 : F8003511; +23fa : 78020001; +23fb : 3842B684; +23fc : 780B0001; +23fd : 58410000; +23fe : 396BBFD0; +23ff : 34010001; +2400 : 59610000; +2401 : FBFFFF75; +2402 : 59600000; +2403 : 2B9D0004; +2404 : 2B8B0008; +2405 : 379C0008; +2406 : C3A00000; +2407 : 78010001; +2408 : 3821B68C; +2409 : 58200000; +240a : 78010001; +240b : 3821B684; +240c : 58200000; +240d : 78010001; +240e : 3821B688; +240f : 58200000; +2410 : C3A00000; +2411 : 379CFFF4; +2412 : 5B8B000C; +2413 : 5B8C0008; +2414 : 5B9D0004; +2415 : 780B0001; +2416 : 396BB688; +2417 : 29610000; +2418 : 340C0001; +2419 : 442C0010; +241a : 34020002; +241b : 4422009D; +241c : 34020000; +241d : 5C2000A5; +241e : 78010001; +241f : 38217FE0; +2420 : F80013FE; +2421 : 78010001; +2422 : 3821B68C; +2423 : 58200000; +2424 : 78010001; +2425 : 3821B684; +2426 : 58200000; +2427 : 596C0000; +2428 : E000008E; +2429 : F80014FE; +242a : 34020000; +242b : 48010097; +242c : 3402001B; +242d : 44220008; +242e : 78020001; +242f : 3842B690; +2430 : 28430000; +2431 : 6424005B; +2432 : 00650010; +2433 : A0A42000; +2434 : 44800006; +2435 : 78010001; +2436 : 3821B690; +2437 : 78020001; +2438 : 58220000; +2439 : E0000003; +243a : B8230800; +243b : 58410000; +243c : 78010001; +243d : 3821B690; +243e : 282B0000; +243f : 34020001; +2440 : 216100FF; +2441 : 44200081; +2442 : 3401007E; +2443 : 4561002E; +2444 : 49610006; +2445 : 34010009; +2446 : 4561006D; +2447 : 3401000D; +2448 : 5D610042; +2449 : E0000020; +244a : 78020001; +244b : 38428EEC; +244c : 28410000; +244d : 45610010; +244e : 78020001; +244f : 38428EF0; +2450 : 28410000; +2451 : 45610004; +2452 : 3401007F; +2453 : 5D610037; +2454 : E0000027; +2455 : 78010001; +2456 : 3821B68C; +2457 : 28220000; +2458 : 4C02005B; +2459 : 3442FFFF; +245a : 58220000; +245b : 34010044; +245c : E000000B; +245d : 78010001; +245e : 78020001; +245f : 3821B68C; +2460 : 3842B684; +2461 : 28230000; +2462 : 28420000; +2463 : 4C620050; +2464 : 34630001; +2465 : 58230000; +2466 : 34010043; +2467 : FBFFFEF1; +2468 : E000004B; +2469 : 78010001; +246a : 38218798; +246b : F80013B3; +246c : 78010001; +246d : 3821B688; +246e : 34020002; +246f : 58220000; +2470 : E0000043; +2471 : 78010001; +2472 : 78020001; +2473 : 3821B68C; +2474 : 3842B684; +2475 : 28210000; +2476 : 28420000; +2477 : 4422003C; +2478 : FBFFFEE9; +2479 : 34010050; +247a : E3FFFFED; +247b : 780B0001; +247c : 396BB68C; +247d : 29610000; +247e : 4C010035; +247f : 34010044; +2480 : FBFFFED8; +2481 : 34010050; +2482 : FBFFFED6; +2483 : 29610000; +2484 : 3421FFFF; +2485 : FBFFFEDC; +2486 : 29610000; +2487 : 3421FFFF; +2488 : 59610000; +2489 : E000002A; +248a : 78010001; +248b : A1610800; +248c : 5C200027; +248d : 78010001; +248e : 3821B684; +248f : 28240000; +2490 : 3401004F; +2491 : 48810022; +2492 : 78010001; +2493 : 3821B68C; +2494 : 28230000; +2495 : 44640008; +2496 : 78020001; +2497 : 34610001; +2498 : 3842B630; +2499 : B4220800; +249a : B4621000; +249b : C8831800; +249c : F8003373; +249d : 78010001; +249e : 3821B68C; +249f : 28230000; +24a0 : 78020001; +24a1 : 3842B630; +24a2 : B4431000; +24a3 : 304B0000; +24a4 : 34620001; +24a5 : 58220000; +24a6 : 78010001; +24a7 : 3821B684; +24a8 : 28220000; +24a9 : 34420001; +24aa : 58220000; +24ab : 34010040; +24ac : FBFFFEAC; +24ad : 78020001; +24ae : 3842B690; +24af : 28420000; +24b0 : 78010001; +24b1 : 38217FE8; +24b2 : F800136C; +24b3 : 78010001; +24b4 : 3821B690; +24b5 : 58200000; +24b6 : 34020001; +24b7 : E000000B; +24b8 : 78020001; +24b9 : 3842B684; +24ba : 28420000; +24bb : 78010001; +24bc : 3821B630; +24bd : B4220800; +24be : 30200000; +24bf : FBFFFEB7; +24c0 : 59600000; +24c1 : E3FFFFF5; +24c2 : B8400800; +24c3 : 2B9D0004; +24c4 : 2B8B000C; +24c5 : 2B8C0008; +24c6 : 379C000C; +24c7 : C3A00000; +24c8 : 379CFFF4; +24c9 : 5B8B000C; +24ca : 5B8C0008; +24cb : 5B9D0004; +24cc : 34040001; +24cd : B8205800; +24ce : B8406000; +24cf : 44200006; +24d0 : 40220000; +24d1 : 3401002D; +24d2 : 5C410003; +24d3 : 356B0001; +24d4 : 3404FFFF; +24d5 : 34010000; +24d6 : 34020000; +24d7 : 34080009; +24d8 : 34070005; +24d9 : E0000028; +24da : 3465FFD0; +24db : 20A600FF; +24dc : 54C8000B; +24dd : 0046001C; +24de : 3C230004; +24df : 14A1001F; +24e0 : B8C31800; +24e1 : 3C460004; +24e2 : B4611800; +24e3 : B4C51000; +24e4 : F4C23000; +24e5 : B4C30800; +24e6 : E000001A; +24e7 : 3466FFBF; +24e8 : 20C500FF; +24e9 : 54A70008; +24ea : 0049001C; +24eb : 3C250004; +24ec : 3C420004; +24ed : B9252800; +24ee : 14C1001F; +24ef : 3463FFC9; +24f0 : E000000A; +24f1 : 3466FF9F; +24f2 : 20C500FF; +24f3 : 54A70011; +24f4 : 0049001C; +24f5 : 3C250004; +24f6 : 3C420004; +24f7 : 14C1001F; +24f8 : B9252800; +24f9 : 3463FFA9; +24fa : F4C33000; +24fb : B4621000; +24fc : B4C13000; +24fd : F4621800; +24fe : B4C52800; +24ff : B4650800; +2500 : 356B0001; +2501 : 45600003; +2502 : 41630000; +2503 : 5C60FFD7; +2504 : 1483001F; +2505 : F80031DE; +2506 : 59810000; +2507 : B9600800; +2508 : 59820004; +2509 : 2B9D0004; +250a : 2B8B000C; +250b : 2B8C0008; +250c : 379C000C; +250d : C3A00000; +250e : 379CFFF0; +250f : 5B8B0008; +2510 : 5B9D0004; +2511 : B8405800; +2512 : 3782000C; +2513 : FBFFFFB5; +2514 : 2B820010; +2515 : 59620000; +2516 : 2B9D0004; +2517 : 2B8B0008; +2518 : 379C0010; +2519 : C3A00000; +251a : 34040001; +251b : 44200006; +251c : 40250000; +251d : 3403002D; +251e : 5CA30003; +251f : 34210001; +2520 : 3404FFFF; +2521 : 34030000; +2522 : 34060009; +2523 : E0000007; +2524 : 34A5FFD0; +2525 : 20A700FF; +2526 : 54E60007; +2527 : 0863000A; +2528 : 34210001; +2529 : B4A31800; +252a : 44200003; +252b : 40250000; +252c : 5CA0FFF8; +252d : 88641800; +252e : 58430000; +252f : C3A00000; +2530 : 379CFFEC; +2531 : 5B8B0014; +2532 : 5B8C0010; +2533 : 5B8D000C; +2534 : 5B8E0008; +2535 : 5B9D0004; +2536 : 78010001; +2537 : 3821BF74; +2538 : 40210000; +2539 : 4420002C; +253a : 780D0001; +253b : 780C0001; +253c : 780B0001; +253d : 39ADB684; +253e : 398C7FEC; +253f : 396BB630; +2540 : FBFFFE88; +2541 : 59A10000; +2542 : 5C200009; +2543 : 780B0001; +2544 : 780E0001; +2545 : 780D0001; +2546 : 340C0000; +2547 : 396BB630; +2548 : 39CEB684; +2549 : 39AD7FEC; +254a : E0000007; +254b : B9800800; +254c : B9601000; +254d : F80012D1; +254e : B9600800; +254f : FBFFFE9F; +2550 : E3FFFFF0; +2551 : B9600800; +2552 : 34020050; +2553 : B9801800; +2554 : F8002322; +2555 : 59C10000; +2556 : 48200006; +2557 : 5D80000E; +2558 : 78010001; +2559 : 38217FFC; +255a : F80012C4; +255b : E000000A; +255c : B5610800; +255d : 3020FFFF; +255e : B9601000; +255f : B9A00800; +2560 : F80012BE; +2561 : B9600800; +2562 : FBFFFE8C; +2563 : 340C0001; +2564 : E3FFFFED; +2565 : 2B9D0004; +2566 : 2B8B0014; +2567 : 2B8C0010; +2568 : 2B8D000C; +2569 : 2B8E0008; +256a : 379C0014; +256b : C3A00000; +256c : 379CFFEC; +256d : 5B8B0014; +256e : 5B8C0010; +256f : 5B8D000C; +2570 : 5B8E0008; +2571 : 5B9D0004; +2572 : 78010001; +2573 : 38218014; +2574 : 780E0001; +2575 : 780D0001; +2576 : 780C0001; +2577 : F80012A7; +2578 : 340B0000; +2579 : 39CEB684; +257a : 39AD79E8; +257b : 398CB630; +257c : FBFFFE4C; +257d : 59C10000; +257e : 44200007; +257f : B9A00800; +2580 : B9801000; +2581 : 356B0001; +2582 : F800129C; +2583 : 216B00FF; +2584 : E3FFFFF8; +2585 : 5D610004; +2586 : 78010001; +2587 : 3821802C; +2588 : F8001296; +2589 : 2B9D0004; +258a : 2B8B0014; +258b : 2B8C0010; +258c : 2B8D000C; +258d : 2B8E0008; +258e : 379C0014; +258f : C3A00000; +2590 : 379CFFF8; +2591 : 5B8B0008; +2592 : 5B9D0004; +2593 : 78010001; +2594 : 3821C2AC; +2595 : 28210000; +2596 : 78030001; +2597 : 386396E8; +2598 : 28620000; +2599 : 282B000C; +259a : 78030001; +259b : 78010001; +259c : 386380E0; +259d : 38218038; +259e : F8001280; +259f : 78050001; +25a0 : 78030001; +25a1 : 78040001; +25a2 : 38A596EC; +25a3 : 386396F0; +25a4 : 388496F4; +25a5 : 28A20000; +25a6 : 28630000; +25a7 : 28840000; +25a8 : 78010001; +25a9 : 38218050; +25aa : F8001274; +25ab : 216B000F; +25ac : 356B0001; +25ad : 78010001; +25ae : 34020080; +25af : 3D6B0004; +25b0 : 38218064; +25b1 : 34030800; +25b2 : F800126C; +25b3 : 3561FF80; +25b4 : 3402000F; +25b5 : 50410006; +25b6 : 78010001; +25b7 : 3821808C; +25b8 : B9601000; +25b9 : 35630010; +25ba : F8001264; +25bb : 34010000; +25bc : 2B9D0004; +25bd : 2B8B0008; +25be : 379C0008; +25bf : C3A00000; +25c0 : 379CFFE0; +25c1 : 5B8B0020; +25c2 : 5B8C001C; +25c3 : 5B8D0018; +25c4 : 5B8E0014; +25c5 : 5B8F0010; +25c6 : 5B90000C; +25c7 : 5B910008; +25c8 : 5B9D0004; +25c9 : 28220000; +25ca : 44400006; +25cb : 780E0001; +25cc : B8205800; +25cd : 39CE9FB0; +25ce : 340F0008; +25cf : E0000033; +25d0 : 3401FFFF; +25d1 : FBFFE025; +25d2 : 3C210002; +25d3 : 78020001; +25d4 : 38429298; +25d5 : B4411000; +25d6 : 3401FFFF; +25d7 : 284C0000; +25d8 : FBFFDF45; +25d9 : 3C210002; +25da : 78030001; +25db : 386392A0; +25dc : B4611800; +25dd : 286B0000; +25de : FBFFDF3B; +25df : 3C210002; +25e0 : 78040001; +25e1 : 388492A8; +25e2 : B4812000; +25e3 : 28840000; +25e4 : 78010001; +25e5 : 382180BC; +25e6 : B9801000; +25e7 : B9601800; +25e8 : F8001236; +25e9 : 34010000; +25ea : E000001B; +25eb : B9C06000; +25ec : 340D0000; +25ed : 29610000; +25ee : 29820000; +25ef : F80032A6; +25f0 : B8208000; +25f1 : 5C200006; +25f2 : 29820004; +25f3 : 29810008; +25f4 : D8400000; +25f5 : 4A010010; +25f6 : E0000004; +25f7 : 35AD0001; +25f8 : 358C000C; +25f9 : 5DAFFFF4; +25fa : 356B0004; +25fb : 5DAF0007; +25fc : 2A220000; +25fd : 78010001; +25fe : 382180C8; +25ff : F800121F; +2600 : 3401FFEA; +2601 : E0000004; +2602 : 29610000; +2603 : B9608800; +2604 : 5C20FFE7; +2605 : 2B9D0004; +2606 : 2B8B0020; +2607 : 2B8C001C; +2608 : 2B8D0018; +2609 : 2B8E0014; +260a : 2B8F0010; +260b : 2B90000C; +260c : 2B910008; +260d : 379C0020; +260e : C3A00000; +260f : 379CFFF0; +2610 : 5B8B0010; +2611 : 5B8C000C; +2612 : 5B8D0008; +2613 : 5B9D0004; +2614 : 78010001; +2615 : 38218128; +2616 : 780B0001; +2617 : 780D0001; +2618 : 780C0001; +2619 : F8001205; +261a : 396BAE18; +261b : 39ADAEE0; +261c : 398C8140; +261d : E0000005; +261e : 29620000; +261f : B9800800; +2620 : 356B0008; +2621 : F80011FD; +2622 : 55ABFFFC; +2623 : 34010000; +2624 : 2B9D0004; +2625 : 2B8B0010; +2626 : 2B8C000C; +2627 : 2B8D0008; +2628 : 379C0010; +2629 : C3A00000; +262a : 379CFFEC; +262b : 5B8B0010; +262c : 5B8C000C; +262d : 5B8D0008; +262e : 5B9D0004; +262f : 340B0000; +2630 : B8406800; +2631 : 340C0006; +2632 : 37820014; +2633 : FBFFFEDB; +2634 : 2B830014; +2635 : B5AB1000; +2636 : 356B0001; +2637 : 30430000; +2638 : 40220000; +2639 : 6442003A; +263a : B4220800; +263b : 5D6CFFF7; +263c : 2B9D0004; +263d : 2B8B0010; +263e : 2B8C000C; +263f : 2B8D0008; +2640 : 379C0014; +2641 : C3A00000; +2642 : 379CFFF8; +2643 : 5B8B0008; +2644 : 5B9D0004; +2645 : B8404000; +2646 : 41030000; +2647 : 41040001; +2648 : 41050002; +2649 : 41060003; +264a : 41070004; +264b : 41080005; +264c : 78020001; +264d : 38428150; +264e : B8205800; +264f : F80011C1; +2650 : B9600800; +2651 : 2B9D0004; +2652 : 2B8B0008; +2653 : 379C0008; +2654 : C3A00000; +2655 : 379CFFD0; +2656 : 5B8B0008; +2657 : 5B9D0004; +2658 : B8205800; +2659 : 28210000; +265a : 44200005; +265b : 78020001; +265c : 38428170; +265d : F8003238; +265e : 5C200004; +265f : 3781002C; +2660 : F80012FF; +2661 : E000002B; +2662 : 29610000; +2663 : 78020001; +2664 : 38428174; +2665 : F8003230; +2666 : 5C200008; +2667 : 378B002C; +2668 : B9600800; +2669 : F80012F6; +266a : B9601000; +266b : 34010000; +266c : F8001F23; +266d : E000001F; +266e : 29610000; +266f : 78020001; +2670 : 3842817C; +2671 : F8003224; +2672 : 5C20000B; +2673 : 29630004; +2674 : 44610009; +2675 : 378B002C; +2676 : B8600800; +2677 : B9601000; +2678 : FBFFFFB2; +2679 : B9600800; +267a : F80012D1; +267b : F80013CC; +267c : E0000010; +267d : 29610000; +267e : 78020001; +267f : 38428180; +2680 : F8003215; +2681 : B8201800; +2682 : 3402FFEA; +2683 : 5C200011; +2684 : 29610004; +2685 : 4423000F; +2686 : 378B002C; +2687 : B9601000; +2688 : FBFFFFA2; +2689 : 34010000; +268a : B9601000; +268b : F8001F6D; +268c : 3782002C; +268d : 3781000C; +268e : FBFFFFB4; +268f : B8201000; +2690 : 78010001; +2691 : 38218188; +2692 : F800118C; +2693 : 34020000; +2694 : B8400800; +2695 : 2B9D0004; +2696 : 2B8B0008; +2697 : 379C0030; +2698 : C3A00000; +2699 : 379CFFE8; +269a : 5B8B0018; +269b : 5B8C0014; +269c : 5B8D0010; +269d : 5B8E000C; +269e : 5B8F0008; +269f : 5B9D0004; +26a0 : B8205800; +26a1 : 28210000; +26a2 : 44200024; +26a3 : 78020001; +26a4 : 384281A0; +26a5 : F80031F0; +26a6 : 5C20000D; +26a7 : 78010001; +26a8 : 78020001; +26a9 : 3821AEEC; +26aa : 3842B0AC; +26ab : E0000006; +26ac : 5820001C; +26ad : 58200018; +26ae : 58200014; +26af : 58200010; +26b0 : 34210020; +26b1 : 5441FFFB; +26b2 : E000002C; +26b3 : 29610000; +26b4 : 78020001; +26b5 : 384281A8; +26b6 : F80031DF; +26b7 : B8201000; +26b8 : 5C20000E; +26b9 : 29610004; +26ba : 44220005; +26bb : F8000554; +26bc : 78020001; +26bd : 3842B0B4; +26be : 58410000; +26bf : 78020001; +26c0 : 3842B0B4; +26c1 : 28420000; +26c2 : 78010001; +26c3 : 382181AC; +26c4 : F800115A; +26c5 : E0000019; +26c6 : 78010001; +26c7 : 382181CC; +26c8 : 780B0001; +26c9 : 780D0001; +26ca : 780C0001; +26cb : F8001153; +26cc : 396BAEEC; +26cd : 39ADB0AC; +26ce : 398C81FC; +26cf : E000000E; +26d0 : 29610018; +26d1 : 340203E8; +26d2 : 296F0010; +26d3 : F80030A2; +26d4 : 296E0014; +26d5 : 2965001C; +26d6 : 29660000; +26d7 : B8202000; +26d8 : B9E01000; +26d9 : B9800800; +26da : B9C01800; +26db : F8001143; +26dc : 356B0020; +26dd : 55ABFFF3; +26de : 34010000; +26df : 2B9D0004; +26e0 : 2B8B0018; +26e1 : 2B8C0014; +26e2 : 2B8D0010; +26e3 : 2B8E000C; +26e4 : 2B8F0008; +26e5 : 379C0018; +26e6 : C3A00000; +26e7 : 379CFFFC; +26e8 : 5B9D0004; +26e9 : 78020000; +26ea : 384200A0; +26eb : 28420000; +26ec : 78010001; +26ed : 38218220; +26ee : F8001130; +26ef : 34010000; +26f0 : 2B9D0004; +26f1 : 379C0004; +26f2 : C3A00000; +26f3 : 379CFFF8; +26f4 : 5B9D0004; +26f5 : B8201000; +26f6 : 28210000; +26f7 : 4420000D; +26f8 : 28420004; +26f9 : 5C40000B; +26fa : 37820008; +26fb : FBFFFE1F; +26fc : 2B820008; +26fd : 78010001; +26fe : 382196F8; +26ff : 084203E8; +2700 : 58220000; +2701 : 78010001; +2702 : 38218798; +2703 : E0000003; +2704 : 78010001; +2705 : 38218224; +2706 : F8001118; +2707 : 34010000; +2708 : 2B9D0004; +2709 : 379C0008; +270a : C3A00000; +270b : 379CFFF8; +270c : 5B8B0008; +270d : 5B9D0004; +270e : B8205800; +270f : 28210000; +2710 : 5C200011; +2711 : 78010001; +2712 : 3821C294; +2713 : 28220000; +2714 : 340B0000; +2715 : 64420000; +2716 : 58220000; +2717 : 78010001; +2718 : 3821BFB4; +2719 : 28230000; +271a : 3463FFFF; +271b : 58230000; +271c : 5C4B002B; +271d : 78010001; +271e : 38218248; +271f : F80010FF; +2720 : E0000027; +2721 : 78020001; +2722 : 3842825C; +2723 : F8003172; +2724 : 5C200007; +2725 : F80012A3; +2726 : B8201000; +2727 : 78010001; +2728 : 38218A24; +2729 : F80010F5; +272a : E000001C; +272b : 29610000; +272c : 78020001; +272d : 3842712C; +272e : F8003167; +272f : 5C20000B; +2730 : 78010001; +2731 : 3821C294; +2732 : 34020001; +2733 : 58220000; +2734 : 78010001; +2735 : 3821BFB4; +2736 : 28220000; +2737 : 3442FFFF; +2738 : 58220000; +2739 : E000000D; +273a : 29610000; +273b : 78020001; +273c : 38428260; +273d : F8003158; +273e : 340BFFEA; +273f : 5C200008; +2740 : 78010001; +2741 : 3821C294; +2742 : 58200000; +2743 : 78010001; +2744 : 38218248; +2745 : F80010D9; +2746 : 340B0000; +2747 : B9600800; +2748 : 2B9D0004; +2749 : 2B8B0008; +274a : 379C0008; +274b : C3A00000; +274c : 379CFFB8; +274d : 5B8B0028; +274e : 5B8C0024; +274f : 5B8D0020; +2750 : 5B8E001C; +2751 : 5B8F0018; +2752 : 5B900014; +2753 : 5B910010; +2754 : 5B92000C; +2755 : 5B930008; +2756 : 5B9D0004; +2757 : B8205800; +2758 : 28210000; +2759 : 442000C8; +275a : 78020001; +275b : 38428280; +275c : F8003139; +275d : 5C200008; +275e : F8001ECA; +275f : 3403FFFF; +2760 : 34020000; +2761 : 5C2300C4; +2762 : 78010001; +2763 : 38218288; +2764 : E000003C; +2765 : 29610010; +2766 : 44200045; +2767 : 29610000; +2768 : 78020001; +2769 : 3842829C; +276a : F800312B; +276b : 5C200040; +276c : 29610004; +276d : 34020010; +276e : 356C0004; +276f : F800324A; +2770 : 3C210018; +2771 : 34030000; +2772 : 14210018; +2773 : 3784002C; +2774 : E0000007; +2775 : 29820000; +2776 : B4832800; +2777 : B4431000; +2778 : 40420000; +2779 : 34630001; +277a : 30A20000; +277b : B0601000; +277c : 4822FFF9; +277d : B4820800; +277e : 34030020; +277f : 3404000F; +2780 : E0000005; +2781 : 34420001; +2782 : 30230000; +2783 : B0401000; +2784 : 34210001; +2785 : 4C82FFFC; +2786 : 29610008; +2787 : F8000488; +2788 : 5B810040; +2789 : 2961000C; +278a : F8000485; +278b : 5B810044; +278c : 29610010; +278d : F8000482; +278e : 5B81003C; +278f : 34020001; +2790 : 3781002C; +2791 : 34030000; +2792 : F8001EF6; +2793 : 3C220018; +2794 : 3401FFFE; +2795 : 14420018; +2796 : 5C410006; +2797 : 78010001; +2798 : 382182A0; +2799 : F8001085; +279a : 3402FFE4; +279b : E000008A; +279c : 3401FFFF; +279d : 5C410006; +279e : 78010001; +279f : 382182B0; +27a0 : F800107E; +27a1 : 3402FFFB; +27a2 : E0000083; +27a3 : 4C400004; +27a4 : 78010001; +27a5 : 382182BC; +27a6 : E0000023; +27a7 : 78010001; +27a8 : 382182D8; +27a9 : F8001075; +27aa : E0000075; +27ab : 29610000; +27ac : 78020001; +27ad : 384282E8; +27ae : F80030E7; +27af : 5C200030; +27b0 : 78100001; +27b1 : 780F0001; +27b2 : 780E0001; +27b3 : 340C0000; +27b4 : 34110000; +27b5 : 3792002C; +27b6 : 3A108304; +27b7 : 3793003C; +27b8 : 39EF7FE8; +27b9 : 39CE830C; +27ba : BA400800; +27bb : 34020000; +27bc : B9801800; +27bd : F8001ECB; +27be : 3C2B0018; +27bf : 156B0018; +27c0 : 5D600005; +27c1 : 78010001; +27c2 : 382182F0; +27c3 : F800105B; +27c4 : E000005B; +27c5 : 4D600007; +27c6 : 78010001; +27c7 : 382182BC; +27c8 : B9601000; +27c9 : F8001055; +27ca : 3402FFF2; +27cb : E000005A; +27cc : 358C0001; +27cd : BA000800; +27ce : B9801000; +27cf : F800104F; +27d0 : BA406800; +27d1 : 41A20000; +27d2 : B9E00800; +27d3 : 35AD0001; +27d4 : F800104A; +27d5 : 5DB3FFFC; +27d6 : 2B820040; +27d7 : 2B830044; +27d8 : 2B84003C; +27d9 : 36310001; +27da : B9C00800; +27db : B2208800; +27dc : F8001042; +27dd : 4971FFDD; +27de : E0000041; +27df : 29610000; +27e0 : 78020001; +27e1 : 3842832C; +27e2 : F80030B3; +27e3 : 5C200032; +27e4 : F8001707; +27e5 : 3C2C0018; +27e6 : 3401FFED; +27e7 : 158C0018; +27e8 : 5D810006; +27e9 : 78010001; +27ea : 38218334; +27eb : F8001033; +27ec : 3402FFED; +27ed : E0000038; +27ee : 780B0001; +27ef : 396BBFBC; +27f0 : 780D0001; +27f1 : 3401FFFB; +27f2 : 356E0010; +27f3 : 39AD7FE8; +27f4 : 5D810004; +27f5 : 78010001; +27f6 : 38218340; +27f7 : E3FFFFA9; +27f8 : 41620000; +27f9 : B9A00800; +27fa : 356B0001; +27fb : F8001023; +27fc : 5D6EFFFC; +27fd : 78010001; +27fe : 38218798; +27ff : F800101F; +2800 : 3401FFFA; +2801 : 5D810006; +2802 : 78010001; +2803 : 38218350; +2804 : F800101A; +2805 : 3402FFFA; +2806 : E000001F; +2807 : 78020001; +2808 : 78030001; +2809 : 78040001; +280a : 3842BF40; +280b : 3863BF44; +280c : 3884A808; +280d : 28420000; +280e : 28630000; +280f : 28840000; +2810 : 78010001; +2811 : 38218368; +2812 : F800100C; +2813 : B9801000; +2814 : E0000011; +2815 : 29610004; +2816 : 4420000B; +2817 : 29610000; +2818 : 78020001; +2819 : 38428390; +281a : F800307B; +281b : 5C200006; +281c : 29610004; +281d : F80003F2; +281e : F80011F7; +281f : 34020000; +2820 : E0000005; +2821 : 78010001; +2822 : 3821826C; +2823 : F8000FFB; +2824 : 3402FFEA; +2825 : B8400800; +2826 : 2B9D0004; +2827 : 2B8B0028; +2828 : 2B8C0024; +2829 : 2B8D0020; +282a : 2B8E001C; +282b : 2B8F0018; +282c : 2B900014; +282d : 2B910010; +282e : 2B92000C; +282f : 2B930008; +2830 : 379C0048; +2831 : C3A00000; +2832 : 379CFFE8; +2833 : 5B8B0010; +2834 : 5B8C000C; +2835 : 5B8D0008; +2836 : 5B9D0004; +2837 : B8205800; +2838 : 28210000; +2839 : 78020001; +283a : 38428398; +283b : F800305A; +283c : 5C200011; +283d : 2963000C; +283e : 3402FFEA; +283f : 44610086; +2840 : 29610004; +2841 : F80003CE; +2842 : B8206800; +2843 : 29610008; +2844 : F80003CB; +2845 : B8206000; +2846 : 2961000C; +2847 : F80003C8; +2848 : B8201800; +2849 : B9801000; +284a : B9A00800; +284b : F8002A54; +284c : E0000078; +284d : 29610000; +284e : 78020001; +284f : 384283A0; +2850 : F8003045; +2851 : B8201800; +2852 : 5C200007; +2853 : 29610004; +2854 : 3402FFEA; +2855 : 44230070; +2856 : F80003B9; +2857 : F8002B12; +2858 : E0000060; +2859 : 29610000; +285a : 78020001; +285b : 38428264; +285c : F8003039; +285d : 5C200003; +285e : F8002BAF; +285f : E0000065; +2860 : 29610000; +2861 : 78020001; +2862 : 384283A4; +2863 : F8003032; +2864 : 5C20000D; +2865 : 29630008; +2866 : 3402FFEA; +2867 : 4461005E; +2868 : 29610004; +2869 : F80003A6; +286a : B8206000; +286b : 29610008; +286c : F80003A3; +286d : B8201000; +286e : B9800800; +286f : F8002B0B; +2870 : E0000054; +2871 : 29610000; +2872 : 78020001; +2873 : 384283A8; +2874 : F8003021; +2875 : B8201800; +2876 : 5C20000E; +2877 : 29610004; +2878 : 3402FFEA; +2879 : 4423004C; +287a : F8000395; +287b : 37820018; +287c : 37830014; +287d : F8002B25; +287e : 2B820018; +287f : 2B830014; +2880 : 78010001; +2881 : 382183AC; +2882 : F8000F9C; +2883 : E0000041; +2884 : 29610000; +2885 : 78020001; +2886 : 384280E4; +2887 : F800300E; +2888 : B8201800; +2889 : 5C200007; +288a : 29610004; +288b : 3402FFEA; +288c : 44230039; +288d : F8000382; +288e : F8002ABD; +288f : E0000035; +2890 : 29610000; +2891 : 78020001; +2892 : 384280EC; +2893 : F8003002; +2894 : B8201800; +2895 : 5C200007; +2896 : 29610004; +2897 : 3402FFEA; +2898 : 4423002D; +2899 : F8000376; +289a : F8002AC2; +289b : E0000029; +289c : 29610000; +289d : 78020001; +289e : 384283B4; +289f : F8002FF6; +28a0 : 5C20000D; +28a1 : 29630008; +28a2 : 3402FFEA; +28a3 : 44610022; +28a4 : 29610004; +28a5 : F800036A; +28a6 : B8206000; +28a7 : 29610008; +28a8 : F8000367; +28a9 : B8201000; +28aa : B9800800; +28ab : F8002BD6; +28ac : E0000018; +28ad : 29610000; +28ae : 78020001; +28af : 384283BC; +28b0 : F8002FE5; +28b1 : B8201800; +28b2 : 5C20000B; +28b3 : 29610004; +28b4 : 3402FFEA; +28b5 : 44230010; +28b6 : F8000359; +28b7 : F8002BBB; +28b8 : B8201000; +28b9 : 78010001; +28ba : 38217FC0; +28bb : F8000F63; +28bc : E0000008; +28bd : 29610000; +28be : 78020001; +28bf : 384283C4; +28c0 : F8002FD5; +28c1 : 3402FFEA; +28c2 : 5C200003; +28c3 : F8002C6D; +28c4 : 34020000; +28c5 : B8400800; +28c6 : 2B9D0004; +28c7 : 2B8B0010; +28c8 : 2B8C000C; +28c9 : 2B8D0008; +28ca : 379C0018; +28cb : C3A00000; +28cc : 379CFFF0; +28cd : 5B8B000C; +28ce : 5B8C0008; +28cf : 5B9D0004; +28d0 : B8205800; +28d1 : 28210000; +28d2 : 4420000B; +28d3 : 78020001; +28d4 : 384283D4; +28d5 : F8002FC0; +28d6 : B8206000; +28d7 : 5C200006; +28d8 : 37810010; +28d9 : F8001796; +28da : 340BFFFF; +28db : 49810021; +28dc : E000001C; +28dd : 29610000; +28de : 340B0000; +28df : 5C20001D; +28e0 : 37810010; +28e1 : 34020000; +28e2 : F8001E78; +28e3 : 4D61000A; +28e4 : 2B820010; +28e5 : 78010001; +28e6 : 382183DC; +28e7 : F8000F37; +28e8 : 2B820010; +28e9 : 78010001; +28ea : 38219700; +28eb : 58220000; +28ec : E0000010; +28ed : 78010001; +28ee : 38218404; +28ef : F8000F2F; +28f0 : 37810010; +28f1 : F800177E; +28f2 : 340BFFFF; +28f3 : 48010009; +28f4 : 2B820010; +28f5 : 78010001; +28f6 : 38219700; +28f7 : 58220000; +28f8 : 37810010; +28f9 : 34020001; +28fa : F8001E60; +28fb : B8205800; +28fc : B9600800; +28fd : 2B9D0004; +28fe : 2B8B000C; +28ff : 2B8C0008; +2900 : 379C0010; +2901 : C3A00000; +2902 : 379CFFE8; +2903 : 5B8B000C; +2904 : 5B8C0008; +2905 : 5B9D0004; +2906 : B8205800; +2907 : 37820018; +2908 : 37810010; +2909 : F8001A06; +290a : 29610008; +290b : 44200014; +290c : 29610000; +290d : 78020001; +290e : 3842817C; +290f : F8002F86; +2910 : 5C20000F; +2911 : FBFFDC08; +2912 : 34030003; +2913 : 3402FFF0; +2914 : 44230040; +2915 : 29610004; +2916 : F80002F9; +2917 : B8206000; +2918 : 29610008; +2919 : F80002F6; +291a : B8201800; +291b : B9801000; +291c : 1581001F; +291d : 34040003; +291e : E0000020; +291f : 29610000; +2920 : 4420000F; +2921 : 78020001; +2922 : 38428438; +2923 : F8002F72; +2924 : 5C20000B; +2925 : FBFFDBF4; +2926 : 34020003; +2927 : 44220023; +2928 : 29610004; +2929 : F80002E6; +292a : B8201000; +292b : 34030000; +292c : 1421001F; +292d : 34040001; +292e : E0000010; +292f : 29610000; +2930 : 44200010; +2931 : 78020001; +2932 : 38428440; +2933 : F8002F62; +2934 : 5C20000C; +2935 : FBFFDBE4; +2936 : 34020003; +2937 : 44220013; +2938 : 29610004; +2939 : F80002D6; +293a : B8201800; +293b : 34020000; +293c : 34010000; +293d : 34040002; +293e : F80019B1; +293f : E0000014; +2940 : 29610000; +2941 : 44200009; +2942 : 78020001; +2943 : 38428448; +2944 : F8002F51; +2945 : 5C200005; +2946 : 78010001; +2947 : 382183AC; +2948 : 2B820014; +2949 : E0000008; +294a : 2B820014; +294b : 2B810010; +294c : 34030000; +294d : F80001EA; +294e : B8201000; +294f : 78010001; +2950 : 3821844C; +2951 : 2B830018; +2952 : F8000ECC; +2953 : 34020000; +2954 : B8400800; +2955 : 2B9D0004; +2956 : 2B8B000C; +2957 : 2B8C0008; +2958 : 379C0018; +2959 : C3A00000; +295a : 78010001; +295b : 3821B0B0; +295c : 34020001; +295d : 58220000; +295e : 34010000; +295f : C3A00000; +2960 : 379CFFEC; +2961 : 5B8B0014; +2962 : 5B8C0010; +2963 : 5B8D000C; +2964 : 5B8E0008; +2965 : 5B9D0004; +2966 : B8205800; +2967 : 28210000; +2968 : 5C200003; +2969 : F80015EF; +296a : E0000057; +296b : 29610004; +296c : 340CFFEA; +296d : 44200055; +296e : 2962000C; +296f : 44400008; +2970 : F800029F; +2971 : 5C200006; +2972 : 2961000C; +2973 : 340D0050; +2974 : F800029B; +2975 : 3C2E000A; +2976 : E0000007; +2977 : 2961000C; +2978 : 340E0001; +2979 : 340D0050; +297a : 44200003; +297b : F8000294; +297c : 202D00FF; +297d : 29610000; +297e : 78020001; +297f : 38428470; +2980 : F8002F15; +2981 : 5C20000D; +2982 : 29620008; +2983 : 4441000B; +2984 : 29610004; +2985 : F800028A; +2986 : B8206000; +2987 : 29610008; +2988 : F8000287; +2989 : B8201000; +298a : B9C01800; +298b : B9800800; +298c : B9A02000; +298d : E0000010; +298e : 29610000; +298f : 78020001; +2990 : 38428470; +2991 : F8002F04; +2992 : 5C20000D; +2993 : 780C0001; +2994 : 398CBFA4; +2995 : 29820004; +2996 : 44410009; +2997 : 29610004; +2998 : F8000277; +2999 : 5C200006; +299a : 2982000C; +299b : 29830008; +299c : 34040000; +299d : F8001F7C; +299e : E0000023; +299f : 29610000; +29a0 : 78020001; +29a1 : 38428474; +29a2 : F8002EF3; +29a3 : 5C20000D; +29a4 : 29620008; +29a5 : 4441000B; +29a6 : 29610004; +29a7 : F8000268; +29a8 : B8206000; +29a9 : 29610008; +29aa : F8000265; +29ab : B8201000; +29ac : B9C01800; +29ad : B9800800; +29ae : B9A02000; +29af : E0000011; +29b0 : 29610000; +29b1 : 78020001; +29b2 : 38428474; +29b3 : F8002EE2; +29b4 : 340CFFEA; +29b5 : 5C20000D; +29b6 : 780D0001; +29b7 : 39ADBFA4; +29b8 : 29A20004; +29b9 : 44410009; +29ba : 29610004; +29bb : F8000254; +29bc : 5C200006; +29bd : 29A2000C; +29be : 29A30008; +29bf : 34040000; +29c0 : F8001F19; +29c1 : 340C0000; +29c2 : B9800800; +29c3 : 2B9D0004; +29c4 : 2B8B0014; +29c5 : 2B8C0010; +29c6 : 2B8D000C; +29c7 : 2B8E0008; +29c8 : 379C0014; +29c9 : C3A00000; +29ca : 379CFFF8; +29cb : 5B8B0008; +29cc : 5B9D0004; +29cd : B8205800; +29ce : 28210000; +29cf : 4420000C; +29d0 : 78020001; +29d1 : 38428484; +29d2 : F8002EC3; +29d3 : 5C200008; +29d4 : 34010001; +29d5 : FBFFE695; +29d6 : 78010001; +29d7 : 382196FC; +29d8 : 34020001; +29d9 : 58220000; +29da : E000000B; +29db : 29610000; +29dc : 44200009; +29dd : 78020001; +29de : 3842848C; +29df : F8002EB6; +29e0 : 5C200005; +29e1 : FBFFE689; +29e2 : 78010001; +29e3 : 382196FC; +29e4 : 58200000; +29e5 : 78010001; +29e6 : 382196FC; +29e7 : 28210000; +29e8 : 78020001; +29e9 : 38428480; +29ea : 44200003; +29eb : 78020001; +29ec : 3842847C; +29ed : 78010001; +29ee : 38218494; +29ef : F8000E2F; +29f0 : 34010000; +29f1 : 2B9D0004; +29f2 : 2B8B0008; +29f3 : 379C0008; +29f4 : C3A00000; +29f5 : 379CFFEC; +29f6 : 5B8B0010; +29f7 : 5B8C000C; +29f8 : 5B8D0008; +29f9 : 5B9D0004; +29fa : 340B0000; +29fb : B8406800; +29fc : 340C0004; +29fd : 37820014; +29fe : FBFFFB1C; +29ff : 2B830014; +2a00 : B5AB1000; +2a01 : 356B0001; +2a02 : 30430000; +2a03 : 40220000; +2a04 : 6442002E; +2a05 : B4220800; +2a06 : 5D6CFFF7; +2a07 : 2B9D0004; +2a08 : 2B8B0010; +2a09 : 2B8C000C; +2a0a : 2B8D0008; +2a0b : 379C0014; +2a0c : C3A00000; +2a0d : 379CFFF8; +2a0e : 5B8B0008; +2a0f : 5B9D0004; +2a10 : B8403000; +2a11 : 40C30000; +2a12 : 40C40001; +2a13 : 40C50002; +2a14 : 40C60003; +2a15 : 78020001; +2a16 : 384284B0; +2a17 : B8205800; +2a18 : F8000DF8; +2a19 : B9600800; +2a1a : 2B9D0004; +2a1b : 2B8B0008; +2a1c : 379C0008; +2a1d : C3A00000; +2a1e : 379CFFE0; +2a1f : 5B8B0008; +2a20 : 5B9D0004; +2a21 : B8205800; +2a22 : 28210000; +2a23 : 44200005; +2a24 : 78020001; +2a25 : 38428170; +2a26 : F8002E6F; +2a27 : 5C200004; +2a28 : 37810020; +2a29 : F8000497; +2a2a : E0000012; +2a2b : 29610000; +2a2c : 78020001; +2a2d : 3842817C; +2a2e : F8002E67; +2a2f : B8201800; +2a30 : 3402FFEA; +2a31 : 5C200024; +2a32 : 29610004; +2a33 : 44230022; +2a34 : 78020001; +2a35 : 3842B8F8; +2a36 : 34030002; +2a37 : 58430000; +2a38 : 37820020; +2a39 : FBFFFFBC; +2a3a : 37810020; +2a3b : F800048E; +2a3c : 378B000C; +2a3d : 37820020; +2a3e : B9600800; +2a3f : FBFFFFCE; +2a40 : 78010001; +2a41 : 3821B8F8; +2a42 : 28210000; +2a43 : 34020001; +2a44 : 44220009; +2a45 : 44200004; +2a46 : 34020002; +2a47 : 5C22000D; +2a48 : E0000008; +2a49 : 78010001; +2a4a : 382184BC; +2a4b : F8000DD3; +2a4c : E0000008; +2a4d : 78010001; +2a4e : 382184D8; +2a4f : E0000003; +2a50 : 78010001; +2a51 : 382184F8; +2a52 : B9601000; +2a53 : F8000DCB; +2a54 : 34020000; +2a55 : B8400800; +2a56 : 2B9D0004; +2a57 : 2B8B0008; +2a58 : 379C0020; +2a59 : C3A00000; +2a5a : 379CFFFC; +2a5b : 5B9D0004; +2a5c : 28210000; +2a5d : 44200005; +2a5e : FBFFD8A1; +2a5f : 78020001; +2a60 : 3842B0CC; +2a61 : 58410000; +2a62 : 78020001; +2a63 : 3842B0CC; +2a64 : 28420000; +2a65 : 78010001; +2a66 : 38218520; +2a67 : F8000DB7; +2a68 : 34010000; +2a69 : 2B9D0004; +2a6a : 379C0004; +2a6b : C3A00000; +2a6c : 379CFFF4; +2a6d : 5B8B000C; +2a6e : 5B8C0008; +2a6f : 5B9D0004; +2a70 : B8205800; +2a71 : 28210000; +2a72 : 4420000B; +2a73 : 78020001; +2a74 : 38428280; +2a75 : F8002E20; +2a76 : B8206000; +2a77 : 5C200006; +2a78 : F8001D24; +2a79 : 4C2C0026; +2a7a : 78010001; +2a7b : 38218540; +2a7c : E000000E; +2a7d : 29610004; +2a7e : 44200011; +2a7f : 29610000; +2a80 : 78020001; +2a81 : 3842829C; +2a82 : F8002E13; +2a83 : B8206000; +2a84 : 5C20000B; +2a85 : B9600800; +2a86 : F8001D3C; +2a87 : 4C2C0005; +2a88 : 78010001; +2a89 : 38218560; +2a8a : F8000D94; +2a8b : E0000014; +2a8c : 78010001; +2a8d : 3821857C; +2a8e : E3FFFFFC; +2a8f : 29610000; +2a90 : 44200008; +2a91 : 78020001; +2a92 : 384282E8; +2a93 : F8002E02; +2a94 : 5C200004; +2a95 : FBFFFAD7; +2a96 : F8001DA0; +2a97 : E0000008; +2a98 : 29610000; +2a99 : 44200006; +2a9a : 78020001; +2a9b : 38428584; +2a9c : F8002DF9; +2a9d : 5C200002; +2a9e : FBFFFA92; +2a9f : 34010000; +2aa0 : 2B9D0004; +2aa1 : 2B8B000C; +2aa2 : 2B8C0008; +2aa3 : 379C000C; +2aa4 : C3A00000; +2aa5 : 379CFFF4; +2aa6 : 5B8B0008; +2aa7 : 5B9D0004; +2aa8 : B8205800; +2aa9 : 28210000; +2aaa : 44200027; +2aab : 78020001; +2aac : 38428170; +2aad : F8002DE8; +2aae : 44200023; +2aaf : 29610000; +2ab0 : 78020001; +2ab1 : 3842817C; +2ab2 : F8002DE3; +2ab3 : B8201000; +2ab4 : 5C200013; +2ab5 : 29610004; +2ab6 : 44220011; +2ab7 : 3782000C; +2ab8 : FBFFFA62; +2ab9 : 2B82000C; +2aba : 34030FFE; +2abb : 3441FFFF; +2abc : 50610007; +2abd : 29630004; +2abe : 78010001; +2abf : 3821858C; +2ac0 : F8000D5E; +2ac1 : 3402FFEA; +2ac2 : E0000017; +2ac3 : 78010001; +2ac4 : 38219704; +2ac5 : 58220000; +2ac6 : E000000A; +2ac7 : 29610000; +2ac8 : 78020001; +2ac9 : 38428260; +2aca : F8002DCB; +2acb : 3402FFEA; +2acc : 5C20000D; +2acd : 78010001; +2ace : 38219704; +2acf : 58200000; +2ad0 : F8000F77; +2ad1 : 78010001; +2ad2 : 38219704; +2ad3 : 28220000; +2ad4 : 78010001; +2ad5 : 382185A4; +2ad6 : B8401800; +2ad7 : F8000D47; +2ad8 : 34020000; +2ad9 : B8400800; +2ada : 2B9D0004; +2adb : 2B8B0008; +2adc : 379C000C; +2add : C3A00000; +2ade : 379CFFDC; +2adf : 5B8B0010; +2ae0 : 5B8C000C; +2ae1 : 5B8D0008; +2ae2 : 5B9D0004; +2ae3 : B8205800; +2ae4 : 28210000; +2ae5 : 5C200012; +2ae6 : 37820020; +2ae7 : 3783001C; +2ae8 : 37840018; +2ae9 : 37810024; +2aea : F800132E; +2aeb : 78010001; +2aec : 382185C8; +2aed : F8000D31; +2aee : 2B820024; +2aef : 2B830020; +2af0 : 2B84001C; +2af1 : 2B850018; +2af2 : 78010001; +2af3 : 382185E0; +2af4 : F8000D2A; +2af5 : 340C0000; +2af6 : E000003A; +2af7 : 78020001; +2af8 : 3842860C; +2af9 : F8002D9C; +2afa : B8201000; +2afb : 5C200007; +2afc : 29610004; +2afd : 44220005; +2afe : F8000111; +2aff : B8205800; +2b00 : 34020001; +2b01 : E000000C; +2b02 : 29610000; +2b03 : 78020001; +2b04 : 38428624; +2b05 : F8002D90; +2b06 : B8201000; +2b07 : 5C20000F; +2b08 : 29610004; +2b09 : 4422000D; +2b0a : F8000105; +2b0b : B8205800; +2b0c : 34020000; +2b0d : 37830014; +2b0e : F8001324; +2b0f : B8206000; +2b10 : 5C200020; +2b11 : 78010001; +2b12 : 38218610; +2b13 : B9601000; +2b14 : 2B830014; +2b15 : E000001A; +2b16 : 29610000; +2b17 : 78020001; +2b18 : 38428628; +2b19 : F8002D7C; +2b1a : B8201000; +2b1b : 340CFFEA; +2b1c : 5C200014; +2b1d : 29610004; +2b1e : 44220012; +2b1f : 29620008; +2b20 : 44400010; +2b21 : F80000EE; +2b22 : B8206800; +2b23 : 29610008; +2b24 : F80000EB; +2b25 : B8201000; +2b26 : 5B810014; +2b27 : B9A00800; +2b28 : F8001351; +2b29 : B8206000; +2b2a : 5C200006; +2b2b : 2B820014; +2b2c : 78010001; +2b2d : 3821862C; +2b2e : B9A01800; +2b2f : F8000CEF; +2b30 : B9800800; +2b31 : 2B9D0004; +2b32 : 2B8B0010; +2b33 : 2B8C000C; +2b34 : 2B8D0008; +2b35 : 379C0024; +2b36 : C3A00000; +2b37 : 379CFFD0; +2b38 : 5B8B0030; +2b39 : 5B8C002C; +2b3a : 5B8D0028; +2b3b : 5B8E0024; +2b3c : 5B8F0020; +2b3d : 5B90001C; +2b3e : 5B910018; +2b3f : 5B920014; +2b40 : 5B930010; +2b41 : 5B94000C; +2b42 : 5B9D0008; +2b43 : B8609000; +2b44 : 78030001; +2b45 : 38638EF4; +2b46 : B8406000; +2b47 : B8400800; +2b48 : 28620000; +2b49 : F8002C3C; +2b4a : 78030001; +2b4b : 38638EF4; +2b4c : 28620000; +2b4d : B8205800; +2b4e : B9800800; +2b4f : F8002C26; +2b50 : B820A000; +2b51 : 3402003C; +2b52 : B9600800; +2b53 : F8002C32; +2b54 : 34020E10; +2b55 : B8207800; +2b56 : B9600800; +2b57 : F8002C2E; +2b58 : 3402003C; +2b59 : F8002C1C; +2b5a : B8208000; +2b5b : 34020E10; +2b5c : B9600800; +2b5d : F8002C18; +2b5e : B8208800; +2b5f : BA807000; +2b60 : 340B07B2; +2b61 : E000000F; +2b62 : 3402016D; +2b63 : 5D80000B; +2b64 : 34020064; +2b65 : B9600800; +2b66 : F8002BEF; +2b67 : 3402016E; +2b68 : 5C2C0006; +2b69 : 34020190; +2b6a : B9600800; +2b6b : F8002BEA; +2b6c : 64220000; +2b6d : 3442016D; +2b6e : C9C27000; +2b6f : 356B0001; +2b70 : 216C0003; +2b71 : 3402016D; +2b72 : 5D80000B; +2b73 : 34020064; +2b74 : B9600800; +2b75 : F8002BE0; +2b76 : 3402016E; +2b77 : 5C2C0006; +2b78 : 34020190; +2b79 : B9600800; +2b7a : F8002BDB; +2b7b : 64220000; +2b7c : 3442016D; +2b7d : 51C2FFE5; +2b7e : 34020064; +2b7f : B9600800; +2b80 : F8002BD5; +2b81 : 34020190; +2b82 : B8209800; +2b83 : B9600800; +2b84 : F8002BD1; +2b85 : 78020001; +2b86 : 340D0000; +2b87 : 64250000; +2b88 : 384292BC; +2b89 : E000000D; +2b8a : 34040000; +2b8b : 5D800004; +2b8c : 34040001; +2b8d : 5E6C0002; +2b8e : B8A02000; +2b8f : 0884000C; +2b90 : B48D2000; +2b91 : 3C840002; +2b92 : 35AD0001; +2b93 : B4442000; +2b94 : 28810000; +2b95 : C9C17000; +2b96 : 34040000; +2b97 : 5D800004; +2b98 : 34040001; +2b99 : 5E6C0002; +2b9a : B8A02000; +2b9b : 0884000C; +2b9c : B48D2000; +2b9d : 3C840002; +2b9e : B4442000; +2b9f : 28810000; +2ba0 : 51C1FFEA; +2ba1 : 34010001; +2ba2 : 35CE0001; +2ba3 : 4641001D; +2ba4 : 780C0001; +2ba5 : 34010002; +2ba6 : 398CB694; +2ba7 : 46410028; +2ba8 : 36810004; +2ba9 : 34020007; +2baa : F8002BDB; +2bab : 3C210002; +2bac : 78130001; +2bad : 78020001; +2bae : 3DAD0002; +2baf : 38429338; +2bb0 : 3A73931C; +2bb1 : B6619800; +2bb2 : B44D6800; +2bb3 : 78120001; +2bb4 : 2A630000; +2bb5 : 29A40000; +2bb6 : 3A52865C; +2bb7 : B9800800; +2bb8 : BA401000; +2bb9 : B9C02800; +2bba : B9603000; +2bbb : BA203800; +2bbc : BA004000; +2bbd : 5B8F0004; +2bbe : F8000C52; +2bbf : E000001A; +2bc0 : 78010001; +2bc1 : 3DAD0002; +2bc2 : 38219338; +2bc3 : B42D6800; +2bc4 : 29A30000; +2bc5 : 78010001; +2bc6 : 78020001; +2bc7 : 3842867C; +2bc8 : B9C02000; +2bc9 : BA202800; +2bca : BA003000; +2bcb : B9E03800; +2bcc : 3821B694; +2bcd : F8000C43; +2bce : E000000B; +2bcf : 78020001; +2bd0 : B9800800; +2bd1 : 38428694; +2bd2 : B9601800; +2bd3 : 35A40001; +2bd4 : B9C02800; +2bd5 : BA203000; +2bd6 : BA003800; +2bd7 : B9E04000; +2bd8 : F8000C38; +2bd9 : 78010001; +2bda : 3821B694; +2bdb : 2B9D0008; +2bdc : 2B8B0030; +2bdd : 2B8C002C; +2bde : 2B8D0028; +2bdf : 2B8E0024; +2be0 : 2B8F0020; +2be1 : 2B90001C; +2be2 : 2B910018; +2be3 : 2B920014; +2be4 : 2B930010; +2be5 : 2B94000C; +2be6 : 379C0030; +2be7 : C3A00000; +2be8 : 379CFFDC; +2be9 : 5B8B0008; +2bea : 5B9D0004; +2beb : 5B840014; +2bec : 20240080; +2bed : 64840000; +2bee : 5B830010; +2bef : 78030001; +2bf0 : B8204800; +2bf1 : B8600800; +2bf2 : 34030002; +2bf3 : 5B82000C; +2bf4 : B8405800; +2bf5 : 382186B4; +2bf6 : C8641000; +2bf7 : 2123007F; +2bf8 : 5B850018; +2bf9 : 5B86001C; +2bfa : 5B870020; +2bfb : 5B880024; +2bfc : F8000C22; +2bfd : 37820010; +2bfe : B9600800; +2bff : F8000BFD; +2c00 : 78010001; +2c01 : 382186C0; +2c02 : F8000C1C; +2c03 : 2B9D0004; +2c04 : 2B8B0008; +2c05 : 379C0024; +2c06 : C3A00000; +2c07 : 379CFFFC; +2c08 : 5B9D0004; +2c09 : 78010001; +2c0a : 382186D0; +2c0b : F8000C13; +2c0c : 2B9D0004; +2c0d : 379C0004; +2c0e : C3A00000; +2c0f : 40240000; +2c10 : 3402002D; +2c11 : 34030001; +2c12 : 5C820003; +2c13 : 34210001; +2c14 : 3403FFFF; +2c15 : 34020000; +2c16 : 34050009; +2c17 : E0000004; +2c18 : 0842000A; +2c19 : 34210001; +2c1a : B4821000; +2c1b : 40240000; +2c1c : 3484FFD0; +2c1d : 208600FF; +2c1e : 50A6FFFA; +2c1f : 88430800; +2c20 : C3A00000; +2c21 : 379CFFF4; +2c22 : 5B8B000C; +2c23 : 5B8C0008; +2c24 : 5B9D0004; +2c25 : B8206000; +2c26 : F80011E4; +2c27 : 342B0001; +2c28 : F80011E2; +2c29 : 5C2BFFFF; +2c2a : B9800800; +2c2b : E0000002; +2c2c : 3421FFFF; +2c2d : 4820FFFF; +2c2e : F80011DC; +2c2f : C82B0800; +2c30 : 2B9D0004; +2c31 : 2B8B000C; +2c32 : 2B8C0008; +2c33 : 379C000C; +2c34 : C3A00000; +2c35 : 379CFFF0; +2c36 : 5B8B0010; +2c37 : 5B8C000C; +2c38 : 5B8D0008; +2c39 : 5B9D0004; +2c3a : 340B0400; +2c3b : 340C0400; +2c3c : E0000003; +2c3d : B58B6000; +2c3e : 3D6B0001; +2c3f : B9800800; +2c40 : FBFFFFE1; +2c41 : 4420FFFC; +2c42 : 158C0001; +2c43 : 156B0002; +2c44 : E0000009; +2c45 : B56C6800; +2c46 : B9A00800; +2c47 : FBFFFFDA; +2c48 : 5C200002; +2c49 : B9A06000; +2c4a : 0161001F; +2c4b : B42B5800; +2c4c : 156B0001; +2c4d : 5D60FFF8; +2c4e : 78010001; +2c4f : 3821B6D4; +2c50 : 582C0000; +2c51 : 78010001; +2c52 : B9801000; +2c53 : 38218728; +2c54 : F8000BCA; +2c55 : 2B9D0004; +2c56 : 2B8B0010; +2c57 : 2B8C000C; +2c58 : 2B8D0008; +2c59 : 379C0010; +2c5a : C3A00000; +2c5b : 379CFFFC; +2c5c : 5B9D0004; +2c5d : 78020001; +2c5e : 3842B6D4; +2c5f : 28430000; +2c60 : 34042710; +2c61 : 0865000A; +2c62 : E0000004; +2c63 : 3442FFFF; +2c64 : 4840FFFF; +2c65 : 3421D8F0; +2c66 : 50810003; +2c67 : B8A01000; +2c68 : E3FFFFFC; +2c69 : 88230800; +2c6a : 340203E8; +2c6b : F8002B0A; +2c6c : E0000002; +2c6d : 3421FFFF; +2c6e : 4820FFFF; +2c6f : 34010000; +2c70 : 2B9D0004; +2c71 : 379C0004; +2c72 : C3A00000; +2c73 : B8202800; +2c74 : 5C800002; +2c75 : B8602000; +2c76 : B8803000; +2c77 : 50640002; +2c78 : B8603000; +2c79 : B4260800; +2c7a : E000000E; +2c7b : 2C460002; +2c7c : 2847000C; +2c7d : B4E63800; +2c7e : 40E60000; +2c7f : 30A60000; +2c80 : 2C470002; +2c81 : 2C460006; +2c82 : 34A50001; +2c83 : 34E70001; +2c84 : 20E7FFFF; +2c85 : 0C470002; +2c86 : 5CC70002; +2c87 : 0C400002; +2c88 : 5CA1FFF3; +2c89 : 5083000B; +2c8a : 2C410002; +2c8b : B4610800; +2c8c : C8242000; +2c8d : 0C440002; +2c8e : 2C410006; +2c8f : E0000003; +2c90 : C8812000; +2c91 : 0C440002; +2c92 : 2C440002; +2c93 : 5481FFFD; +2c94 : B8600800; +2c95 : C3A00000; +2c96 : B4432800; +2c97 : E000000D; +2c98 : 2C240000; +2c99 : 2826000C; +2c9a : 40470000; +2c9b : 34420001; +2c9c : B4C43000; +2c9d : 30C70000; +2c9e : 34840001; +2c9f : 2C260006; +2ca0 : 2084FFFF; +2ca1 : 0C240000; +2ca2 : 5CC40002; +2ca3 : 0C200000; +2ca4 : 5C45FFF4; +2ca5 : B8600800; +2ca6 : C3A00000; +2ca7 : 379CFFC8; +2ca8 : 5B8B001C; +2ca9 : 5B8C0018; +2caa : 5B8D0014; +2cab : 5B8E0010; +2cac : 5B8F000C; +2cad : 5B900008; +2cae : 5B9D0004; +2caf : 780B0001; +2cb0 : 780C0001; +2cb1 : 396BB8E8; +2cb2 : 398CB708; +2cb3 : B9600800; +2cb4 : B9801000; +2cb5 : 340301E0; +2cb6 : 37840020; +2cb7 : F8000FC0; +2cb8 : B8206800; +2cb9 : 340F0000; +2cba : 4C010061; +2cbb : 2D62000C; +2cbc : 0F800038; +2cbd : 38018100; +2cbe : 5C41000E; +2cbf : B9801000; +2cc0 : 34030002; +2cc1 : 37810038; +2cc2 : F8002B14; +2cc3 : 78010001; +2cc4 : 78020001; +2cc5 : 3821B8F4; +2cc6 : 3842B70A; +2cc7 : 34030002; +2cc8 : 780C0001; +2cc9 : F8002B0D; +2cca : 35ADFFFC; +2ccb : 398CB70C; +2ccc : 78010001; +2ccd : 2F820038; +2cce : 38219704; +2ccf : 28210000; +2cd0 : 20420FFF; +2cd1 : 340F0000; +2cd2 : 5C410049; +2cd3 : 41820000; +2cd4 : 34010045; +2cd5 : 34030000; +2cd6 : 5C410008; +2cd7 : 41820009; +2cd8 : 34010011; +2cd9 : 5C410005; +2cda : 41830016; +2cdb : 41810017; +2cdc : 3C630008; +2cdd : B8611800; +2cde : 78010001; +2cdf : 78020001; +2ce0 : 3821B8E8; +2ce1 : 3842B6D8; +2ce2 : 2C27000C; +2ce3 : 34460030; +2ce4 : 34040000; +2ce5 : 340B0000; +2ce6 : E000000C; +2ce7 : 28410000; +2ce8 : 44200009; +2ce9 : 2C25000C; +2cea : 5CA70007; +2ceb : 2C25000E; +2cec : 5C600003; +2ced : 44A30038; +2cee : E0000003; +2cef : 5CA30002; +2cf0 : B8202000; +2cf1 : 34420004; +2cf2 : 5C46FFF5; +2cf3 : 44800002; +2cf4 : B8805800; +2cf5 : 340F0001; +2cf6 : 45600025; +2cf7 : 2D700028; +2cf8 : 35A10028; +2cf9 : 48300022; +2cfa : 356E0024; +2cfb : 3782003A; +2cfc : 34030002; +2cfd : B9C00800; +2cfe : 0F8D003A; +2cff : FBFFFF97; +2d00 : CA016800; +2d01 : 21ADFFFF; +2d02 : 0D6D0028; +2d03 : 37820020; +2d04 : 34030018; +2d05 : B9C00800; +2d06 : FBFFFF90; +2d07 : C9A16800; +2d08 : 21ADFFFF; +2d09 : 78020001; +2d0a : 0D6D0028; +2d0b : 3842B8E8; +2d0c : 3403000E; +2d0d : B9C00800; +2d0e : FBFFFF88; +2d0f : C9A16800; +2d10 : 2F83003A; +2d11 : 21ADFFFF; +2d12 : 0D6D0028; +2d13 : B9C00800; +2d14 : B9801000; +2d15 : FBFFFF81; +2d16 : C9A10800; +2d17 : 0D610028; +2d18 : 2D61002C; +2d19 : 34210001; +2d1a : 0D61002C; +2d1b : B9E00800; +2d1c : 2B9D0004; +2d1d : 2B8B001C; +2d1e : 2B8C0018; +2d1f : 2B8D0014; +2d20 : 2B8E0010; +2d21 : 2B8F000C; +2d22 : 2B900008; +2d23 : 379C0038; +2d24 : C3A00000; +2d25 : B8205800; +2d26 : E3FFFFCB; +2d27 : 379CFFFC; +2d28 : 5B9D0004; +2d29 : B8400800; +2d2a : F8000C35; +2d2b : 34010000; +2d2c : 2B9D0004; +2d2d : 379C0004; +2d2e : C3A00000; +2d2f : 78020001; +2d30 : 3842B6D8; +2d31 : 34430030; +2d32 : E0000004; +2d33 : 28440000; +2d34 : 34420004; +2d35 : 5881001C; +2d36 : 5C43FFFD; +2d37 : C3A00000; +2d38 : 379CFF24; +2d39 : 5B8B0014; +2d3a : 5B8C0010; +2d3b : 5B8D000C; +2d3c : 5B8E0008; +2d3d : 5B9D0004; +2d3e : 78050001; +2d3f : B8205800; +2d40 : B8406000; +2d41 : B8607000; +2d42 : B8806800; +2d43 : 38A5B6D8; +2d44 : 34010000; +2d45 : 3402000C; +2d46 : 28A30000; +2d47 : 34A50004; +2d48 : 5C600009; +2d49 : 3C220002; +2d4a : 78050001; +2d4b : 38A5B6D8; +2d4c : B4A22800; +2d4d : 58AB0000; +2d4e : 3402000C; +2d4f : 5C22000A; +2d50 : E0000003; +2d51 : 34210001; +2d52 : 5C22FFF4; +2d53 : 78010001; +2d54 : 78020001; +2d55 : 38429368; +2d56 : 38218740; +2d57 : F8000AC7; +2d58 : E0000020; +2d59 : 78020001; +2d5a : 37810018; +2d5b : 3842875C; +2d5c : FBFFF5C5; +2d5d : 4801001B; +2d5e : B9600800; +2d5f : 34020000; +2d60 : 34030012; +2d61 : F8002AF3; +2d62 : 45800005; +2d63 : B9600800; +2d64 : B9801000; +2d65 : 34030012; +2d66 : F8002A70; +2d67 : 0D60000E; +2d68 : 5DC00004; +2d69 : 34010800; +2d6a : 0D61000C; +2d6b : 0D6D000E; +2d6c : 35610012; +2d6d : F8000BF2; +2d6e : 2B8100D0; +2d6f : 0D600026; +2d70 : 0D600024; +2d71 : 5961001C; +2d72 : 2B8100B8; +2d73 : 0D60002C; +2d74 : 59610020; +2d75 : 2D61002A; +2d76 : 0D610028; +2d77 : E0000002; +2d78 : 340B0000; +2d79 : B9600800; +2d7a : 2B9D0004; +2d7b : 2B8B0014; +2d7c : 2B8C0010; +2d7d : 2B8D000C; +2d7e : 2B8E0008; +2d7f : 379C00DC; +2d80 : C3A00000; +2d81 : 78020001; +2d82 : 3842B6D8; +2d83 : 34430030; +2d84 : E0000005; +2d85 : 28440000; +2d86 : 5C810002; +2d87 : 58400000; +2d88 : 34420004; +2d89 : 5C43FFFC; +2d8a : 34010000; +2d8b : C3A00000; +2d8c : 379CFFE8; +2d8d : 5B8B0018; +2d8e : 5B8C0014; +2d8f : 5B8D0010; +2d90 : 5B8E000C; +2d91 : 5B8F0008; +2d92 : 5B9D0004; +2d93 : B8205800; +2d94 : 59620010; +2d95 : B8407000; +2d96 : B8807800; +2d97 : B8A06000; +2d98 : 282D0008; +2d99 : 44600005; +2d9a : B8A00800; +2d9b : 3402FC18; +2d9c : F800298C; +2d9d : B42D6800; +2d9e : C9CF2000; +2d9f : B8801800; +2da0 : 4C800002; +2da1 : B48C1800; +2da2 : 0181001F; +2da3 : B42C0800; +2da4 : 14210001; +2da5 : B4242000; +2da6 : 4C800002; +2da7 : B48C2000; +2da8 : 49840002; +2da9 : C88C2000; +2daa : 09820003; +2dab : 1445001F; +2dac : 00A5001E; +2dad : B4A21000; +2dae : 14420002; +2daf : 48620006; +2db0 : 1582001F; +2db1 : 0042001E; +2db2 : B44C1000; +2db3 : 14420002; +2db4 : 4C62000D; +2db5 : B4812000; +2db6 : 596D0008; +2db7 : 5964000C; +2db8 : 4984000A; +2db9 : C88C2000; +2dba : 5964000C; +2dbb : B9800800; +2dbc : 340203E8; +2dbd : F800296B; +2dbe : B5A10800; +2dbf : 59610008; +2dc0 : E0000002; +2dc1 : 5963000C; +2dc2 : 78030001; +2dc3 : 38638EE8; +2dc4 : 29610008; +2dc5 : 28620000; +2dc6 : 4C41000D; +2dc7 : 78030001; +2dc8 : 38638EDC; +2dc9 : 28620000; +2dca : 29630000; +2dcb : B4220800; +2dcc : 29620004; +2dcd : 59610008; +2dce : 34410001; +2dcf : F4411000; +2dd0 : 59610004; +2dd1 : B4431000; +2dd2 : 59620000; +2dd3 : 2B9D0004; +2dd4 : 2B8B0018; +2dd5 : 2B8C0014; +2dd6 : 2B8D0010; +2dd7 : 2B8E000C; +2dd8 : 2B8F0008; +2dd9 : 379C0018; +2dda : C3A00000; +2ddb : 379CFFB4; +2ddc : 5B8B0024; +2ddd : 5B8C0020; +2dde : 5B8D001C; +2ddf : 5B8E0018; +2de0 : 5B8F0014; +2de1 : 5B900010; +2de2 : 5B91000C; +2de3 : 5B920008; +2de4 : 5B9D0004; +2de5 : B8406800; +2de6 : 2C22002C; +2de7 : B8A05800; +2de8 : B8206000; +2de9 : B8609000; +2dea : B8807800; +2deb : 34050000; +2dec : 44400056; +2ded : 342E0024; +2dee : 2C310028; +2def : 3442FFFF; +2df0 : 0C22002C; +2df1 : 34030002; +2df2 : B9C01000; +2df3 : 34040000; +2df4 : 3781004E; +2df5 : FBFFFE7E; +2df6 : B6218800; +2df7 : 2231FFFF; +2df8 : 0D910028; +2df9 : B9C01000; +2dfa : 34030018; +2dfb : 34040000; +2dfc : 37810028; +2dfd : FBFFFE76; +2dfe : B6218800; +2dff : 2231FFFF; +2e00 : 37900040; +2e01 : 0D910028; +2e02 : B9C01000; +2e03 : 3403000E; +2e04 : 34040000; +2e05 : BA000800; +2e06 : FBFFFE6D; +2e07 : B6218800; +2e08 : 2F83004E; +2e09 : 2231FFFF; +2e0a : B9C01000; +2e0b : B9E02000; +2e0c : 0D910028; +2e0d : BA400800; +2e0e : FBFFFE65; +2e0f : B6210800; +2e10 : 0D810028; +2e11 : 2F81004C; +2e12 : 78030001; +2e13 : 38639704; +2e14 : 0DA1000C; +2e15 : 28610000; +2e16 : 37820046; +2e17 : 34030006; +2e18 : 0DA10010; +2e19 : B9A00800; +2e1a : F80029BC; +2e1b : 35A10006; +2e1c : BA001000; +2e1d : 34030006; +2e1e : F80029B8; +2e1f : 4560001F; +2e20 : 2B810038; +2e21 : 59610014; +2e22 : 2B81002C; +2e23 : 59610018; +2e24 : 34010000; +2e25 : F800260C; +2e26 : B8206800; +2e27 : 35620010; +2e28 : 34030000; +2e29 : 34010000; +2e2a : F80025A4; +2e2b : 2B810030; +2e2c : 43820028; +2e2d : 2B83002C; +2e2e : 59610000; +2e2f : 2B810034; +2e30 : 7C420000; +2e31 : 2984001C; +2e32 : 59610004; +2e33 : 2B810038; +2e34 : 5960000C; +2e35 : 34051F40; +2e36 : 59610008; +2e37 : 21A100FF; +2e38 : 64210000; +2e39 : A0220800; +2e3a : 29620010; +2e3b : 5961001C; +2e3c : B9600800; +2e3d : FBFFFF4F; +2e3e : 2F81004E; +2e3f : B9E02800; +2e40 : 502F0002; +2e41 : B8202800; +2e42 : B8A00800; +2e43 : 2B9D0004; +2e44 : 2B8B0024; +2e45 : 2B8C0020; +2e46 : 2B8D001C; +2e47 : 2B8E0018; +2e48 : 2B8F0014; +2e49 : 2B900010; +2e4a : 2B91000C; +2e4b : 2B920008; +2e4c : 379C004C; +2e4d : C3A00000; +2e4e : 379CFFC0; +2e4f : 5B8B0014; +2e50 : 5B8C0010; +2e51 : 5B8D000C; +2e52 : 5B8E0008; +2e53 : 5B9D0004; +2e54 : B8206000; +2e55 : B8607000; +2e56 : 37810030; +2e57 : 34030006; +2e58 : B8A05800; +2e59 : B8806800; +2e5a : F800297C; +2e5b : 37810036; +2e5c : 35820012; +2e5d : 34030006; +2e5e : F8002978; +2e5f : 78010001; +2e60 : 38219704; +2e61 : 28250000; +2e62 : 2D81000C; +2e63 : 44A00009; +2e64 : 34028100; +2e65 : 0F82003C; +2e66 : 2D820018; +2e67 : 0F810040; +2e68 : 3C42000D; +2e69 : B8452800; +2e6a : 0F85003E; +2e6b : E0000002; +2e6c : 0F81003C; +2e6d : 37810030; +2e6e : B9C01000; +2e6f : B9A01800; +2e70 : 37840018; +2e71 : F8000EC0; +2e72 : 4560000A; +2e73 : 2B820020; +2e74 : 5960000C; +2e75 : 59620000; +2e76 : 2B820024; +2e77 : 59620004; +2e78 : 2B820028; +2e79 : 59620008; +2e7a : 43820018; +2e7b : 5962001C; +2e7c : 2B9D0004; +2e7d : 2B8B0014; +2e7e : 2B8C0010; +2e7f : 2B8D000C; +2e80 : 2B8E0008; +2e81 : 379C0040; +2e82 : C3A00000; +2e83 : C3A00000; +2e84 : 379CFFE4; +2e85 : 5B8B0008; +2e86 : 5B9D0004; +2e87 : 78010001; +2e88 : 34020000; +2e89 : 34030000; +2e8a : 34040044; +2e8b : 3821A010; +2e8c : FBFFFEAC; +2e8d : 78020001; +2e8e : 3842B8FC; +2e8f : 58410000; +2e90 : 78010001; +2e91 : 34040025; +2e92 : 34020000; +2e93 : 34030000; +2e94 : 3821A044; +2e95 : FBFFFEA3; +2e96 : 78020001; +2e97 : 378B000C; +2e98 : 3842B90C; +2e99 : 58410000; +2e9a : 34030012; +2e9b : B9600800; +2e9c : 34020000; +2e9d : F80029B7; +2e9e : 34010800; +2e9f : 0F810018; +2ea0 : 78010001; +2ea1 : B9601000; +2ea2 : 34030001; +2ea3 : 34040000; +2ea4 : 3821A078; +2ea5 : FBFFFE93; +2ea6 : 78020001; +2ea7 : 3842B908; +2ea8 : 58410000; +2ea9 : FBFFFFDA; +2eaa : 2B9D0004; +2eab : 2B8B0008; +2eac : 379C001C; +2ead : C3A00000; +2eae : 34010000; +2eaf : C3A00000; +2eb0 : 34030000; +2eb1 : 34040000; +2eb2 : E0000005; +2eb3 : 2C250000; +2eb4 : 34840001; +2eb5 : 34210002; +2eb6 : B4651800; +2eb7 : 4844FFFC; +2eb8 : 00610010; +2eb9 : 2063FFFF; +2eba : B4611800; +2ebb : 00610010; +2ebc : B4231800; +2ebd : A4600800; +2ebe : 2021FFFF; +2ebf : C3A00000; +2ec0 : 379CFFFC; +2ec1 : 5B9D0004; +2ec2 : 78020001; +2ec3 : 3842B910; +2ec4 : 34030004; +2ec5 : F8002911; +2ec6 : 2B9D0004; +2ec7 : 379C0004; +2ec8 : C3A00000; +2ec9 : 379CFFF4; +2eca : 5B8B000C; +2ecb : 5B8C0008; +2ecc : 5B9D0004; +2ecd : 78030001; +2ece : 780B0001; +2ecf : 396BB910; +2ed0 : 3863C2B8; +2ed1 : B8201000; +2ed2 : 286C0000; +2ed3 : B9600800; +2ed4 : 34030004; +2ed5 : F8002901; +2ed6 : 41620000; +2ed7 : 41610001; +2ed8 : 358C0018; +2ed9 : 3C420018; +2eda : 3C210010; +2edb : B8410800; +2edc : 41620003; +2edd : B8220800; +2ede : 41620002; +2edf : 3C420008; +2ee0 : B8220800; +2ee1 : E0000002; +2ee2 : 59810000; +2ee3 : 29820000; +2ee4 : 5C41FFFE; +2ee5 : 5C200004; +2ee6 : 78010001; +2ee7 : 3821B8F8; +2ee8 : 58200000; +2ee9 : 78010001; +2eea : 3821B904; +2eeb : 58200000; +2eec : 2B9D0004; +2eed : 2B8B000C; +2eee : 2B8C0008; +2eef : 379C000C; +2ef0 : C3A00000; +2ef1 : 379CFFFC; +2ef2 : 5B9D0004; +2ef3 : B8201000; +2ef4 : 3401FFFF; +2ef5 : 44400006; +2ef6 : 34410010; +2ef7 : 78020001; +2ef8 : 3842B910; +2ef9 : 34030004; +2efa : F80028BB; +2efb : 2B9D0004; +2efc : 379C0004; +2efd : C3A00000; +2efe : 379CFE30; +2eff : 5B8B0020; +2f00 : 5B8C001C; +2f01 : 5B8D0018; +2f02 : 5B8E0014; +2f03 : 5B8F0010; +2f04 : 5B90000C; +2f05 : 5B910008; +2f06 : 5B9D0004; +2f07 : 78010001; +2f08 : 3821C2A4; +2f09 : 28220000; +2f0a : 34010001; +2f0b : 5C410006; +2f0c : 78010001; +2f0d : 3821B8F8; +2f0e : 28230000; +2f0f : 5C620002; +2f10 : 58200000; +2f11 : 78020001; +2f12 : 3842B8FC; +2f13 : 28410000; +2f14 : 378C0024; +2f15 : 378201B4; +2f16 : 34040190; +2f17 : B9801800; +2f18 : 34050000; +2f19 : FBFFFEC2; +2f1a : 78040001; +2f1b : 3884B8F8; +2f1c : B8201000; +2f1d : 28810000; +2f1e : 340B0000; +2f1f : 5C200023; +2f20 : 4D620004; +2f21 : B9800800; +2f22 : F8000235; +2f23 : B8205800; +2f24 : F8000EE6; +2f25 : 78020001; +2f26 : 3842B900; +2f27 : 28430000; +2f28 : 5C600003; +2f29 : 58410000; +2f2a : E0000005; +2f2b : 346303E8; +2f2c : C8230800; +2f2d : 48010015; +2f2e : 58430000; +2f2f : 78010001; +2f30 : 3821B904; +2f31 : 28230000; +2f32 : 378B0024; +2f33 : 378C01B4; +2f34 : 34630001; +2f35 : 58230000; +2f36 : B9601000; +2f37 : B9800800; +2f38 : F80001BB; +2f39 : 78050001; +2f3a : 38A5B8FC; +2f3b : B8202000; +2f3c : 28A10000; +2f3d : B9601800; +2f3e : B9801000; +2f3f : 34050000; +2f40 : FBFFFF0E; +2f41 : 340B0001; +2f42 : 780D0001; +2f43 : 39ADB908; +2f44 : 29A10000; +2f45 : 378E01B4; +2f46 : 378C0024; +2f47 : B9C01000; +2f48 : B9801800; +2f49 : 34040080; +2f4a : 34050000; +2f4b : FBFFFE90; +2f4c : B8208800; +2f4d : 340F0000; +2f4e : 4C010014; +2f4f : 78030001; +2f50 : 3863B8F8; +2f51 : 28610000; +2f52 : 44200010; +2f53 : B9800800; +2f54 : FBFFFF9D; +2f55 : B8208000; +2f56 : 5C20000C; +2f57 : B9800800; +2f58 : BA201000; +2f59 : F80000BD; +2f5a : B8202000; +2f5b : 340F0001; +2f5c : 4E010006; +2f5d : 29A10000; +2f5e : B9C01000; +2f5f : B9801800; +2f60 : 34050000; +2f61 : FBFFFEED; +2f62 : 780D0001; +2f63 : 39ADB90C; +2f64 : 29A10000; +2f65 : 379001B4; +2f66 : 378C0024; +2f67 : BA001000; +2f68 : B9801800; +2f69 : 34040020; +2f6a : 34050000; +2f6b : FBFFFE70; +2f6c : 340E0000; +2f6d : 4C01001C; +2f6e : B9800800; +2f6f : FBFFFF82; +2f70 : 5C200019; +2f71 : 378101C8; +2f72 : 34020000; +2f73 : F800139C; +2f74 : 78020001; +2f75 : 38428EF8; +2f76 : 28410000; +2f77 : 2B8201CC; +2f78 : 34030004; +2f79 : 340E0001; +2f7a : B4410800; +2f7b : 5B8101D0; +2f7c : 378201D0; +2f7d : 37810040; +2f7e : F8002858; +2f7f : B9800800; +2f80 : 34020020; +2f81 : 34030000; +2f82 : F80000F5; +2f83 : 29A10000; +2f84 : BA001000; +2f85 : B9801800; +2f86 : 34040020; +2f87 : 34050000; +2f88 : FBFFFEC6; +2f89 : FBFFFF25; +2f8a : B5EB5800; +2f8b : B5610800; +2f8c : B42E7000; +2f8d : 7DC10000; +2f8e : 2B9D0004; +2f8f : 2B8B0020; +2f90 : 2B8C001C; +2f91 : 2B8D0018; +2f92 : 2B8E0014; +2f93 : 2B8F0010; +2f94 : 2B90000C; +2f95 : 2B910008; +2f96 : 379C01D0; +2f97 : C3A00000; +2f98 : 379CFF34; +2f99 : 5B8B0028; +2f9a : 5B8C0024; +2f9b : 5B8D0020; +2f9c : 5B8E001C; +2f9d : 5B8F0018; +2f9e : 5B900014; +2f9f : 5B910010; +2fa0 : 5B92000C; +2fa1 : 5B930008; +2fa2 : 5B9D0004; +2fa3 : 78010001; +2fa4 : 3821B8F8; +2fa5 : 28210000; +2fa6 : 340B0000; +2fa7 : 44200047; +2fa8 : 780C0001; +2fa9 : 398CBBF4; +2faa : 29810000; +2fab : 378F00AC; +2fac : 378E002C; +2fad : B9E01000; +2fae : B9C01800; +2faf : 34040080; +2fb0 : 34050000; +2fb1 : FBFFFE2A; +2fb2 : 4C01003C; +2fb3 : 3402001B; +2fb4 : 340B0001; +2fb5 : 4C410039; +2fb6 : 378D00C8; +2fb7 : B9A00800; +2fb8 : FBFFFF08; +2fb9 : 43810032; +2fba : 5C200034; +2fbb : 43810033; +2fbc : 5C2B0032; +2fbd : 37900044; +2fbe : BA000800; +2fbf : B9A01000; +2fc0 : 34030004; +2fc1 : F80027F4; +2fc2 : 5C20002C; +2fc3 : 379100C0; +2fc4 : 37930034; +2fc5 : BA601000; +2fc6 : 34030006; +2fc7 : BA200800; +2fc8 : F800280E; +2fc9 : 3792003A; +2fca : BA401000; +2fcb : 34030004; +2fcc : 378100CC; +2fcd : F8002809; +2fce : 34010008; +2fcf : 3381002E; +2fd0 : 34010006; +2fd1 : 33810030; +2fd2 : 34010004; +2fd3 : 33810031; +2fd4 : 34010002; +2fd5 : 33810033; +2fd6 : BA600800; +2fd7 : 3380002C; +2fd8 : 338B002D; +2fd9 : 3380002F; +2fda : 33800032; +2fdb : F8000984; +2fdc : B9A01000; +2fdd : 34030004; +2fde : BA400800; +2fdf : F80027F7; +2fe0 : BA201000; +2fe1 : 34030006; +2fe2 : 3781003E; +2fe3 : F80027F3; +2fe4 : 378200CC; +2fe5 : 34030004; +2fe6 : BA000800; +2fe7 : F80027EF; +2fe8 : 29810000; +2fe9 : B9E01000; +2fea : B9C01800; +2feb : 3404001C; +2fec : 34050000; +2fed : FBFFFE61; +2fee : B9600800; +2fef : 2B9D0004; +2ff0 : 2B8B0028; +2ff1 : 2B8C0024; +2ff2 : 2B8D0020; +2ff3 : 2B8E001C; +2ff4 : 2B8F0018; +2ff5 : 2B900014; +2ff6 : 2B910010; +2ff7 : 2B92000C; +2ff8 : 2B930008; +2ff9 : 379C00CC; +2ffa : C3A00000; +2ffb : 379CFFE4; +2ffc : 5B8B0008; +2ffd : 5B9D0004; +2ffe : 378B000C; +2fff : B9600800; +3000 : 34020000; +3001 : 34030012; +3002 : F8002852; +3003 : B9600800; +3004 : 340200FF; +3005 : 34030006; +3006 : F800284E; +3007 : 34010806; +3008 : 0F810018; +3009 : 78010001; +300a : B9601000; +300b : 34030001; +300c : 34040000; +300d : 3821A0AC; +300e : FBFFFD2A; +300f : 78020001; +3010 : 3842BBF4; +3011 : 58410000; +3012 : 2B9D0004; +3013 : 2B8B0008; +3014 : 379C001C; +3015 : C3A00000; +3016 : 379CFFE0; +3017 : 5B8B0018; +3018 : 5B8C0014; +3019 : 5B8D0010; +301a : 5B8E000C; +301b : 5B8F0008; +301c : 5B9D0004; +301d : 378D001C; +301e : B8205800; +301f : B9A00800; +3020 : FBFFFEA0; +3021 : 41620000; +3022 : 34010045; +3023 : 340C0000; +3024 : 5C41004A; +3025 : 356E0010; +3026 : B9A01000; +3027 : B9C00800; +3028 : 34030004; +3029 : F800278C; +302a : B8201000; +302b : 5C200043; +302c : 41640009; +302d : 34030001; +302e : 416D0002; +302f : 41610003; +3030 : B8406000; +3031 : 5C83003D; +3032 : 41630014; +3033 : 34020008; +3034 : 5C62003A; +3035 : 3DAD0008; +3036 : B9A16800; +3037 : 35ADFFE8; +3038 : 34010040; +3039 : 4C2D0002; +303a : 340D0040; +303b : 356F000C; +303c : B9E01000; +303d : 34030004; +303e : 37810020; +303f : F8002797; +3040 : 35AC0018; +3041 : 34010045; +3042 : 31610000; +3043 : 15810008; +3044 : 3782001C; +3045 : 31610002; +3046 : 3401003F; +3047 : 31610008; +3048 : 34010001; +3049 : 31610009; +304a : 34030004; +304b : 31600001; +304c : 316C0003; +304d : 31600004; +304e : 31600005; +304f : 31600006; +3050 : 31600007; +3051 : 3160000A; +3052 : 3160000B; +3053 : B9E00800; +3054 : F8002782; +3055 : 34030004; +3056 : 37820020; +3057 : B9C00800; +3058 : F800277E; +3059 : 35AD0005; +305a : 01A1001F; +305b : 31600014; +305c : B42D6800; +305d : 15A20001; +305e : 31600015; +305f : 31600016; +3060 : 31600017; +3061 : 35610014; +3062 : FBFFFE4E; +3063 : 2021FFFF; +3064 : 00220008; +3065 : 31610017; +3066 : 31620016; +3067 : B9600800; +3068 : 3402000A; +3069 : FBFFFE47; +306a : 2021FFFF; +306b : 00220008; +306c : 3161000B; +306d : 3162000A; +306e : B9800800; +306f : 2B9D0004; +3070 : 2B8B0018; +3071 : 2B8C0014; +3072 : 2B8D0010; +3073 : 2B8E000C; +3074 : 2B8F0008; +3075 : 379C0020; +3076 : C3A00000; +3077 : 379CFFCC; +3078 : 5B8B0028; +3079 : 5B8C0024; +307a : 5B8D0020; +307b : 5B8E001C; +307c : 5B8F0018; +307d : 5B900014; +307e : 5B910010; +307f : 5B92000C; +3080 : 5B930008; +3081 : 5B9D0004; +3082 : B8205800; +3083 : B8406800; +3084 : B8606000; +3085 : 5C600012; +3086 : 3562000C; +3087 : 34030004; +3088 : 37810030; +3089 : F800274D; +308a : 378C002C; +308b : 35620010; +308c : 34030004; +308d : B9800800; +308e : F8002748; +308f : 35620014; +3090 : 34030002; +3091 : 37810036; +3092 : F8002744; +3093 : 37810034; +3094 : 35620016; +3095 : 34030002; +3096 : F8002740; +3097 : 35710008; +3098 : B9801000; +3099 : 34030004; +309a : BA200800; +309b : F800273B; +309c : 35AEFFEC; +309d : 3570000C; +309e : 358F0004; +309f : B9E01000; +30a0 : 34030004; +30a1 : 15D20008; +30a2 : BA000800; +30a3 : F8002733; +30a4 : 225200FF; +30a5 : 21CE00FF; +30a6 : 34010011; +30a7 : 31610011; +30a8 : 31720012; +30a9 : 316E0013; +30aa : 35820008; +30ab : 34030002; +30ac : 31600010; +30ad : 35610014; +30ae : F8002728; +30af : 34030002; +30b0 : 3582000A; +30b1 : 35610016; +30b2 : F8002724; +30b3 : 35A2FFF9; +30b4 : 0041001F; +30b5 : 316E0019; +30b6 : 31720018; +30b7 : 3160001A; +30b8 : 3160001B; +30b9 : B56D7000; +30ba : B4221000; +30bb : 41D20000; +30bc : 14420001; +30bd : 31C00000; +30be : BA200800; +30bf : FBFFFDF1; +30c0 : 2023FFFF; +30c1 : 31D20000; +30c2 : 35730010; +30c3 : 5C600002; +30c4 : 3803FFFF; +30c5 : 00610008; +30c6 : 3163001B; +30c7 : 3161001A; +30c8 : 34010045; +30c9 : 31610000; +30ca : 15A10008; +30cb : B9801000; +30cc : 31610002; +30cd : 3401003F; +30ce : 31610008; +30cf : 34010011; +30d0 : 31610009; +30d1 : 31600001; +30d2 : 316D0003; +30d3 : 31600004; +30d4 : 31600005; +30d5 : 31600006; +30d6 : 31600007; +30d7 : 3160000A; +30d8 : 3160000B; +30d9 : BA000800; +30da : 34030004; +30db : F80026FB; +30dc : B9E01000; +30dd : 34030004; +30de : BA600800; +30df : F80026F7; +30e0 : B9600800; +30e1 : 3402000A; +30e2 : FBFFFDCE; +30e3 : 2021FFFF; +30e4 : 00220008; +30e5 : 3161000B; +30e6 : 3162000A; +30e7 : 2B9D0004; +30e8 : 2B8B0028; +30e9 : 2B8C0024; +30ea : 2B8D0020; +30eb : 2B8E001C; +30ec : 2B8F0018; +30ed : 2B900014; +30ee : 2B910010; +30ef : 2B92000C; +30f0 : 2B930008; +30f1 : 379C0034; +30f2 : C3A00000; +30f3 : 379CFFE4; +30f4 : 5B8B0010; +30f5 : 5B8C000C; +30f6 : 5B8D0008; +30f7 : 5B9D0004; +30f8 : B8405800; +30f9 : B8206800; +30fa : 34020001; +30fb : 34010006; +30fc : 3162001C; +30fd : 3162001D; +30fe : 3161001E; +30ff : 3160001F; +3100 : 35610020; +3101 : B8606000; +3102 : F800085D; +3103 : 41620024; +3104 : 41610020; +3105 : 34030002; +3106 : 98410800; +3107 : 31610020; +3108 : 41620025; +3109 : 41610021; +310a : 316C0025; +310b : 98410800; +310c : 31610021; +310d : 41610022; +310e : 15820008; +310f : 98410800; +3110 : 31610022; +3111 : 41610023; +3112 : 31620024; +3113 : 34020000; +3114 : 982C0800; +3115 : 31610023; +3116 : 35610026; +3117 : F800273D; +3118 : 35610028; +3119 : 34020000; +311a : 34030004; +311b : F8002739; +311c : 3561002C; +311d : 34020000; +311e : 34030004; +311f : F8002735; +3120 : 35610030; +3121 : 34020000; +3122 : 34030004; +3123 : F8002731; +3124 : 35610034; +3125 : 34020000; +3126 : 34030004; +3127 : F800272D; +3128 : 356C0038; +3129 : 34020000; +312a : 34030010; +312b : B9800800; +312c : F8002728; +312d : B9800800; +312e : F8000831; +312f : 35610048; +3130 : 34020000; +3131 : 34030040; +3132 : F8002722; +3133 : 35610088; +3134 : 34020000; +3135 : 34030080; +3136 : F800271E; +3137 : 35610108; +3138 : 34020000; +3139 : 34030040; +313a : F800271A; +313b : 378C0014; +313c : B9800800; +313d : 34020000; +313e : 34030004; +313f : F8002715; +3140 : 37810018; +3141 : 340200FF; +3142 : 34030004; +3143 : F8002711; +3144 : 34010044; +3145 : 0F81001C; +3146 : 34010043; +3147 : 0F81001E; +3148 : B9801800; +3149 : B9600800; +314a : 34020148; +314b : FBFFFF2C; +314c : B9A00800; +314d : 340200FF; +314e : 34030006; +314f : F8002705; +3150 : 34010148; +3151 : 2B9D0004; +3152 : 2B8B0010; +3153 : 2B8C000C; +3154 : 2B8D0008; +3155 : 379C001C; +3156 : C3A00000; +3157 : 379CFFE0; +3158 : 5B8B0014; +3159 : 5B8C0010; +315a : 5B8D000C; +315b : 5B8E0008; +315c : 5B9D0004; +315d : 378D0018; +315e : B8205800; +315f : B9A00800; +3160 : B8407000; +3161 : F80007FE; +3162 : 34010148; +3163 : 340C0000; +3164 : 5DC1001B; +3165 : 41610014; +3166 : 5C200019; +3167 : 41620015; +3168 : 34010043; +3169 : 5C410016; +316a : 35610038; +316b : B9A01000; +316c : 34030006; +316d : F8002648; +316e : 5C200011; +316f : 78010001; +3170 : 34020001; +3171 : 3821B8F8; +3172 : 58220000; +3173 : 3561002C; +3174 : FBFFFD55; +3175 : 37810020; +3176 : FBFFFD4A; +3177 : 43820020; +3178 : 43830021; +3179 : 43840022; +317a : 43850023; +317b : 78010001; +317c : 38218774; +317d : F80006A1; +317e : 340C0001; +317f : B9800800; +3180 : 2B9D0004; +3181 : 2B8B0014; +3182 : 2B8C0010; +3183 : 2B8D000C; +3184 : 2B8E0008; +3185 : 379C0020; +3186 : C3A00000; +3187 : 379CFFD0; +3188 : 5B8B001C; +3189 : 5B8C0018; +318a : 5B8D0014; +318b : 5B8E0010; +318c : 5B8F000C; +318d : 5B900008; +318e : 5B9D0004; +318f : 208400FF; +3190 : 20900008; +3191 : 204200FF; +3192 : 7E100000; +3193 : B8207800; +3194 : 344B0001; +3195 : 208D0004; +3196 : B8606000; +3197 : 40210000; +3198 : B5EB5800; +3199 : 7DAD0000; +319a : 5E000007; +319b : C8221000; +319c : 34010001; +319d : EC220800; +319e : B9A07000; +319f : A1A10800; +31a0 : 44300007; +31a1 : 34010002; +31a2 : 31610000; +31a3 : 34010001; +31a4 : 31610001; +31a5 : 340E0000; +31a6 : 34020002; +31a7 : 65A10000; +31a8 : 7C430002; +31a9 : A0611800; +31aa : 34010000; +31ab : 5C600035; +31ac : 68420002; +31ad : A04D1000; +31ae : 44430002; +31af : 340E0001; +31b0 : 34010002; +31b1 : 33810030; +31b2 : 41810011; +31b3 : 5B8B0020; +31b4 : 33810031; +31b5 : 2981000C; +31b6 : 5B81002C; +31b7 : 45C00004; +31b8 : 41610001; +31b9 : 34210001; +31ba : 31610001; +31bb : 20840001; +31bc : 44800009; +31bd : 29830008; +31be : 3401FFFC; +31bf : 44600021; +31c0 : 35610002; +31c1 : 37820020; +31c2 : D8600000; +31c3 : 4801001D; +31c4 : E0000005; +31c5 : 29830004; +31c6 : 35610002; +31c7 : 37820020; +31c8 : D8600000; +31c9 : 64220000; +31ca : A04E7000; +31cb : 45C0000C; +31cc : 41610000; +31cd : 37820020; +31ce : 34210001; +31cf : 31610000; +31d0 : 34010001; +31d1 : 31610001; +31d2 : 29830004; +31d3 : 35610002; +31d4 : D8600000; +31d5 : 5C200003; +31d6 : E000000A; +31d7 : 5C4E0008; +31d8 : 48010008; +31d9 : BA0D6800; +31da : 34210002; +31db : 45A00005; +31dc : 34020002; +31dd : 31E20000; +31de : E0000002; +31df : 34010000; +31e0 : 2B9D0004; +31e1 : 2B8B001C; +31e2 : 2B8C0018; +31e3 : 2B8D0014; +31e4 : 2B8E0010; +31e5 : 2B8F000C; +31e6 : 2B900008; +31e7 : 379C0030; +31e8 : C3A00000; +31e9 : 379CFFFC; +31ea : 5B8B0004; +31eb : 78040001; +31ec : 388493A0; +31ed : 3442FFFF; +31ee : 348A001C; +31ef : 34030000; +31f0 : 340900FD; +31f1 : 340800F9; +31f2 : 340700FF; +31f3 : 3406FFA2; +31f4 : E0000011; +31f5 : 40850000; +31f6 : 5CA90004; +31f7 : B4232800; +31f8 : 30A60000; +31f9 : E000000A; +31fa : 5CA80005; +31fb : B4232800; +31fc : 40A50000; +31fd : B4651800; +31fe : E0000005; +31ff : 5CA70004; +3200 : B4232800; +3201 : C8435800; +3202 : 30AB0000; +3203 : 34630001; +3204 : 34840001; +3205 : 5C8AFFF0; +3206 : 2B8B0004; +3207 : 379C0004; +3208 : C3A00000; +3209 : 379CFFF8; +320a : 5B8B0008; +320b : 5B9D0004; +320c : 40230006; +320d : 34040020; +320e : 4C830002; +320f : 34030020; +3210 : 206B00FF; +3211 : B42B1800; +3212 : 3404FFA2; +3213 : 30640007; +3214 : 4063000A; +3215 : 34040004; +3216 : 4C830002; +3217 : 34030004; +3218 : B5635800; +3219 : 216B00FF; +321a : B42B1800; +321b : 3062000D; +321c : 34020001; +321d : 30620010; +321e : 40620016; +321f : 34030028; +3220 : 4C620002; +3221 : 34020028; +3222 : B5621000; +3223 : 204200FF; +3224 : B4221800; +3225 : 34420019; +3226 : 34040005; +3227 : 204B00FF; +3228 : 30640017; +3229 : 30600018; +322a : B9601000; +322b : FBFFFFBE; +322c : B9600800; +322d : 2B9D0004; +322e : 2B8B0008; +322f : 379C0008; +3230 : C3A00000; +3231 : 379CFEFC; +3232 : 5B8B0028; +3233 : 5B8C0024; +3234 : 5B8D0020; +3235 : 5B8E001C; +3236 : 5B8F0018; +3237 : 5B900014; +3238 : 5B910010; +3239 : 5B92000C; +323a : 5B930008; +323b : 5B9D0004; +323c : 78010001; +323d : 3821BC78; +323e : 28210000; +323f : 378B002C; +3240 : 378200F4; +3241 : B9601800; +3242 : 340400C8; +3243 : 34050000; +3244 : FBFFFB97; +3245 : 34020038; +3246 : 340C0000; +3247 : 504100A6; +3248 : B9600800; +3249 : FBFFFCA8; +324a : 5C2000A3; +324b : 78010001; +324c : 78020001; +324d : 3821C29C; +324e : 384293A0; +324f : 78030001; +3250 : 40250000; +3251 : 344E001C; +3252 : B9600800; +3253 : 34040000; +3254 : 340D0006; +3255 : 38639384; +3256 : 340B00A0; +3257 : 340A00A1; +3258 : 340900A3; +3259 : 34080001; +325a : E0000028; +325b : 40460000; +325c : 34C70007; +325d : 20E700FF; +325e : 54ED0014; +325f : 3CE70002; +3260 : B4673800; +3261 : 28E60000; +3262 : C0C00000; +3263 : B4813000; +3264 : 40C6001C; +3265 : B4862000; +3266 : E000001A; +3267 : B4812800; +3268 : 40A5001C; +3269 : 51050017; +326a : E000000B; +326b : B4813000; +326c : 40C6001C; +326d : 44CB000E; +326e : 44CA000F; +326f : 44C90010; +3270 : 5D800010; +3271 : E0000004; +3272 : B4813800; +3273 : 40E7001C; +3274 : 44E6000C; +3275 : 78010001; +3276 : 3821C29C; +3277 : 30250000; +3278 : 34020005; +3279 : 37810048; +327a : E000005B; +327b : 340C0002; +327c : E0000004; +327d : 340C0004; +327e : E0000002; +327f : 340C0001; +3280 : 34840001; +3281 : 34420001; +3282 : 5C4EFFD9; +3283 : 78010001; +3284 : 3821C29C; +3285 : 30250000; +3286 : 37810048; +3287 : B4246800; +3288 : 780B0001; +3289 : 34840001; +328a : B4247800; +328b : 396BA0E0; +328c : 21930003; +328d : 21900004; +328e : 39920008; +328f : E000003F; +3290 : 41B10000; +3291 : 46600002; +3292 : 5431003B; +3293 : 222200FF; +3294 : 50220002; +3295 : B8208800; +3296 : 29610000; +3297 : 223100FF; +3298 : B9E01000; +3299 : BA201800; +329a : F800251B; +329b : 3C250018; +329c : B9807000; +329d : 14A50018; +329e : 4600000A; +329f : 48A00007; +32a0 : 4163000C; +32a1 : 41A10000; +32a2 : 64A20000; +32a3 : F0610800; +32a4 : A0410800; +32a5 : 44200003; +32a6 : 4171000C; +32a7 : BA407000; +32a8 : 4163000C; +32a9 : 64A10000; +32aa : E4711000; +32ab : A0411000; +32ac : 5C400003; +32ad : 21C10008; +32ae : 4422001E; +32af : 5E000003; +32b0 : 21C10008; +32b1 : 44300004; +32b2 : 29620000; +32b3 : B9E00800; +32b4 : F8002522; +32b5 : 29650004; +32b6 : 29630008; +32b7 : B9A00800; +32b8 : BA201000; +32b9 : B9C02000; +32ba : D8A00000; +32bb : 4C01000C; +32bc : 5E000003; +32bd : 21CE0008; +32be : 45D00005; +32bf : 41A30000; +32c0 : 4162000C; +32c1 : B4621000; +32c2 : 31A20000; +32c3 : 4164000C; +32c4 : B5E47800; +32c5 : B5E17800; +32c6 : E000000A; +32c7 : 44200006; +32c8 : C8011000; +32c9 : 204200FF; +32ca : 37810048; +32cb : E000000A; +32cc : 48A10007; +32cd : 356B0010; +32ce : 4161000C; +32cf : 5C20FFC1; +32d0 : 45600003; +32d1 : 4161000C; +32d2 : 5C200006; +32d3 : 37810048; +32d4 : 34020002; +32d5 : FBFFFF34; +32d6 : B8205800; +32d7 : E0000007; +32d8 : 37810048; +32d9 : C9E15800; +32da : B9601000; +32db : FBFFFF0E; +32dc : 340C0000; +32dd : 480B0010; +32de : 378C002C; +32df : 356B001C; +32e0 : B9800800; +32e1 : B9601000; +32e2 : 34030000; +32e3 : FBFFFD94; +32e4 : 78050001; +32e5 : 38A5BC78; +32e6 : 28A10000; +32e7 : B9801800; +32e8 : 378200F4; +32e9 : B9602000; +32ea : 34050000; +32eb : FBFFFB63; +32ec : 340C0001; +32ed : B9800800; +32ee : 2B9D0004; +32ef : 2B8B0028; +32f0 : 2B8C0024; +32f1 : 2B8D0020; +32f2 : 2B8E001C; +32f3 : 2B8F0018; +32f4 : 2B900014; +32f5 : 2B910010; +32f6 : 2B92000C; +32f7 : 2B930008; +32f8 : 379C0104; +32f9 : C3A00000; +32fa : 379CFFEC; +32fb : 5B8B0010; +32fc : 5B8C000C; +32fd : 5B8D0008; +32fe : 5B9D0004; +32ff : B8403000; +3300 : 40C50011; +3301 : 40220000; +3302 : B8606000; +3303 : 402B0001; +3304 : 3404FFFD; +3305 : 5CA2001E; +3306 : 34220002; +3307 : 34010004; +3308 : 44A10013; +3309 : 34010042; +330a : 44A10004; +330b : 34010002; +330c : 34040000; +330d : 5CA10016; +330e : 340D0004; +330f : 3404FFFD; +3310 : 556D0013; +3311 : 37810014; +3312 : B9601800; +3313 : 5B800014; +3314 : F80024C2; +3315 : 2B810014; +3316 : C9AB6800; +3317 : 3DAD0003; +3318 : 802D6800; +3319 : 598D0000; +331a : E0000008; +331b : 40C10013; +331c : 55610007; +331d : B8600800; +331e : B58B6000; +331f : B9601800; +3320 : F80024B6; +3321 : 31800000; +3322 : 35640002; +3323 : B8800800; +3324 : 2B9D0004; +3325 : 2B8B0010; +3326 : 2B8C000C; +3327 : 2B8D0008; +3328 : 379C0014; +3329 : C3A00000; +332a : 379CFFFC; +332b : 5B9D0004; +332c : 40430012; +332d : 2844000C; +332e : B4831800; +332f : FBFFFFCB; +3330 : 2B9D0004; +3331 : 379C0004; +3332 : C3A00000; +3333 : 379CFFCC; +3334 : 5B8B0020; +3335 : 5B8C001C; +3336 : 5B8D0018; +3337 : 5B8E0014; +3338 : 5B8F0010; +3339 : 5B90000C; +333a : 5B910008; +333b : 5B9D0004; +333c : 402E0000; +333d : 204200FF; +333e : 208400FF; +333f : 344C0001; +3340 : C9C27000; +3341 : 20820001; +3342 : B8207800; +3343 : B42C6000; +3344 : 3401FFFC; +3345 : 5C400068; +3346 : 208D0004; +3347 : 7DAD0000; +3348 : 20900008; +3349 : 7E100000; +334a : B8605800; +334b : 21B100FF; +334c : E0000023; +334d : B9C01800; +334e : 4C2E0002; +334f : B8201800; +3350 : 29610000; +3351 : B9801000; +3352 : 206300FF; +3353 : F8002462; +3354 : 5E00000A; +3355 : B0200800; +3356 : 64220000; +3357 : A0511800; +3358 : 44700003; +3359 : 41630010; +335a : 4C6E0004; +335b : 68210000; +335c : A2210800; +335d : 4420000B; +335e : 29620000; +335f : 41630010; +3360 : B9800800; +3361 : 340E0000; +3362 : F8002474; +3363 : 41610010; +3364 : 34020001; +3365 : B5810800; +3366 : 30220000; +3367 : E000000D; +3368 : 44410006; +3369 : 41610010; +336a : 34210001; +336b : 45C10006; +336c : 45A00002; +336d : 49C10006; +336e : 356B0014; +336f : 41610010; +3370 : 5C20FFDD; +3371 : B9A07000; +3372 : E0000002; +3373 : 340E0001; +3374 : 41620010; +3375 : 34010000; +3376 : 44400037; +3377 : 41610011; +3378 : 33820034; +3379 : 5B8C0024; +337a : 33810035; +337b : 2961000C; +337c : 5B810030; +337d : 45C00004; +337e : 41810001; +337f : 34210001; +3380 : 31810001; +3381 : 41610010; +3382 : 29630004; +3383 : 37910024; +3384 : 34210001; +3385 : B5810800; +3386 : BA201000; +3387 : D8600000; +3388 : 64230000; +3389 : A06E7000; +338a : 45C00019; +338b : 356B0014; +338c : 41630010; +338d : 34010000; +338e : 4460001F; +338f : 29620000; +3390 : B9800800; +3391 : F8002445; +3392 : 41610010; +3393 : 34020001; +3394 : B5810800; +3395 : 30220000; +3396 : 41620011; +3397 : 41610010; +3398 : 29630004; +3399 : 33820035; +339a : 2962000C; +339b : 33810034; +339c : 34210001; +339d : 5B820030; +339e : B5810800; +339f : BA201000; +33a0 : D8600000; +33a1 : 5C200003; +33a2 : E000000B; +33a3 : 5C6E0009; +33a4 : 48010009; +33a5 : 41620010; +33a6 : BA0D6800; +33a7 : 34420001; +33a8 : B4220800; +33a9 : 45A00004; +33aa : 31E20000; +33ab : E0000002; +33ac : 34010000; +33ad : 2B9D0004; +33ae : 2B8B0020; +33af : 2B8C001C; +33b0 : 2B8D0018; +33b1 : 2B8E0014; +33b2 : 2B8F0010; +33b3 : 2B90000C; +33b4 : 2B910008; +33b5 : 379C0034; +33b6 : C3A00000; +33b7 : 379CFFD0; +33b8 : 5B8B0030; +33b9 : 5B8C002C; +33ba : 5B8D0028; +33bb : 5B8E0024; +33bc : 5B8F0020; +33bd : 5B90001C; +33be : 5B910018; +33bf : 5B920014; +33c0 : 5B930010; +33c1 : 5B94000C; +33c2 : 5B950008; +33c3 : 5B9D0004; +33c4 : 208400FF; +33c5 : 40310000; +33c6 : 204200FF; +33c7 : 008D0003; +33c8 : 344E0001; +33c9 : 208F0004; +33ca : B8208000; +33cb : CA228800; +33cc : B42E7000; +33cd : 21AD0001; +33ce : B8605800; +33cf : 340C0000; +33d0 : 20950003; +33d1 : 20940001; +33d2 : 7DF30000; +33d3 : E0000034; +33d4 : B8A09000; +33d5 : 5DA00005; +33d6 : BA209000; +33d7 : 4CB10002; +33d8 : B8A09000; +33d9 : 225200FF; +33da : 46A00002; +33db : 5E25002B; +33dc : 5DA0000C; +33dd : 29610000; +33de : B9C01000; +33df : BA401800; +33e0 : F80023D5; +33e1 : 3C2C0018; +33e2 : 158C0018; +33e3 : 5D8D0006; +33e4 : 45EC0009; +33e5 : 41610010; +33e6 : 5C320007; +33e7 : E000001F; +33e8 : 45800005; +33e9 : 69810000; +33ea : A0331000; +33eb : 5C400002; +33ec : 45A20019; +33ed : 45E00007; +33ee : 29620000; +33ef : 41630010; +33f0 : B9C00800; +33f1 : F80023E5; +33f2 : 41610010; +33f3 : 32010000; +33f4 : 46800008; +33f5 : 29630008; +33f6 : 44600014; +33f7 : 41610010; +33f8 : B9601000; +33f9 : B5C10800; +33fa : D8600000; +33fb : 48010012; +33fc : 41610010; +33fd : 29630004; +33fe : B9601000; +33ff : B5C10800; +3400 : D8600000; +3401 : 44200005; +3402 : 41620010; +3403 : B4220800; +3404 : E0000009; +3405 : 5C2D0007; +3406 : 356B0014; +3407 : 41650010; +3408 : 5CA0FFCC; +3409 : E0000003; +340a : 3401FFFC; +340b : E0000002; +340c : 34010000; +340d : 2B9D0004; +340e : 2B8B0030; +340f : 2B8C002C; +3410 : 2B8D0028; +3411 : 2B8E0024; +3412 : 2B8F0020; +3413 : 2B90001C; +3414 : 2B910018; +3415 : 2B920014; +3416 : 2B930010; +3417 : 2B94000C; +3418 : 2B950008; +3419 : 379C0030; +341a : C3A00000; +341b : 379CFFE4; +341c : 5B8B0010; +341d : 5B8C000C; +341e : 5B8D0008; +341f : 5B9D0004; +3420 : B8206000; +3421 : 342D0002; +3422 : 30220000; +3423 : 34010043; +3424 : B8605800; +3425 : 54410008; +3426 : 34010041; +3427 : 50410009; +3428 : 34010002; +3429 : 44410007; +342a : 34010004; +342b : 5C410029; +342c : E000001C; +342d : 34010046; +342e : 5C410026; +342f : E0000009; +3430 : 29610000; +3431 : 3782001C; +3432 : 34030004; +3433 : 5B81001C; +3434 : B9A00800; +3435 : F80023A1; +3436 : 34010004; +3437 : E000000F; +3438 : 78010001; +3439 : 3821C29C; +343a : 40210000; +343b : 34020000; +343c : 44200019; +343d : 28610000; +343e : 37820014; +343f : 5B810014; +3440 : 28610004; +3441 : 34030008; +3442 : 5B810018; +3443 : B9A00800; +3444 : F8002392; +3445 : 34010008; +3446 : 31810001; +3447 : E000000A; +3448 : B8600800; +3449 : 3402001F; +344a : F800256F; +344b : 202300FF; +344c : 31830001; +344d : B9A00800; +344e : B9601000; +344f : 34630001; +3450 : F8002386; +3451 : 41820001; +3452 : 34420002; +3453 : E0000002; +3454 : 34020000; +3455 : B8400800; +3456 : 2B9D0004; +3457 : 2B8B0010; +3458 : 2B8C000C; +3459 : 2B8D0008; +345a : 379C001C; +345b : C3A00000; +345c : 379CFFE8; +345d : 5B8B0014; +345e : 5B8C0010; +345f : 5B8D000C; +3460 : 5B8E0008; +3461 : 5B9D0004; +3462 : 284D000C; +3463 : B8207000; +3464 : B8405800; +3465 : 34010001; +3466 : 78020001; +3467 : 3842BCA0; +3468 : 45A10005; +3469 : 3404FFFD; +346a : 5DA0002C; +346b : 78020001; +346c : 3842BCA4; +346d : 29610000; +346e : 34050001; +346f : 28420000; +3470 : 402C0000; +3471 : 40210001; +3472 : 34040000; +3473 : 5C250023; +3474 : 4C2C0022; +3475 : 34410002; +3476 : 49810020; +3477 : 34010002; +3478 : 5D810006; +3479 : 340100A3; +347a : 3404FFFC; +347b : 4461001B; +347c : 5B820018; +347d : E0000014; +347e : 340100A3; +347f : 5C61000C; +3480 : B9C00800; +3481 : B9601000; +3482 : 37830018; +3483 : FBFFFE77; +3484 : B8202000; +3485 : 4C010011; +3486 : 2B820018; +3487 : 3581FFFD; +3488 : F80009F1; +3489 : 3404FFFB; +348a : 4801000C; +348b : 3581FFFD; +348c : B9A01000; +348d : 37830018; +348e : F80009A4; +348f : 3404FFFB; +3490 : 48010006; +3491 : 41620011; +3492 : B9C00800; +3493 : 37830018; +3494 : FBFFFF87; +3495 : B8202000; +3496 : B8800800; +3497 : 2B9D0004; +3498 : 2B8B0014; +3499 : 2B8C0010; +349a : 2B8D000C; +349b : 2B8E0008; +349c : 379C0018; +349d : C3A00000; +349e : 379CFFFC; +349f : 5B9D0004; +34a0 : 340300A3; +34a1 : FBFFFFBB; +34a2 : 2B9D0004; +34a3 : 379C0004; +34a4 : C3A00000; +34a5 : 379CFFFC; +34a6 : 5B9D0004; +34a7 : 340300A0; +34a8 : FBFFFFB4; +34a9 : 2B9D0004; +34aa : 379C0004; +34ab : C3A00000; +34ac : 379CFFE4; +34ad : 5B8B0014; +34ae : 5B8C0010; +34af : 5B8D000C; +34b0 : 5B8E0008; +34b1 : 5B9D0004; +34b2 : B8406000; +34b3 : 2842000C; +34b4 : 34030001; +34b5 : B8206800; +34b6 : 44430019; +34b7 : 34030002; +34b8 : 5C430031; +34b9 : 78020001; +34ba : 3842BC7C; +34bb : 28430000; +34bc : 28650054; +34bd : 28640050; +34be : 3CA20001; +34bf : 3C840001; +34c0 : F4A22800; +34c1 : C8021000; +34c2 : B4A42000; +34c3 : 7C450000; +34c4 : C8042000; +34c5 : C8852000; +34c6 : 28650040; +34c7 : 28630044; +34c8 : B4852000; +34c9 : B4431800; +34ca : F4431000; +34cb : 5B83001C; +34cc : B4441000; +34cd : 5B820018; +34ce : E0000017; +34cf : 78020001; +34d0 : 3842BC7C; +34d1 : 28430000; +34d2 : 78050001; +34d3 : 38A58EC8; +34d4 : 286E00A8; +34d5 : 2C6B00AC; +34d6 : 286200A4; +34d7 : 3DC10010; +34d8 : 28A40000; +34d9 : B82B5800; +34da : 286100A0; +34db : 34030000; +34dc : 15CE0010; +34dd : F8002206; +34de : B5621000; +34df : F5625800; +34e0 : B5C11800; +34e1 : B5631800; +34e2 : 5B830018; +34e3 : 5B82001C; +34e4 : B9A00800; +34e5 : 41820011; +34e6 : 37830018; +34e7 : FBFFFF34; +34e8 : E0000002; +34e9 : 3401FFFF; +34ea : 2B9D0004; +34eb : 2B8B0014; +34ec : 2B8C0010; +34ed : 2B8D000C; +34ee : 2B8E0008; +34ef : 379C001C; +34f0 : C3A00000; +34f1 : 379CFFF8; +34f2 : 5B9D0004; +34f3 : 2843000C; +34f4 : 40450011; +34f5 : 40420012; +34f6 : 28630000; +34f7 : B4621000; +34f8 : 28440000; +34f9 : 28430004; +34fa : 4880000E; +34fb : 5C800005; +34fc : 78060001; +34fd : 38C68EFC; +34fe : 28C20000; +34ff : 54620009; +3500 : 3402FFFF; +3501 : 4844000B; +3502 : 5C82000B; +3503 : 78040001; +3504 : 38848F00; +3505 : 28820000; +3506 : 54430006; +3507 : E0000006; +3508 : 78060001; +3509 : 38C68ED4; +350a : 28C30000; +350b : E0000002; +350c : 78038000; +350d : 5B830008; +350e : B8A01000; +350f : 37830008; +3510 : FBFFFF0B; +3511 : 2B9D0004; +3512 : 379C0008; +3513 : C3A00000; +3514 : 379CFFFC; +3515 : 5B9D0004; +3516 : 2844000C; +3517 : 40430012; +3518 : 40420011; +3519 : 28840000; +351a : B4831800; +351b : FBFFFF00; +351c : 2B9D0004; +351d : 379C0004; +351e : C3A00000; +351f : 379CFFFC; +3520 : 5B9D0004; +3521 : 2844000C; +3522 : 40430012; +3523 : 40420011; +3524 : B4831800; +3525 : FBFFFEF6; +3526 : 2B9D0004; +3527 : 379C0004; +3528 : C3A00000; +3529 : 379CFF98; +352a : 5B8B0034; +352b : 5B8C0030; +352c : 5B8D002C; +352d : 5B8E0028; +352e : 5B8F0024; +352f : 5B900020; +3530 : 5B91001C; +3531 : 5B920018; +3532 : 5B930014; +3533 : 5B940010; +3534 : 5B95000C; +3535 : 5B960008; +3536 : 5B9D0004; +3537 : B8208000; +3538 : 28410000; +3539 : B8407000; +353a : 340D0000; +353b : 40360001; +353c : 402C0000; +353d : 340B0001; +353e : 378F0038; +353f : 3415FFFF; +3540 : 34140002; +3541 : 34130003; +3542 : 34120004; +3543 : 34110005; +3544 : 21A300FF; +3545 : B9E00800; +3546 : 34020000; +3547 : F8001141; +3548 : B8201800; +3549 : 4420001C; +354a : 4435001B; +354b : 5ECB000D; +354c : 5D940009; +354d : 378B0058; +354e : 34030010; +354f : B9600800; +3550 : B9E01000; +3551 : F8002285; +3552 : B9601800; +3553 : 33800068; +3554 : E000000D; +3555 : 45930007; +3556 : 45920008; +3557 : 45910009; +3558 : 356B0001; +3559 : 35AD0001; +355a : 4C6BFFEA; +355b : E000000A; +355c : 3783004C; +355d : E0000004; +355e : 37830050; +355f : E0000002; +3560 : 37830048; +3561 : 41C20011; +3562 : BA000800; +3563 : FBFFFEB8; +3564 : E0000002; +3565 : 34010000; +3566 : 2B9D0004; +3567 : 2B8B0034; +3568 : 2B8C0030; +3569 : 2B8D002C; +356a : 2B8E0028; +356b : 2B8F0024; +356c : 2B900020; +356d : 2B91001C; +356e : 2B920018; +356f : 2B930014; +3570 : 2B940010; +3571 : 2B95000C; +3572 : 2B960008; +3573 : 379C0068; +3574 : C3A00000; +3575 : 379CFFF0; +3576 : 5B8B000C; +3577 : 5B8C0008; +3578 : 5B9D0004; +3579 : B8405800; +357a : 2842000C; +357b : B8206000; +357c : 34010001; +357d : 5C41000A; +357e : 34010000; +357f : F800042B; +3580 : 34220001; +3581 : 5B820010; +3582 : 41620011; +3583 : B9800800; +3584 : 37830010; +3585 : FBFFFE96; +3586 : E0000002; +3587 : 3401FFFF; +3588 : 2B9D0004; +3589 : 2B8B000C; +358a : 2B8C0008; +358b : 379C0010; +358c : C3A00000; +358d : 379CFFF4; +358e : 5B8B000C; +358f : 5B8C0008; +3590 : 5B9D0004; +3591 : 284B000C; +3592 : B9601800; +3593 : FBFFFD67; +3594 : B8206000; +3595 : 4C01000A; +3596 : 29620000; +3597 : 34010001; +3598 : 5C410005; +3599 : FBFFCFAE; +359a : FBFFCF87; +359b : 34010064; +359c : E0000002; +359d : 340100C8; +359e : 59610000; +359f : B9800800; +35a0 : 2B9D0004; +35a1 : 2B8B000C; +35a2 : 2B8C0008; +35a3 : 379C000C; +35a4 : C3A00000; +35a5 : 379CFFF0; +35a6 : 5B8B0010; +35a7 : 5B8C000C; +35a8 : 5B8D0008; +35a9 : 5B9D0004; +35aa : 284B000C; +35ab : B9601800; +35ac : FBFFFD4E; +35ad : B8206800; +35ae : 4C010050; +35af : 29620000; +35b0 : 34010002; +35b1 : 4441001E; +35b2 : 48410004; +35b3 : 34010001; +35b4 : 5C410048; +35b5 : E0000020; +35b6 : 34010003; +35b7 : 44410004; +35b8 : 34010032; +35b9 : 5C410043; +35ba : E000003D; +35bb : 78020001; +35bc : 3842BC80; +35bd : 28410014; +35be : 78030001; +35bf : 3863BF40; +35c0 : 58610000; +35c1 : 28410018; +35c2 : 78030001; +35c3 : 3863BF44; +35c4 : 58610000; +35c5 : 28410010; +35c6 : 78030001; +35c7 : 3863A808; +35c8 : 58610000; +35c9 : 78010001; +35ca : 3821879C; +35cb : F8000253; +35cc : FBFFCF7B; +35cd : FBFFCF54; +35ce : E000002C; +35cf : 78010001; +35d0 : 78020001; +35d1 : 3821BC80; +35d2 : 3842BFBC; +35d3 : 34030010; +35d4 : F8002202; +35d5 : 780C0001; +35d6 : 398CBC80; +35d7 : 41810000; +35d8 : 5C200003; +35d9 : 340100CB; +35da : E0000023; +35db : 34020010; +35dc : B9800800; +35dd : F80023DC; +35de : B8201000; +35df : 3403000F; +35e0 : 34010020; +35e1 : E0000004; +35e2 : B44C2000; +35e3 : 30810000; +35e4 : 34420001; +35e5 : 4C62FFFD; +35e6 : 34020001; +35e7 : B9800800; +35e8 : 34030000; +35e9 : F800109F; +35ea : B8201000; +35eb : 3401FFFE; +35ec : 5C410003; +35ed : 340100CA; +35ee : E000000F; +35ef : 3401FFFF; +35f0 : 5C410003; +35f1 : 340100C9; +35f2 : E000000B; +35f3 : F80008F8; +35f4 : 44200006; +35f5 : 34010065; +35f6 : E0000007; +35f7 : F8001031; +35f8 : 3402FFFF; +35f9 : 44220003; +35fa : 34010064; +35fb : E0000002; +35fc : 340100C8; +35fd : 59610000; +35fe : B9A00800; +35ff : 2B9D0004; +3600 : 2B8B0010; +3601 : 2B8C000C; +3602 : 2B8D0008; +3603 : 379C0010; +3604 : C3A00000; +3605 : 379CFFC8; +3606 : 5B8B0024; +3607 : 5B8C0020; +3608 : 5B8D001C; +3609 : 5B8E0018; +360a : 5B8F0014; +360b : 5B900010; +360c : 5B91000C; +360d : 5B920008; +360e : 5B9D0004; +360f : B8207800; +3610 : 28410000; +3611 : B8406800; +3612 : 340C0001; +3613 : 40320001; +3614 : 402E0000; +3615 : 34010000; +3616 : F8000C14; +3617 : B8202000; +3618 : 34110002; +3619 : 34100003; +361a : E0000025; +361b : 5E4C0020; +361c : 288B0004; +361d : 5DD10007; +361e : 28830000; +361f : 78020001; +3620 : 37810028; +3621 : 38427BDC; +3622 : F80001EE; +3623 : E000001F; +3624 : 5DD00017; +3625 : 78018000; +3626 : 5D610006; +3627 : 78020001; +3628 : 37810028; +3629 : 384287C8; +362a : F80001E6; +362b : E0000017; +362c : 4D600006; +362d : 78020001; +362e : 37810028; +362f : 38427948; +3630 : C80B5800; +3631 : F80001DF; +3632 : 2164FFFF; +3633 : 08842710; +3634 : 78020001; +3635 : 15630010; +3636 : 00840010; +3637 : 37810028; +3638 : 384287D0; +3639 : F80001D7; +363a : E0000008; +363b : B8800800; +363c : F8000BEE; +363d : B8202000; +363e : 358C0001; +363f : 5C80FFDC; +3640 : 34010000; +3641 : E0000005; +3642 : 41A20011; +3643 : B9E00800; +3644 : 37830028; +3645 : FBFFFDD6; +3646 : 2B9D0004; +3647 : 2B8B0024; +3648 : 2B8C0020; +3649 : 2B8D001C; +364a : 2B8E0018; +364b : 2B8F0014; +364c : 2B900010; +364d : 2B91000C; +364e : 2B920008; +364f : 379C0038; +3650 : C3A00000; +3651 : 379CFFE4; +3652 : 5B8B0010; +3653 : 5B8C000C; +3654 : 5B8D0008; +3655 : 5B9D0004; +3656 : 284D000C; +3657 : B8206000; +3658 : B8405800; +3659 : 21A10002; +365a : 44200009; +365b : F80007AF; +365c : 3402000A; +365d : F8002118; +365e : 5B81001C; +365f : 41620011; +3660 : B9800800; +3661 : 3783001C; +3662 : E0000013; +3663 : 21A20004; +3664 : 44410004; +3665 : 37810014; +3666 : 34020000; +3667 : F8000CA8; +3668 : 21AD0001; +3669 : 45A00009; +366a : 2B820018; +366b : 2B810014; +366c : 34030002; +366d : FBFFF4CA; +366e : B8201800; +366f : 41620011; +3670 : B9800800; +3671 : E0000004; +3672 : 41620011; +3673 : B9800800; +3674 : 37830014; +3675 : FBFFFDA6; +3676 : 2B9D0004; +3677 : 2B8B0010; +3678 : 2B8C000C; +3679 : 2B8D0008; +367a : 379C001C; +367b : C3A00000; +367c : 379CFFF4; +367d : 5B9D0004; +367e : 78010001; +367f : 34020000; +3680 : 34030000; +3681 : 340400A1; +3682 : 3821A1A8; +3683 : FBFFF6B5; +3684 : 78020001; +3685 : 3842BC78; +3686 : 58410000; +3687 : 78010001; +3688 : 38219828; +3689 : 28210018; +368a : 78020001; +368b : 3842BC7C; +368c : 78030001; +368d : 78040001; +368e : 58410000; +368f : 3863BCA4; +3690 : 3781000C; +3691 : 37820008; +3692 : 3884BCA0; +3693 : F8000785; +3694 : 4383000F; +3695 : 4382000B; +3696 : 78010001; +3697 : 3821A190; +3698 : 30230008; +3699 : 30220009; +369a : 78010001; +369b : 3821A19C; +369c : 30230008; +369d : 30220009; +369e : 2B9D0004; +369f : 379C000C; +36a0 : C3A00000; +36a1 : 78030001; +36a2 : 3863BDB4; +36a3 : 2C650000; +36a4 : 78040001; +36a5 : 3884BDCC; +36a6 : 3C210001; +36a7 : B4852000; +36a8 : 34A50002; +36a9 : 30810000; +36aa : 30820001; +36ab : 0C650000; +36ac : C3A00000; +36ad : 379CFFC0; +36ae : 5B8B0014; +36af : 5B8C0010; +36b0 : 5B8D000C; +36b1 : 5B8E0008; +36b2 : 5B9D0004; +36b3 : 34020008; +36b4 : 542200BE; +36b5 : 3C210002; +36b6 : 78020001; +36b7 : 384293BC; +36b8 : B4411000; +36b9 : 28410000; +36ba : 780C0001; +36bb : 398CBDB4; +36bc : C0200000; +36bd : 34010000; +36be : 34020000; +36bf : FBFFFFE2; +36c0 : E00000AC; +36c1 : 34010001; +36c2 : 34020007; +36c3 : FBFFFFDE; +36c4 : 2D820000; +36c5 : 78010001; +36c6 : 3821BDCC; +36c7 : B4220800; +36c8 : 34020004; +36c9 : E0000009; +36ca : 34010002; +36cb : 34020007; +36cc : FBFFFFD5; +36cd : 2D820000; +36ce : 78010001; +36cf : 3821BDCC; +36d0 : B4220800; +36d1 : 34020003; +36d2 : 30220000; +36d3 : 34210001; +36d4 : F800028B; +36d5 : 340B0007; +36d6 : E0000097; +36d7 : 34010003; +36d8 : 34020002; +36d9 : FBFFFFC8; +36da : 2D820000; +36db : 78010001; +36dc : 3821BDCC; +36dd : B4220800; +36de : 34020028; +36df : 30200000; +36e0 : 30220001; +36e1 : 340B0002; +36e2 : E000008B; +36e3 : 780D0001; +36e4 : 39AD875C; +36e5 : B9A00800; +36e6 : F8002224; +36e7 : 342B0001; +36e8 : 216200FF; +36e9 : 34010004; +36ea : FBFFFFB7; +36eb : 2D820000; +36ec : 78010001; +36ed : 3821BDCC; +36ee : B4410800; +36ef : B9A01000; +36f0 : F80021F6; +36f1 : E000007C; +36f2 : 37810040; +36f3 : FBFFF7CD; +36f4 : 78020001; +36f5 : 37810040; +36f6 : 38428F90; +36f7 : 34030004; +36f8 : 780C0001; +36f9 : 780E0001; +36fa : F80020BB; +36fb : 398CBDB4; +36fc : 39CEBDCC; +36fd : 378D0018; +36fe : 4420000D; +36ff : 37820040; +3700 : B9A00800; +3701 : FBFFF30C; +3702 : B9A00800; +3703 : F8002207; +3704 : B8205800; +3705 : 2D810000; +3706 : B9A01000; +3707 : 34210002; +3708 : B42E0800; +3709 : F80021DD; +370a : E0000014; +370b : 37810038; +370c : F8000253; +370d : 43830038; +370e : 43840039; +370f : 4385003A; +3710 : 4386003B; +3711 : 4387003C; +3712 : 4388003D; +3713 : 78020001; +3714 : 38428150; +3715 : B9A00800; +3716 : F80000FA; +3717 : 2D810000; +3718 : B9A01000; +3719 : 34030011; +371a : 34210002; +371b : B42E0800; +371c : F800226A; +371d : 340B0011; +371e : 34010005; +371f : 216200FF; +3720 : E0000026; +3721 : 2D8E0000; +3722 : 780D0001; +3723 : 39ADBDCC; +3724 : 35CE0002; +3725 : 780B0001; +3726 : B5CD7000; +3727 : 396BC284; +3728 : 34030004; +3729 : B9601000; +372a : B9C00800; +372b : F800225B; +372c : B9600800; +372d : 34020004; +372e : F800228B; +372f : B5C15800; +3730 : 78020001; +3731 : B9600800; +3732 : 38427E6C; +3733 : 780E0001; +3734 : F80021B2; +3735 : 39CE96E8; +3736 : 29C20000; +3737 : 356B0002; +3738 : B9600800; +3739 : 34030020; +373a : F800224C; +373b : 29C10000; +373c : 34020020; +373d : F800227C; +373e : B5610800; +373f : 2D8B0000; +3740 : 356B0002; +3741 : B56D5800; +3742 : C82B5800; +3743 : 216B00FF; +3744 : 34010006; +3745 : B9601000; +3746 : FBFFFF5B; +3747 : E0000026; +3748 : 78020001; +3749 : 37810040; +374a : 38428F90; +374b : 34030004; +374c : F8002069; +374d : 340B0000; +374e : 4420001F; +374f : 34010008; +3750 : 3402000C; +3751 : 780C0001; +3752 : FBFFFF4F; +3753 : 398CBDB4; +3754 : 2D810000; +3755 : 780B0001; +3756 : 396BBDCC; +3757 : B5610800; +3758 : 34020005; +3759 : 34030002; +375a : 30220000; +375b : 34020001; +375c : 30230006; +375d : 30220001; +375e : 3022000A; +375f : 37810040; +3760 : FBFFF760; +3761 : 37820040; +3762 : 37810018; +3763 : FBFFF2AA; +3764 : 2D810000; +3765 : 37820040; +3766 : 34030004; +3767 : 34210002; +3768 : B5610800; +3769 : F800206D; +376a : 340B000C; +376b : E0000002; +376c : 340B0000; +376d : 78010001; +376e : 3821BDB4; +376f : 2C220000; +3770 : B5625800; +3771 : 0C2B0000; +3772 : 2B9D0004; +3773 : 2B8B0014; +3774 : 2B8C0010; +3775 : 2B8D000C; +3776 : 2B8E0008; +3777 : 379C0040; +3778 : C3A00000; +3779 : 379CFFF4; +377a : 5B8B000C; +377b : 5B8C0008; +377c : 5B9D0004; +377d : 78010001; +377e : 34020000; +377f : 3403009E; +3780 : 3821BDCC; +3781 : F80020D3; +3782 : 78010001; +3783 : 3821BDB4; +3784 : 0C200000; +3785 : 78010001; +3786 : 382187F8; +3787 : F8000097; +3788 : 340B0001; +3789 : 340C0009; +378a : B9600800; +378b : 356B0001; +378c : FBFFFF21; +378d : 5D6CFFFD; +378e : 34010000; +378f : FBFFFF1E; +3790 : 2B9D0004; +3791 : 2B8B000C; +3792 : 2B8C0008; +3793 : 379C000C; +3794 : C3A00000; +3795 : 379CFFEC; +3796 : 5B8B000C; +3797 : 5B8C0008; +3798 : 5B9D0004; +3799 : 78010001; +379a : 3821BE78; +379b : 28220000; +379c : 34032710; +379d : 4C620034; +379e : 378C0010; +379f : B9800800; +37a0 : F80001BF; +37a1 : 378B0017; +37a2 : B9600800; +37a3 : FBFFF71D; +37a4 : 78020001; +37a5 : 34030006; +37a6 : B9800800; +37a7 : 3842BE6C; +37a8 : F800200D; +37a9 : B8201800; +37aa : 5C20000B; +37ab : 78020001; +37ac : 3842B8F8; +37ad : 28410000; +37ae : 44230012; +37af : 78020001; +37b0 : B9600800; +37b1 : 3842BE74; +37b2 : 34030004; +37b3 : F8002002; +37b4 : 4420000C; +37b5 : FBFFFFC4; +37b6 : 78010001; +37b7 : 37820010; +37b8 : 34030006; +37b9 : 3821BE6C; +37ba : F800201C; +37bb : 78010001; +37bc : 3821BE74; +37bd : 37820017; +37be : 34030004; +37bf : F8002017; +37c0 : 78010001; +37c1 : 78040001; +37c2 : 3821BDB0; +37c3 : 3884BDB4; +37c4 : 28210000; +37c5 : 2C840000; +37c6 : 78020001; +37c7 : 78030001; +37c8 : 3842BDB8; +37c9 : 3863BDCC; +37ca : 34050000; +37cb : FBFFF683; +37cc : 78010001; +37cd : 3821BE78; +37ce : 58200000; +37cf : 34010001; +37d0 : E0000004; +37d1 : 34420001; +37d2 : 58220000; +37d3 : 34010000; +37d4 : 2B9D0004; +37d5 : 2B8B000C; +37d6 : 2B8C0008; +37d7 : 379C0014; +37d8 : C3A00000; +37d9 : 379CFFE4; +37da : 5B8B0008; +37db : 5B9D0004; +37dc : 378B000C; +37dd : B9600800; +37de : 34020000; +37df : 34030012; +37e0 : F8002074; +37e1 : 340188CC; +37e2 : 0F810018; +37e3 : 78010001; +37e4 : 34040000; +37e5 : B9601000; +37e6 : 34030001; +37e7 : 3821BE7C; +37e8 : FBFFF550; +37e9 : 78020001; +37ea : 780B0001; +37eb : 396BBDB8; +37ec : 3842BDB0; +37ed : 58410000; +37ee : 34030012; +37ef : B9600800; +37f0 : 34020000; +37f1 : F8002063; +37f2 : 78020001; +37f3 : 38428F98; +37f4 : 34030006; +37f5 : B9600800; +37f6 : F8001FE0; +37f7 : FBFFFF82; +37f8 : 2B9D0004; +37f9 : 2B8B0008; +37fa : 379C001C; +37fb : C3A00000; +37fc : 379CFFF4; +37fd : 5B8B000C; +37fe : 5B8C0008; +37ff : 5B9D0004; +3800 : 780B0001; +3801 : B8202000; +3802 : 396BBEB0; +3803 : B8401800; +3804 : B9600800; +3805 : B8801000; +3806 : F8000027; +3807 : B8206000; +3808 : B9600800; +3809 : F800010C; +380a : B9800800; +380b : 2B9D0004; +380c : 2B8B000C; +380d : 2B8C0008; +380e : 379C000C; +380f : C3A00000; +3810 : 379CFFE0; +3811 : 5B9D0004; +3812 : 5B83000C; +3813 : 3783000C; +3814 : 5B820008; +3815 : 5B840010; +3816 : 5B850014; +3817 : 5B860018; +3818 : 5B87001C; +3819 : 5B880020; +381a : F8000013; +381b : 2B9D0004; +381c : 379C0020; +381d : C3A00000; +381e : 379CFFDC; +381f : 5B9D0004; +3820 : 5B82000C; +3821 : 3782000C; +3822 : 5B810008; +3823 : 5B830010; +3824 : 5B840014; +3825 : 5B850018; +3826 : 5B86001C; +3827 : 5B870020; +3828 : 5B880024; +3829 : FBFFFFD3; +382a : 2B9D0004; +382b : 379C0024; +382c : C3A00000; +382d : 379CFF9C; +382e : 5B8B0044; +382f : 5B8C0040; +3830 : 5B8D003C; +3831 : 5B8E0038; +3832 : 5B8F0034; +3833 : 5B900030; +3834 : 5B91002C; +3835 : 5B920028; +3836 : 5B930024; +3837 : 5B940020; +3838 : 5B95001C; +3839 : 5B960018; +383a : 5B970014; +383b : 5B980010; +383c : 5B99000C; +383d : 5B9B0008; +383e : 5B9D0004; +383f : 78160001; +3840 : B820C800; +3841 : B840A000; +3842 : B8209800; +3843 : 34180025; +3844 : 34090069; +3845 : 34080070; +3846 : 34070058; +3847 : 341B002A; +3848 : 340A0030; +3849 : 34170010; +384a : 37950058; +384b : 3AD68810; +384c : E0000096; +384d : 340F0000; +384e : 34110020; +384f : 340D000A; +3850 : 44380004; +3851 : 32610000; +3852 : E000003C; +3853 : 34110030; +3854 : 36940001; +3855 : 42810000; +3856 : 44290040; +3857 : 5429000F; +3858 : 4427003B; +3859 : 54270008; +385a : 443B001A; +385b : 543B0004; +385c : 44200088; +385d : 5C38001A; +385e : E000002F; +385f : 5C2A0018; +3860 : E0000016; +3861 : 34020063; +3862 : 4422001C; +3863 : 34040064; +3864 : 5C240013; +3865 : E0000031; +3866 : 4428002D; +3867 : 54280006; +3868 : 3402006E; +3869 : 44220078; +386a : 3404006F; +386b : 5C24000C; +386c : E0000024; +386d : 34020075; +386e : 44220028; +386f : 34040078; +3870 : 44240023; +3871 : 34020073; +3872 : 5C220005; +3873 : E0000010; +3874 : 286D0000; +3875 : 34630004; +3876 : 45E0FFDD; +3877 : 3421FFD0; +3878 : 202200FF; +3879 : 34040009; +387a : 5444FFDA; +387b : 09EF000A; +387c : B42F7800; +387d : E3FFFFD7; +387e : 28610000; +387f : 34630004; +3880 : 32610000; +3881 : 36730001; +3882 : E000005F; +3883 : B8600800; +3884 : 28210000; +3885 : 34630004; +3886 : E0000004; +3887 : 32620000; +3888 : 34210001; +3889 : 36730001; +388a : 40220000; +388b : 5C40FFFC; +388c : E0000055; +388d : 32780000; +388e : 36730001; +388f : E0000052; +3890 : 3401000A; +3891 : 45A10004; +3892 : E0000004; +3893 : 340D0010; +3894 : E0000002; +3895 : 340D0008; +3896 : 28650000; +3897 : 34720004; +3898 : B8A07000; +3899 : 5DE00002; +389a : 340F0001; +389b : 00A6001F; +389c : 65A3000A; +389d : 34100000; +389e : A0C31800; +389f : 44600003; +38a0 : C8057000; +38a1 : 34100001; +38a2 : 340C0010; +38a3 : E0000015; +38a4 : B9C00800; +38a5 : B9A01000; +38a6 : 5B87004C; +38a7 : 5B880050; +38a8 : 5B890054; +38a9 : 5B8A0048; +38aa : F8001EDB; +38ab : B6C11800; +38ac : 40630000; +38ad : 358CFFFF; +38ae : B6AC5800; +38af : B9C00800; +38b0 : 31630000; +38b1 : B9A01000; +38b2 : F8001EC3; +38b3 : 2B8A0048; +38b4 : 2B890054; +38b5 : 2B880050; +38b6 : 2B87004C; +38b7 : B8207000; +38b8 : 7D840000; +38b9 : 7DC30000; +38ba : A0831800; +38bb : 5C60FFE9; +38bc : 5D970004; +38bd : 34020030; +38be : 33820067; +38bf : 340C000F; +38c0 : 66220020; +38c1 : A2021000; +38c2 : 4440000B; +38c3 : 358CFFFF; +38c4 : B6AC1000; +38c5 : 3403002D; +38c6 : 30430000; +38c7 : 34100000; +38c8 : E0000005; +38c9 : 358CFFFF; +38ca : B6AC1000; +38cb : 30510000; +38cc : E0000003; +38cd : CAEF0800; +38ce : B4300800; +38cf : 4981FFFA; +38d0 : 46000005; +38d1 : 358CFFFF; +38d2 : B6AC0800; +38d3 : 3402002D; +38d4 : 30220000; +38d5 : CAEC1800; +38d6 : BA600800; +38d7 : 3404000F; +38d8 : E0000006; +38d9 : B6AC1000; +38da : 40420000; +38db : 358C0001; +38dc : 30220000; +38dd : 34210001; +38de : 4C8CFFFB; +38df : B6639800; +38e0 : BA401800; +38e1 : 36940001; +38e2 : 42810000; +38e3 : 5C20FF6A; +38e4 : CA790800; +38e5 : 32600000; +38e6 : 2B9D0004; +38e7 : 2B8B0044; +38e8 : 2B8C0040; +38e9 : 2B8D003C; +38ea : 2B8E0038; +38eb : 2B8F0034; +38ec : 2B900030; +38ed : 2B91002C; +38ee : 2B920028; +38ef : 2B930024; +38f0 : 2B940020; +38f1 : 2B95001C; +38f2 : 2B960018; +38f3 : 2B970014; +38f4 : 2B980010; +38f5 : 2B99000C; +38f6 : 2B9B0008; +38f7 : 379C0064; +38f8 : C3A00000; +38f9 : 78010001; +38fa : 3821C28C; +38fb : 28220000; +38fc : 78010001; +38fd : 3821C2B4; +38fe : 58220000; +38ff : 340103C6; +3900 : 58410004; +3901 : C3A00000; +3902 : 379CFFF8; +3903 : 5B8B0008; +3904 : 5B9D0004; +3905 : B8205800; +3906 : 3401000A; +3907 : 5D610003; +3908 : 3401000D; +3909 : FBFFFFF9; +390a : 78020001; +390b : 3842C2B4; +390c : 28420000; +390d : 28410000; +390e : 20210001; +390f : 5C20FFFE; +3910 : 584B0008; +3911 : 2B9D0004; +3912 : 2B8B0008; +3913 : 379C0008; +3914 : C3A00000; +3915 : 379CFFF4; +3916 : 5B8B000C; +3917 : 5B8C0008; +3918 : 5B9D0004; +3919 : B8206000; +391a : B8205800; +391b : E0000004; +391c : B8400800; +391d : 356B0001; +391e : FBFFFFE4; +391f : 41620000; +3920 : 5C40FFFC; +3921 : C96C0800; +3922 : 2B9D0004; +3923 : 2B8B000C; +3924 : 2B8C0008; +3925 : 379C000C; +3926 : C3A00000; +3927 : 78010001; +3928 : 3821C2B4; +3929 : 28220000; +392a : 3401FFFF; +392b : 28430000; +392c : 20630002; +392d : 44600003; +392e : 2841000C; +392f : 202100FF; +3930 : C3A00000; +3931 : 78020001; +3932 : 14210002; +3933 : 3842C2B0; +3934 : 28420000; +3935 : 202100FF; +3936 : 3C210010; +3937 : 5841002C; +3938 : 28410030; +3939 : 4C20FFFF; +393a : 28410030; +393b : 2021FFFF; +393c : C3A00000; +393d : 14210002; +393e : 78030001; +393f : 3863C2B0; +3940 : 202100FF; +3941 : 28630000; +3942 : 2042FFFF; +3943 : 78048000; +3944 : 3C210010; +3945 : B8441000; +3946 : B8411000; +3947 : 5862002C; +3948 : 28610030; +3949 : 4C20FFFF; +394a : C3A00000; +394b : 40240002; +394c : 40230003; +394d : 78020001; +394e : 3C840018; +394f : 3C630010; +3950 : 3842C2B0; +3951 : B8831800; +3952 : 40240005; +3953 : 28420000; +3954 : B8641800; +3955 : 40240004; +3956 : 3C840008; +3957 : B8641800; +3958 : 58430028; +3959 : 40230001; +395a : 40210000; +395b : 3C210008; +395c : B8610800; +395d : 58410024; +395e : C3A00000; +395f : 78020001; +3960 : 3842C2B0; +3961 : 28430000; +3962 : 28630028; +3963 : 30230005; +3964 : 28430000; +3965 : 28630028; +3966 : 00630008; +3967 : 30230004; +3968 : 28430000; +3969 : 28630028; +396a : 00630010; +396b : 30230003; +396c : 28430000; +396d : 28630028; +396e : 00630018; +396f : 30230002; +3970 : 28430000; +3971 : 28630024; +3972 : 30230001; +3973 : 28420000; +3974 : 28420024; +3975 : 00420008; +3976 : 30220000; +3977 : C3A00000; +3978 : 379CFFF4; +3979 : 5B8B000C; +397a : 5B8C0008; +397b : 5B9D0004; +397c : 780B0001; +397d : B8406000; +397e : 396BC2B0; +397f : 5C200004; +3980 : 29610000; +3981 : 58200000; +3982 : E0000022; +3983 : 29610000; +3984 : 58200000; +3985 : 28220034; +3986 : 78010001; +3987 : 38218824; +3988 : FBFFFE96; +3989 : F80000BE; +398a : 29610000; +398b : 340200E0; +398c : 58220000; +398d : 78010001; +398e : 3821BF30; +398f : 34020800; +3990 : 582C0000; +3991 : 34010000; +3992 : FBFFFFAB; +3993 : 340100C8; +3994 : F800047B; +3995 : 34010000; +3996 : 38028000; +3997 : FBFFFFA6; +3998 : 34010000; +3999 : 34020000; +399a : FBFFFFA3; +399b : 34010010; +399c : 34020000; +399d : FBFFFFA0; +399e : 7D820000; +399f : 34010000; +39a0 : C8021000; +39a1 : 20421200; +39a2 : 34420140; +39a3 : FBFFFF9A; +39a4 : 34010000; +39a5 : 2B9D0004; +39a6 : 2B8B000C; +39a7 : 2B8C0008; +39a8 : 379C000C; +39a9 : C3A00000; +39aa : 379CFFF0; +39ab : 5B8B000C; +39ac : 5B8C0008; +39ad : 5B9D0004; +39ae : 78020001; +39af : 3842BF30; +39b0 : 284B0000; +39b1 : B8206000; +39b2 : 34010004; +39b3 : FBFFFF7E; +39b4 : 7D6B0000; +39b5 : 0F810012; +39b6 : 34010004; +39b7 : C80B5800; +39b8 : FBFFFF79; +39b9 : 216B0020; +39ba : 0F810012; +39bb : 356B0004; +39bc : 45800004; +39bd : 34010014; +39be : FBFFFF73; +39bf : 0D810000; +39c0 : 2F810012; +39c1 : A1610800; +39c2 : E42B0800; +39c3 : 2B9D0004; +39c4 : 2B8B000C; +39c5 : 2B8C0008; +39c6 : 379C0010; +39c7 : C3A00000; +39c8 : 379CFFFC; +39c9 : 5B9D0004; +39ca : 34010040; +39cb : FBFFFF66; +39cc : 00210004; +39cd : 2021001F; +39ce : 08210320; +39cf : 2B9D0004; +39d0 : 379C0004; +39d1 : C3A00000; +39d2 : 379CFFF4; +39d3 : 5B8B000C; +39d4 : 5B8C0008; +39d5 : 5B9D0004; +39d6 : 78030001; +39d7 : 3863BF40; +39d8 : B8405800; +39d9 : 28620000; +39da : 58220000; +39db : 78010001; +39dc : 3821BF44; +39dd : 282C0000; +39de : 34010040; +39df : FBFFFF52; +39e0 : 00210004; +39e1 : 2021001F; +39e2 : 08210320; +39e3 : B42C0800; +39e4 : 59610000; +39e5 : 34010000; +39e6 : 2B9D0004; +39e7 : 2B8B000C; +39e8 : 2B8C0008; +39e9 : 379C000C; +39ea : C3A00000; +39eb : 379CFFFC; +39ec : 5B9D0004; +39ed : 34010040; +39ee : FBFFFF43; +39ef : 38220001; +39f0 : 34010040; +39f1 : FBFFFF4C; +39f2 : 34010000; +39f3 : 2B9D0004; +39f4 : 379C0004; +39f5 : C3A00000; +39f6 : 379CFFFC; +39f7 : 5B9D0004; +39f8 : 34010040; +39f9 : FBFFFF38; +39fa : 3402FFFE; +39fb : A0221000; +39fc : 34010040; +39fd : FBFFFF40; +39fe : 34010000; +39ff : 2B9D0004; +3a00 : 379C0004; +3a01 : C3A00000; +3a02 : 379CFFF8; +3a03 : 5B8B0008; +3a04 : 5B9D0004; +3a05 : 780B0001; +3a06 : 396BC2B0; +3a07 : 29610000; +3a08 : 28220004; +3a09 : 38420010; +3a0a : 58220004; +3a0b : 34010001; +3a0c : F8000403; +3a0d : 29610000; +3a0e : 28210004; +3a0f : 20210020; +3a10 : 7C210000; +3a11 : 2B9D0004; +3a12 : 2B8B0008; +3a13 : 379C0008; +3a14 : C3A00000; +3a15 : 379CFFF8; +3a16 : 5B8B0008; +3a17 : 5B9D0004; +3a18 : B8205800; +3a19 : 34010044; +3a1a : FBFFFF17; +3a1b : 38220020; +3a1c : 45600003; +3a1d : 3402FFDF; +3a1e : A0221000; +3a1f : 34010044; +3a20 : FBFFFF1D; +3a21 : 34010000; +3a22 : 2B9D0004; +3a23 : 2B8B0008; +3a24 : 379C0008; +3a25 : C3A00000; +3a26 : 379CFFF8; +3a27 : 5B8B0008; +3a28 : 5B9D0004; +3a29 : 78020001; +3a2a : 3842BFA0; +3a2b : 28420000; +3a2c : 780B0001; +3a2d : 396BC2B0; +3a2e : 59620000; +3a2f : FBFFFF1C; +3a30 : 34010001; +3a31 : FBFFFFE4; +3a32 : 78020001; +3a33 : 38428F04; +3a34 : 28410000; +3a35 : 78040001; +3a36 : 38848F08; +3a37 : 58200000; +3a38 : 29610000; +3a39 : 28830000; +3a3a : 34020003; +3a3b : 58200000; +3a3c : 5822000C; +3a3d : 58230008; +3a3e : 78030001; +3a3f : 38638F0C; +3a40 : 58220004; +3a41 : 28620000; +3a42 : 5822003C; +3a43 : 2B9D0004; +3a44 : 2B8B0008; +3a45 : 379C0008; +3a46 : C3A00000; +3a47 : 379CFFE8; +3a48 : 5B8B0010; +3a49 : 5B8C000C; +3a4a : 5B8D0008; +3a4b : 5B9D0004; +3a4c : 78010001; +3a4d : 38219704; +3a4e : 28220000; +3a4f : 78010001; +3a50 : 3821A7E0; +3a51 : 44400003; +3a52 : 78010001; +3a53 : 3821A7E8; +3a54 : 282B0000; +3a55 : 5D600004; +3a56 : 78010001; +3a57 : 3821882C; +3a58 : E0000036; +3a59 : 78030001; +3a5a : 38638F10; +3a5b : 282C0004; +3a5c : 29620000; +3a5d : 28610000; +3a5e : 44410011; +3a5f : B9600800; +3a60 : 780400FF; +3a61 : E000000D; +3a62 : 28230000; +3a63 : 3C660018; +3a64 : 00650018; +3a65 : B8C52800; +3a66 : A0643000; +3a67 : 00C60008; +3a68 : 2063FF00; +3a69 : 3C630008; +3a6a : B8A62800; +3a6b : B8A31800; +3a6c : 58230000; +3a6d : 34210004; +3a6e : 5581FFF4; +3a6f : 78040001; +3a70 : 38848F10; +3a71 : 29630000; +3a72 : 28810000; +3a73 : 44610005; +3a74 : 78010001; +3a75 : 38218844; +3a76 : FBFFFDA8; +3a77 : E00000AB; +3a78 : 78010001; +3a79 : 3821BF34; +3a7a : 28220000; +3a7b : 356B0004; +3a7c : 5C400016; +3a7d : 29630008; +3a7e : 34021234; +3a7f : 0063000D; +3a80 : 2063FFFF; +3a81 : 5C62000B; +3a82 : 29630010; +3a83 : 34025678; +3a84 : 0063000D; +3a85 : 2063FFFF; +3a86 : 5C620006; +3a87 : 29630018; +3a88 : 34424444; +3a89 : 0063000D; +3a8a : 2063FFFF; +3a8b : 44620005; +3a8c : 78010001; +3a8d : 3821886C; +3a8e : FBFFFD90; +3a8f : E0000093; +3a90 : 34020001; +3a91 : 58220000; +3a92 : 37810014; +3a93 : FBFFFECC; +3a94 : 78060001; +3a95 : 38C68F14; +3a96 : 28C50000; +3a97 : 29670008; +3a98 : 29660010; +3a99 : 29610018; +3a9a : A0E53800; +3a9b : A0C53000; +3a9c : A0250800; +3a9d : 59670008; +3a9e : 59660010; +3a9f : 59610018; +3aa0 : 43880014; +3aa1 : 43890015; +3aa2 : 35640008; +3aa3 : 3D080008; +3aa4 : 35630010; +3aa5 : B9094000; +3aa6 : 3D08000D; +3aa7 : 35620018; +3aa8 : B8E83800; +3aa9 : 59670008; +3aaa : 43870016; +3aab : 43880017; +3aac : 3809CAFE; +3aad : 3CE70008; +3aae : B8E83800; +3aaf : 3CE7000D; +3ab0 : 34080001; +3ab1 : B8C73000; +3ab2 : 59660010; +3ab3 : 43860018; +3ab4 : 43870019; +3ab5 : 3CC60008; +3ab6 : B8C73000; +3ab7 : 3CC6000D; +3ab8 : B8260800; +3ab9 : 78060001; +3aba : 38C68F18; +3abb : 59610018; +3abc : 28C70000; +3abd : B9600800; +3abe : E000000B; +3abf : 28260000; +3ac0 : 00CA000D; +3ac1 : 214AFFFF; +3ac2 : 5D490006; +3ac3 : 20CA0007; +3ac4 : 5D480004; +3ac5 : A0C53000; +3ac6 : B8C73000; +3ac7 : 58260000; +3ac8 : 34210008; +3ac9 : 5581FFF6; +3aca : 78070001; +3acb : 38E78F14; +3acc : 78060001; +3acd : B9600800; +3ace : 34050000; +3acf : 340A0AAA; +3ad0 : 34090007; +3ad1 : 28E80000; +3ad2 : 38C69704; +3ad3 : E0000010; +3ad4 : 28270000; +3ad5 : 00ED000D; +3ad6 : 21ADFFFF; +3ad7 : 5DAA000B; +3ad8 : 00ED0007; +3ad9 : 21AD001F; +3ada : 5DA90008; +3adb : A0E83800; +3adc : 58270000; +3add : 28C50000; +3ade : 3CA5000D; +3adf : B8A73800; +3ae0 : 58270000; +3ae1 : B8202800; +3ae2 : 34210008; +3ae3 : 5581FFF1; +3ae4 : 78010001; +3ae5 : 3821C2B0; +3ae6 : 28210000; +3ae7 : 34060000; +3ae8 : 58200014; +3ae9 : E000000F; +3aea : 29670000; +3aeb : 29690004; +3aec : 356B0008; +3aed : 20E80FFF; +3aee : 3D290014; +3aef : 00E7000C; +3af0 : 58280018; +3af1 : B9273800; +3af2 : 3CE70008; +3af3 : 20C9003F; +3af4 : 38E70040; +3af5 : B8E93800; +3af6 : 58270014; +3af7 : 34C60001; +3af8 : 558BFFF2; +3af9 : 44A0000B; +3afa : 78080001; +3afb : 39088F14; +3afc : 28A70000; +3afd : 29060000; +3afe : 78080001; +3aff : 39088F1C; +3b00 : A0E63000; +3b01 : 29070000; +3b02 : B8C73000; +3b03 : 58A60000; +3b04 : 78070001; +3b05 : 38E78F14; +3b06 : 28860000; +3b07 : 28E50000; +3b08 : 78080001; +3b09 : 39088F20; +3b0a : A0C53000; +3b0b : 58860000; +3b0c : 28660000; +3b0d : A0C53000; +3b0e : 58660000; +3b0f : 28460000; +3b10 : A0C52800; +3b11 : 58450000; +3b12 : 28860000; +3b13 : 29050000; +3b14 : B8C52800; +3b15 : 58850000; +3b16 : 28650000; +3b17 : 78040ACF; +3b18 : B8A42000; +3b19 : 78050001; +3b1a : 58640000; +3b1b : 38A58F24; +3b1c : 28440000; +3b1d : 28A30000; +3b1e : B8831800; +3b1f : 58430000; +3b20 : 34020080; +3b21 : 58220014; +3b22 : 2B9D0004; +3b23 : 2B8B0010; +3b24 : 2B8C000C; +3b25 : 2B8D0008; +3b26 : 379C0018; +3b27 : C3A00000; +3b28 : 78030001; +3b29 : 3863C2AC; +3b2a : 44400004; +3b2b : 28620000; +3b2c : 58410004; +3b2d : C3A00000; +3b2e : 28620000; +3b2f : 58410008; +3b30 : C3A00000; +3b31 : 78030001; +3b32 : 3863C2AC; +3b33 : 44400004; +3b34 : 28620000; +3b35 : 58410004; +3b36 : C3A00000; +3b37 : 28620000; +3b38 : 58410008; +3b39 : C3A00000; +3b3a : 34020000; +3b3b : E0000003; +3b3c : 34000000; +3b3d : 34420001; +3b3e : 5C41FFFE; +3b3f : C3A00000; +3b40 : 379CFFF8; +3b41 : 5B8B0008; +3b42 : 5B9D0004; +3b43 : 202100FF; +3b44 : 082B000C; +3b45 : 78020001; +3b46 : 3842A7F0; +3b47 : B44B5800; +3b48 : 29610004; +3b49 : 34020000; +3b4a : FBFFFFDE; +3b4b : 29610008; +3b4c : FBFFFFEE; +3b4d : 29610000; +3b4e : 34020000; +3b4f : FBFFFFD9; +3b50 : 29610008; +3b51 : FBFFFFE9; +3b52 : 2B9D0004; +3b53 : 2B8B0008; +3b54 : 379C0008; +3b55 : C3A00000; +3b56 : 379CFFF8; +3b57 : 5B8B0008; +3b58 : 5B9D0004; +3b59 : 202100FF; +3b5a : 082B000C; +3b5b : 78020001; +3b5c : 3842A7F0; +3b5d : B44B5800; +3b5e : 29610004; +3b5f : 34020001; +3b60 : FBFFFFC8; +3b61 : 29610008; +3b62 : FBFFFFD8; +3b63 : 29610000; +3b64 : 34020001; +3b65 : FBFFFFC3; +3b66 : 29610008; +3b67 : FBFFFFD3; +3b68 : 29610004; +3b69 : 34020000; +3b6a : FBFFFFBE; +3b6b : 29610008; +3b6c : FBFFFFCE; +3b6d : 29610000; +3b6e : 34020000; +3b6f : FBFFFFB9; +3b70 : 29610008; +3b71 : FBFFFFC9; +3b72 : 2B9D0004; +3b73 : 2B8B0008; +3b74 : 379C0008; +3b75 : C3A00000; +3b76 : 379CFFF8; +3b77 : 5B8B0008; +3b78 : 5B9D0004; +3b79 : 202100FF; +3b7a : 082B000C; +3b7b : 78020001; +3b7c : 3842A7F0; +3b7d : B44B5800; +3b7e : 29610004; +3b7f : 34020000; +3b80 : FBFFFFA8; +3b81 : 29610008; +3b82 : FBFFFFB8; +3b83 : 29610000; +3b84 : 34020001; +3b85 : FBFFFFA3; +3b86 : 29610008; +3b87 : FBFFFFB3; +3b88 : 29610004; +3b89 : 34020001; +3b8a : FBFFFF9E; +3b8b : 29610008; +3b8c : FBFFFFAE; +3b8d : 2B9D0004; +3b8e : 2B8B0008; +3b8f : 379C0008; +3b90 : C3A00000; +3b91 : 379CFFE8; +3b92 : 5B8B0018; +3b93 : 5B8C0014; +3b94 : 5B8D0010; +3b95 : 5B8E000C; +3b96 : 5B8F0008; +3b97 : 5B9D0004; +3b98 : 202100FF; +3b99 : 082B000C; +3b9a : 78030001; +3b9b : 3863A7F0; +3b9c : 204F00FF; +3b9d : 340E0008; +3b9e : B46B5800; +3b9f : 29610004; +3ba0 : 21E20080; +3ba1 : 35CEFFFF; +3ba2 : FBFFFF86; +3ba3 : 29610008; +3ba4 : 3DEF0001; +3ba5 : 21CE00FF; +3ba6 : FBFFFF94; +3ba7 : 29610000; +3ba8 : 34020001; +3ba9 : 356D0004; +3baa : FBFFFF7E; +3bab : 29610008; +3bac : 356C0008; +3bad : 21EF00FF; +3bae : FBFFFF8C; +3baf : 29610000; +3bb0 : 34020000; +3bb1 : FBFFFF77; +3bb2 : 29610008; +3bb3 : FBFFFF87; +3bb4 : 5DC0FFEB; +3bb5 : 29A10000; +3bb6 : 34020001; +3bb7 : FBFFFF71; +3bb8 : 29810000; +3bb9 : FBFFFF81; +3bba : 29610000; +3bbb : 34020001; +3bbc : FBFFFF6C; +3bbd : 29810000; +3bbe : FBFFFF7C; +3bbf : 78010001; +3bc0 : 3821C2AC; +3bc1 : 28210000; +3bc2 : 29AE0000; +3bc3 : 34020000; +3bc4 : 28210004; +3bc5 : A02E7000; +3bc6 : 29610000; +3bc7 : FBFFFF61; +3bc8 : 29810000; +3bc9 : FBFFFF71; +3bca : 29A10000; +3bcb : 34020000; +3bcc : FBFFFF5C; +3bcd : 29810000; +3bce : FBFFFF6C; +3bcf : 7DC10000; +3bd0 : 2B9D0004; +3bd1 : 2B8B0018; +3bd2 : 2B8C0014; +3bd3 : 2B8D0010; +3bd4 : 2B8E000C; +3bd5 : 2B8F0008; +3bd6 : 379C0018; +3bd7 : C3A00000; +3bd8 : 379CFFE0; +3bd9 : 5B8B0020; +3bda : 5B8C001C; +3bdb : 5B8D0018; +3bdc : 5B8E0014; +3bdd : 5B8F0010; +3bde : 5B90000C; +3bdf : 5B910008; +3be0 : 5B9D0004; +3be1 : 202100FF; +3be2 : 082B000C; +3be3 : 78040001; +3be4 : 3884A7F0; +3be5 : B48B5800; +3be6 : 29610004; +3be7 : B8408000; +3be8 : 34020001; +3be9 : 207100FF; +3bea : FBFFFF3E; +3beb : 29610008; +3bec : 780F0001; +3bed : 340E0008; +3bee : FBFFFF4C; +3bef : 29610000; +3bf0 : 34020000; +3bf1 : 340D0000; +3bf2 : FBFFFF36; +3bf3 : 29610008; +3bf4 : 39EFC2AC; +3bf5 : FBFFFF45; +3bf6 : 29610000; +3bf7 : 34020001; +3bf8 : 3DAD0001; +3bf9 : FBFFFF2F; +3bfa : 29610008; +3bfb : 21AD00FF; +3bfc : FBFFFF3E; +3bfd : 29E10000; +3bfe : 29620004; +3bff : 28210004; +3c00 : A0220800; +3c01 : 44200002; +3c02 : 39AD0001; +3c03 : 29610000; +3c04 : 34020000; +3c05 : 35CEFFFF; +3c06 : FBFFFF22; +3c07 : 29610008; +3c08 : 356C0008; +3c09 : FBFFFF31; +3c0a : 5DC0FFEC; +3c0b : 462E0004; +3c0c : 29610004; +3c0d : 34020001; +3c0e : E0000003; +3c0f : 29610004; +3c10 : 34020000; +3c11 : FBFFFF17; +3c12 : 29810000; +3c13 : FBFFFF27; +3c14 : 29610000; +3c15 : 34020001; +3c16 : FBFFFF12; +3c17 : 29810000; +3c18 : FBFFFF22; +3c19 : 29610000; +3c1a : 34020000; +3c1b : FBFFFF0D; +3c1c : 29810000; +3c1d : FBFFFF1D; +3c1e : 320D0000; +3c1f : 2B9D0004; +3c20 : 2B8B0020; +3c21 : 2B8C001C; +3c22 : 2B8D0018; +3c23 : 2B8E0014; +3c24 : 2B8F0010; +3c25 : 2B90000C; +3c26 : 2B910008; +3c27 : 379C0020; +3c28 : C3A00000; +3c29 : 379CFFF8; +3c2a : 5B8B0008; +3c2b : 5B9D0004; +3c2c : 202100FF; +3c2d : 082B000C; +3c2e : 78020001; +3c2f : 3842A7F0; +3c30 : B44B5800; +3c31 : 29610000; +3c32 : 34020001; +3c33 : FBFFFEF5; +3c34 : 29610008; +3c35 : FBFFFF05; +3c36 : 29610004; +3c37 : 34020001; +3c38 : FBFFFEF0; +3c39 : 29610008; +3c3a : FBFFFF00; +3c3b : 2B9D0004; +3c3c : 2B8B0008; +3c3d : 379C0008; +3c3e : C3A00000; +3c3f : 379CFFF4; +3c40 : 5B8B000C; +3c41 : 5B8C0008; +3c42 : 5B9D0004; +3c43 : 202B00FF; +3c44 : B9600800; +3c45 : 204C00FF; +3c46 : FBFFFEFA; +3c47 : 3D820001; +3c48 : B9600800; +3c49 : 204200FE; +3c4a : FBFFFF47; +3c4b : B8206000; +3c4c : B9600800; +3c4d : FBFFFF29; +3c4e : 65810000; +3c4f : 2B9D0004; +3c50 : 2B8B000C; +3c51 : 2B8C0008; +3c52 : 379C000C; +3c53 : C3A00000; +3c54 : 20210003; +3c55 : 3C210010; +3c56 : B8221000; +3c57 : 78010001; +3c58 : 3821C2BC; +3c59 : 28210000; +3c5a : 58220004; +3c5b : C3A00000; +3c5c : 379CFFF8; +3c5d : 5B8B0008; +3c5e : 5B9D0004; +3c5f : 78010001; +3c60 : 3821C2BC; +3c61 : 28210000; +3c62 : 780B0001; +3c63 : 34040001; +3c64 : 28230000; +3c65 : 396BC2A0; +3c66 : 00620018; +3c67 : 2042000F; +3c68 : 44440006; +3c69 : 78010001; +3c6a : 38218894; +3c6b : FBFFFBB3; +3c6c : 59600000; +3c6d : E0000006; +3c6e : 59620000; +3c6f : 34020007; +3c70 : 58220040; +3c71 : 38630400; +3c72 : 58230000; +3c73 : 2B9D0004; +3c74 : 2B8B0008; +3c75 : 379C0008; +3c76 : C3A00000; +3c77 : 379CFFD0; +3c78 : 5B8B0024; +3c79 : 5B8C0020; +3c7a : 5B8D001C; +3c7b : 5B8E0018; +3c7c : 5B8F0014; +3c7d : 5B900010; +3c7e : 5B91000C; +3c7f : 5B920008; +3c80 : 5B9D0004; +3c81 : B8608800; +3c82 : 78030001; +3c83 : 3863C2BC; +3c84 : B8806000; +3c85 : 28640000; +3c86 : 340B0000; +3c87 : 28850000; +3c88 : 20A51000; +3c89 : 5CA0009C; +3c8a : 78030001; +3c8b : 3863C2A0; +3c8c : 28630000; +3c8d : B8A05800; +3c8e : 44650097; +3c8f : 348F0008; +3c90 : 780A4000; +3c91 : 34040000; +3c92 : 3409000D; +3c93 : 34080003; +3c94 : 34070001; +3c95 : 29F00000; +3c96 : F1243000; +3c97 : 020E0010; +3c98 : 220DFFFF; +3c99 : 21CE0003; +3c9a : 65C50000; +3c9b : A20A8000; +3c9c : A0A63000; +3c9d : 7E100000; +3c9e : 44C00007; +3c9f : 00830001; +3ca0 : 34840002; +3ca1 : 3C630001; +3ca2 : B4231800; +3ca3 : 0C6D0000; +3ca4 : E000001E; +3ca5 : F5719000; +3ca6 : 7DC30002; +3ca7 : A2431800; +3ca8 : 5C660006; +3ca9 : 44A30007; +3caa : 01630001; +3cab : 3C630001; +3cac : B4431800; +3cad : 0C6D0000; +3cae : 356B0002; +3caf : E0000013; +3cb0 : 5DC80007; +3cb1 : 01630001; +3cb2 : 356B0001; +3cb3 : 3C630001; +3cb4 : B4431800; +3cb5 : 0C6D0000; +3cb6 : E000000C; +3cb7 : 7C860000; +3cb8 : 65C30002; +3cb9 : A0C31800; +3cba : 44650008; +3cbb : 21A10002; +3cbc : 340E0002; +3cbd : 44250009; +3cbe : 78010001; +3cbf : 382188C8; +3cc0 : FBFFFB5E; +3cc1 : E0000005; +3cc2 : 5E000003; +3cc3 : 5DC7FFD2; +3cc4 : E0000002; +3cc5 : 34100001; +3cc6 : 78010001; +3cc7 : 3821C2BC; +3cc8 : 28250000; +3cc9 : 34120800; +3cca : 34010000; +3ccb : 34A50008; +3ccc : 340F0000; +3ccd : 34020001; +3cce : 34040002; +3ccf : 78034000; +3cd0 : E0000010; +3cd1 : 44200007; +3cd2 : 5C220003; +3cd3 : 3DAF0010; +3cd4 : E0000005; +3cd5 : 5C240004; +3cd6 : B9ED7800; +3cd7 : E0000002; +3cd8 : B9A09000; +3cd9 : 28B00000; +3cda : 34210001; +3cdb : 020E0010; +3cdc : 220DFFFF; +3cdd : A2038000; +3cde : 7E100000; +3cdf : 21CE0003; +3ce0 : 5E000002; +3ce1 : 45C2FFF0; +3ce2 : 3421FFFF; +3ce3 : 34020002; +3ce4 : 50410004; +3ce5 : 45800030; +3ce6 : 31800000; +3ce7 : E000002E; +3ce8 : 4580002D; +3ce9 : 37810028; +3cea : 37820030; +3ceb : F8000624; +3cec : 78020001; +3ced : 38428F28; +3cee : 78030001; +3cef : 28410000; +3cf0 : 38638F2C; +3cf1 : 28620000; +3cf2 : A1E10800; +3cf3 : 01EF001C; +3cf4 : 5041000E; +3cf5 : 78040001; +3cf6 : 38848F30; +3cf7 : 2B830030; +3cf8 : 28820000; +3cf9 : 54620009; +3cfa : 2B84002C; +3cfb : 2B830028; +3cfc : 3482FFFF; +3cfd : F4822000; +3cfe : 3463FFFF; +3cff : B4831800; +3d00 : 5B830028; +3d01 : 5B82002C; +3d02 : 2B820028; +3d03 : 59820008; +3d04 : 2B82002C; +3d05 : 5982000C; +3d06 : 2022000F; +3d07 : C84F7800; +3d08 : 65E2FFF1; +3d09 : 65EF0001; +3d0a : B84F7800; +3d0b : 45E00004; +3d0c : 34020001; +3d0d : 59820004; +3d0e : E0000002; +3d0f : 59800004; +3d10 : 22520800; +3d11 : 3C210003; +3d12 : 66520000; +3d13 : 59810010; +3d14 : 31920000; +3d15 : 78010001; +3d16 : 3821C27C; +3d17 : 28220004; +3d18 : 34420001; +3d19 : 58220004; +3d1a : 78010001; +3d1b : 3821C2BC; +3d1c : 28210000; +3d1d : 28210000; +3d1e : 20212000; +3d1f : 44200004; +3d20 : 78010001; +3d21 : 382188F4; +3d22 : FBFFFAFC; +3d23 : 522B0002; +3d24 : BA205800; +3d25 : B9600800; +3d26 : 2B9D0004; +3d27 : 2B8B0024; +3d28 : 2B8C0020; +3d29 : 2B8D001C; +3d2a : 2B8E0018; +3d2b : 2B8F0014; +3d2c : 2B900010; +3d2d : 2B91000C; +3d2e : 2B920008; +3d2f : 379C0030; +3d30 : C3A00000; +3d31 : 379CFFD4; +3d32 : 5B8B0020; +3d33 : 5B8C001C; +3d34 : 5B8D0018; +3d35 : 5B8E0014; +3d36 : 5B8F0010; +3d37 : 5B90000C; +3d38 : 5B910008; +3d39 : 5B9D0004; +3d3a : B8406800; +3d3b : 78020001; +3d3c : 3842C2A0; +3d3d : 28420000; +3d3e : B8207800; +3d3f : B8606000; +3d40 : B8805800; +3d41 : 34010000; +3d42 : 4440008A; +3d43 : 2DE3000C; +3d44 : 38018100; +3d45 : FC611800; +3d46 : 3401FFFC; +3d47 : C8031800; +3d48 : A0611800; +3d49 : 34630012; +3d4a : B46C1000; +3d4b : 3401003B; +3d4c : 14710001; +3d4d : 54410003; +3d4e : 340C003C; +3d4f : C9836000; +3d50 : 35900001; +3d51 : 34010002; +3d52 : 34020000; +3d53 : 02100001; +3d54 : FBFFFF00; +3d55 : 340E0000; +3d56 : E0000006; +3d57 : 2DE20000; +3d58 : 34010000; +3d59 : 35CE0001; +3d5a : FBFFFEFA; +3d5b : 35EF0002; +3d5c : 562EFFFB; +3d5d : B9A07800; +3d5e : 340E0000; +3d5f : 3610FFFF; +3d60 : E0000006; +3d61 : 2DE20000; +3d62 : 34010000; +3d63 : 35CE0001; +3d64 : FBFFFEF0; +3d65 : 35EF0002; +3d66 : 560EFFFB; +3d67 : 21820001; +3d68 : 3E010001; +3d69 : 5C400004; +3d6a : B5A16800; +3d6b : 34010000; +3d6c : E0000003; +3d6d : B5A16800; +3d6e : 34010003; +3d6f : 2DA20000; +3d70 : FBFFFEE4; +3d71 : 45600007; +3d72 : 34010001; +3d73 : 34021000; +3d74 : FBFFFEE0; +3d75 : 34010001; +3d76 : 34020000; +3d77 : FBFFFEDD; +3d78 : 78010001; +3d79 : 3821C2BC; +3d7a : 28220000; +3d7b : 340D0000; +3d7c : B8207800; +3d7d : 28430000; +3d7e : 341003E8; +3d7f : 38630001; +3d80 : 58430000; +3d81 : 29E10000; +3d82 : 282E0000; +3d83 : 21C10002; +3d84 : 5C200009; +3d85 : 34010001; +3d86 : 35AD0001; +3d87 : F8000088; +3d88 : 5DB0FFF9; +3d89 : 78010001; +3d8a : 38218928; +3d8b : B9C01000; +3d8c : FBFFFA92; +3d8d : 4560003E; +3d8e : 780D0001; +3d8f : 340E0000; +3d90 : 39ADC2BC; +3d91 : 340F0064; +3d92 : 29A10000; +3d93 : 28220000; +3d94 : 20420800; +3d95 : 5C40000A; +3d96 : 34010001; +3d97 : 35CE0001; +3d98 : F8000077; +3d99 : 5DCFFFF9; +3d9a : 78010001; +3d9b : 38218958; +3d9c : FBFFFA82; +3d9d : 340E0000; +3d9e : E0000003; +3d9f : 282E0014; +3da0 : 21CE0001; +3da1 : 78010001; +3da2 : 3821C2BC; +3da3 : 28210000; +3da4 : 78020001; +3da5 : 38428F28; +3da6 : 282D0018; +3da7 : 28210014; +3da8 : 28410000; +3da9 : 3782002C; +3daa : A1A16800; +3dab : 37810024; +3dac : F8000563; +3dad : 78030001; +3dae : 38638F2C; +3daf : 28610000; +3db0 : 502D000E; +3db1 : 78030001; +3db2 : 38638F30; +3db3 : 2B82002C; +3db4 : 28610000; +3db5 : 54410009; +3db6 : 2B830028; +3db7 : 2B820024; +3db8 : 3461FFFF; +3db9 : F4611800; +3dba : 3442FFFF; +3dbb : B4621000; +3dbc : 5B820024; +3dbd : 5B810028; +3dbe : 2B810024; +3dbf : 316E0000; +3dc0 : 3DAD0003; +3dc1 : 59610008; +3dc2 : 2B810028; +3dc3 : 59600004; +3dc4 : 596D0010; +3dc5 : 5961000C; +3dc6 : 78010001; +3dc7 : 3821C27C; +3dc8 : 28220000; +3dc9 : 34420001; +3dca : 58220000; +3dcb : B9800800; +3dcc : 2B9D0004; +3dcd : 2B8B0020; +3dce : 2B8C001C; +3dcf : 2B8D0018; +3dd0 : 2B8E0014; +3dd1 : 2B8F0010; +3dd2 : 2B90000C; +3dd3 : 2B910008; +3dd4 : 379C002C; +3dd5 : C3A00000; +3dd6 : 78030001; +3dd7 : 3863C27C; +3dd8 : 28640000; +3dd9 : 58240000; +3dda : 28610004; +3ddb : 58410000; +3ddc : C3A00000; +3ddd : 379CFFF8; +3dde : 5B9D0004; +3ddf : 78020001; +3de0 : 3842C2AC; +3de1 : 28420000; +3de2 : 34030004; +3de3 : 28420010; +3de4 : 5B820008; +3de5 : 37820008; +3de6 : F80019F0; +3de7 : 2B9D0004; +3de8 : 379C0008; +3de9 : C3A00000; +3dea : 78040001; +3deb : 3884C2AC; +3dec : 28840000; +3ded : 2885000C; +3dee : 00A50010; +3def : 3CA5000A; +3df0 : 58650000; +3df1 : 28830014; +3df2 : 58430000; +3df3 : 2882000C; +3df4 : 00420008; +3df5 : 20420003; +3df6 : 58220000; +3df7 : C3A00000; +3df8 : 78020001; +3df9 : 3842C2C0; +3dfa : 28420000; +3dfb : 78030001; +3dfc : 3863C2AC; +3dfd : 58620000; +3dfe : 44200005; +3dff : 28430018; +3e00 : 78018000; +3e01 : B8610800; +3e02 : E0000006; +3e03 : 78040001; +3e04 : 38848ED4; +3e05 : 28430018; +3e06 : 28810000; +3e07 : A0610800; +3e08 : 58410018; +3e09 : C3A00000; +3e0a : 78010001; +3e0b : 3821C2AC; +3e0c : 28210000; +3e0d : 2821001C; +3e0e : C3A00000; +3e0f : 78020001; +3e10 : 3842C2AC; +3e11 : 28420000; +3e12 : 2843001C; +3e13 : B4230800; +3e14 : 2843001C; +3e15 : C8611800; +3e16 : 4803FFFE; +3e17 : C3A00000; +3e18 : 78050001; +3e19 : 38A5C2AC; +3e1a : 28A50000; +3e1b : 78060001; +3e1c : 38C6BF38; +3e1d : 28A80024; +3e1e : 28A70024; +3e1f : 2108FFFF; +3e20 : 58C80000; +3e21 : 00E70010; +3e22 : 78060001; +3e23 : 38C6BF3C; +3e24 : 58C70000; +3e25 : 44200004; +3e26 : 28A60020; +3e27 : 00C60010; +3e28 : 58260000; +3e29 : 44400004; +3e2a : 28A10020; +3e2b : 2021FFFF; +3e2c : 58410000; +3e2d : 44600002; +3e2e : 58680000; +3e2f : 44800002; +3e30 : 58870000; +3e31 : C3A00000; +3e32 : 379CFFEC; +3e33 : 5B8B0014; +3e34 : 5B8C0010; +3e35 : 5B8D000C; +3e36 : 5B8E0008; +3e37 : 5B9D0004; +3e38 : B8205800; +3e39 : B8407000; +3e3a : B8606800; +3e3b : 3401FFEA; +3e3c : 44600036; +3e3d : 780C0001; +3e3e : 398CBF38; +3e3f : 29810000; +3e40 : 5C20000A; +3e41 : 78010001; +3e42 : 38218988; +3e43 : FBFFF9DB; +3e44 : 78010001; +3e45 : 3821C2AC; +3e46 : 28210000; +3e47 : 28210024; +3e48 : 2021FFFF; +3e49 : 59810000; +3e4a : 780C0001; +3e4b : 398CBF3C; +3e4c : 29810000; +3e4d : 5C20000A; +3e4e : 78010001; +3e4f : 382189A0; +3e50 : FBFFF9CE; +3e51 : 78010001; +3e52 : 3821C2AC; +3e53 : 28210000; +3e54 : 28210024; +3e55 : 00210010; +3e56 : 59810000; +3e57 : 5DC00006; +3e58 : 78010001; +3e59 : 3821BF38; +3e5a : 28210000; +3e5b : 51610008; +3e5c : E000000E; +3e5d : 34010001; +3e5e : 5DC1000C; +3e5f : 78010001; +3e60 : 3821BF3C; +3e61 : 28210000; +3e62 : 542B0004; +3e63 : 59A00000; +3e64 : 3401FFEA; +3e65 : E000000D; +3e66 : 78010001; +3e67 : 3821BF38; +3e68 : 28210000; +3e69 : B5615800; +3e6a : 78010001; +3e6b : 3821C2AC; +3e6c : 28210000; +3e6d : 216BFFFF; +3e6e : 582B0028; +3e6f : 2821002C; +3e70 : 59A10000; +3e71 : 34010000; +3e72 : 2B9D0004; +3e73 : 2B8B0014; +3e74 : 2B8C0010; +3e75 : 2B8D000C; +3e76 : 2B8E0008; +3e77 : 379C0014; +3e78 : C3A00000; +3e79 : 78030001; +3e7a : 3863BF38; +3e7b : 28640000; +3e7c : 3403FFEA; +3e7d : 5024000A; +3e7e : 78030001; +3e7f : 3863C2AC; +3e80 : 28630000; +3e81 : 2021FFFF; +3e82 : 5862002C; +3e83 : 78028000; +3e84 : B8220800; +3e85 : 58610028; +3e86 : 34030000; +3e87 : B8600800; +3e88 : C3A00000; +3e89 : 78010001; +3e8a : 3821C2AC; +3e8b : 28210000; +3e8c : 28220004; +3e8d : 38420010; +3e8e : 58220004; +3e8f : C3A00000; +3e90 : 78020001; +3e91 : 3842C2AC; +3e92 : 44200005; +3e93 : 28410000; +3e94 : 28220030; +3e95 : 38420001; +3e96 : E0000005; +3e97 : 28410000; +3e98 : 3402FFFE; +3e99 : 28230030; +3e9a : A0621000; +3e9b : 58220030; +3e9c : 78010001; +3e9d : 3821C2AC; +3e9e : 28210000; +3e9f : 28210030; +3ea0 : 20210001; +3ea1 : C3A00000; +3ea2 : 78010001; +3ea3 : 3821C2AC; +3ea4 : 28210000; +3ea5 : 28210030; +3ea6 : 20210001; +3ea7 : C3A00000; +3ea8 : 78010001; +3ea9 : 3821C2AC; +3eaa : 28210000; +3eab : 28210030; +3eac : 20210100; +3ead : 7C210000; +3eae : C3A00000; +3eaf : 78090001; +3eb0 : 3929C2AC; +3eb1 : 29290000; +3eb2 : 7C210000; +3eb3 : 2042000F; +3eb4 : 59210034; +3eb5 : 29210034; +3eb6 : 3C420008; +3eb7 : B8411000; +3eb8 : 59220034; +3eb9 : 59230058; +3eba : 5924005C; +3ebb : 59250060; +3ebc : 59260064; +3ebd : 2B810004; +3ebe : 59270068; +3ebf : 5928006C; +3ec0 : 59210070; +3ec1 : 2B810008; +3ec2 : 59210074; +3ec3 : C3A00000; +3ec4 : 7C420000; +3ec5 : 78030001; +3ec6 : 3863C2AC; +3ec7 : 7C210000; +3ec8 : 3C420001; +3ec9 : 28630000; +3eca : B8411000; +3ecb : 58620038; +3ecc : C3A00000; +3ecd : 78020001; +3ece : 3842C2AC; +3ecf : 28420000; +3ed0 : 202100FF; +3ed1 : 5841003C; +3ed2 : C3A00000; +3ed3 : 78020001; +3ed4 : 3842C2AC; +3ed5 : 28420000; +3ed6 : 202100FF; +3ed7 : 58410040; +3ed8 : C3A00000; +3ed9 : 78030001; +3eda : 3863C2AC; +3edb : 28630000; +3edc : 58610044; +3edd : 58620048; +3ede : C3A00000; +3edf : 78040001; +3ee0 : 3884C2AC; +3ee1 : 28840000; +3ee2 : 5881004C; +3ee3 : 58820050; +3ee4 : 58830054; +3ee5 : C3A00000; +3ee6 : 78020001; +3ee7 : 3842C2AC; +3ee8 : 28420000; +3ee9 : 58410078; +3eea : C3A00000; +3eeb : 379CFFC4; +3eec : 5B8B001C; +3eed : 5B8C0018; +3eee : 5B8D0014; +3eef : 5B8E0010; +3ef0 : 5B8F000C; +3ef1 : 5B900008; +3ef2 : 5B9D0004; +3ef3 : 78010001; +3ef4 : 3821C2AC; +3ef5 : 28210000; +3ef6 : 780C0001; +3ef7 : 398CBFBC; +3ef8 : 31800000; +3ef9 : 28220004; +3efa : 3401FFED; +3efb : 20420080; +3efc : 5C400053; +3efd : 34010001; +3efe : FBFFFD2B; +3eff : 34010001; +3f00 : FBFFFC40; +3f01 : 340200A0; +3f02 : 34010001; +3f03 : FBFFFC8E; +3f04 : 34020000; +3f05 : 34010001; +3f06 : FBFFFC8B; +3f07 : 34010001; +3f08 : FBFFFC4E; +3f09 : 340200A1; +3f0a : 34010001; +3f0b : FBFFFC86; +3f0c : 378E003F; +3f0d : B9C01000; +3f0e : 34030001; +3f0f : 34010001; +3f10 : FBFFFCC8; +3f11 : 34010001; +3f12 : FBFFFC64; +3f13 : 34010001; +3f14 : 438D003F; +3f15 : FBFFFC2B; +3f16 : 34010001; +3f17 : 340200A1; +3f18 : FBFFFC79; +3f19 : 340BFFD9; +3f1a : 3410000F; +3f1b : 340F0017; +3f1c : 34010001; +3f1d : B9C01000; +3f1e : 34030000; +3f1f : FBFFFCB9; +3f20 : 4381003F; +3f21 : B5A16800; +3f22 : 21AD00FF; +3f23 : 55700003; +3f24 : B56C1000; +3f25 : 30410000; +3f26 : 356B0001; +3f27 : 5D6FFFF5; +3f28 : 3782003F; +3f29 : 34010001; +3f2a : 34030001; +3f2b : FBFFFCAD; +3f2c : 34010001; +3f2d : FBFFFC49; +3f2e : 4382003F; +3f2f : 3401FFFB; +3f30 : 5C4D001F; +3f31 : 378B0020; +3f32 : 78020001; +3f33 : 3842BFBC; +3f34 : 34030010; +3f35 : B9600800; +3f36 : F8001A50; +3f37 : B9600800; +3f38 : F8000716; +3f39 : 78020001; +3f3a : 3842BF48; +3f3b : 5C200005; +3f3c : 34010001; +3f3d : 58410000; +3f3e : 3401FFFA; +3f3f : E0000010; +3f40 : 2B830034; +3f41 : 78010001; +3f42 : 3821BF40; +3f43 : 58230000; +3f44 : 2B830038; +3f45 : 78010001; +3f46 : 3821BF44; +3f47 : 58230000; +3f48 : 2B830030; +3f49 : 78010001; +3f4a : 3821A808; +3f4b : 58230000; +3f4c : 34010002; +3f4d : 58410000; +3f4e : 34010000; +3f4f : 2B9D0004; +3f50 : 2B8B001C; +3f51 : 2B8C0018; +3f52 : 2B8D0014; +3f53 : 2B8E0010; +3f54 : 2B8F000C; +3f55 : 2B900008; +3f56 : 379C003C; +3f57 : C3A00000; +3f58 : 379CFFE0; +3f59 : 5B9B0008; +3f5a : 341B0020; +3f5b : B77CD800; +3f5c : 5B8B0020; +3f5d : 5B8C001C; +3f5e : 5B8D0018; +3f5f : 5B8E0014; +3f60 : 5B8F0010; +3f61 : 5B90000C; +3f62 : 5B9D0004; +3f63 : 780B0001; +3f64 : 780C0001; +3f65 : BB807800; +3f66 : 34020001; +3f67 : 396BA8D0; +3f68 : 398C89B8; +3f69 : E0000012; +3f6a : BB808000; +3f6b : 379CFFE4; +3f6c : 378E000B; +3f6d : 01CE0003; +3f6e : 35A2002C; +3f6f : 3DCE0003; +3f70 : 34030014; +3f71 : B9C00800; +3f72 : F8001864; +3f73 : 31C00013; +3f74 : 29A20020; +3f75 : 29630074; +3f76 : B9800800; +3f77 : B9C02000; +3f78 : FBFFF8A6; +3f79 : 34020000; +3f7a : BA00E000; +3f7b : B9600800; +3f7c : F800161E; +3f7d : B8206800; +3f7e : 5C20FFEC; +3f7f : B9E0E000; +3f80 : 2B9D0004; +3f81 : 2B8B0020; +3f82 : 2B8C001C; +3f83 : 2B8D0018; +3f84 : 2B8E0014; +3f85 : 2B8F0010; +3f86 : 2B90000C; +3f87 : 2B9B0008; +3f88 : 379C0020; +3f89 : C3A00000; +3f8a : 379CFFEC; +3f8b : 5B8B0014; +3f8c : 5B8C0010; +3f8d : 5B8D000C; +3f8e : 5B8E0008; +3f8f : 5B9D0004; +3f90 : 780B0001; +3f91 : 396BBF4C; +3f92 : 29610000; +3f93 : 5C200007; +3f94 : 78010001; +3f95 : 3821A8D0; +3f96 : F80015E2; +3f97 : 29610000; +3f98 : 34210001; +3f99 : 59610000; +3f9a : 780B0001; +3f9b : 396BA810; +3f9c : 780C0001; +3f9d : 356D00C0; +3f9e : 398CA8D0; +3f9f : E0000009; +3fa0 : 29620008; +3fa1 : 2963000C; +3fa2 : 29640010; +3fa3 : 296E0000; +3fa4 : B9800800; +3fa5 : F80016AA; +3fa6 : 59C10000; +3fa7 : 356B0018; +3fa8 : 5D6DFFF8; +3fa9 : 2B9D0004; +3faa : 2B8B0014; +3fab : 2B8C0010; +3fac : 2B8D000C; +3fad : 2B8E0008; +3fae : 379C0014; +3faf : C3A00000; +3fb0 : 379CFFF4; +3fb1 : 5B8B000C; +3fb2 : 5B8C0008; +3fb3 : 5B9D0004; +3fb4 : 34020000; +3fb5 : B8206000; +3fb6 : F80007A4; +3fb7 : B8205800; +3fb8 : 4C200005; +3fb9 : 78010001; +3fba : 382189E0; +3fbb : B9601000; +3fbc : E0000004; +3fbd : 29820000; +3fbe : 78010001; +3fbf : 38218A0C; +3fc0 : FBFFF85E; +3fc1 : B9600800; +3fc2 : 2B9D0004; +3fc3 : 2B8B000C; +3fc4 : 2B8C0008; +3fc5 : 379C000C; +3fc6 : C3A00000; +3fc7 : 379CFFFC; +3fc8 : 5B9D0004; +3fc9 : 78010001; +3fca : 3821BF50; +3fcb : 58200000; +3fcc : 78020001; +3fcd : 78010001; +3fce : 3821BF64; +3fcf : 3842BF54; +3fd0 : 3403FFFF; +3fd1 : 58230000; +3fd2 : 58430000; +3fd3 : 58200008; +3fd4 : 58400008; +3fd5 : 58400004; +3fd6 : 58200004; +3fd7 : 5840000C; +3fd8 : 5820000C; +3fd9 : 34020000; +3fda : 34010000; +3fdb : F800139F; +3fdc : 2B9D0004; +3fdd : 379C0004; +3fde : C3A00000; +3fdf : 379CFFF4; +3fe0 : 5B8B000C; +3fe1 : 5B8C0008; +3fe2 : 5B9D0004; +3fe3 : B8206000; +3fe4 : 34010000; +3fe5 : F800144C; +3fe6 : B8205800; +3fe7 : 34020000; +3fe8 : 5C200081; +3fe9 : FBFFFA19; +3fea : 78030001; +3feb : 3863BF54; +3fec : 28650008; +3fed : 78020001; +3fee : 3842BF50; +3fef : B8202000; +3ff0 : 28420000; +3ff1 : 44AB0004; +3ff2 : 34010001; +3ff3 : 5CA1001D; +3ff4 : E0000010; +3ff5 : 34010001; +3ff6 : 44810005; +3ff7 : 28610004; +3ff8 : 34210001; +3ff9 : 58610004; +3ffa : E0000002; +3ffb : 58600004; +3ffc : 78030001; +3ffd : 3863BF54; +3ffe : 28650004; +3fff : 34010004; +4000 : 4C250010; +4001 : 34010001; +4002 : 58610008; +4003 : E0000002; +4004 : 44850003; +4005 : 58600004; +4006 : E000000A; +4007 : 28650004; +4008 : 34010004; +4009 : 34A50001; +400a : 58650004; +400b : 4C250005; +400c : 34010002; +400d : 58610008; +400e : 3441FE0C; +400f : 5861000C; +4010 : 78030001; +4011 : 3863BF64; +4012 : 28650008; +4013 : 44A00004; +4014 : 34010001; +4015 : 5CA1001C; +4016 : E000000F; +4017 : 44850005; +4018 : 28610004; +4019 : 34210001; +401a : 58610004; +401b : E0000002; +401c : 58600004; +401d : 78030001; +401e : 3863BF64; +401f : 28640004; +4020 : 34010004; +4021 : 4C240010; +4022 : 34010001; +4023 : 58610008; +4024 : E0000002; +4025 : 44800003; +4026 : 58600004; +4027 : E000000A; +4028 : 28640004; +4029 : 34010004; +402a : 34840001; +402b : 58640004; +402c : 4C240005; +402d : 34010002; +402e : 58610008; +402f : 3441FE0C; +4030 : 5861000C; +4031 : 3401251B; +4032 : 4C220030; +4033 : 78020001; +4034 : 3842BF54; +4035 : 28440008; +4036 : 34010002; +4037 : 3402FFFF; +4038 : 5C810031; +4039 : 78030001; +403a : 3863BF64; +403b : 28610008; +403c : 5C24002D; +403d : 2862000C; +403e : 34011F3F; +403f : E0000002; +4040 : 3442E0C0; +4041 : 4841FFFF; +4042 : 78030001; +4043 : 3863BF64; +4044 : 5862000C; +4045 : 78030001; +4046 : 3863BF54; +4047 : 2863000C; +4048 : 34011F3F; +4049 : E0000002; +404a : 3463E0C0; +404b : 4861FFFF; +404c : 78040001; +404d : 3884BF54; +404e : 5883000C; +404f : 4C620003; +4050 : 3444F060; +4051 : E0000004; +4052 : 34040000; +4053 : 4C430002; +4054 : 34440FA0; +4055 : B4831800; +4056 : 0062001F; +4057 : B4431800; +4058 : 14620001; +4059 : 4C400003; +405a : 34421F40; +405b : E0000004; +405c : 34011F3F; +405d : 4C220002; +405e : 3442E0C0; +405f : 59820000; +4060 : 34020001; +4061 : E0000008; +4062 : 78010001; +4063 : 34420064; +4064 : 3821BF50; +4065 : 58220000; +4066 : 34010000; +4067 : F8001313; +4068 : 34020000; +4069 : B8400800; +406a : 2B9D0004; +406b : 2B8B000C; +406c : 2B8C0008; +406d : 379C000C; +406e : C3A00000; +406f : 379CFFF8; +4070 : 5B8B0008; +4071 : 5B9D0004; +4072 : 78020001; +4073 : B8205800; +4074 : B8400800; +4075 : 38218A2C; +4076 : FBFFF7A8; +4077 : E0000003; +4078 : 34010064; +4079 : FBFFFD96; +407a : 34010000; +407b : FBFFF92F; +407c : 4420FFFC; +407d : 34010003; +407e : 34020000; +407f : 34030001; +4080 : F800121F; +4081 : 78020001; +4082 : B8400800; +4083 : 38218A44; +4084 : FBFFF79A; +4085 : E0000003; +4086 : 34010064; +4087 : FBFFFD88; +4088 : 34010000; +4089 : F80012E0; +408a : 4420FFFC; +408b : 78020001; +408c : B8400800; +408d : 38218798; +408e : FBFFF790; +408f : 78020001; +4090 : B8400800; +4091 : 38218A54; +4092 : FBFFF78C; +4093 : FBFFFF34; +4094 : B9600800; +4095 : FBFFFF4A; +4096 : 4420FFFE; +4097 : 2B9D0004; +4098 : 2B8B0008; +4099 : 379C0008; +409a : C3A00000; +409b : 379CFFEC; +409c : 5B8B0010; +409d : 5B8C000C; +409e : 5B8D0008; +409f : 5B9D0004; +40a0 : B8405800; +40a1 : 34020003; +40a2 : 340C0000; +40a3 : 340D03E9; +40a4 : 5C220022; +40a5 : E0000005; +40a6 : 458D0027; +40a7 : FBFFF903; +40a8 : 44200025; +40a9 : 358C0001; +40aa : B9600800; +40ab : FBFFFF34; +40ac : 4420FFFA; +40ad : 4C200002; +40ae : E0000018; +40af : 37810014; +40b0 : 34020000; +40b1 : F80006A9; +40b2 : 48010007; +40b3 : 29620000; +40b4 : 2B810014; +40b5 : 3443FF38; +40b6 : 54610003; +40b7 : 344200C8; +40b8 : 5041001D; +40b9 : 34020001; +40ba : B9600800; +40bb : F800069F; +40bc : 78030001; +40bd : 29620000; +40be : 38638A7C; +40bf : 4C200003; +40c0 : 78030001; +40c1 : 38638A74; +40c2 : 78010001; +40c3 : 38218A84; +40c4 : FBFFF75A; +40c5 : E0000010; +40c6 : B9600800; +40c7 : FBFFFEE9; +40c8 : B8206000; +40c9 : 48010005; +40ca : 29610000; +40cb : FBFFEC64; +40cc : E0000002; +40cd : 340CFFFF; +40ce : B9800800; +40cf : 2B9D0004; +40d0 : 2B8B0010; +40d1 : 2B8C000C; +40d2 : 2B8D0008; +40d3 : 379C0014; +40d4 : C3A00000; +40d5 : 340C0000; +40d6 : E3FFFFF4; +40d7 : 34000000; +40d8 : 34000000; +40d9 : 34000000; +40da : 34000000; +40db : 34000000; +40dc : 34000000; +40dd : C3A00000; +40de : 379CFFF0; +40df : 5B8B0010; +40e0 : 5B8C000C; +40e1 : 5B8D0008; +40e2 : 5B9D0004; +40e3 : B8201800; +40e4 : B8405800; +40e5 : 34010800; +40e6 : B8601000; +40e7 : 780C0001; +40e8 : FBFFFA49; +40e9 : 340D0008; +40ea : FBFFFFED; +40eb : 398CC2AC; +40ec : 34010400; +40ed : 34020000; +40ee : FBFFFA43; +40ef : B1600800; +40f0 : 4C200004; +40f1 : 34011000; +40f2 : 34020001; +40f3 : E0000003; +40f4 : 34011000; +40f5 : 34020000; +40f6 : FBFFFA3B; +40f7 : FBFFFFE0; +40f8 : 34010400; +40f9 : 34020001; +40fa : FBFFFA37; +40fb : 29810000; +40fc : 3D6B0001; +40fd : 35ADFFFF; +40fe : 28210004; +40ff : 20212000; +4100 : 7C210000; +4101 : B9615800; +4102 : 216B00FF; +4103 : FBFFFFD4; +4104 : 5DA0FFE8; +4105 : 34010400; +4106 : 34020000; +4107 : FBFFFA2A; +4108 : B9600800; +4109 : 2B9D0004; +410a : 2B8B0010; +410b : 2B8C000C; +410c : 2B8D0008; +410d : 379C0010; +410e : C3A00000; +410f : 379CFFFC; +4110 : 5B9D0004; +4111 : 34010800; +4112 : 34020001; +4113 : FBFFFA1E; +4114 : 34010400; +4115 : 34020000; +4116 : FBFFFA1B; +4117 : 34011000; +4118 : 34020000; +4119 : FBFFFA18; +411a : 2B9D0004; +411b : 379C0004; +411c : C3A00000; +411d : 379CFFF0; +411e : 5B8B0010; +411f : 5B8C000C; +4120 : 5B8D0008; +4121 : 5B9D0004; +4122 : B8205800; +4123 : B8406800; +4124 : 34010001; +4125 : 34020000; +4126 : B8606000; +4127 : FBFFFFB7; +4128 : 3402000B; +4129 : 34010000; +412a : FBFFFFB4; +412b : 01630010; +412c : 34010000; +412d : 206200FF; +412e : FBFFFFB0; +412f : 2163FF00; +4130 : 00620008; +4131 : 34010000; +4132 : FBFFFFAC; +4133 : 216200FF; +4134 : 34010000; +4135 : FBFFFFA9; +4136 : 34010000; +4137 : 34020000; +4138 : FBFFFFA6; +4139 : 340B0000; +413a : E0000007; +413b : 34020000; +413c : 34010000; +413d : FBFFFFA1; +413e : B5AB1000; +413f : 30410000; +4140 : 356B0001; +4141 : 498BFFFA; +4142 : 34020000; +4143 : 34010001; +4144 : FBFFFF9A; +4145 : B9800800; +4146 : 2B9D0004; +4147 : 2B8B0010; +4148 : 2B8C000C; +4149 : 2B8D0008; +414a : 379C0010; +414b : C3A00000; +414c : 379CFFF8; +414d : 5B8B0008; +414e : 5B9D0004; +414f : 34020000; +4150 : B8205800; +4151 : 34010001; +4152 : FBFFFF8C; +4153 : 34020006; +4154 : 34010000; +4155 : FBFFFF89; +4156 : 34020000; +4157 : 34010001; +4158 : FBFFFF86; +4159 : 340200D8; +415a : 34010000; +415b : FBFFFF83; +415c : 01620010; +415d : 34010000; +415e : 204200FF; +415f : FBFFFF7F; +4160 : 2162FF00; +4161 : 00420008; +4162 : 34010000; +4163 : FBFFFF7B; +4164 : 216200FF; +4165 : 34010000; +4166 : FBFFFF78; +4167 : 34020000; +4168 : 34010001; +4169 : FBFFFF75; +416a : 2B9D0004; +416b : 2B8B0008; +416c : 379C0008; +416d : C3A00000; +416e : 379CFFF8; +416f : 5B8B0008; +4170 : 5B9D0004; +4171 : 34020000; +4172 : 34010001; +4173 : FBFFFF6B; +4174 : 34020005; +4175 : 34010000; +4176 : FBFFFF68; +4177 : 34020000; +4178 : 34010000; +4179 : FBFFFF65; +417a : B8205800; +417b : 34020000; +417c : 34010001; +417d : FBFFFF61; +417e : B9600800; +417f : 2B9D0004; +4180 : 2B8B0008; +4181 : 379C0008; +4182 : C3A00000; +4183 : 379CFFE8; +4184 : 5B8B0018; +4185 : 5B8C0014; +4186 : 5B8D0010; +4187 : 5B8E000C; +4188 : 5B8F0008; +4189 : 5B9D0004; +418a : 780B0001; +418b : 396BBFA4; +418c : 296C0008; +418d : B8406800; +418e : B8207800; +418f : B8400800; +4190 : B9801000; +4191 : F80015F4; +4192 : 7C2E0000; +4193 : B9801000; +4194 : B9A00800; +4195 : F80015E0; +4196 : B5C17000; +4197 : 340C0000; +4198 : E0000009; +4199 : 29620008; +419a : 89821000; +419b : B44F0800; +419c : FBFFFFB0; +419d : FBFFFFD1; +419e : 20220001; +419f : 5C40FFFE; +41a0 : 358C0001; +41a1 : 49CCFFF8; +41a2 : B9A00800; +41a3 : 2B9D0004; +41a4 : 2B8B0018; +41a5 : 2B8C0014; +41a6 : 2B8D0010; +41a7 : 2B8E000C; +41a8 : 2B8F0008; +41a9 : 379C0018; +41aa : C3A00000; +41ab : 379CFFF0; +41ac : 5B8B0010; +41ad : 5B8C000C; +41ae : 5B8D0008; +41af : 5B9D0004; +41b0 : B8205800; +41b1 : B8406800; +41b2 : 34010001; +41b3 : 34020000; +41b4 : B8606000; +41b5 : FBFFFF29; +41b6 : 34020006; +41b7 : 34010000; +41b8 : FBFFFF26; +41b9 : 34020000; +41ba : 34010001; +41bb : FBFFFF23; +41bc : 34020002; +41bd : 34010000; +41be : FBFFFF20; +41bf : 01630010; +41c0 : 34010000; +41c1 : 206200FF; +41c2 : FBFFFF1C; +41c3 : 2163FF00; +41c4 : 00620008; +41c5 : 34010000; +41c6 : FBFFFF18; +41c7 : 216200FF; +41c8 : 34010000; +41c9 : FBFFFF15; +41ca : 340B0000; +41cb : E0000006; +41cc : B5AB1000; +41cd : 40420000; +41ce : 34010000; +41cf : 356B0001; +41d0 : FBFFFF0E; +41d1 : 498BFFFB; +41d2 : 34010001; +41d3 : 34020000; +41d4 : FBFFFF0A; +41d5 : FBFFFF99; +41d6 : 20210001; +41d7 : 5C20FFFE; +41d8 : B9800800; +41d9 : 2B9D0004; +41da : 2B8B0010; +41db : 2B8C000C; +41dc : 2B8D0008; +41dd : 379C0010; +41de : C3A00000; +41df : 379CFFF4; +41e0 : 5B8B000C; +41e1 : 5B8C0008; +41e2 : 5B9D0004; +41e3 : 780B0001; +41e4 : 780C0001; +41e5 : 396BAEE0; +41e6 : 398CAEEC; +41e7 : E0000005; +41e8 : 29620000; +41e9 : B9600800; +41ea : 356B000C; +41eb : D8400000; +41ec : 558BFFFC; +41ed : 2B9D0004; +41ee : 2B8B000C; +41ef : 2B8C0008; +41f0 : 379C000C; +41f1 : C3A00000; +41f2 : 379CFFF0; +41f3 : 5B8B0010; +41f4 : 5B8C000C; +41f5 : 5B8D0008; +41f6 : 5B9D0004; +41f7 : 780B0001; +41f8 : 780D0001; +41f9 : 340C0000; +41fa : 396BAEE0; +41fb : 39ADAEEC; +41fc : E0000006; +41fd : 29620000; +41fe : B9600800; +41ff : 356B000C; +4200 : D8400000; +4201 : B5816000; +4202 : 55ABFFFB; +4203 : 69810000; +4204 : 2B9D0004; +4205 : 2B8B0010; +4206 : 2B8C000C; +4207 : 2B8D0008; +4208 : 379C0010; +4209 : C3A00000; +420a : 379CFFEC; +420b : 5B8B0014; +420c : 5B8C0010; +420d : 5B8D000C; +420e : 5B8E0008; +420f : 5B9D0004; +4210 : 780B0001; +4211 : 780D0001; +4212 : B8207000; +4213 : 396BAEE0; +4214 : 39ADAEEC; +4215 : E000000C; +4216 : 296C0008; +4217 : E0000007; +4218 : B9C01000; +4219 : F800169D; +421a : 5C200003; +421b : 29810004; +421c : E0000007; +421d : 358C0008; +421e : 29810000; +421f : 5C20FFF9; +4220 : 356B000C; +4221 : 55ABFFF5; +4222 : 78018000; +4223 : 2B9D0004; +4224 : 2B8B0014; +4225 : 2B8C0010; +4226 : 2B8D000C; +4227 : 2B8E0008; +4228 : 379C0014; +4229 : C3A00000; +422a : B8201800; +422b : 5C200008; +422c : 78010001; +422d : 78020001; +422e : 3821AEE0; +422f : 3842AEEC; +4230 : 44220003; +4231 : 28210008; +4232 : C3A00000; +4233 : 28620008; +4234 : 34610008; +4235 : 5C400016; +4236 : 78020001; +4237 : 78040001; +4238 : 3842AEE0; +4239 : 3884AEEC; +423a : E000000F; +423b : 28410008; +423c : E000000A; +423d : 5C230008; +423e : 78030001; +423f : 3442000C; +4240 : 3863AEEC; +4241 : 34010000; +4242 : 50430009; +4243 : 28410008; +4244 : C3A00000; +4245 : 34210008; +4246 : 28250000; +4247 : 5CA0FFF6; +4248 : 3442000C; +4249 : 5482FFF2; +424a : 34010000; +424b : C3A00000; +424c : 379CFFC8; +424d : 5B8B0038; +424e : 5B8C0034; +424f : 5B8D0030; +4250 : 5B8E002C; +4251 : 5B8F0028; +4252 : 5B900024; +4253 : 5B910020; +4254 : 5B92001C; +4255 : 5B930018; +4256 : 5B940014; +4257 : 5B950010; +4258 : 5B96000C; +4259 : 5B970008; +425a : 5B9D0004; +425b : B8207000; +425c : 34010000; +425d : B840B800; +425e : 78140001; +425f : FBFFFFCB; +4260 : 78130001; +4261 : 78120001; +4262 : 78110001; +4263 : 78100001; +4264 : 780F0001; +4265 : B8206800; +4266 : 34150000; +4267 : 340B0000; +4268 : 3A9480E0; +4269 : 3A737C58; +426a : 3A528AB0; +426b : 78168000; +426c : 3A3187D0; +426d : 3A107948; +426e : 39EF87C8; +426f : E0000028; +4270 : 3562000F; +4271 : B5CB0800; +4272 : 4AE20006; +4273 : 78020001; +4274 : 38428AA8; +4275 : FBFFF59B; +4276 : B5615800; +4277 : E0000021; +4278 : 29AC0004; +4279 : BA801800; +427a : 46A00002; +427b : BA601800; +427c : 29A40000; +427d : BA401000; +427e : FBFFF592; +427f : B42B5800; +4280 : 5D960005; +4281 : B5CB0800; +4282 : B9E01000; +4283 : FBFFF58D; +4284 : E000000E; +4285 : 4D800006; +4286 : B5CB0800; +4287 : BA001000; +4288 : FBFFF588; +4289 : C80C6000; +428a : B5615800; +428b : 2184FFFF; +428c : 08842710; +428d : 15830010; +428e : B5CB0800; +428f : 00840010; +4290 : BA201000; +4291 : FBFFF57F; +4292 : B42B5800; +4293 : B9A00800; +4294 : FBFFFF96; +4295 : B8206800; +4296 : 36B50001; +4297 : 5DA0FFD9; +4298 : B9600800; +4299 : 2B9D0004; +429a : 2B8B0038; +429b : 2B8C0034; +429c : 2B8D0030; +429d : 2B8E002C; +429e : 2B8F0028; +429f : 2B900024; +42a0 : 2B910020; +42a1 : 2B92001C; +42a2 : 2B930018; +42a3 : 2B940014; +42a4 : 2B950010; +42a5 : 2B96000C; +42a6 : 2B970008; +42a7 : 379C0038; +42a8 : C3A00000; +42a9 : 379CFFA8; +42aa : 5B8B0008; +42ab : 5B9D0004; +42ac : 378B000C; +42ad : B9600800; +42ae : 34020050; +42af : FBFFFF9D; +42b0 : 78010001; +42b1 : B9601000; +42b2 : 382179E8; +42b3 : FBFFF56B; +42b4 : 34010000; +42b5 : 2B9D0004; +42b6 : 2B8B0008; +42b7 : 379C0058; +42b8 : C3A00000; +42b9 : 78010001; +42ba : 3821BFD4; +42bb : 28210000; +42bc : 28220008; +42bd : 2821000C; +42be : 202100FF; +42bf : C3A00000; +42c0 : 78010001; +42c1 : 78030001; +42c2 : 38638F34; +42c3 : 3821BFD4; +42c4 : 28210000; +42c5 : 28620000; +42c6 : 78040001; +42c7 : 38848F38; +42c8 : 58220000; +42c9 : 58200014; +42ca : 28830000; +42cb : 58200018; +42cc : 58200010; +42cd : 58230000; +42ce : 58220000; +42cf : 5820001C; +42d0 : C3A00000; +42d1 : 78040001; +42d2 : 34050002; +42d3 : 3884BFD4; +42d4 : 5C25000E; +42d5 : 28810000; +42d6 : 1444001F; +42d7 : 20840007; +42d8 : B4831800; +42d9 : F4832000; +42da : 00630003; +42db : B4821000; +42dc : 3C42001D; +42dd : 58200014; +42de : 58200018; +42df : B8431800; +42e0 : 58230010; +42e1 : E0000006; +42e2 : 28810000; +42e3 : 204200FF; +42e4 : 58230014; +42e5 : 58220018; +42e6 : 58200010; +42e7 : 78010001; +42e8 : 3821BFD4; +42e9 : 28210000; +42ea : 28220000; +42eb : 38420004; +42ec : 58220000; +42ed : 34010000; +42ee : C3A00000; +42ef : 78050001; +42f0 : 38A5BFD4; +42f1 : 28A50000; +42f2 : 202100FF; +42f3 : 00630003; +42f4 : 58A20014; +42f5 : 58A10018; +42f6 : 58A30010; +42f7 : 34010003; +42f8 : 5C810007; +42f9 : 28A20000; +42fa : 3401FFF3; +42fb : A0410800; +42fc : 38210008; +42fd : 58A10000; +42fe : C3A00000; +42ff : 34010001; +4300 : 5C810007; +4301 : 28A2001C; +4302 : 3401FFE7; +4303 : A0410800; +4304 : 38210010; +4305 : 58A1001C; +4306 : C3A00000; +4307 : 34010002; +4308 : 5C810006; +4309 : 28A2001C; +430a : 3401FFC7; +430b : A0410800; +430c : 38210020; +430d : 58A1001C; +430e : C3A00000; +430f : 379CFFE0; +4310 : 5B8B0020; +4311 : 5B8C001C; +4312 : 5B8D0018; +4313 : 5B8E0014; +4314 : 5B8F0010; +4315 : 5B90000C; +4316 : 5B910008; +4317 : 5B9D0004; +4318 : B8206000; +4319 : 78010001; +431a : 38218F28; +431b : 282F0000; +431c : 780B0001; +431d : B8406800; +431e : 396BBFD4; +431f : FBFFFF9A; +4320 : B8208800; +4321 : 29610000; +4322 : B8408000; +4323 : 282E0004; +4324 : A1CF7000; +4325 : FBFFFF94; +4326 : 5C31FFF9; +4327 : 5C50FFF8; +4328 : 45800003; +4329 : 59810000; +432a : 59820004; +432b : 45A00003; +432c : 3DC10003; +432d : 59A10000; +432e : 2B9D0004; +432f : 2B8B0020; +4330 : 2B8C001C; +4331 : 2B8D0018; +4332 : 2B8E0014; +4333 : 2B8F0010; +4334 : 2B90000C; +4335 : 2B910008; +4336 : 379C0020; +4337 : C3A00000; +4338 : 78010001; +4339 : 3821BFD4; +433a : 28210000; +433b : 28210000; +433c : 20210004; +433d : 64210000; +433e : C3A00000; +433f : 78020001; +4340 : 3842BFD4; +4341 : 28420000; +4342 : 2843001C; +4343 : 44200003; +4344 : 3863000C; +4345 : E0000003; +4346 : 3401FFF3; +4347 : A0611800; +4348 : 5843001C; +4349 : 34010000; +434a : C3A00000; +434b : 78020001; +434c : 3842BFD4; +434d : 28420000; +434e : 2843001C; +434f : 44200003; +4350 : 38630002; +4351 : E0000003; +4352 : 3401FFFD; +4353 : A0611800; +4354 : 5843001C; +4355 : 34010000; +4356 : C3A00000; +4357 : 379CFFE8; +4358 : 5B8B0018; +4359 : 5B8C0014; +435a : 5B8D0010; +435b : 5B8E000C; +435c : 5B8F0008; +435d : 5B9D0004; +435e : 282B0004; +435f : B8806800; +4360 : B8607800; +4361 : 41610003; +4362 : B8406000; +4363 : 35AEFFFF; +4364 : FBFFF7DC; +4365 : 29620004; +4366 : 41610003; +4367 : 3C420001; +4368 : 204200FE; +4369 : FBFFF828; +436a : 15820008; +436b : 41610003; +436c : 204200FF; +436d : FBFFF824; +436e : 41610003; +436f : 218200FF; +4370 : 340C0000; +4371 : FBFFF820; +4372 : 41610003; +4373 : FBFFF7E3; +4374 : 29620004; +4375 : 41610003; +4376 : 3C420001; +4377 : 38420001; +4378 : 204200FF; +4379 : FBFFF818; +437a : E0000005; +437b : 20A100FF; +437c : 34030000; +437d : FBFFF85B; +437e : 358C0001; +437f : B5EC1000; +4380 : 29650000; +4381 : 49CCFFFA; +4382 : 20A100FF; +4383 : 34030001; +4384 : FBFFF854; +4385 : 41610003; +4386 : FBFFF7F0; +4387 : B9A00800; +4388 : 2B9D0004; +4389 : 2B8B0018; +438a : 2B8C0014; +438b : 2B8D0010; +438c : 2B8E000C; +438d : 2B8F0008; +438e : 379C0018; +438f : C3A00000; +4390 : 379CFFE8; +4391 : 5B8B0018; +4392 : 5B8C0014; +4393 : 5B8D0010; +4394 : 5B8E000C; +4395 : 5B8F0008; +4396 : 5B9D0004; +4397 : 340D0000; +4398 : B8406000; +4399 : B8607000; +439a : 282B0004; +439b : E0000021; +439c : 41610003; +439d : FBFFF7A3; +439e : 29620004; +439f : 41610003; +43a0 : 3C420001; +43a1 : 204200FE; +43a2 : FBFFF7EF; +43a3 : 15820008; +43a4 : 41610003; +43a5 : 204200FF; +43a6 : FBFFF7EB; +43a7 : 41610003; +43a8 : 218200FF; +43a9 : 358C0001; +43aa : FBFFF7E7; +43ab : 41610003; +43ac : 340200FF; +43ad : FBFFF7E4; +43ae : 41610003; +43af : FBFFF7C7; +43b0 : 41610003; +43b1 : FBFFF78F; +43b2 : 29620004; +43b3 : 41610003; +43b4 : 3C420001; +43b5 : 204200FE; +43b6 : FBFFF7DB; +43b7 : B8207800; +43b8 : 41610003; +43b9 : FBFFF7BD; +43ba : 5DE0FFF6; +43bb : 35AD0001; +43bc : 49CDFFE0; +43bd : B9C00800; +43be : 2B9D0004; +43bf : 2B8B0018; +43c0 : 2B8C0014; +43c1 : 2B8D0010; +43c2 : 2B8E000C; +43c3 : 2B8F0008; +43c4 : 379C0018; +43c5 : C3A00000; +43c6 : 379CFFE4; +43c7 : 5B8B001C; +43c8 : 5B8C0018; +43c9 : 5B8D0014; +43ca : 5B8E0010; +43cb : 5B8F000C; +43cc : 5B900008; +43cd : 5B9D0004; +43ce : 340C0000; +43cf : B8406800; +43d0 : B8607800; +43d1 : B8807000; +43d2 : 282B0004; +43d3 : E0000022; +43d4 : 41610003; +43d5 : FBFFF76B; +43d6 : 29620004; +43d7 : 41610003; +43d8 : 3C420001; +43d9 : 204200FE; +43da : FBFFF7B7; +43db : 15A20008; +43dc : 41610003; +43dd : 204200FF; +43de : FBFFF7B3; +43df : 41610003; +43e0 : 21A200FF; +43e1 : 35AD0001; +43e2 : FBFFF7AF; +43e3 : B5EC1000; +43e4 : 41610003; +43e5 : 40420000; +43e6 : FBFFF7AB; +43e7 : 41610003; +43e8 : FBFFF78E; +43e9 : 41610003; +43ea : FBFFF756; +43eb : 29620004; +43ec : 41610003; +43ed : 3C420001; +43ee : 204200FE; +43ef : FBFFF7A2; +43f0 : B8208000; +43f1 : 41610003; +43f2 : FBFFF784; +43f3 : 5E00FFF6; +43f4 : 358C0001; +43f5 : 49CCFFDF; +43f6 : B9C00800; +43f7 : 2B9D0004; +43f8 : 2B8B001C; +43f9 : 2B8C0018; +43fa : 2B8D0014; +43fb : 2B8E0010; +43fc : 2B8F000C; +43fd : 2B900008; +43fe : 379C001C; +43ff : C3A00000; +4400 : 379CFFFC; +4401 : 5B9D0004; +4402 : B8400800; +4403 : B8601000; +4404 : FBFFFD7F; +4405 : 2B9D0004; +4406 : 379C0004; +4407 : C3A00000; +4408 : 379CFFFC; +4409 : 5B9D0004; +440a : B8400800; +440b : B8601000; +440c : B8801800; +440d : FBFFFD9E; +440e : 2B9D0004; +440f : 379C0004; +4410 : C3A00000; +4411 : 379CFFFC; +4412 : 5B9D0004; +4413 : 28210004; +4414 : F8000958; +4415 : 2B9D0004; +4416 : 379C0004; +4417 : C3A00000; +4418 : 379CFFFC; +4419 : 5B9D0004; +441a : 28210004; +441b : F8000979; +441c : 2B9D0004; +441d : 379C0004; +441e : C3A00000; +441f : 379CFFFC; +4420 : 5B9D0004; +4421 : 28210004; +4422 : F800095E; +4423 : 2B9D0004; +4424 : 379C0004; +4425 : C3A00000; +4426 : 379CFFBC; +4427 : 5B8B0024; +4428 : 5B8C0020; +4429 : 5B8D001C; +442a : 5B8E0018; +442b : 5B8F0014; +442c : 5B900010; +442d : 5B91000C; +442e : 5B920008; +442f : 5B9D0004; +4430 : B8206000; +4431 : 34010003; +4432 : B8406800; +4433 : B8607000; +4434 : 340BFFFC; +4435 : 54610072; +4436 : 78030001; +4437 : 78040001; +4438 : 78050001; +4439 : 38638F3C; +443a : 38848F40; +443b : 38A58F44; +443c : 28620000; +443d : 780F0001; +443e : 28830000; +443f : 28A40000; +4440 : 39EFA988; +4441 : B9E00800; +4442 : F80011DA; +4443 : 340BFFFF; +4444 : 48010063; +4445 : 5DC00017; +4446 : 78040001; +4447 : 3884BF82; +4448 : 30800000; +4449 : 34020001; +444a : 37900028; +444b : 37920038; +444c : 341100FF; +444d : B8805800; +444e : E0000006; +444f : 40410000; +4450 : 4431000C; +4451 : 34420001; +4452 : 5C52FFFD; +4453 : E0000060; +4454 : B9E00800; +4455 : BA001800; +4456 : 3404001D; +4457 : F8001208; +4458 : 3402001D; +4459 : 5C220003; +445a : BA001000; +445b : E3FFFFF4; +445c : 34010001; +445d : 5DA10007; +445e : 78010001; +445f : 3821BF82; +4460 : 40220000; +4461 : 34010004; +4462 : 340BFFFE; +4463 : 44410041; +4464 : B9CD0800; +4465 : 5C200007; +4466 : 78010001; +4467 : 3821BF82; +4468 : 40210000; +4469 : 340B0000; +446a : 442B003A; +446b : E0000002; +446c : 5DA0001A; +446d : 09C2001D; +446e : 78010001; +446f : 3821A988; +4470 : 34420001; +4471 : B9801800; +4472 : 3404001D; +4473 : F80011EC; +4474 : 3402001D; +4475 : 340BFFFF; +4476 : 5C22002E; +4477 : B9800800; +4478 : 3583001C; +4479 : 34020000; +447a : 40240000; +447b : 34210001; +447c : B4441000; +447d : 204200FF; +447e : 5C23FFFC; +447f : 4181001C; +4480 : 44220021; +4481 : 78010001; +4482 : 38218ACC; +4483 : FBFFF39B; +4484 : 340BFFFF; +4485 : E000001F; +4486 : 34010001; +4487 : 5DA1001A; +4488 : B9800800; +4489 : 3583001C; +448a : 34020000; +448b : 40240000; +448c : 34210001; +448d : B4441000; +448e : 204200FF; +448f : 5C23FFFC; +4490 : 780D0001; +4491 : 3182001C; +4492 : 39ADBF82; +4493 : 41A20000; +4494 : 78010001; +4495 : 3821A988; +4496 : 0842001D; +4497 : B9801800; +4498 : 3404001D; +4499 : 34420001; +449a : F80011F1; +449b : 3402001D; +449c : 340BFFFF; +449d : 5C220007; +449e : 41A10000; +449f : 34210001; +44a0 : 31A10000; +44a1 : 78010001; +44a2 : 3821BF82; +44a3 : 402B0000; +44a4 : 78010001; +44a5 : 3821A988; +44a6 : F80011A6; +44a7 : B9600800; +44a8 : 2B9D0004; +44a9 : 2B8B0024; +44aa : 2B8C0020; +44ab : 2B8D001C; +44ac : 2B8E0018; +44ad : 2B8F0014; +44ae : 2B900010; +44af : 2B91000C; +44b0 : 2B920008; +44b1 : 379C0044; +44b2 : C3A00000; +44b3 : 41620000; +44b4 : 34420001; +44b5 : 204200FF; +44b6 : 31620000; +44b7 : 0842001D; +44b8 : 34420001; +44b9 : E3FFFF9B; +44ba : 379CFFFC; +44bb : 5B9D0004; +44bc : B8400800; +44bd : B8601000; +44be : B8801800; +44bf : FBFFFC5E; +44c0 : 2B9D0004; +44c1 : 379C0004; +44c2 : C3A00000; +44c3 : 379CFFD8; +44c4 : 5B8B0024; +44c5 : 5B8C0020; +44c6 : 5B8D001C; +44c7 : 5B8E0018; +44c8 : 5B8F0014; +44c9 : 5B900010; +44ca : 5B91000C; +44cb : 5B9B0008; +44cc : 5B9D0004; +44cd : B8207800; +44ce : 78010001; +44cf : 38218F48; +44d0 : 282E0000; +44d1 : 780B0001; +44d2 : 5B800028; +44d3 : 396B93F4; +44d4 : 340C0000; +44d5 : 340D0007; +44d6 : 29610000; +44d7 : 379B0028; +44d8 : BB601000; +44d9 : 34030004; +44da : FBFFFC43; +44db : 2B810028; +44dc : 356B0004; +44dd : 442E0003; +44de : 358C0001; +44df : 5D8DFFF7; +44e0 : 78010001; +44e1 : 38218F48; +44e2 : 28220000; +44e3 : 2B810028; +44e4 : 4422000A; +44e5 : 780D0001; +44e6 : 39AD9410; +44e7 : 780C0001; +44e8 : B9A07000; +44e9 : 340B0000; +44ea : 398CC1F0; +44eb : B8408800; +44ec : 34100006; +44ed : E000001B; +44ee : 78010001; +44ef : 3D8C0002; +44f0 : 382193F4; +44f1 : B42C0800; +44f2 : 282B0000; +44f3 : 78010001; +44f4 : 38218AE8; +44f5 : B9601000; +44f6 : FBFFF328; +44f7 : 78030001; +44f8 : 3863BFA4; +44f9 : 28620008; +44fa : 78010001; +44fb : 3821A988; +44fc : 58220008; +44fd : 78020001; +44fe : 384212E8; +44ff : 5822001C; +4500 : 78020001; +4501 : 38421020; +4502 : 58220020; +4503 : 78020001; +4504 : 58200004; +4505 : 582B000C; +4506 : 38421000; +4507 : E000002B; +4508 : 29C20000; +4509 : B9800800; +450a : BB601800; +450b : 34040004; +450c : F8000860; +450d : 34020004; +450e : 5C220006; +450f : 2B810028; +4510 : 35CE0004; +4511 : 44310003; +4512 : 356B0001; +4513 : 5D70FFF5; +4514 : 78010001; +4515 : 38218F48; +4516 : 28300000; +4517 : 2B810028; +4518 : 5C30001C; +4519 : 3D6B0002; +451a : 78010001; +451b : 38219410; +451c : B42B0800; +451d : 282B0000; +451e : 78010001; +451f : 38218B08; +4520 : B9601000; +4521 : FBFFF2FD; +4522 : 78010001; +4523 : 3821A988; +4524 : 34020001; +4525 : 58220008; +4526 : 78020001; +4527 : 38421044; +4528 : 5822001C; +4529 : 78020001; +452a : 3842107C; +452b : 78030001; +452c : 3863C1F0; +452d : 58220020; +452e : 78020001; +452f : 58230004; +4530 : 582B000C; +4531 : 38421060; +4532 : 58220024; +4533 : E000003A; +4534 : 780B0001; +4535 : 396BBF78; +4536 : 780E0001; +4537 : 596F0000; +4538 : 59600004; +4539 : 3411007F; +453a : 39CEA988; +453b : 341B0006; +453c : E000002F; +453d : 41610003; +453e : 204200FF; +453f : B9A07800; +4540 : FBFFF6FF; +4541 : 340C0000; +4542 : 44200026; +4543 : 29E20000; +4544 : B9C00800; +4545 : 37830028; +4546 : 34040004; +4547 : FBFFFE10; +4548 : 2B810028; +4549 : 35EF0004; +454a : 44300003; +454b : 358C0001; +454c : 5D9BFFF7; +454d : 2B810028; +454e : 5C30001A; +454f : 3D8C0002; +4550 : 78010001; +4551 : 38219410; +4552 : B42C0800; +4553 : 282C0000; +4554 : 29630004; +4555 : 78010001; +4556 : B9801000; +4557 : 38218B24; +4558 : FBFFF2C6; +4559 : 78010001; +455a : 3821A988; +455b : 34020001; +455c : 58220008; +455d : 78020001; +455e : 38420D5C; +455f : 5822001C; +4560 : 78020001; +4561 : 38420F18; +4562 : 58220020; +4563 : 78020001; +4564 : 582B0004; +4565 : 582C000C; +4566 : 38420E40; +4567 : E3FFFFCB; +4568 : 29610004; +4569 : 34210001; +456a : 59610004; +456b : 29620004; +456c : 4E22FFD1; +456d : 78010001; +456e : 780B0001; +456f : 34020001; +4570 : 3821BF74; +4571 : 396BA988; +4572 : 30220000; +4573 : B9600800; +4574 : F8001004; +4575 : 780C0001; +4576 : 34020001; +4577 : 398C8B48; +4578 : E0000008; +4579 : 28820020; +457a : 2883000C; +457b : 3080003F; +457c : B9800800; +457d : 3484002C; +457e : FBFFF2A0; +457f : 34020000; +4580 : B9600800; +4581 : F8001019; +4582 : B8202000; +4583 : 5C20FFF6; +4584 : 2B9D0004; +4585 : 2B8B0024; +4586 : 2B8C0020; +4587 : 2B8D001C; +4588 : 2B8E0018; +4589 : 2B8F0014; +458a : 2B900010; +458b : 2B91000C; +458c : 2B9B0008; +458d : 379C0028; +458e : C3A00000; +458f : 379CFFF0; +4590 : 5B8B0010; +4591 : 5B8C000C; +4592 : 5B8D0008; +4593 : 5B9D0004; +4594 : 78030001; +4595 : 78040001; +4596 : 78050001; +4597 : 38638F3C; +4598 : 38848F40; +4599 : 38A58F4C; +459a : B8405800; +459b : 780D0001; +459c : 28620000; +459d : 28830000; +459e : 28A40000; +459f : 39ADA988; +45a0 : B9A00800; +45a1 : F800107B; +45a2 : 3402FFFF; +45a3 : 4801004E; +45a4 : B9A00800; +45a5 : 34020000; +45a6 : B9601800; +45a7 : 34040006; +45a8 : F80010B7; +45a9 : B8206000; +45aa : B9A00800; +45ab : F80010A1; +45ac : 4D800006; +45ad : 78010001; +45ae : 78020001; +45af : 38218B64; +45b0 : 384290D4; +45b1 : FBFFF26D; +45b2 : 41610000; +45b3 : 340200FF; +45b4 : 4422000D; +45b5 : 41630001; +45b6 : 41620002; +45b7 : B8621000; +45b8 : B8220800; +45b9 : 41620003; +45ba : B8220800; +45bb : 41620004; +45bc : B8220800; +45bd : 41620005; +45be : B8220800; +45bf : 202100FF; +45c0 : 5C200008; +45c1 : 78010001; +45c2 : 78020001; +45c3 : 38218B74; +45c4 : 384290D4; +45c5 : FBFFF259; +45c6 : 340CFFFF; +45c7 : E0000003; +45c8 : 34020000; +45c9 : 4D800028; +45ca : 78010001; +45cb : 78020001; +45cc : 384290D4; +45cd : 38218B8C; +45ce : FBFFF250; +45cf : 78010001; +45d0 : 78020001; +45d1 : 3821C1F0; +45d2 : 3842C200; +45d3 : 34260090; +45d4 : 34050022; +45d5 : 34040033; +45d6 : 28410004; +45d7 : 202300FF; +45d8 : 7C670042; +45d9 : 7C630028; +45da : A0E31800; +45db : 5C60000C; +45dc : 28430000; +45dd : 340C0000; +45de : 31650000; +45df : 31630002; +45e0 : 00230018; +45e1 : 31640001; +45e2 : 31630003; +45e3 : 00230010; +45e4 : 00210008; +45e5 : 31630004; +45e6 : 31610005; +45e7 : 34420010; +45e8 : 5C46FFEE; +45e9 : 34020000; +45ea : 45800007; +45eb : 78010001; +45ec : 78020001; +45ed : 384290D4; +45ee : 38218BA8; +45ef : FBFFF22F; +45f0 : 3402FFFF; +45f1 : B8400800; +45f2 : 2B9D0004; +45f3 : 2B8B0010; +45f4 : 2B8C000C; +45f5 : 2B8D0008; +45f6 : 379C0010; +45f7 : C3A00000; +45f8 : 379CFFF0; +45f9 : 5B8B0010; +45fa : 5B8C000C; +45fb : 5B8D0008; +45fc : 5B9D0004; +45fd : 78030001; +45fe : 78040001; +45ff : 78050001; +4600 : 38638F3C; +4601 : 38848F40; +4602 : 38A58F4C; +4603 : B8406800; +4604 : 780B0001; +4605 : 28620000; +4606 : 28830000; +4607 : 28A40000; +4608 : 396BA988; +4609 : B9600800; +460a : F8001012; +460b : B8206000; +460c : 4801000B; +460d : 29630070; +460e : 34020000; +460f : B9600800; +4610 : F80010A7; +4611 : B9600800; +4612 : 34020000; +4613 : B9A01800; +4614 : 34040006; +4615 : F8001076; +4616 : B8206000; +4617 : 78010001; +4618 : 3821A988; +4619 : F8001033; +461a : 34010000; +461b : 4D800007; +461c : 78010001; +461d : 78020001; +461e : 38218BB8; +461f : 384293E0; +4620 : FBFFF1FE; +4621 : 3401FFFF; +4622 : 2B9D0004; +4623 : 2B8B0010; +4624 : 2B8C000C; +4625 : 2B8D0008; +4626 : 379C0010; +4627 : C3A00000; +4628 : 379CFFF4; +4629 : 5B8B000C; +462a : 5B8C0008; +462b : 5B9D0004; +462c : 78030001; +462d : 78040001; +462e : 78050001; +462f : 38638F3C; +4630 : 38848F40; +4631 : 38A58F44; +4632 : 28620000; +4633 : 780B0001; +4634 : 28830000; +4635 : 28A40000; +4636 : 396BA988; +4637 : B9600800; +4638 : F8000FE4; +4639 : B8201000; +463a : 3401FFFF; +463b : 4802000E; +463c : 29630070; +463d : B9600800; +463e : 34020000; +463f : F8001078; +4640 : B8206000; +4641 : 29610070; +4642 : 5D810002; +4643 : 340C0001; +4644 : 78010001; +4645 : 3821A988; +4646 : F8001006; +4647 : 7D810001; +4648 : C8010800; +4649 : 2B9D0004; +464a : 2B8B000C; +464b : 2B8C0008; +464c : 379C000C; +464d : C3A00000; +464e : 379CFFCC; +464f : 5B8B0014; +4650 : 5B8C0010; +4651 : 5B8D000C; +4652 : 5B8E0008; +4653 : 5B9D0004; +4654 : 340C0000; +4655 : B8205800; +4656 : 340D0001; +4657 : 378E0018; +4658 : E0000027; +4659 : B9C00800; +465a : 34020000; +465b : B9801800; +465c : FBFFFDCA; +465d : 202D00FF; +465e : 45A00022; +465f : B9C00800; +4660 : B9601000; +4661 : 34030010; +4662 : F80012D7; +4663 : 358C0001; +4664 : 5C20001B; +4665 : 2B81002C; +4666 : 00220018; +4667 : 31610017; +4668 : 31620014; +4669 : 00220010; +466a : 31620015; +466b : 00220008; +466c : 2B810030; +466d : 31620016; +466e : 00220018; +466f : 3161001B; +4670 : 31620018; +4671 : 00220010; +4672 : 31620019; +4673 : 00220008; +4674 : 2B810028; +4675 : 3162001A; +4676 : 00220018; +4677 : 31610013; +4678 : 31620010; +4679 : 00220010; +467a : 31620011; +467b : 00220008; +467c : 34010001; +467d : 31620012; +467e : E0000003; +467f : 49ACFFDA; +4680 : 34010000; +4681 : 2B9D0004; +4682 : 2B8B0014; +4683 : 2B8C0010; +4684 : 2B8D000C; +4685 : 2B8E0008; +4686 : 379C0034; +4687 : C3A00000; +4688 : 379CFF28; +4689 : 5B8B0044; +468a : 5B8C0040; +468b : 5B8D003C; +468c : 5B8E0038; +468d : 5B8F0034; +468e : 5B900030; +468f : 5B91002C; +4690 : 5B920028; +4691 : 5B930024; +4692 : 5B940020; +4693 : 5B95001C; +4694 : 5B960018; +4695 : 5B970014; +4696 : 5B980010; +4697 : 5B99000C; +4698 : 5B9B0008; +4699 : 5B9D0004; +469a : 204200FF; +469b : B8206000; +469c : 206300FF; +469d : 44400044; +469e : 40220000; +469f : 40240001; +46a0 : 403D0005; +46a1 : 403B0006; +46a2 : 40390007; +46a3 : 40380008; +46a4 : 40370009; +46a5 : 4036000A; +46a6 : 4035000B; +46a7 : 4034000C; +46a8 : 4033000D; +46a9 : 4032000E; +46aa : 4031000F; +46ab : 40300010; +46ac : 402F0011; +46ad : 402E0012; +46ae : 402D0013; +46af : 402B0014; +46b0 : 402A0015; +46b1 : 40290016; +46b2 : 40280017; +46b3 : 40270018; +46b4 : 40260019; +46b5 : 4025001A; +46b6 : 4023001B; +46b7 : 4021001C; +46b8 : 338200BC; +46b9 : 338400BD; +46ba : 41820002; +46bb : 338200BE; +46bc : 41820003; +46bd : 338200BF; +46be : 41820004; +46bf : 338200C0; +46c0 : 338100D8; +46c1 : 378100BC; +46c2 : 339D00C1; +46c3 : 339B00C2; +46c4 : 339900C3; +46c5 : 339800C4; +46c6 : 339700C5; +46c7 : 339600C6; +46c8 : 339500C7; +46c9 : 339400C8; +46ca : 339300C9; +46cb : 339200CA; +46cc : 339100CB; +46cd : 339000CC; +46ce : 338F00CD; +46cf : 338E00CE; +46d0 : 338D00CF; +46d1 : 338B00D0; +46d2 : 338A00D1; +46d3 : 338900D2; +46d4 : 338800D3; +46d5 : 338700D4; +46d6 : 338600D5; +46d7 : 338500D6; +46d8 : 338300D7; +46d9 : FBFFFF75; +46da : 5C200009; +46db : 78010001; +46dc : 38218BD4; +46dd : FBFFF141; +46de : B9800800; +46df : 34020001; +46e0 : 34030000; +46e1 : FBFFFD45; +46e2 : E0000063; +46e3 : 78010001; +46e4 : 38218BEC; +46e5 : FBFFF139; +46e6 : 340D0000; +46e7 : 340B0001; +46e8 : 37910048; +46e9 : 379000DC; +46ea : E0000046; +46eb : 09AE001D; +46ec : 34020000; +46ed : B9A01800; +46ee : B62E7800; +46ef : B9E00800; +46f0 : FBFFFD36; +46f1 : B8205800; +46f2 : 4C010054; +46f3 : B9E00800; +46f4 : B9801000; +46f5 : 34030010; +46f6 : F8001243; +46f7 : 5C200038; +46f8 : 41850014; +46f9 : 41810015; +46fa : 41830016; +46fb : 3CA50018; +46fc : 3C210010; +46fd : 3C630008; +46fe : B8250800; +46ff : B8611800; +4700 : 41810017; +4701 : B60E1000; +4702 : 3444FF80; +4703 : B8231800; +4704 : 00610018; +4705 : 3041FF80; +4706 : 00610010; +4707 : 30830003; +4708 : 30810001; +4709 : 00610008; +470a : 30810002; +470b : 41850018; +470c : 41810019; +470d : 4183001A; +470e : 3CA50018; +470f : 3C210010; +4710 : 3C630008; +4711 : B8250800; +4712 : B8611800; +4713 : 4181001B; +4714 : 3444FF84; +4715 : B8231800; +4716 : 00610018; +4717 : 3041FF84; +4718 : 00610010; +4719 : 30830003; +471a : 30810001; +471b : 00610008; +471c : 30810002; +471d : 41850010; +471e : 41810011; +471f : 41830012; +4720 : 3CA50018; +4721 : 3C210010; +4722 : 3C630008; +4723 : B8250800; +4724 : B8611800; +4725 : 41810013; +4726 : 3444FF7C; +4727 : B8231800; +4728 : 00610018; +4729 : 3041FF7C; +472a : 00610010; +472b : 30830003; +472c : 30810001; +472d : 00610008; +472e : 30810002; +472f : 35AD0001; +4730 : 496DFFBB; +4731 : FBFFFEF7; +4732 : 3402FFFF; +4733 : B9607000; +4734 : 340C0000; +4735 : 378D0048; +4736 : 5C22000D; +4737 : 78010001; +4738 : 38218288; +4739 : FBFFF0E5; +473a : 340BFFFF; +473b : E000000B; +473c : 0981001D; +473d : 34020001; +473e : 34030000; +473f : B5A10800; +4740 : FBFFFCE6; +4741 : 358C0001; +4742 : 48010003; +4743 : B9800800; +4744 : 49CCFFF8; +4745 : B8205800; +4746 : B9600800; +4747 : 2B9D0004; +4748 : 2B8B0044; +4749 : 2B8C0040; +474a : 2B8D003C; +474b : 2B8E0038; +474c : 2B8F0034; +474d : 2B900030; +474e : 2B91002C; +474f : 2B920028; +4750 : 2B930024; +4751 : 2B940020; +4752 : 2B95001C; +4753 : 2B960018; +4754 : 2B970014; +4755 : 2B980010; +4756 : 2B99000C; +4757 : 2B9B0008; +4758 : 379C00D8; +4759 : C3A00000; +475a : 379CFFE8; +475b : 5B8B0014; +475c : 5B8C0010; +475d : 5B8D000C; +475e : 5B8E0008; +475f : 5B9D0004; +4760 : 78030001; +4761 : 78040001; +4762 : 78050001; +4763 : 38638F3C; +4764 : 38848F40; +4765 : 38A58F50; +4766 : 204E00FF; +4767 : 780B0001; +4768 : 28620000; +4769 : 28830000; +476a : 28A40000; +476b : 396BA988; +476c : B8206800; +476d : B9600800; +476e : F8000EAE; +476f : 340CFFFF; +4770 : 48010024; +4771 : 45C00012; +4772 : 29630070; +4773 : 34020000; +4774 : B9600800; +4775 : F8000F42; +4776 : 29A20000; +4777 : 78018000; +4778 : 37830018; +4779 : B8410800; +477a : 5B810018; +477b : 34020000; +477c : B9600800; +477d : 34040004; +477e : F8000F0D; +477f : 7C210004; +4780 : C8016000; +4781 : 398C0001; +4782 : E000000F; +4783 : 34020000; +4784 : B9600800; +4785 : 37830018; +4786 : 34040004; +4787 : F8000ED8; +4788 : 34020004; +4789 : 5C220008; +478a : 78020001; +478b : 38428ED4; +478c : 2B8C0018; +478d : 28410000; +478e : A1810800; +478f : 018C001F; +4790 : 59A10000; +4791 : 78010001; +4792 : 3821A988; +4793 : F8000EB9; +4794 : B9800800; +4795 : 2B9D0004; +4796 : 2B8B0014; +4797 : 2B8C0010; +4798 : 2B8D000C; +4799 : 2B8E0008; +479a : 379C0018; +479b : C3A00000; +479c : 379CFFF4; +479d : 5B8B000C; +479e : 5B8C0008; +479f : 5B9D0004; +47a0 : 78030001; +47a1 : 78040001; +47a2 : 78050001; +47a3 : 38638F3C; +47a4 : 38848F40; +47a5 : 38A58F54; +47a6 : 28620000; +47a7 : 780B0001; +47a8 : 28830000; +47a9 : 28A40000; +47aa : 396BA988; +47ab : B9600800; +47ac : F8000E70; +47ad : B8201000; +47ae : 3401FFFF; +47af : 4802000E; +47b0 : 29630070; +47b1 : B9600800; +47b2 : 34020000; +47b3 : F8000F04; +47b4 : B8206000; +47b5 : 29610070; +47b6 : 5D810002; +47b7 : 340C0001; +47b8 : 78010001; +47b9 : 3821A988; +47ba : F8000E92; +47bb : 7D810001; +47bc : C8010800; +47bd : 2B9D0004; +47be : 2B8B000C; +47bf : 2B8C0008; +47c0 : 379C000C; +47c1 : C3A00000; +47c2 : 379CFFDC; +47c3 : 5B8B001C; +47c4 : 5B8C0018; +47c5 : 5B8D0014; +47c6 : 5B8E0010; +47c7 : 5B8F000C; +47c8 : 5B900008; +47c9 : 5B9D0004; +47ca : 78030001; +47cb : 78040001; +47cc : 78050001; +47cd : 38638F3C; +47ce : 38848F40; +47cf : 38A58F54; +47d0 : 28620000; +47d1 : 780C0001; +47d2 : 28830000; +47d3 : 28A40000; +47d4 : B8206800; +47d5 : 398CA988; +47d6 : 34010020; +47d7 : 33810027; +47d8 : B9800800; +47d9 : F8000E43; +47da : 340BFFFF; +47db : 48010051; +47dc : 0F800024; +47dd : 378E0026; +47de : 340B00FF; +47df : E0000006; +47e0 : 43810026; +47e1 : 442B000C; +47e2 : 2F810024; +47e3 : 34210001; +47e4 : 0F810024; +47e5 : 2F820024; +47e6 : B9800800; +47e7 : B9C01800; +47e8 : 34420002; +47e9 : 34040001; +47ea : F8000E75; +47eb : 34020001; +47ec : 4422FFF4; +47ed : 2F810024; +47ee : 34020100; +47ef : 50410002; +47f0 : 0F800024; +47f1 : 780C0001; +47f2 : B9A05800; +47f3 : 398CA988; +47f4 : 3410000A; +47f5 : 340F0020; +47f6 : 378E0027; +47f7 : E000001E; +47f8 : F8001112; +47f9 : 2F820024; +47fa : 29630004; +47fb : B8206800; +47fc : 34420002; +47fd : B9800800; +47fe : B9A02000; +47ff : F8000E8C; +4800 : 5C2D0028; +4801 : 2F820024; +4802 : B4220800; +4803 : 2022FFFF; +4804 : 29610008; +4805 : 0F820024; +4806 : 44200003; +4807 : 338F0027; +4808 : E0000002; +4809 : 33900027; +480a : 34420002; +480b : B9800800; +480c : B9C01800; +480d : 34040001; +480e : F8000E7D; +480f : 34020001; +4810 : 356B0004; +4811 : 5C220017; +4812 : 2F810024; +4813 : 34210001; +4814 : 0F810024; +4815 : 29610004; +4816 : 5C20FFE2; +4817 : B9800800; +4818 : 34020000; +4819 : 37830024; +481a : 34040002; +481b : F8000E70; +481c : B8206800; +481d : 34010002; +481e : 340BFFFF; +481f : 5DA1000A; +4820 : B9800800; +4821 : 34020000; +4822 : 37830022; +4823 : 34040002; +4824 : F8000E3B; +4825 : E42D5800; +4826 : 356BFFFF; +4827 : E0000002; +4828 : 340BFFFF; +4829 : 78010001; +482a : 3821A988; +482b : F8000E21; +482c : B9600800; +482d : 2B9D0004; +482e : 2B8B001C; +482f : 2B8C0018; +4830 : 2B8D0014; +4831 : 2B8E0010; +4832 : 2B8F000C; +4833 : 2B900008; +4834 : 379C0024; +4835 : C3A00000; +4836 : 379CFFE4; +4837 : 5B8B0018; +4838 : 5B8C0014; +4839 : 5B8D0010; +483a : 5B8E000C; +483b : 5B8F0008; +483c : 5B9D0004; +483d : 78030001; +483e : 78040001; +483f : 78050001; +4840 : 38638F3C; +4841 : 38848F40; +4842 : 38A58F54; +4843 : 28620000; +4844 : 780C0001; +4845 : 28830000; +4846 : 28A40000; +4847 : 398CA988; +4848 : B9800800; +4849 : F8000DD3; +484a : 340DFFFF; +484b : 48010022; +484c : 78010001; +484d : 38218C08; +484e : 780D0001; +484f : FBFFEFCF; +4850 : 340B0000; +4851 : 378F001F; +4852 : 340E00FF; +4853 : 39AD7FE8; +4854 : 35620002; +4855 : B9800800; +4856 : B9E01800; +4857 : 34040001; +4858 : F8000E07; +4859 : 34020001; +485a : 5C22000F; +485b : 4382001F; +485c : 444E0005; +485d : B9A00800; +485e : 356B0001; +485f : FBFFEFBF; +4860 : 216BFFFF; +4861 : 4381001F; +4862 : 5C2EFFF2; +4863 : 340D0000; +4864 : 5D600006; +4865 : 78010001; +4866 : 3821802C; +4867 : FBFFEFB7; +4868 : E0000002; +4869 : 340DFFFF; +486a : 78010001; +486b : 3821A988; +486c : F8000DE0; +486d : B9A00800; +486e : 2B9D0004; +486f : 2B8B0018; +4870 : 2B8C0014; +4871 : 2B8D0010; +4872 : 2B8E000C; +4873 : 2B8F0008; +4874 : 379C001C; +4875 : C3A00000; +4876 : 379CFFE0; +4877 : 5B8B0020; +4878 : 5B8C001C; +4879 : 5B8D0018; +487a : 5B8E0014; +487b : 5B8F0010; +487c : 5B90000C; +487d : 5B910008; +487e : 5B9D0004; +487f : 78040001; +4880 : B8206800; +4881 : 206C00FF; +4882 : B8800800; +4883 : 78030001; +4884 : 78040001; +4885 : 78050001; +4886 : 38638F3C; +4887 : 38848F40; +4888 : 38A58F54; +4889 : 205100FF; +488a : 28620000; +488b : 28830000; +488c : 28A40000; +488d : 3821A988; +488e : 340BFFFF; +488f : F8000D8D; +4890 : 48010022; +4891 : 5D800005; +4892 : 78030001; +4893 : 3863BF80; +4894 : 34010002; +4895 : 0C610000; +4896 : 780C0001; +4897 : 780E0001; +4898 : 340B0000; +4899 : 398CBF80; +489a : 39CEA988; +489b : 341000FF; +489c : 340F000A; +489d : 2D820000; +489e : 3441FFFE; +489f : 5431000F; +48a0 : 34410001; +48a1 : 0D810000; +48a2 : B9A01800; +48a3 : B9C00800; +48a4 : 34040001; +48a5 : F8000DBA; +48a6 : 34020001; +48a7 : 5C220007; +48a8 : 41A10000; +48a9 : 44300006; +48aa : 356B0001; +48ab : 35AD0001; +48ac : 5C2FFFF1; +48ad : E0000002; +48ae : 340BFFFF; +48af : 78010001; +48b0 : 3821A988; +48b1 : F8000D9B; +48b2 : B9600800; +48b3 : 2B9D0004; +48b4 : 2B8B0020; +48b5 : 2B8C001C; +48b6 : 2B8D0018; +48b7 : 2B8E0014; +48b8 : 2B8F0010; +48b9 : 2B90000C; +48ba : 2B910008; +48bb : 379C0020; +48bc : C3A00000; +48bd : 379CFFF8; +48be : 5B8B0008; +48bf : 5B9D0004; +48c0 : 780B0001; +48c1 : 396BBFA4; +48c2 : 78020001; +48c3 : 78030001; +48c4 : B9600800; +48c5 : 3842BFB0; +48c6 : 3863BFAC; +48c7 : FBFFF523; +48c8 : 29610000; +48c9 : 5C200007; +48ca : 29620008; +48cb : 5C410005; +48cc : 78010001; +48cd : 59600004; +48ce : 59610008; +48cf : E0000005; +48d0 : 78010001; +48d1 : 3821BFA4; +48d2 : 34020001; +48d3 : 58220004; +48d4 : 34010000; +48d5 : 2B9D0004; +48d6 : 2B8B0008; +48d7 : 379C0008; +48d8 : C3A00000; +48d9 : 379CFFEC; +48da : 5B8B0014; +48db : 5B8C0010; +48dc : 5B8D000C; +48dd : 5B8E0008; +48de : 5B9D0004; +48df : B8607000; +48e0 : 208D00FF; +48e1 : 64630000; +48e2 : 64240000; +48e3 : B8406000; +48e4 : A0831800; +48e5 : 340BFFEA; +48e6 : 5C60002B; +48e7 : 44830008; +48e8 : 78010001; +48e9 : 38218C24; +48ea : FBFFEF34; +48eb : 09C20005; +48ec : B9800800; +48ed : FBFFF896; +48ee : E0000012; +48ef : 34030001; +48f0 : 5C230012; +48f1 : 78010001; +48f2 : B9A01000; +48f3 : B9801800; +48f4 : 38218C3C; +48f5 : FBFFEF29; +48f6 : 78050001; +48f7 : 78010001; +48f8 : 38A5BF78; +48f9 : 3821A988; +48fa : 58A00000; +48fb : 58AD0004; +48fc : 58250004; +48fd : B9801000; +48fe : 34030140; +48ff : FBFFFA91; +4900 : 340B0000; +4901 : E0000010; +4902 : 34030002; +4903 : 340B0000; +4904 : 5C23000D; +4905 : 78010001; +4906 : 38218C5C; +4907 : FBFFEF17; +4908 : 78010001; +4909 : 78040001; +490a : 3821A988; +490b : 3884C1F0; +490c : 58240004; +490d : B9801000; +490e : B8800800; +490f : 34030140; +4910 : F8000484; +4911 : B9600800; +4912 : 2B9D0004; +4913 : 2B8B0014; +4914 : 2B8C0010; +4915 : 2B8D000C; +4916 : 2B8E0008; +4917 : 379C0014; +4918 : C3A00000; +4919 : 379CFFBC; +491a : 5B8B002C; +491b : 5B8C0028; +491c : 5B8D0024; +491d : 5B8E0020; +491e : 5B8F001C; +491f : 5B900018; +4920 : 5B910014; +4921 : 5B920010; +4922 : 5B93000C; +4923 : 5B940008; +4924 : 5B9D0004; +4925 : B8206800; +4926 : B8405800; +4927 : B8607000; +4928 : 34020000; +4929 : 37810030; +492a : 34030013; +492b : 209000FF; +492c : F8000F28; +492d : 65C20000; +492e : 65610000; +492f : 65B20000; +4930 : B8410800; +4931 : 780C0001; +4932 : A2410800; +4933 : 398CAC3C; +4934 : 5C20008B; +4935 : C80E1000; +4936 : 35C1013F; +4937 : A0410800; +4938 : B42B0800; +4939 : B9807800; +493a : 35870100; +493b : B9802800; +493c : 35C6FFFF; +493d : 28A40054; +493e : 28A3004C; +493f : 58A1004C; +4940 : C8831800; +4941 : 1424001F; +4942 : 58A40048; +4943 : B4232000; +4944 : 58A40054; +4945 : 34630001; +4946 : 1484001F; +4947 : B4610800; +4948 : 58A40050; +4949 : B4C10800; +494a : 34A50040; +494b : A0220800; +494c : 5CA7FFF1; +494d : 78010001; +494e : 3821AC3C; +494f : 58200008; +4950 : 582B000C; +4951 : 29820110; +4952 : 78110001; +4953 : 35F40140; +4954 : 58220010; +4955 : 29820114; +4956 : 37930030; +4957 : B9E06000; +4958 : 58220014; +4959 : 3A318C7C; +495a : 3582002C; +495b : 34030012; +495c : BA600800; +495d : F8001029; +495e : 2983000C; +495f : 29840014; +4960 : BA200800; +4961 : BA601000; +4962 : 358C0040; +4963 : FBFFEEBB; +4964 : 5D94FFF6; +4965 : 46400011; +4966 : 78010001; +4967 : B9601000; +4968 : 38218CA0; +4969 : FBFFEEB5; +496a : 09C20005; +496b : B9600800; +496c : 340C0000; +496d : FBFFF816; +496e : 340E0140; +496f : B58B0800; +4970 : B5EC1000; +4971 : 34030040; +4972 : 358C0040; +4973 : FBFFF838; +4974 : 5D8EFFFB; +4975 : E0000046; +4976 : 34010001; +4977 : 5DA10022; +4978 : 34010000; +4979 : BA001000; +497a : FBFFF2C5; +497b : 5C200004; +497c : 78010001; +497d : 38218CC4; +497e : E000002A; +497f : 780E0001; +4980 : 39CEBF78; +4981 : 78010001; +4982 : 59D00004; +4983 : BA001000; +4984 : 59C00000; +4985 : B9601800; +4986 : 38218CDC; +4987 : 780C0001; +4988 : FBFFEE96; +4989 : 398CA988; +498a : 598E0004; +498b : B9800800; +498c : B9601000; +498d : 34030140; +498e : FBFFFA02; +498f : 340E0000; +4990 : 34100140; +4991 : B5CB1000; +4992 : B5EE1800; +4993 : B9800800; +4994 : 34040040; +4995 : 35CE0040; +4996 : FBFFFA30; +4997 : 5DD0FFFA; +4998 : E0000023; +4999 : 34010002; +499a : 5DA10021; +499b : 780C0001; +499c : 78010001; +499d : 3821C1F0; +499e : 398CA988; +499f : 34020000; +49a0 : 59810004; +49a1 : 37830044; +49a2 : 34040004; +49a3 : F80003C9; +49a4 : 34020004; +49a5 : 44220005; +49a6 : 78010001; +49a7 : 38218D0C; +49a8 : FBFFEE76; +49a9 : E0000016; +49aa : 78010001; +49ab : B9601000; +49ac : 38218D28; +49ad : FBFFEE71; +49ae : 29810004; +49af : B9601000; +49b0 : 34030140; +49b1 : F80003E3; +49b2 : 340E0000; +49b3 : 34100140; +49b4 : 29810004; +49b5 : B5CB1000; +49b6 : B5EE1800; +49b7 : 34040040; +49b8 : 35CE0040; +49b9 : F80003C7; +49ba : 5DD0FFFA; +49bb : 34010000; +49bc : 34020050; +49bd : FBFFFB06; +49be : E0000002; +49bf : 340DFFEA; +49c0 : B9A00800; +49c1 : 2B9D0004; +49c2 : 2B8B002C; +49c3 : 2B8C0028; +49c4 : 2B8D0024; +49c5 : 2B8E0020; +49c6 : 2B8F001C; +49c7 : 2B900018; +49c8 : 2B910014; +49c9 : 2B920010; +49ca : 2B93000C; +49cb : 2B940008; +49cc : 379C0044; +49cd : C3A00000; +49ce : 379CFFE8; +49cf : 5B8B0018; +49d0 : 5B8C0014; +49d1 : 5B8D0010; +49d2 : 5B8E000C; +49d3 : 5B8F0008; +49d4 : 5B9D0004; +49d5 : 780B0001; +49d6 : B8207800; +49d7 : B8407000; +49d8 : 340D0008; +49d9 : 340C0001; +49da : 396BAA40; +49db : A18E1800; +49dc : 29640008; +49dd : 7C620000; +49de : B9E00800; +49df : 35ADFFFF; +49e0 : D8800000; +49e1 : 3D8C0001; +49e2 : 5DA0FFF9; +49e3 : 2B9D0004; +49e4 : 2B8B0018; +49e5 : 2B8C0014; +49e6 : 2B8D0010; +49e7 : 2B8E000C; +49e8 : 2B8F0008; +49e9 : 379C0018; +49ea : C3A00000; +49eb : 379CFFE8; +49ec : 5B8B0018; +49ed : 5B8C0014; +49ee : 5B8D0010; +49ef : 5B8E000C; +49f0 : 5B8F0008; +49f1 : 5B9D0004; +49f2 : 780B0001; +49f3 : B8207800; +49f4 : 340E0008; +49f5 : 340C0000; +49f6 : 340D0001; +49f7 : 396BAA40; +49f8 : 29620004; +49f9 : B9E00800; +49fa : 35CEFFFF; +49fb : D8400000; +49fc : 7C220000; +49fd : C8021000; +49fe : A1A21000; +49ff : B9826000; +4a00 : 3DAD0001; +4a01 : 5DC0FFF7; +4a02 : 34010064; +4a03 : FBFFE258; +4a04 : B9800800; +4a05 : 2B9D0004; +4a06 : 2B8B0018; +4a07 : 2B8C0014; +4a08 : 2B8D0010; +4a09 : 2B8E000C; +4a0a : 2B8F0008; +4a0b : 379C0018; +4a0c : C3A00000; +4a0d : 379CFFC0; +4a0e : 5B8B0040; +4a0f : 5B8C003C; +4a10 : 5B8D0038; +4a11 : 5B8E0034; +4a12 : 5B8F0030; +4a13 : 5B90002C; +4a14 : 5B910028; +4a15 : 5B920024; +4a16 : 5B930020; +4a17 : 5B94001C; +4a18 : 5B950018; +4a19 : 5B960014; +4a1a : 5B970010; +4a1b : 5B98000C; +4a1c : 5B990008; +4a1d : 5B9D0004; +4a1e : 34020000; +4a1f : B8206000; +4a20 : 34030080; +4a21 : 34210008; +4a22 : 780D0001; +4a23 : F8000E31; +4a24 : 39ADAA40; +4a25 : 29A10000; +4a26 : 340F0000; +4a27 : 44200061; +4a28 : B9805800; +4a29 : 34120000; +4a2a : 34110000; +4a2b : 78194000; +4a2c : 34160001; +4a2d : 34180008; +4a2e : 596C0008; +4a2f : 45E00022; +4a30 : 29610000; +4a31 : 78028000; +4a32 : 34030000; +4a33 : 59610010; +4a34 : 29610004; +4a35 : 59610014; +4a36 : A0590800; +4a37 : 44200003; +4a38 : 78024000; +4a39 : 34030000; +4a3a : A0710800; +4a3b : A0522800; +4a3c : B8A12800; +4a3d : 29640010; +4a3e : 29610014; +4a3f : 5CA0000E; +4a40 : A4603000; +4a41 : A0260800; +4a42 : 59610014; +4a43 : 00630001; +4a44 : 3C41001F; +4a45 : A4403800; +4a46 : 00420001; +4a47 : A0872000; +4a48 : B8231800; +4a49 : 59640010; +4a4a : B8430800; +4a4b : 5C25FFEB; +4a4c : E000003C; +4a4d : B8821000; +4a4e : B8231800; +4a4f : 59620010; +4a50 : 59630014; +4a51 : 35EE0001; +4a52 : 29A20000; +4a53 : 3DCE0004; +4a54 : B9800800; +4a55 : B58E7000; +4a56 : D8400000; +4a57 : 5C360031; +4a58 : B9800800; +4a59 : 340200F0; +4a5a : FBFFFF74; +4a5b : 34140040; +4a5c : 34130000; +4a5d : 34100001; +4a5e : 34120000; +4a5f : 34110000; +4a60 : 29A20004; +4a61 : B9800800; +4a62 : 29D70004; +4a63 : D8400000; +4a64 : 29A20004; +4a65 : B820A800; +4a66 : B9800800; +4a67 : A2F0B800; +4a68 : D8400000; +4a69 : 46A10008; +4a6a : 29A30008; +4a6b : BAA01000; +4a6c : 7EB50000; +4a6d : B9800800; +4a6e : D8600000; +4a6f : 5EB60011; +4a70 : E0000007; +4a71 : 29A30008; +4a72 : B9800800; +4a73 : BAE01000; +4a74 : D8600000; +4a75 : 46E00009; +4a76 : E000000A; +4a77 : 29C10000; +4a78 : B8330800; +4a79 : 59C10000; +4a7a : 29C10004; +4a7b : B8300800; +4a7c : 59C10004; +4a7d : E0000003; +4a7e : BA539000; +4a7f : BA308800; +4a80 : 3E010001; +4a81 : 3E730001; +4a82 : F6018000; +4a83 : 3694FFFF; +4a84 : B6139800; +4a85 : B8208000; +4a86 : 5E80FFDA; +4a87 : E0000014; +4a88 : B9E00800; +4a89 : 2B9D0004; +4a8a : 2B8B0040; +4a8b : 2B8C003C; +4a8c : 2B8D0038; +4a8d : 2B8E0034; +4a8e : 2B8F0030; +4a8f : 2B90002C; +4a90 : 2B910028; +4a91 : 2B920024; +4a92 : 2B930020; +4a93 : 2B94001C; +4a94 : 2B950018; +4a95 : 2B960014; +4a96 : 2B970010; +4a97 : 2B98000C; +4a98 : 2B990008; +4a99 : 379C0040; +4a9a : C3A00000; +4a9b : 35EF0001; +4a9c : 356B0010; +4a9d : 5DF8FF91; +4a9e : E3FFFFEA; +4a9f : 379CFFF0; +4aa0 : 5B8B0010; +4aa1 : 5B8C000C; +4aa2 : 5B8D0008; +4aa3 : 5B9D0004; +4aa4 : B8205800; +4aa5 : 78010001; +4aa6 : 3821AA40; +4aa7 : 28220000; +4aa8 : 29610000; +4aa9 : 340C0000; +4aaa : 340D0040; +4aab : D8400000; +4aac : 29610000; +4aad : 34020055; +4aae : FBFFFF20; +4aaf : 29610008; +4ab0 : 2962000C; +4ab1 : B9801800; +4ab2 : 358C0008; +4ab3 : F8000C48; +4ab4 : 29610000; +4ab5 : FBFFFF19; +4ab6 : 5D8DFFF9; +4ab7 : 2B9D0004; +4ab8 : 2B8B0010; +4ab9 : 2B8C000C; +4aba : 2B8D0008; +4abb : 379C0010; +4abc : C3A00000; +4abd : 28210000; +4abe : 78020001; +4abf : 3842C278; +4ac0 : 28420000; +4ac1 : 3C210008; +4ac2 : 3821000A; +4ac3 : 58410000; +4ac4 : 28410000; +4ac5 : 20230008; +4ac6 : 5C60FFFE; +4ac7 : 20210001; +4ac8 : 18210001; +4ac9 : C3A00000; +4aca : 28210000; +4acb : 78020001; +4acc : 3842C278; +4acd : 28420000; +4ace : 3C210008; +4acf : 38210009; +4ad0 : 58410000; +4ad1 : 28410000; +4ad2 : 20230008; +4ad3 : 5C60FFFE; +4ad4 : 20210001; +4ad5 : C3A00000; +4ad6 : 28210000; +4ad7 : 78030001; +4ad8 : 3863C278; +4ad9 : 3C210008; +4ada : 28630000; +4adb : 7C420000; +4adc : 38210008; +4add : B8221000; +4ade : 58620000; +4adf : 28610000; +4ae0 : 20210008; +4ae1 : 5C20FFFE; +4ae2 : C3A00000; +4ae3 : 78010001; +4ae4 : 78030001; +4ae5 : 3821C278; +4ae6 : 38638F58; +4ae7 : 28210000; +4ae8 : 28620000; +4ae9 : 58220004; +4aea : C3A00000; +4aeb : 379CFFC4; +4aec : 5B8B001C; +4aed : 5B8C0018; +4aee : 5B8D0014; +4aef : 5B8E0010; +4af0 : 5B8F000C; +4af1 : 5B900008; +4af2 : 5B9D0004; +4af3 : B8206000; +4af4 : 28210000; +4af5 : 340BFFFF; +4af6 : 4420002A; +4af7 : 29820004; +4af8 : 44400028; +4af9 : FBFFE116; +4afa : 780E0001; +4afb : B8206800; +4afc : 340B0000; +4afd : 3410001F; +4afe : 378F0020; +4aff : 39CE8D5C; +4b00 : E000000B; +4b01 : FBFFE10E; +4b02 : 202400FF; +4b03 : B56D1000; +4b04 : B5EB0800; +4b05 : 30240000; +4b06 : B8401800; +4b07 : B9C00800; +4b08 : B8802800; +4b09 : FBFFED15; +4b0a : 356B0001; +4b0b : 29810004; +4b0c : EE0B1800; +4b0d : 358C0004; +4b0e : 7C220000; +4b0f : A0621000; +4b10 : 5C40FFF1; +4b11 : 78010001; +4b12 : B9602000; +4b13 : B9A01000; +4b14 : B9E01800; +4b15 : 3821C1F0; +4b16 : F800026A; +4b17 : B8206000; +4b18 : B9601800; +4b19 : 78010001; +4b1a : FD8B5800; +4b1b : 38218D80; +4b1c : B9A01000; +4b1d : B9802000; +4b1e : FBFFED00; +4b1f : C80B5800; +4b20 : B9600800; +4b21 : 2B9D0004; +4b22 : 2B8B001C; +4b23 : 2B8C0018; +4b24 : 2B8D0014; +4b25 : 2B8E0010; +4b26 : 2B8F000C; +4b27 : 2B900008; +4b28 : 379C003C; +4b29 : C3A00000; +4b2a : 379CFFC8; +4b2b : 5B8B0018; +4b2c : 5B8C0014; +4b2d : 5B8D0010; +4b2e : 5B8E000C; +4b2f : 5B8F0008; +4b30 : 5B9D0004; +4b31 : B8205800; +4b32 : 28210000; +4b33 : 3405FFFF; +4b34 : 4420002C; +4b35 : 29620004; +4b36 : 4440002A; +4b37 : FBFFE0D8; +4b38 : B8207000; +4b39 : 29610004; +4b3a : FBFFE0D5; +4b3b : B8205800; +4b3c : 34010020; +4b3d : 4C2B0002; +4b3e : 340B0020; +4b3f : 378D001C; +4b40 : 78010001; +4b41 : B9602000; +4b42 : B9C01000; +4b43 : B9A01800; +4b44 : 3821C1F0; +4b45 : F8000227; +4b46 : B8206000; +4b47 : 78010001; +4b48 : B9601800; +4b49 : 38218DA0; +4b4a : B9C01000; +4b4b : B9802000; +4b4c : FBFFECD2; +4b4d : E98B5800; +4b4e : EC0C0800; +4b4f : 3405FFFF; +4b50 : B9615800; +4b51 : 5D60000F; +4b52 : B9A07800; +4b53 : 780D0001; +4b54 : 39AD8D5C; +4b55 : B5EB0800; +4b56 : 40240000; +4b57 : B56E1000; +4b58 : B9A00800; +4b59 : B8401800; +4b5a : B8802800; +4b5b : 356B0001; +4b5c : FBFFECC2; +4b5d : 498BFFF8; +4b5e : FD8B2800; +4b5f : C8052800; +4b60 : B8A00800; +4b61 : 2B9D0004; +4b62 : 2B8B0018; +4b63 : 2B8C0014; +4b64 : 2B8D0010; +4b65 : 2B8E000C; +4b66 : 2B8F0008; +4b67 : 379C0038; +4b68 : C3A00000; +4b69 : 379CFFE4; +4b6a : 5B8B001C; +4b6b : 5B8C0018; +4b6c : 5B8D0014; +4b6d : 5B8E0010; +4b6e : 5B8F000C; +4b6f : 5B900008; +4b70 : 5B9D0004; +4b71 : 780D0001; +4b72 : 39ADC1F0; +4b73 : B9A00800; +4b74 : 780B0001; +4b75 : 780F0001; +4b76 : 780E0001; +4b77 : FBFFFE96; +4b78 : 396BC200; +4b79 : 340C0000; +4b7a : 39EF8DC0; +4b7b : 39CE8DD8; +4b7c : 34100008; +4b7d : 29630000; +4b7e : 29640004; +4b7f : B8640800; +4b80 : 44200010; +4b81 : B9801000; +4b82 : B9E00800; +4b83 : FBFFEC9B; +4b84 : 3D810004; +4b85 : 34020000; +4b86 : 34210008; +4b87 : B5A10800; +4b88 : F8000015; +4b89 : 2023FFFF; +4b8a : 08632710; +4b8b : B8201000; +4b8c : 14420010; +4b8d : 14630010; +4b8e : B9C00800; +4b8f : FBFFEC8F; +4b90 : 358C0001; +4b91 : 356B0010; +4b92 : 5D90FFEB; +4b93 : 34010000; +4b94 : 2B9D0004; +4b95 : 2B8B001C; +4b96 : 2B8C0018; +4b97 : 2B8D0014; +4b98 : 2B8E0010; +4b99 : 2B8F000C; +4b9a : 2B900008; +4b9b : 379C001C; +4b9c : C3A00000; +4b9d : 379CFFEC; +4b9e : 5B8B0014; +4b9f : 5B8C0010; +4ba0 : 5B8D000C; +4ba1 : 5B8E0008; +4ba2 : 5B9D0004; +4ba3 : 402D000F; +4ba4 : B8206000; +4ba5 : 34010028; +4ba6 : B8407000; +4ba7 : 45A10005; +4ba8 : 34010042; +4ba9 : 45A10003; +4baa : 34010010; +4bab : 5DA10034; +4bac : 21CB0002; +4bad : 5D60000F; +4bae : B9800800; +4baf : FBFFFEF0; +4bb0 : 29810000; +4bb1 : 34020044; +4bb2 : 21CE0001; +4bb3 : FBFFFE1B; +4bb4 : 34010000; +4bb5 : 5DCB002D; +4bb6 : 780B0001; +4bb7 : 396BAA40; +4bb8 : 29620004; +4bb9 : 29810000; +4bba : D8400000; +4bbb : 4420FFFD; +4bbc : B9800800; +4bbd : FBFFFEE2; +4bbe : 29810000; +4bbf : 780B0001; +4bc0 : 340200BE; +4bc1 : 396BBF84; +4bc2 : FBFFFE0C; +4bc3 : 356E0008; +4bc4 : E0000005; +4bc5 : 29810000; +4bc6 : FBFFFE25; +4bc7 : 31610000; +4bc8 : 356B0001; +4bc9 : 5D6EFFFC; +4bca : 78020001; +4bcb : 3842BF84; +4bcc : 40410001; +4bcd : 40430000; +4bce : 3C210008; +4bcf : B8230800; +4bd0 : 34030028; +4bd1 : DC200800; +4bd2 : 45A3000B; +4bd3 : 34030042; +4bd4 : 45A30009; +4bd5 : 34030010; +4bd6 : 5DA3000B; +4bd7 : 40420006; +4bd8 : 3C21000F; +4bd9 : 3C42000C; +4bda : 3421C000; +4bdb : B8220800; +4bdc : E0000006; +4bdd : 3C21000C; +4bde : E0000004; +4bdf : 78018000; +4be0 : E0000002; +4be1 : 34010000; +4be2 : 2B9D0004; +4be3 : 2B8B0014; +4be4 : 2B8C0010; +4be5 : 2B8D000C; +4be6 : 2B8E0008; +4be7 : 379C0014; +4be8 : C3A00000; +4be9 : 379CFFFC; +4bea : 5B9D0004; +4beb : 34030000; +4bec : B8202000; +4bed : 34090028; +4bee : 34080042; +4bef : 34070010; +4bf0 : 34060008; +4bf1 : 40850017; +4bf2 : 44A90003; +4bf3 : 44A80002; +4bf4 : 5CA70006; +4bf5 : 3C630004; +4bf6 : 34630008; +4bf7 : B4230800; +4bf8 : FBFFFFA5; +4bf9 : E0000005; +4bfa : 34630001; +4bfb : 34840010; +4bfc : 5C66FFF5; +4bfd : 78018000; +4bfe : 2B9D0004; +4bff : 379C0004; +4c00 : C3A00000; +4c01 : 379CFFE0; +4c02 : 5B8B0020; +4c03 : 5B8C001C; +4c04 : 5B8D0018; +4c05 : 5B8E0014; +4c06 : 5B8F0010; +4c07 : 5B90000C; +4c08 : 5B910008; +4c09 : 5B9D0004; +4c0a : B8205800; +4c0b : B8408000; +4c0c : B8606000; +4c0d : FBFFFE92; +4c0e : 29610000; +4c0f : 3402000F; +4c10 : 220E00FF; +4c11 : FBFFFDBD; +4c12 : 29610000; +4c13 : B9C01000; +4c14 : 2210FF00; +4c15 : FBFFFDB9; +4c16 : 16100008; +4c17 : 29610000; +4c18 : BA001000; +4c19 : 340D0000; +4c1a : FBFFFDB4; +4c1b : E0000005; +4c1c : 29610000; +4c1d : 340200FF; +4c1e : 35AD0001; +4c1f : FBFFFDAF; +4c20 : 498DFFFC; +4c21 : B9600800; +4c22 : FBFFFE7D; +4c23 : 29610000; +4c24 : 340200AA; +4c25 : FBFFFDA9; +4c26 : 29610000; +4c27 : FBFFFDC4; +4c28 : B8207800; +4c29 : 5C2E0021; +4c2a : 29610000; +4c2b : FBFFFDC0; +4c2c : B8207000; +4c2d : 5C30001F; +4c2e : 29610000; +4c2f : 340D0000; +4c30 : 341100FF; +4c31 : FBFFFDBA; +4c32 : B8208000; +4c33 : E0000005; +4c34 : 29610000; +4c35 : FBFFFDB6; +4c36 : 5C310018; +4c37 : 35AD0001; +4c38 : 498DFFFC; +4c39 : B9600800; +4c3a : FBFFFE65; +4c3b : 29610000; +4c3c : 34020055; +4c3d : FBFFFD91; +4c3e : 29610000; +4c3f : B9E01000; +4c40 : FBFFFD8E; +4c41 : 29610000; +4c42 : B9C01000; +4c43 : FBFFFD8B; +4c44 : 29610000; +4c45 : BA001000; +4c46 : FBFFFD88; +4c47 : 34012710; +4c48 : FBFFE013; +4c49 : E0000006; +4c4a : 340CFFFF; +4c4b : E0000004; +4c4c : 340CFFFE; +4c4d : E0000002; +4c4e : 340CFFFD; +4c4f : B9800800; +4c50 : 2B9D0004; +4c51 : 2B8B0020; +4c52 : 2B8C001C; +4c53 : 2B8D0018; +4c54 : 2B8E0014; +4c55 : 2B8F0010; +4c56 : 2B90000C; +4c57 : 2B910008; +4c58 : 379C0020; +4c59 : C3A00000; +4c5a : 379CFFE0; +4c5b : 5B8B0020; +4c5c : 5B8C001C; +4c5d : 5B8D0018; +4c5e : 5B8E0014; +4c5f : 5B8F0010; +4c60 : 5B90000C; +4c61 : 5B910008; +4c62 : 5B9D0004; +4c63 : B8205800; +4c64 : B8408800; +4c65 : B8608000; +4c66 : B8806000; +4c67 : FBFFFE38; +4c68 : 29610000; +4c69 : 3402000F; +4c6a : 222E00FF; +4c6b : FBFFFD63; +4c6c : 29610000; +4c6d : B9C01000; +4c6e : 2231FF00; +4c6f : FBFFFD5F; +4c70 : 16310008; +4c71 : 29610000; +4c72 : BA201000; +4c73 : 340D0000; +4c74 : FBFFFD5A; +4c75 : E0000006; +4c76 : B60D1000; +4c77 : 29610000; +4c78 : 40420000; +4c79 : 35AD0001; +4c7a : FBFFFD54; +4c7b : 498DFFFB; +4c7c : B9600800; +4c7d : FBFFFE22; +4c7e : 29610000; +4c7f : 340200AA; +4c80 : FBFFFD4E; +4c81 : 29610000; +4c82 : FBFFFD69; +4c83 : B8207800; +4c84 : 5C2E0022; +4c85 : 29610000; +4c86 : FBFFFD65; +4c87 : B8207000; +4c88 : 5C310020; +4c89 : 29610000; +4c8a : 340D0000; +4c8b : FBFFFD60; +4c8c : B8208800; +4c8d : E0000007; +4c8e : 29610000; +4c8f : FBFFFD5C; +4c90 : B60D1000; +4c91 : 40420000; +4c92 : 5C220018; +4c93 : 35AD0001; +4c94 : 498DFFFA; +4c95 : B9600800; +4c96 : FBFFFE09; +4c97 : 29610000; +4c98 : 34020055; +4c99 : FBFFFD35; +4c9a : 29610000; +4c9b : B9E01000; +4c9c : FBFFFD32; +4c9d : 29610000; +4c9e : B9C01000; +4c9f : FBFFFD2F; +4ca0 : 29610000; +4ca1 : BA201000; +4ca2 : FBFFFD2C; +4ca3 : 34012710; +4ca4 : FBFFDFB7; +4ca5 : E0000006; +4ca6 : 340CFFFF; +4ca7 : E0000004; +4ca8 : 340CFFFE; +4ca9 : E0000002; +4caa : 340CFFFD; +4cab : B9800800; +4cac : 2B9D0004; +4cad : 2B8B0020; +4cae : 2B8C001C; +4caf : 2B8D0018; +4cb0 : 2B8E0014; +4cb1 : 2B8F0010; +4cb2 : 2B90000C; +4cb3 : 2B910008; +4cb4 : 379C0020; +4cb5 : C3A00000; +4cb6 : 379CFFE4; +4cb7 : 5B8B001C; +4cb8 : 5B8C0018; +4cb9 : 5B8D0014; +4cba : 5B8E0010; +4cbb : 5B8F000C; +4cbc : 5B900008; +4cbd : 5B9D0004; +4cbe : B8208000; +4cbf : 2041001F; +4cc0 : B8405800; +4cc1 : B8607000; +4cc2 : B8806000; +4cc3 : 340D0000; +4cc4 : 44200030; +4cc5 : 3441FFFF; +4cc6 : B4240800; +4cc7 : 1422001F; +4cc8 : B8807800; +4cc9 : 0042001B; +4cca : B4410800; +4ccb : 1562001F; +4ccc : 14210005; +4ccd : 0042001B; +4cce : B44B1000; +4ccf : 14420005; +4cd0 : 4422000C; +4cd1 : 78010001; +4cd2 : 38218F5C; +4cd3 : 28220000; +4cd4 : A1621000; +4cd5 : 4C400005; +4cd6 : 3442FFFF; +4cd7 : 3401FFE0; +4cd8 : B8411000; +4cd9 : 34420001; +4cda : 340F0020; +4cdb : C9E27800; +4cdc : BA000800; +4cdd : B9601000; +4cde : B9C01800; +4cdf : B9E02000; +4ce0 : FBFFFF7A; +4ce1 : B8206800; +4ce2 : 48010016; +4ce3 : B5CF7000; +4ce4 : B56F5800; +4ce5 : C98F6000; +4ce6 : E000000E; +4ce7 : B9802000; +4ce8 : 4DEC0002; +4ce9 : 34040020; +4cea : BA000800; +4ceb : B9601000; +4cec : B9C01800; +4ced : FBFFFF6D; +4cee : 48010009; +4cef : B5A16800; +4cf0 : 35CE0020; +4cf1 : 356B0020; +4cf2 : 358CFFE0; +4cf3 : E0000002; +4cf4 : 340F0020; +4cf5 : 4980FFF2; +4cf6 : E0000002; +4cf7 : B8206800; +4cf8 : B9A00800; +4cf9 : 2B9D0004; +4cfa : 2B8B001C; +4cfb : 2B8C0018; +4cfc : 2B8D0014; +4cfd : 2B8E0010; +4cfe : 2B8F000C; +4cff : 2B900008; +4d00 : 379C001C; +4d01 : C3A00000; +4d02 : 379CFFEC; +4d03 : 5B8B0014; +4d04 : 5B8C0010; +4d05 : 5B8D000C; +4d06 : 5B8E0008; +4d07 : 5B9D0004; +4d08 : B8405800; +4d09 : B8206000; +4d0a : B8607000; +4d0b : B8806800; +4d0c : FBFFFD93; +4d0d : 29810000; +4d0e : 340200F0; +4d0f : FBFFFCBF; +4d10 : 29810000; +4d11 : 216200FF; +4d12 : FBFFFCBC; +4d13 : 2162FF00; +4d14 : 29810000; +4d15 : 00420008; +4d16 : 340B0000; +4d17 : FBFFFCB7; +4d18 : E0000006; +4d19 : 29810000; +4d1a : FBFFFCD1; +4d1b : B5CB1000; +4d1c : 30410000; +4d1d : 356B0001; +4d1e : 49ABFFFB; +4d1f : B9A00800; +4d20 : 2B9D0004; +4d21 : 2B8B0014; +4d22 : 2B8C0010; +4d23 : 2B8D000C; +4d24 : 2B8E0008; +4d25 : 379C0014; +4d26 : C3A00000; +4d27 : 379CFFE8; +4d28 : 5B8B0018; +4d29 : 5B8C0014; +4d2a : 5B8D0010; +4d2b : 5B8E000C; +4d2c : 5B8F0008; +4d2d : 5B9D0004; +4d2e : B8207800; +4d2f : 2041001F; +4d30 : B8405800; +4d31 : B8606000; +4d32 : 340D0000; +4d33 : 4420002C; +4d34 : 3441FFFF; +4d35 : B4230800; +4d36 : 1422001F; +4d37 : B8607000; +4d38 : 0042001B; +4d39 : B4410800; +4d3a : 1562001F; +4d3b : 14210005; +4d3c : 0042001B; +4d3d : B44B1000; +4d3e : 14420005; +4d3f : 4422000C; +4d40 : 78010001; +4d41 : 38218F5C; +4d42 : 28220000; +4d43 : A1621000; +4d44 : 4C400005; +4d45 : 3442FFFF; +4d46 : 3401FFE0; +4d47 : B8411000; +4d48 : 34420001; +4d49 : 340E0020; +4d4a : C9C27000; +4d4b : B9E00800; +4d4c : B9601000; +4d4d : B9C01800; +4d4e : FBFFFEB3; +4d4f : B8206800; +4d50 : 48010013; +4d51 : B56E5800; +4d52 : C98E6000; +4d53 : E000000C; +4d54 : B9801800; +4d55 : 4DCC0002; +4d56 : 34030020; +4d57 : B9E00800; +4d58 : B9601000; +4d59 : FBFFFEA8; +4d5a : 48010008; +4d5b : B5A16800; +4d5c : 356B0020; +4d5d : 358CFFE0; +4d5e : E0000002; +4d5f : 340E0020; +4d60 : 4980FFF4; +4d61 : E0000002; +4d62 : B8206800; +4d63 : B9A00800; +4d64 : 2B9D0004; +4d65 : 2B8B0018; +4d66 : 2B8C0014; +4d67 : 2B8D0010; +4d68 : 2B8E000C; +4d69 : 2B8F0008; +4d6a : 379C0018; +4d6b : C3A00000; +4d6c : 379CFFFC; +4d6d : 5B9D0004; +4d6e : 34050000; +4d6f : B8203000; +4d70 : 34080043; +4d71 : 34070008; +4d72 : 40C90017; +4d73 : 5D280006; +4d74 : 3CA50004; +4d75 : 34A50008; +4d76 : B4250800; +4d77 : FBFFFF8B; +4d78 : E0000005; +4d79 : 34A50001; +4d7a : 34C60010; +4d7b : 5CA7FFF7; +4d7c : 3401FFFF; +4d7d : 2B9D0004; +4d7e : 379C0004; +4d7f : C3A00000; +4d80 : 379CFFFC; +4d81 : 5B9D0004; +4d82 : 34050000; +4d83 : B8203000; +4d84 : 34080043; +4d85 : 34070008; +4d86 : 40C90017; +4d87 : 5D280006; +4d88 : 3CA50004; +4d89 : 34A50008; +4d8a : B4250800; +4d8b : FBFFFF2B; +4d8c : E0000005; +4d8d : 34A50001; +4d8e : 34C60010; +4d8f : 5CA7FFF7; +4d90 : 3401FFFF; +4d91 : 2B9D0004; +4d92 : 379C0004; +4d93 : C3A00000; +4d94 : 379CFFFC; +4d95 : 5B9D0004; +4d96 : 34040000; +4d97 : B8202800; +4d98 : 34070043; +4d99 : 34060008; +4d9a : 40A80017; +4d9b : 5D070006; +4d9c : 3C840004; +4d9d : 34840008; +4d9e : B4240800; +4d9f : FBFFFF88; +4da0 : E0000005; +4da1 : 34840001; +4da2 : 34A50010; +4da3 : 5C86FFF7; +4da4 : 3401FFFF; +4da5 : 2B9D0004; +4da6 : 379C0004; +4da7 : C3A00000; +4da8 : 379CFFF4; +4da9 : 5B8B000C; +4daa : 5B8C0008; +4dab : 5B9D0004; +4dac : 780B0001; +4dad : 396BBF94; +4dae : 29610000; +4daf : 5C200009; +4db0 : FBFFF05A; +4db1 : 78020001; +4db2 : 342103E8; +4db3 : 3842BF8C; +4db4 : 58410000; +4db5 : 29610000; +4db6 : 34210001; +4db7 : 59610000; +4db8 : 780B0001; +4db9 : 396BBF90; +4dba : 296C0000; +4dbb : FBFFF04F; +4dbc : 78020001; +4dbd : 3842BF8C; +4dbe : 28440000; +4dbf : C8242800; +4dc0 : 34010000; +4dc1 : 48050018; +4dc2 : 21830001; +4dc3 : 78010001; +4dc4 : 3C650002; +4dc5 : 38219428; +4dc6 : B4250800; +4dc7 : 28210000; +4dc8 : B4242000; +4dc9 : 29610000; +4dca : 58440000; +4dcb : 34020001; +4dcc : 34210001; +4dcd : 59610000; +4dce : 78010001; +4dcf : 3821C1F0; +4dd0 : 44620003; +4dd1 : FBFFFE18; +4dd2 : E0000006; +4dd3 : 34020002; +4dd4 : FBFFFE15; +4dd5 : 78020001; +4dd6 : 3842AA4C; +4dd7 : 58410004; +4dd8 : 34010001; +4dd9 : 2B9D0004; +4dda : 2B8B000C; +4ddb : 2B8C0008; +4ddc : 379C000C; +4ddd : C3A00000; +4dde : 28250008; +4ddf : 28240000; +4de0 : 28260004; +4de1 : B4451800; +4de2 : 88642000; +4de3 : 5822001C; +4de4 : 88461000; +4de5 : B4821000; +4de6 : 2824000C; +4de7 : 1442000C; +4de8 : B4442000; +4de9 : 28220014; +4dea : 4C820005; +4deb : 28240010; +4dec : 44800008; +4ded : 4CA3000B; +4dee : E0000006; +4def : 28220018; +4df0 : 4C440006; +4df1 : 28240010; +4df2 : 44800002; +4df3 : 4C650005; +4df4 : 58230008; +4df5 : E0000003; +4df6 : 58230008; +4df7 : B8801000; +4df8 : 58220020; +4df9 : B8400800; +4dfa : C3A00000; +4dfb : 2822000C; +4dfc : 58200008; +4dfd : 58220020; +4dfe : C3A00000; +4dff : 379CFFF8; +4e00 : 5B8B0008; +4e01 : 5B9D0004; +4e02 : B8205800; +4e03 : 58200014; +4e04 : B8400800; +4e05 : F80009AC; +4e06 : 2963000C; +4e07 : 29620000; +4e08 : 4823000B; +4e09 : 29610004; +4e0a : 4C410003; +4e0b : 34420001; +4e0c : 59620000; +4e0d : 29620000; +4e0e : 5C410011; +4e0f : 34010001; +4e10 : 59610014; +4e11 : 59610010; +4e12 : E000000E; +4e13 : 29610008; +4e14 : 4C220003; +4e15 : 3442FFFF; +4e16 : 59620000; +4e17 : 29620000; +4e18 : 5C410007; +4e19 : 34010001; +4e1a : 59610014; +4e1b : 59600000; +4e1c : 59600010; +4e1d : 3401FFFF; +4e1e : E0000002; +4e1f : 29610010; +4e20 : 2B9D0004; +4e21 : 2B8B0008; +4e22 : 379C0008; +4e23 : C3A00000; +4e24 : 58200010; +4e25 : 58200000; +4e26 : 58200014; +4e27 : C3A00000; +4e28 : 78030001; +4e29 : 3863C298; +4e2a : 28640000; +4e2b : 48810013; +4e2c : 78030001; +4e2d : 3863BFB8; +4e2e : C8240800; +4e2f : 44400007; +4e30 : 28620000; +4e31 : 34040001; +4e32 : BC810800; +4e33 : 28430028; +4e34 : B8230800; +4e35 : E0000007; +4e36 : 28620000; +4e37 : 34040001; +4e38 : BC810800; +4e39 : 28430028; +4e3a : A4200800; +4e3b : A0230800; +4e3c : 58410028; +4e3d : C3A00000; +4e3e : 78030001; +4e3f : 3863BFB8; +4e40 : 44400007; +4e41 : 28620000; +4e42 : 34040001; +4e43 : BC810800; +4e44 : 28430024; +4e45 : B8230800; +4e46 : E0000007; +4e47 : 28620000; +4e48 : 34040001; +4e49 : BC810800; +4e4a : 28430024; +4e4b : A4200800; +4e4c : A0230800; +4e4d : 58410024; +4e4e : C3A00000; +4e4f : 78020001; +4e50 : 3842BFB8; +4e51 : 28420000; +4e52 : B8201800; +4e53 : 34010000; +4e54 : 28440008; +4e55 : 20840002; +4e56 : 4480000C; +4e57 : 34040002; +4e58 : 58440008; +4e59 : 78060001; +4e5a : 28420010; +4e5b : 38C68F60; +4e5c : 28C40000; +4e5d : 3445FF9B; +4e5e : 54A40004; +4e5f : 08420064; +4e60 : 34010001; +4e61 : 58620000; +4e62 : C3A00000; +4e63 : 379CFFF0; +4e64 : 5B8B0010; +4e65 : 5B8C000C; +4e66 : 5B8D0008; +4e67 : 5B9D0004; +4e68 : 780B0001; +4e69 : B8206000; +4e6a : 78010001; +4e6b : 396BC298; +4e6c : 3821C290; +4e6d : 28210000; +4e6e : 296D0000; +4e6f : B42D6800; +4e70 : 29810000; +4e71 : B9A01000; +4e72 : F8000110; +4e73 : 29810004; +4e74 : 29630000; +4e75 : B9A01000; +4e76 : F800018F; +4e77 : 5980000C; +4e78 : 59800008; +4e79 : 2B9D0004; +4e7a : 2B8B0010; +4e7b : 2B8C000C; +4e7c : 2B8D0008; +4e7d : 379C0010; +4e7e : C3A00000; +4e7f : 379CFFF8; +4e80 : 5B8B0008; +4e81 : 5B9D0004; +4e82 : B8205800; +4e83 : 28210000; +4e84 : F8000167; +4e85 : 78010001; +4e86 : 3821BFB8; +4e87 : 28210000; +4e88 : 34020001; +4e89 : 34030009; +4e8a : 58220004; +4e8b : 5963000C; +4e8c : 78030001; +4e8d : 38638F64; +4e8e : 59620008; +4e8f : 28620000; +4e90 : 5822004C; +4e91 : 2B9D0004; +4e92 : 2B8B0008; +4e93 : 379C0008; +4e94 : C3A00000; +4e95 : B8201000; +4e96 : 28210000; +4e97 : 28230048; +4e98 : 34010000; +4e99 : 44600016; +4e9a : 28430004; +4e9b : 28630038; +4e9c : 44600013; +4e9d : 78030001; +4e9e : 3863BFB8; +4e9f : 28630000; +4ea0 : 28640004; +4ea1 : 20840004; +4ea2 : 4480000D; +4ea3 : 28630004; +4ea4 : 20630008; +4ea5 : 5C60000A; +4ea6 : 2842000C; +4ea7 : 3403000A; +4ea8 : 34010001; +4ea9 : 54430006; +4eaa : 78010001; +4eab : 3C420002; +4eac : 38219458; +4ead : B4220800; +4eae : 28210000; +4eaf : C3A00000; +4eb0 : 379CFFF0; +4eb1 : 5B8B000C; +4eb2 : 5B8C0008; +4eb3 : 5B9D0004; +4eb4 : 2822000C; +4eb5 : B8205800; +4eb6 : 34010009; +4eb7 : 3442FFFF; +4eb8 : 340C0000; +4eb9 : 544100A5; +4eba : 78010001; +4ebb : 3C420002; +4ebc : 38219430; +4ebd : B4220800; +4ebe : 28210000; +4ebf : C0200000; +4ec0 : 78010001; +4ec1 : 3821BFB8; +4ec2 : 28210000; +4ec3 : 340C0000; +4ec4 : 28220004; +4ec5 : 20420008; +4ec6 : 5C400098; +4ec7 : 28230004; +4ec8 : 78028000; +4ec9 : B8621000; +4eca : 58220004; +4ecb : 3401000A; +4ecc : E0000090; +4ecd : 78010001; +4ece : 3821BFB8; +4ecf : 28210000; +4ed0 : 78040001; +4ed1 : 38848ED4; +4ed2 : 28230004; +4ed3 : 28820000; +4ed4 : A0621000; +4ed5 : 58220004; +4ed6 : 28220004; +4ed7 : 20420008; +4ed8 : 5C400083; +4ed9 : 28210004; +4eda : 340C0001; +4edb : 20210004; +4edc : 44220082; +4edd : 596C000C; +4ede : E0000080; +4edf : 29610000; +4ee0 : 340C0000; +4ee1 : 28210048; +4ee2 : 4420007C; +4ee3 : FBFFB18F; +4ee4 : 29610004; +4ee5 : F8000146; +4ee6 : FBFFB195; +4ee7 : 34010008; +4ee8 : E0000074; +4ee9 : 78010001; +4eea : 3821BFB8; +4eeb : 28210000; +4eec : 34020002; +4eed : 340C0000; +4eee : 58220008; +4eef : 29610000; +4ef0 : 28210048; +4ef1 : 4420006D; +4ef2 : 29610004; +4ef3 : 28210038; +4ef4 : 4420006A; +4ef5 : 78010001; +4ef6 : 3821BFCC; +4ef7 : 28210000; +4ef8 : 340300A2; +4ef9 : 58230000; +4efa : 34030003; +4efb : 58230010; +4efc : 34030001; +4efd : 5823001C; +4efe : 5962000C; +4eff : E000005E; +4f00 : 78010001; +4f01 : 3821BFCC; +4f02 : 28210000; +4f03 : 340C0000; +4f04 : 2822001C; +4f05 : 20420001; +4f06 : 44400058; +4f07 : 34020004; +4f08 : 5822001C; +4f09 : FBFFEF01; +4f0a : 342107D0; +4f0b : 59610010; +4f0c : 34010003; +4f0d : E000004F; +4f0e : FBFFEEFC; +4f0f : 29620010; +4f10 : 340C0000; +4f11 : C8220800; +4f12 : 4801004C; +4f13 : 34010007; +4f14 : 5961000C; +4f15 : 5960001C; +4f16 : E0000047; +4f17 : 37810010; +4f18 : FBFFFF37; +4f19 : 340C0000; +4f1a : 44200044; +4f1b : 78030001; +4f1c : 38638F68; +4f1d : 28620000; +4f1e : 2B810010; +4f1f : F8000836; +4f20 : 3802C34F; +4f21 : E8221000; +4f22 : 64210000; +4f23 : B8410800; +4f24 : 44200005; +4f25 : 34010064; +4f26 : 59610014; +4f27 : 3401FF9C; +4f28 : E0000003; +4f29 : 59600014; +4f2a : 34010064; +4f2b : 59610018; +4f2c : 34010004; +4f2d : E000002F; +4f2e : 29610004; +4f2f : 340C0000; +4f30 : F80001D1; +4f31 : 5C20002D; +4f32 : 37810010; +4f33 : FBFFFF1C; +4f34 : 442C002A; +4f35 : 78040001; +4f36 : 38848F68; +4f37 : 2B810010; +4f38 : 28820000; +4f39 : F800081C; +4f3a : 29620014; +4f3b : 5B810010; +4f3c : 44220009; +4f3d : 2961001C; +4f3e : 29620018; +4f3f : B4410800; +4f40 : 5961001C; +4f41 : 29610004; +4f42 : 2962001C; +4f43 : F800019C; +4f44 : E0000019; +4f45 : 29620014; +4f46 : 340C0001; +4f47 : 5C220017; +4f48 : 2961001C; +4f49 : 34217530; +4f4a : 5961001C; +4f4b : 29610004; +4f4c : 2962001C; +4f4d : F8000192; +4f4e : 34010005; +4f4f : 5961000C; +4f50 : E000000E; +4f51 : 29610004; +4f52 : 340C0000; +4f53 : F80001AE; +4f54 : 5C20000A; +4f55 : 34010006; +4f56 : E0000006; +4f57 : B9600800; +4f58 : FBFFFF3D; +4f59 : 340C0000; +4f5a : 5C200004; +4f5b : 34010009; +4f5c : 5961000C; +4f5d : 340C0001; +4f5e : B9800800; +4f5f : 2B9D0004; +4f60 : 2B8B000C; +4f61 : 2B8C0008; +4f62 : 379C0010; +4f63 : C3A00000; +4f64 : 78040001; +4f65 : 3884BFB8; +4f66 : 28850000; +4f67 : 34040000; +4f68 : 44600002; +4f69 : 78048000; +4f6a : 78060001; +4f6b : 38C68F6C; +4f6c : 28C30000; +4f6d : 3C210018; +4f6e : A0431000; +4f6f : B8410800; +4f70 : B8242000; +4f71 : 58A4004C; +4f72 : C3A00000; +4f73 : 78040001; +4f74 : 3884BFB8; +4f75 : 28850000; +4f76 : 34040000; +4f77 : 44600002; +4f78 : 78048000; +4f79 : 78060001; +4f7a : 38C68F6C; +4f7b : 28C30000; +4f7c : 3C210018; +4f7d : A0431000; +4f7e : B8410800; +4f7f : B8242000; +4f80 : 58A4004C; +4f81 : C3A00000; +4f82 : 34030005; +4f83 : 58230028; +4f84 : 3803FFFB; +4f85 : 5823002C; +4f86 : 3403FF6A; +4f87 : 58230018; +4f88 : 3403FFFE; +4f89 : 58230014; +4f8a : 34030001; +4f8b : 58230024; +4f8c : 340300C8; +4f8d : 58230044; +4f8e : 34032710; +4f8f : 5823003C; +4f90 : 34030064; +4f91 : 58230040; +4f92 : 5822000C; +4f93 : C3A00000; +4f94 : 379CFFF0; +4f95 : 5B8B0010; +4f96 : 5B8C000C; +4f97 : 5B8D0008; +4f98 : 5B9D0004; +4f99 : B8205800; +4f9a : 2821000C; +4f9b : B8406800; +4f9c : 340C0000; +4f9d : 5C610047; +4f9e : 34010022; +4f9f : 34030000; +4fa0 : FBFFFFC4; +4fa1 : 29620004; +4fa2 : 34010025; +4fa3 : 34030000; +4fa4 : FBFFFFC0; +4fa5 : 29610008; +4fa6 : 4C200004; +4fa7 : 596D0004; +4fa8 : 596D0008; +4fa9 : E000003B; +4faa : 4DA10005; +4fab : 29620000; +4fac : 78010040; +4fad : B4410800; +4fae : 59610000; +4faf : 29630000; +4fb0 : 78050001; +4fb1 : 29620004; +4fb2 : 38A58F70; +4fb3 : 28A10000; +4fb4 : B5A32000; +4fb5 : C8826000; +4fb6 : 482C0006; +4fb7 : 78050001; +4fb8 : 38A58F74; +4fb9 : 28A10000; +4fba : 49810002; +4fbb : E0000002; +4fbc : B8206000; +4fbd : 78050001; +4fbe : 38A58F78; +4fbf : 28A10000; +4fc0 : 4C240006; +4fc1 : 4C220005; +4fc2 : C8611800; +4fc3 : C8410800; +4fc4 : 59630000; +4fc5 : 59610004; +4fc6 : 29610004; +4fc7 : B9801000; +4fc8 : 596D0008; +4fc9 : 34214000; +4fca : 59610004; +4fcb : 35610014; +4fcc : FBFFFE12; +4fcd : 78030001; +4fce : 3863BFB8; +4fcf : 29620010; +4fd0 : B8206800; +4fd1 : 28610000; +4fd2 : 34030000; +4fd3 : 582D0040; +4fd4 : 34410001; +4fd5 : 59610010; +4fd6 : 34010026; +4fd7 : FBFFFF8D; +4fd8 : 34010020; +4fd9 : B9A01000; +4fda : 34030000; +4fdb : FBFFFF89; +4fdc : B9801000; +4fdd : 34010021; +4fde : 34030001; +4fdf : FBFFFF85; +4fe0 : B9801000; +4fe1 : 35610038; +4fe2 : FBFFFE1D; +4fe3 : 7C2C0000; +4fe4 : B9800800; +4fe5 : 2B9D0004; +4fe6 : 2B8B0010; +4fe7 : 2B8C000C; +4fe8 : 2B8D0008; +4fe9 : 379C0010; +4fea : C3A00000; +4feb : 379CFFF8; +4fec : 5B8B0008; +4fed : 5B9D0004; +4fee : B8205800; +4fef : 28210028; +4ff0 : 59600004; +4ff1 : 59600000; +4ff2 : 59610020; +4ff3 : 3401FFFF; +4ff4 : 59610008; +4ff5 : 59600010; +4ff6 : 35610014; +4ff7 : FBFFFE04; +4ff8 : 35610038; +4ff9 : FBFFFE2B; +4ffa : 2961000C; +4ffb : 34020001; +4ffc : FBFFFE2C; +4ffd : 34010024; +4ffe : 34020001; +4fff : 34030001; +5000 : FBFFFF64; +5001 : 2B9D0004; +5002 : 2B8B0008; +5003 : 379C0008; +5004 : C3A00000; +5005 : 379CFFF8; +5006 : 5B8B0008; +5007 : 5B9D0004; +5008 : B8205800; +5009 : 34010005; +500a : 59610018; +500b : 3801FFFA; +500c : 5961001C; +500d : 34010001; +500e : 59610014; +500f : 34017530; +5010 : 59610010; +5011 : 3401FBB4; +5012 : 59610008; +5013 : 3401FFE2; +5014 : 59610004; +5015 : 340104B0; +5016 : 59610034; +5017 : 340103E8; +5018 : 5961002C; +5019 : 34010064; +501a : 59610030; +501b : 78010001; +501c : 3821C298; +501d : 28210000; +501e : 59630064; +501f : 59620060; +5020 : C8611800; +5021 : 5963006C; +5022 : 35610004; +5023 : 59600070; +5024 : FBFFFDD7; +5025 : 35610028; +5026 : FBFFFDFE; +5027 : 2B9D0004; +5028 : 2B8B0008; +5029 : 379C0008; +502a : C3A00000; +502b : 379CFFF8; +502c : 5B8B0008; +502d : 5B9D0004; +502e : B8205800; +502f : 58200044; +5030 : 58200040; +5031 : 3401FFFF; +5032 : 59610048; +5033 : 5961004C; +5034 : 59610050; +5035 : 59610054; +5036 : 34010001; +5037 : 59610070; +5038 : 59600058; +5039 : 35610004; +503a : 5960005C; +503b : 59600068; +503c : FBFFFDBF; +503d : 35610028; +503e : FBFFFDE6; +503f : 29610060; +5040 : 34020001; +5041 : FBFFFDE7; +5042 : 29610064; +5043 : 34020001; +5044 : FBFFFDE4; +5045 : 34010004; +5046 : 34020001; +5047 : 34030001; +5048 : FBFFFF2B; +5049 : 2B9D0004; +504a : 2B8B0008; +504b : 379C0008; +504c : C3A00000; +504d : 379CFFF8; +504e : 5B8B0008; +504f : 5B9D0004; +5050 : B8205800; +5051 : 28210064; +5052 : 34020000; +5053 : FBFFFDD5; +5054 : 59600070; +5055 : 2B9D0004; +5056 : 2B8B0008; +5057 : 379C0008; +5058 : C3A00000; +5059 : 379CFFF0; +505a : 5B8B0010; +505b : 5B8C000C; +505c : 5B8D0008; +505d : 5B9D0004; +505e : 28240070; +505f : B8205800; +5060 : 34010001; +5061 : 44800078; +5062 : 29610060; +5063 : 5C610002; +5064 : 59620048; +5065 : 29610064; +5066 : 5C610002; +5067 : 5962004C; +5068 : 29610048; +5069 : 48010009; +506a : 29620050; +506b : 48020006; +506c : 4C220005; +506d : 29630040; +506e : 78020040; +506f : B4621000; +5070 : 59620040; +5071 : 59610050; +5072 : 2961004C; +5073 : 48010009; +5074 : 29620054; +5075 : 48020006; +5076 : 4C220005; +5077 : 29630044; +5078 : 78020040; +5079 : B4621000; +507a : 59620044; +507b : 59610054; +507c : 29630048; +507d : 34010000; +507e : 4803005B; +507f : 2962004C; +5080 : 48020059; +5081 : 296C0040; +5082 : 29610038; +5083 : B46C1800; +5084 : 296C0044; +5085 : C8621000; +5086 : C84C6000; +5087 : 44200006; +5088 : 218C3FFF; +5089 : 21812000; +508a : 44200003; +508b : 3401C000; +508c : B9816000; +508d : B9801000; +508e : 35610004; +508f : FBFFFD4F; +5090 : 2962006C; +5091 : 78030001; +5092 : 3863BFB8; +5093 : 2042000F; +5094 : B8206800; +5095 : 3C420010; +5096 : 28610000; +5097 : 21A3FFFF; +5098 : B8621000; +5099 : 58220044; +509a : 29630040; +509b : 29620048; +509c : 34010005; +509d : B4621000; +509e : 34030000; +509f : FBFFFED4; +50a0 : 29630044; +50a1 : 2962004C; +50a2 : 34010002; +50a3 : B4621000; +50a4 : 34030000; +50a5 : FBFFFECE; +50a6 : 34010001; +50a7 : B9801000; +50a8 : 34030000; +50a9 : FBFFFECA; +50aa : 29620068; +50ab : 34030000; +50ac : 34410001; +50ad : 59610068; +50ae : 34010006; +50af : FBFFFEC4; +50b0 : 34010000; +50b1 : B9A01000; +50b2 : 34030001; +50b3 : FBFFFEC0; +50b4 : 78020001; +50b5 : 3401FFFF; +50b6 : 38428F7C; +50b7 : 5961004C; +50b8 : 59610048; +50b9 : 29630040; +50ba : 28410000; +50bb : 4C23000A; +50bc : 29620044; +50bd : 4C220008; +50be : 78040001; +50bf : 38848F80; +50c0 : 28810000; +50c1 : B4611800; +50c2 : B4410800; +50c3 : 59630040; +50c4 : 59610044; +50c5 : 29610038; +50c6 : 4420000F; +50c7 : 2961005C; +50c8 : 29620058; +50c9 : 4C220006; +50ca : 34210001; +50cb : 5961005C; +50cc : 29610040; +50cd : 3421FFFF; +50ce : E0000006; +50cf : 4C410006; +50d0 : 3421FFFF; +50d1 : 5961005C; +50d2 : 29610040; +50d3 : 34210001; +50d4 : 59610040; +50d5 : 35610028; +50d6 : B9801000; +50d7 : FBFFFD28; +50d8 : 7C210000; +50d9 : 2B9D0004; +50da : 2B8B0010; +50db : 2B8C000C; +50dc : 2B8D0008; +50dd : 379C0010; +50de : C3A00000; +50df : 379CFFF0; +50e0 : 5B8B0008; +50e1 : 5B9D0004; +50e2 : B8205800; +50e3 : 1443001F; +50e4 : 3781000C; +50e5 : 4802000B; +50e6 : 00440012; +50e7 : 3C63000E; +50e8 : 3C42000E; +50e9 : B8641800; +50ea : 5B820010; +50eb : 34021F40; +50ec : 5B83000C; +50ed : FBFFB781; +50ee : 2B820010; +50ef : E0000009; +50f0 : 0842C000; +50f1 : 5B820010; +50f2 : 1442001F; +50f3 : 5B82000C; +50f4 : 34021F40; +50f5 : FBFFB779; +50f6 : 2B820010; +50f7 : C8021000; +50f8 : 0041001F; +50f9 : B4221000; +50fa : 14420001; +50fb : 34010000; +50fc : 59620058; +50fd : 2B9D0004; +50fe : 2B8B0008; +50ff : 379C0010; +5100 : C3A00000; +5101 : 28220058; +5102 : 2821005C; +5103 : FC410800; +5104 : C3A00000; +5105 : 58220004; +5106 : 5820001C; +5107 : 58230008; +5108 : 5820000C; +5109 : 58200010; +510a : 58200000; +510b : C3A00000; +510c : 379CFFFC; +510d : 5B9D0004; +510e : 34020001; +510f : 58220000; +5110 : 58200014; +5111 : 5820001C; +5112 : 5820000C; +5113 : 58200010; +5114 : 28210004; +5115 : FBFFFD13; +5116 : 78010001; +5117 : 3821C298; +5118 : 28210000; +5119 : 34020001; +511a : FBFFFD0E; +511b : 2B9D0004; +511c : 379C0004; +511d : C3A00000; +511e : 379CFFB0; +511f : 5B8B0010; +5120 : 5B8C000C; +5121 : 5B8D0008; +5122 : 5B9D0004; +5123 : B8205800; +5124 : B8406000; +5125 : B8606800; +5126 : 37810014; +5127 : 34020000; +5128 : 34030040; +5129 : F800072B; +512a : 3401C000; +512b : 78040001; +512c : 5B810020; +512d : 3884C298; +512e : 34014000; +512f : 5B810044; +5130 : 28810000; +5131 : 5DA10005; +5132 : 78030001; +5133 : 3863AD7C; +5134 : 586C0000; +5135 : E0000027; +5136 : 3DAD0005; +5137 : B56D5800; +5138 : 29610000; +5139 : 44200023; +513a : 78030001; +513b : 3863AD7C; +513c : 28610000; +513d : 29620010; +513e : C9810800; +513f : 20213FFF; +5140 : 1423000C; +5141 : 5C400007; +5142 : 3C630002; +5143 : 5961000C; +5144 : 34010001; +5145 : 59630014; +5146 : 59610010; +5147 : E0000015; +5148 : 2964000C; +5149 : 34420001; +514a : B4240800; +514b : 29640014; +514c : B4641800; +514d : 3C630002; +514e : 37840050; +514f : B4831800; +5150 : 2863FFC4; +5151 : 59620010; +5152 : B4230800; +5153 : 29630008; +5154 : 5961000C; +5155 : 5C430007; +5156 : F80005D2; +5157 : 59610018; +5158 : 34010001; +5159 : 5961001C; +515a : 5960000C; +515b : 59600010; +515c : 34010000; +515d : 2B9D0004; +515e : 2B8B0010; +515f : 2B8C000C; +5160 : 2B8D0008; +5161 : 379C0050; +5162 : C3A00000; +5163 : 78030001; +5164 : 3863BFB8; +5165 : 5C40000A; +5166 : 34040001; +5167 : 28620000; +5168 : BC810800; +5169 : 202100FF; +516a : 28430020; +516b : 3C210010; +516c : A4200800; +516d : A0230800; +516e : E0000008; +516f : 28620000; +5170 : 34040001; +5171 : BC810800; +5172 : 28430020; +5173 : 202100FF; +5174 : 3C210010; +5175 : B8230800; +5176 : 58410020; +5177 : C3A00000; +5178 : 379CFFF8; +5179 : 5B8B0008; +517a : 5B9D0004; +517b : 34020001; +517c : 44220009; +517d : 34020002; +517e : 4422000C; +517f : 5C200017; +5180 : 78010001; +5181 : 3821BFB8; +5182 : 282B0000; +5183 : 356B0018; +5184 : E000000A; +5185 : 78010001; +5186 : 3821BFB8; +5187 : 282B0000; +5188 : 356B0014; +5189 : E0000005; +518a : 78010001; +518b : 3821BFB8; +518c : 282B0000; +518d : 356B001C; +518e : 340107D0; +518f : FBFFEC80; +5190 : 78030001; +5191 : 38638F28; +5192 : 29620000; +5193 : 28610000; +5194 : A0410800; +5195 : E0000002; +5196 : 34010000; +5197 : 2B9D0004; +5198 : 2B8B0008; +5199 : 379C0008; +519a : C3A00000; +519b : 379CFFF8; +519c : 5B8B0008; +519d : 5B9D0004; +519e : 78030001; +519f : B8405800; +51a0 : 3863C060; +51a1 : 44200007; +51a2 : 3421FFFF; +51a3 : 0823007C; +51a4 : 78010001; +51a5 : 3821BFD8; +51a6 : B4610800; +51a7 : 34230104; +51a8 : B8600800; +51a9 : B9601000; +51aa : FBFFFF35; +51ab : 78010001; +51ac : 3821BFD8; +51ad : 582B0014; +51ae : 2B9D0004; +51af : 2B8B0008; +51b0 : 379C0008; +51b1 : C3A00000; +51b2 : 379CFFEC; +51b3 : 5B8B0014; +51b4 : 5B8C0010; +51b5 : 5B8D000C; +51b6 : 5B8E0008; +51b7 : 5B9D0004; +51b8 : 780C0001; +51b9 : 780D0001; +51ba : B8207000; +51bb : 340B0000; +51bc : 398CC298; +51bd : 39ADBF98; +51be : E000000A; +51bf : 29A10000; +51c0 : 942B0800; +51c1 : 20210001; +51c2 : 44200005; +51c3 : 3D620005; +51c4 : B5C21000; +51c5 : 344101F4; +51c6 : FBFFFF46; +51c7 : 356B0001; +51c8 : 29810000; +51c9 : 482BFFF6; +51ca : 2B9D0004; +51cb : 2B8B0014; +51cc : 2B8C0010; +51cd : 2B8D000C; +51ce : 2B8E0008; +51cf : 379C0014; +51d0 : C3A00000; +51d1 : 379CFFBC; +51d2 : 5B8B0044; +51d3 : 5B8C0040; +51d4 : 5B8D003C; +51d5 : 5B8E0038; +51d6 : 5B8F0034; +51d7 : 5B900030; +51d8 : 5B91002C; +51d9 : 5B920028; +51da : 5B930024; +51db : 5B940020; +51dc : 5B95001C; +51dd : 5B960018; +51de : 5B970014; +51df : 5B980010; +51e0 : 5B99000C; +51e1 : 5B9B0008; +51e2 : 5B9D0004; +51e3 : 781B0001; +51e4 : 780B0001; +51e5 : 78190001; +51e6 : 780D0001; +51e7 : 78110001; +51e8 : 78100001; +51e9 : 780C0001; +51ea : 78170001; +51eb : 780F0001; +51ec : 3B7BBFB8; +51ed : 396BBFD8; +51ee : 34140009; +51ef : 3B399484; +51f0 : 34180001; +51f1 : 34130003; +51f2 : 39ADC040; +51f3 : 34120008; +51f4 : 3A31C060; +51f5 : 3A10BFF0; +51f6 : 398CC298; +51f7 : 3AF7C1CC; +51f8 : 39EFC290; +51f9 : E000007E; +51fa : 2875007C; +51fb : 780100FF; +51fc : 3821FFFF; +51fd : 02AE0018; +51fe : A2A1A800; +51ff : 29610004; +5200 : 21CE007F; +5201 : 3421FFFF; +5202 : 54340055; +5203 : 3C210002; +5204 : B7210800; +5205 : 28210000; +5206 : C0200000; +5207 : 29610044; +5208 : 58610040; +5209 : 296100A4; +520a : 296200A0; +520b : B4410800; +520c : 0022001F; +520d : B4410800; +520e : 14210001; +520f : 34020001; +5210 : 58610044; +5211 : 29810000; +5212 : FBFFFC16; +5213 : FBFFEBF7; +5214 : 34210032; +5215 : 59610008; +5216 : 3401000A; +5217 : E0000011; +5218 : 29760008; +5219 : FBFFEBF1; +521a : CAC10800; +521b : 4C20003C; +521c : 29610000; +521d : 5C380003; +521e : 59780004; +521f : E0000038; +5220 : 59730004; +5221 : E0000036; +5222 : 29810000; +5223 : 34020000; +5224 : FBFFFC04; +5225 : B9A00800; +5226 : FBFFFC59; +5227 : 34010002; +5228 : 59610004; +5229 : E000002E; +522a : B9A00800; +522b : FBFFFC6A; +522c : E0000012; +522d : BA000800; +522e : FBFFFDBD; +522f : 34010004; +5230 : E3FFFFF8; +5231 : 29610060; +5232 : 44200025; +5233 : 29610064; +5234 : 44200023; +5235 : 29610000; +5236 : 5C330009; +5237 : 34010005; +5238 : E3FFFFF0; +5239 : BA200800; +523a : FBFFFDF1; +523b : 34010006; +523c : E3FFFFEC; +523d : 296100C0; +523e : 44200019; +523f : B9600800; +5240 : FBFFFF72; +5241 : 59720004; +5242 : 296100E8; +5243 : 34020001; +5244 : E0000012; +5245 : 29610000; +5246 : 5C380004; +5247 : B9A00800; +5248 : FBFFFC4D; +5249 : 44200007; +524a : 29610060; +524b : 44200005; +524c : 29610000; +524d : 5C33000A; +524e : 296100C0; +524f : 5C200008; +5250 : 2961000C; +5251 : 34020000; +5252 : 34210001; +5253 : 5961000C; +5254 : 59740004; +5255 : 296100E8; +5256 : FBFFFF0D; +5257 : BA000800; +5258 : BAA01000; +5259 : B9C01800; +525a : FBFFFD3A; +525b : 29610060; +525c : 4420001B; +525d : BA200800; +525e : BAA01000; +525f : B9C01800; +5260 : FBFFFDF9; +5261 : 29610004; +5262 : 5C320015; +5263 : 29610000; +5264 : 34160000; +5265 : 5C33000C; +5266 : E0000008; +5267 : 0AC1007C; +5268 : BAA01000; +5269 : B9C01800; +526a : B5610800; +526b : 34210104; +526c : FBFFFDED; +526d : 36D60001; +526e : 29E10000; +526f : 3421FFFF; +5270 : 4836FFF7; +5271 : 29810000; +5272 : 49C10005; +5273 : BAE00800; +5274 : BAA01000; +5275 : B9C01800; +5276 : FBFFFEA8; +5277 : 2B630000; +5278 : 78020002; +5279 : 28610080; +527a : A0220800; +527b : 4420FF7F; +527c : 29610010; +527d : 34210001; +527e : 59610010; +527f : 34010001; +5280 : D0410000; +5281 : 2B9D0004; +5282 : 2B8B0044; +5283 : 2B8C0040; +5284 : 2B8D003C; +5285 : 2B8E0038; +5286 : 2B8F0034; +5287 : 2B900030; +5288 : 2B91002C; +5289 : 2B920028; +528a : 2B930024; +528b : 2B940020; +528c : 2B95001C; +528d : 2B960018; +528e : 2B970014; +528f : 2B980010; +5290 : 2B99000C; +5291 : 2B9B0008; +5292 : 379C0044; +5293 : C3A00000; +5294 : 78010001; +5295 : 3821BFD4; +5296 : 28220000; +5297 : 78030001; +5298 : 78010001; +5299 : 3821BFCC; +529a : 38638F84; +529b : 58220000; +529c : 28610000; +529d : 58410000; +529e : C3A00000; +529f : 379CFFD4; +52a0 : 5B8B0028; +52a1 : 5B8C0024; +52a2 : 5B8D0020; +52a3 : 5B8E001C; +52a4 : 5B8F0018; +52a5 : 5B900014; +52a6 : 5B910010; +52a7 : 5B92000C; +52a8 : 5B930008; +52a9 : 5B9D0004; +52aa : B8205800; +52ab : B8408000; +52ac : B8609000; +52ad : FBFFADC5; +52ae : 78010001; +52af : 3821C2C4; +52b0 : 28240000; +52b1 : 78010001; +52b2 : 3821BFB8; +52b3 : 58240000; +52b4 : 78010001; +52b5 : 28850000; +52b6 : 3821BFD4; +52b7 : 28210000; +52b8 : 78020001; +52b9 : 3842BFCC; +52ba : 00A60010; +52bb : 58410000; +52bc : 78020001; +52bd : 3842C298; +52be : 20C6003F; +52bf : 00A50018; +52c0 : 58460000; +52c1 : 78020001; +52c2 : 3842C290; +52c3 : 20A50007; +52c4 : 58450000; +52c5 : 78050001; +52c6 : 38A5BFD8; +52c7 : 58AB0000; +52c8 : 58A0000C; +52c9 : 58800040; +52ca : 58800044; +52cb : 58800000; +52cc : 58800028; +52cd : 58800024; +52ce : 58800004; +52cf : 78030001; +52d0 : 58800020; +52d1 : 340203E8; +52d2 : 38638F34; +52d3 : 58820048; +52d4 : 28620000; +52d5 : 5820001C; +52d6 : 58220000; +52d7 : 34010004; +52d8 : 5D610004; +52d9 : 34010007; +52da : 58A10004; +52db : E0000006; +52dc : 34010009; +52dd : 58A10004; +52de : 34010003; +52df : 5D610002; +52e0 : BA003000; +52e1 : 78010001; +52e2 : B8C01000; +52e3 : 3821BFF0; +52e4 : 780D0001; +52e5 : FBFFFC9D; +52e6 : 39ADC298; +52e7 : 29A30000; +52e8 : 78010001; +52e9 : 3821C060; +52ea : BA001000; +52eb : 780F0001; +52ec : 780E0001; +52ed : FBFFFD18; +52ee : 340C0000; +52ef : 39EFC290; +52f0 : 39CEBFD8; +52f1 : 34130001; +52f2 : E000000C; +52f3 : 0991007C; +52f4 : 29A40000; +52f5 : BA001000; +52f6 : B5D10800; +52f7 : 34840001; +52f8 : B48C1800; +52f9 : 34210104; +52fa : B5D18800; +52fb : FBFFFD0A; +52fc : 358C0001; +52fd : 5A3300FC; +52fe : 29E10000; +52ff : 3421FFFF; +5300 : 482CFFF3; +5301 : 34010002; +5302 : 5D610006; +5303 : 78010001; +5304 : 3821BFCC; +5305 : 28210000; +5306 : 3402000C; +5307 : 5822001C; +5308 : 780E0001; +5309 : 780D0001; +530a : 340C0000; +530b : 39CEC298; +530c : 39ADBFD8; +530d : E0000008; +530e : 3D810005; +530f : B9801000; +5310 : B5A10800; +5311 : 342101F4; +5312 : 34030200; +5313 : FBFFFDF2; +5314 : 358C0001; +5315 : 29C20000; +5316 : 484CFFF8; +5317 : 34010001; +5318 : 5D610017; +5319 : 78010001; +531a : 3821BFB8; +531b : 28210000; +531c : 28210004; +531d : 20210002; +531e : 44200021; +531f : 78010001; +5320 : 78040001; +5321 : 3821BFD8; +5322 : 3884BFF0; +5323 : 58240068; +5324 : 78040001; +5325 : 3884C060; +5326 : 5824006C; +5327 : 78010001; +5328 : 3821C290; +5329 : 28240000; +532a : 78010001; +532b : 3821C040; +532c : B4441000; +532d : BA401800; +532e : FBFFFB35; +532f : 78010001; +5330 : 3821BFB8; +5331 : 28210000; +5332 : 78020002; +5333 : E0000003; +5334 : 2823007C; +5335 : 5B83002C; +5336 : 28230080; +5337 : A0621800; +5338 : 4460FFFC; +5339 : 34020001; +533a : 58220064; +533b : 28220028; +533c : 38420001; +533d : 58220028; +533e : FBFFAD3D; +533f : 2B9D0004; +5340 : 2B8B0028; +5341 : 2B8C0024; +5342 : 2B8D0020; +5343 : 2B8E001C; +5344 : 2B8F0018; +5345 : 2B900014; +5346 : 2B910010; +5347 : 2B92000C; +5348 : 2B930008; +5349 : 379C002C; +534a : C3A00000; +534b : 379CFFFC; +534c : 5B9D0004; +534d : 78020001; +534e : 3842BFD8; +534f : 28430004; +5350 : 64240000; +5351 : 7C630008; +5352 : B8831800; +5353 : 5C600006; +5354 : 3421FFFF; +5355 : 0821007C; +5356 : B4410800; +5357 : 34210104; +5358 : FBFFFCD3; +5359 : 2B9D0004; +535a : 379C0004; +535b : C3A00000; +535c : 379CFFFC; +535d : 5B9D0004; +535e : 44200008; +535f : 3421FFFF; +5360 : 0821007C; +5361 : 78020001; +5362 : 3842BFD8; +5363 : B4220800; +5364 : 34210104; +5365 : FBFFFCE8; +5366 : 2B9D0004; +5367 : 379C0004; +5368 : C3A00000; +5369 : 78020001; +536a : B8201800; +536b : 3842BFD8; +536c : 5C200004; +536d : 28410004; +536e : 64210008; +536f : C3A00000; +5370 : 28450004; +5371 : 34040008; +5372 : 34010000; +5373 : 5CA40006; +5374 : 3463FFFF; +5375 : 0863007C; +5376 : B4431000; +5377 : 2841013C; +5378 : 7C210000; +5379 : C3A00000; +537a : 379CFFE8; +537b : 5B8B0018; +537c : 5B8C0014; +537d : 5B8D0010; +537e : 5B8E000C; +537f : 5B8F0008; +5380 : 5B9D0004; +5381 : 3403FFFF; +5382 : B8407800; +5383 : 5C230016; +5384 : 34010000; +5385 : 780C0001; +5386 : 780D0001; +5387 : FBFFFE14; +5388 : 340B0000; +5389 : 398CC290; +538a : 39ADBFD8; +538b : 340E0004; +538c : E0000009; +538d : 0961007C; +538e : B5A10800; +538f : 282100FC; +5390 : 5C2E0004; +5391 : 35610001; +5392 : B9E01000; +5393 : FBFFFE08; +5394 : 356B0001; +5395 : 29810000; +5396 : 3421FFFF; +5397 : 482BFFF6; +5398 : E0000002; +5399 : FBFFFE02; +539a : 2B9D0004; +539b : 2B8B0018; +539c : 2B8C0014; +539d : 2B8D0010; +539e : 2B8E000C; +539f : 2B8F0008; +53a0 : 379C0018; +53a1 : C3A00000; +53a2 : 379CFFF0; +53a3 : 5B8B0010; +53a4 : 5B8C000C; +53a5 : 5B8D0008; +53a6 : 5B9D0004; +53a7 : 780B0001; +53a8 : B8406800; +53a9 : B8606000; +53aa : 396BC060; +53ab : 44200007; +53ac : 3421FFFF; +53ad : 082B007C; +53ae : 78010001; +53af : 3821BFD8; +53b0 : B5610800; +53b1 : 342B0104; +53b2 : 45A0000B; +53b3 : 2962005C; +53b4 : 34041F40; +53b5 : 34030000; +53b6 : 3C420001; +53b7 : 1441001F; +53b8 : F800032B; +53b9 : 3C210012; +53ba : 0044000E; +53bb : B8242000; +53bc : 59A40000; +53bd : 4580000B; +53be : 29620058; +53bf : 34030000; +53c0 : 34041F40; +53c1 : 3C420001; +53c2 : 1441001F; +53c3 : F8000320; +53c4 : 3C210012; +53c5 : 0042000E; +53c6 : B8221000; +53c7 : 59820000; +53c8 : 2B9D0004; +53c9 : 2B8B0010; +53ca : 2B8C000C; +53cb : 2B8D0008; +53cc : 379C0010; +53cd : C3A00000; +53ce : 379CFFF0; +53cf : 5B8B0010; +53d0 : 5B8C000C; +53d1 : 5B8D0008; +53d2 : 5B9D0004; +53d3 : B8205800; +53d4 : B8406800; +53d5 : 78010001; +53d6 : 3D620005; +53d7 : 3821BFD8; +53d8 : B4220800; +53d9 : 2824020C; +53da : B8606000; +53db : 4C800003; +53dc : 34844000; +53dd : E0000004; +53de : 34013FFF; +53df : 4C240002; +53e0 : 3484C000; +53e1 : 3C840001; +53e2 : 34010000; +53e3 : 20823FFE; +53e4 : 34030000; +53e5 : 34041F40; +53e6 : F80002FD; +53e7 : 3C210012; +53e8 : 0044000E; +53e9 : B8242000; +53ea : 59A40000; +53eb : 4580000C; +53ec : 78010001; +53ed : 3821BF98; +53ee : 28220000; +53ef : 3D630005; +53f0 : 78010001; +53f1 : 3821BFD8; +53f2 : B4230800; +53f3 : 282101F8; +53f4 : 94410800; +53f5 : 20210001; +53f6 : 59810000; +53f7 : 3D6B0005; +53f8 : 78020001; +53f9 : 3842BFD8; +53fa : B44B1000; +53fb : 28410210; +53fc : 2B9D0004; +53fd : 2B8B0010; +53fe : 2B8C000C; +53ff : 2B8D0008; +5400 : 379C0010; +5401 : C3A00000; +5402 : 44200005; +5403 : 78030001; +5404 : 3863C298; +5405 : 28630000; +5406 : 58230000; +5407 : 44400005; +5408 : 78010001; +5409 : 3821C290; +540a : 28210000; +540b : 58410000; +540c : C3A00000; +540d : 379CFFF4; +540e : 5B9D000C; +540f : 78010001; +5410 : 3821BFD8; +5411 : 28230004; +5412 : 78020001; +5413 : 384294AC; +5414 : 3C630002; +5415 : B4431000; +5416 : 28430000; +5417 : 28220004; +5418 : 3401000A; +5419 : 54410002; +541a : E0000003; +541b : 78030001; +541c : 38638DF4; +541d : 78010001; +541e : 3821BFD8; +541f : 28220000; +5420 : 4C02000E; +5421 : 28220010; +5422 : 28240000; +5423 : 28250074; +5424 : 28260060; +5425 : 282700C0; +5426 : 2828004C; +5427 : 282900AC; +5428 : 2821000C; +5429 : 5B890004; +542a : 5B810008; +542b : 78010001; +542c : 38218E00; +542d : FBFFE3F1; +542e : 2B9D000C; +542f : 379C000C; +5430 : C3A00000; +5431 : 379CFFFC; +5432 : 5B9D0004; +5433 : 5C200004; +5434 : 78010001; +5435 : 3821C060; +5436 : E0000007; +5437 : 3421FFFF; +5438 : 0821007C; +5439 : 78020001; +543a : 3842BFD8; +543b : B4220800; +543c : 34210104; +543d : FBFFFCC4; +543e : 2B9D0004; +543f : 379C0004; +5440 : C3A00000; +5441 : 379CFFF0; +5442 : 5B8B0010; +5443 : 5B8C000C; +5444 : 5B8D0008; +5445 : 5B9D0004; +5446 : 780D0001; +5447 : 780B0001; +5448 : B8206000; +5449 : 39ADBFD8; +544a : 396BBF98; +544b : 4440000D; +544c : 34020001; +544d : FBFFF9DB; +544e : 3D810005; +544f : B5A16800; +5450 : 35A101F4; +5451 : FBFFFCBB; +5452 : 29610000; +5453 : 34020001; +5454 : BC4C6000; +5455 : B9816000; +5456 : 596C0000; +5457 : E000000A; +5458 : 34030001; +5459 : 29640000; +545a : BC611800; +545b : A4601800; +545c : A0641800; +545d : 59630000; +545e : 29A300E8; +545f : 44230002; +5460 : FBFFF9C8; +5461 : 2B9D0004; +5462 : 2B8B0010; +5463 : 2B8C000C; +5464 : 2B8D0008; +5465 : 379C0010; +5466 : C3A00000; +5467 : 0821007C; +5468 : 78020001; +5469 : 3842BFD8; +546a : B4411000; +546b : 284100FC; +546c : 284300FC; +546d : 34020004; +546e : 7C210001; +546f : 5C620002; +5470 : 38210002; +5471 : C3A00000; +5472 : 4C200005; +5473 : 78010001; +5474 : 3821BFD8; +5475 : 2821004C; +5476 : C3A00000; +5477 : 78020001; +5478 : 3842BFD8; +5479 : 5C200003; +547a : 284100AC; +547b : C3A00000; +547c : 3421FFFF; +547d : 0821007C; +547e : B4411000; +547f : 28410128; +5480 : C3A00000; +5481 : 78030001; +5482 : 3863BFB8; +5483 : 4C200007; +5484 : 78010001; +5485 : 3821BFD8; +5486 : 5822004C; +5487 : 28610000; +5488 : 58220040; +5489 : C3A00000; +548a : 2024000F; +548b : 28630000; +548c : 3C840010; +548d : 2045FFFF; +548e : B8A42000; +548f : 58640044; +5490 : 78030001; +5491 : 3863BFD8; +5492 : 5C200003; +5493 : 586200AC; +5494 : C3A00000; +5495 : 3421FFFF; +5496 : 0821007C; +5497 : B4611800; +5498 : 58620128; +5499 : C3A00000; +549a : 379CFFCC; +549b : 5B8B0034; +549c : 5B8C0030; +549d : 5B8D002C; +549e : 5B8E0028; +549f : 5B8F0024; +54a0 : 5B900020; +54a1 : 5B91001C; +54a2 : 5B920018; +54a3 : 5B930014; +54a4 : 5B940010; +54a5 : 5B95000C; +54a6 : 5B960008; +54a7 : 5B9D0004; +54a8 : 78010001; +54a9 : 3821BFD8; +54aa : 28220000; +54ab : 34010001; +54ac : 34140000; +54ad : 5C410005; +54ae : 78010001; +54af : 3821C040; +54b0 : FBFFFA00; +54b1 : B820A000; +54b2 : 78110001; +54b3 : 780B0001; +54b4 : 780E0001; +54b5 : 340D0000; +54b6 : 340C0001; +54b7 : 3A31C290; +54b8 : 396BBFD8; +54b9 : 340F0001; +54ba : 39CEBFB8; +54bb : 34120002; +54bc : 34160003; +54bd : 34150004; +54be : E0000047; +54bf : 3593FFFF; +54c0 : 0A70007C; +54c1 : B5708000; +54c2 : 2A0100FC; +54c3 : 442F000F; +54c4 : 29C10000; +54c5 : BDEC1000; +54c6 : 28210020; +54c7 : 00210008; +54c8 : 202100FF; +54c9 : A0220800; +54ca : 5C200008; +54cb : B9800800; +54cc : FBFFFE90; +54cd : B9800800; +54ce : 34020000; +54cf : FBFFFC94; +54d0 : 35AD0001; +54d1 : 5A0F00FC; +54d2 : 0A61007C; +54d3 : B5618000; +54d4 : 2A0200FC; +54d5 : 44520014; +54d6 : 48520003; +54d7 : 5C4F002D; +54d8 : E0000004; +54d9 : 44560017; +54da : 5C55002A; +54db : E000001E; +54dc : 296100C0; +54dd : 44200027; +54de : 29C10000; +54df : BDEC1000; +54e0 : 28210020; +54e1 : 00210008; +54e2 : 202100FF; +54e3 : A0220800; +54e4 : 44200020; +54e5 : B9800800; +54e6 : FBFFFE65; +54e7 : 5A1200FC; +54e8 : E000001B; +54e9 : 2A01013C; +54ea : 4420001A; +54eb : 29620014; +54ec : B9800800; +54ed : FBFFFCAE; +54ee : 5A1600FC; +54ef : E0000014; +54f0 : B5610800; +54f1 : 34210104; +54f2 : FBFFFC0F; +54f3 : 5C200011; +54f4 : B9800800; +54f5 : 34020001; +54f6 : FBFFFC6D; +54f7 : 5A1500FC; +54f8 : E000000B; +54f9 : 296100C0; +54fa : 44200003; +54fb : 2A01013C; +54fc : 5C200008; +54fd : 0A73007C; +54fe : B9800800; +54ff : 34020000; +5500 : B5739800; +5501 : FBFFFC62; +5502 : 5A6F00FC; +5503 : 35AD0001; +5504 : 358C0001; +5505 : 2A210000; +5506 : 482CFFB9; +5507 : 29630000; +5508 : 78020001; +5509 : 3842AD84; +550a : 5843000C; +550b : 29630010; +550c : 28410008; +550d : 7DAD0000; +550e : 58430010; +550f : 29630004; +5510 : 34210002; +5511 : B5B4A000; +5512 : 58430014; +5513 : 29630074; +5514 : 58410008; +5515 : 7E810000; +5516 : 58430018; +5517 : 29630060; +5518 : 5843001C; +5519 : 296300C0; +551a : 58430020; +551b : 2963004C; +551c : 58430024; +551d : 296300AC; +551e : 58430028; +551f : 2963000C; +5520 : 5843002C; +5521 : 2B9D0004; +5522 : 2B8B0034; +5523 : 2B8C0030; +5524 : 2B8D002C; +5525 : 2B8E0028; +5526 : 2B8F0024; +5527 : 2B900020; +5528 : 2B91001C; +5529 : 2B920018; +552a : 2B930014; +552b : 2B940010; +552c : 2B95000C; +552d : 2B960008; +552e : 379C0034; +552f : C3A00000; +5530 : 379CFFF8; +5531 : 5B8B0008; +5532 : 5B9D0004; +5533 : FBFFAB3F; +5534 : 34020000; +5535 : 3401FFFF; +5536 : FBFFFF4B; +5537 : 34010001; +5538 : FBFFFC40; +5539 : 380BFFFF; +553a : B9601000; +553b : 3401FFFF; +553c : FBFFFF45; +553d : 34010001; +553e : FBFFFC3A; +553f : 34020000; +5540 : 34010000; +5541 : FBFFFF40; +5542 : 34010000; +5543 : FBFFFC35; +5544 : B9601000; +5545 : 34010000; +5546 : FBFFFF3B; +5547 : 34010000; +5548 : FBFFFC30; +5549 : 34010002; +554a : FBFFFC2E; +554b : 2B9D0004; +554c : 2B8B0008; +554d : 379C0008; +554e : C3A00000; +554f : C3A00000; +5550 : C3A00000; +5551 : 379CFFF8; +5552 : 5B8B0008; +5553 : 5B9D0004; +5554 : 28240014; +5555 : B8201800; +5556 : B8403000; +5557 : 44800015; +5558 : 28250010; +5559 : 20A50002; +555a : 5CA00007; +555b : B4862000; +555c : B8800800; +555d : 2B9D0004; +555e : 2B8B0008; +555f : 379C0008; +5560 : C3A00000; +5561 : 346B0030; +5562 : B4861000; +5563 : B9600800; +5564 : 34030040; +5565 : F8000271; +5566 : B9602000; +5567 : B8800800; +5568 : 2B9D0004; +5569 : 2B8B0008; +556a : 379C0008; +556b : C3A00000; +556c : 28250010; +556d : 20A70004; +556e : 5CE4FFEB; +556f : 2825001C; +5570 : 34040000; +5571 : 44A7FFEB; +5572 : 342B0030; +5573 : 34040040; +5574 : B9601800; +5575 : D8A00000; +5576 : B9602000; +5577 : E3FFFFF0; +5578 : 379CFFF4; +5579 : 5B8B0008; +557a : 5B9D0004; +557b : 28220014; +557c : B8205800; +557d : 44400013; +557e : 2961000C; +557f : B4411000; +5580 : 28430000; +5581 : 78040001; +5582 : 38848F48; +5583 : 28820000; +5584 : 3401FFEC; +5585 : 5C620007; +5586 : 78020001; +5587 : 3842BF9C; +5588 : 28430000; +5589 : 34010000; +558a : 584B0000; +558b : 5963007C; +558c : 2B9D0004; +558d : 2B8B0008; +558e : 379C000C; +558f : C3A00000; +5590 : 28230010; +5591 : 20630004; +5592 : 5C62FFEC; +5593 : 2825001C; +5594 : 2822000C; +5595 : 3783000C; +5596 : 34040004; +5597 : D8A00000; +5598 : 2B83000C; +5599 : E3FFFFE8; +559a : 379CFFF0; +559b : 5B8B0010; +559c : 5B8C000C; +559d : 5B8D0008; +559e : 5B9D0004; +559f : B8205800; +55a0 : 44400047; +55a1 : 2822000C; +55a2 : 58200080; +55a3 : 582000B0; +55a4 : 58220090; +55a5 : 340C0000; +55a6 : B9600800; +55a7 : FBFFFFAA; +55a8 : 59610028; +55a9 : 4022003F; +55aa : 5C400006; +55ab : 78040001; +55ac : 38848F48; +55ad : 28230000; +55ae : 28820000; +55af : 4462005D; +55b0 : 34010000; +55b1 : 45800030; +55b2 : 3583FFFF; +55b3 : 346C0028; +55b4 : B58C0800; +55b5 : B4210800; +55b6 : B5610800; +55b7 : 28220000; +55b8 : 5C40000F; +55b9 : 34010000; +55ba : 44620027; +55bb : 34620027; +55bc : B4421000; +55bd : B4421000; +55be : B5621000; +55bf : E0000002; +55c0 : 44610044; +55c1 : 28410000; +55c2 : 3463FFFF; +55c3 : 3442FFFC; +55c4 : 4420FFFC; +55c5 : 596300B0; +55c6 : 346C0028; +55c7 : 346D0024; +55c8 : B5AD6800; +55c9 : B5AD6800; +55ca : B56D6800; +55cb : 29A20000; +55cc : B9600800; +55cd : B58C6000; +55ce : FBFFFF83; +55cf : B58C6000; +55d0 : B56C1000; +55d1 : 29A40000; +55d2 : 28430000; +55d3 : 296C00B0; +55d4 : 34840040; +55d5 : 3463FFFF; +55d6 : 59610028; +55d7 : 59A40000; +55d8 : 58430000; +55d9 : 35830020; +55da : B4631800; +55db : B4631800; +55dc : B5631800; +55dd : 2824000C; +55de : 28620000; +55df : B4441000; +55e0 : 59620074; +55e1 : 2B9D0004; +55e2 : 2B8B0010; +55e3 : 2B8C000C; +55e4 : 2B8D0008; +55e5 : 379C0010; +55e6 : C3A00000; +55e7 : 28210028; +55e8 : 296300B0; +55e9 : 34050002; +55ea : 4024003F; +55eb : ECA32800; +55ec : 64840002; +55ed : A0852000; +55ee : 4482FFC5; +55ef : 34620020; +55f0 : B4421000; +55f1 : B4421000; +55f2 : B5621000; +55f3 : 28450000; +55f4 : 34640025; +55f5 : 28220004; +55f6 : B4842000; +55f7 : B4842000; +55f8 : B4A21000; +55f9 : B5642000; +55fa : 58820000; +55fb : 2824000C; +55fc : 34610021; +55fd : B4210800; +55fe : B4210800; +55ff : B5610800; +5600 : B4852800; +5601 : 346C0001; +5602 : 58250000; +5603 : E3FFFFA3; +5604 : 34010000; +5605 : 596000B0; +5606 : 2B9D0004; +5607 : 2B8B0010; +5608 : 2B8C000C; +5609 : 2B8D0008; +560a : 379C0010; +560b : C3A00000; +560c : 35820024; +560d : B4421000; +560e : B4421000; +560f : B5621800; +5610 : 2C250004; +5611 : 28640000; +5612 : 35820028; +5613 : B4421000; +5614 : B4421000; +5615 : B5621000; +5616 : 34A5FFFF; +5617 : 34840040; +5618 : 58450000; +5619 : 58640000; +561a : 596C00B0; +561b : E3FFFFBE; +561c : 379CFFEC; +561d : 5B8B0014; +561e : 5B8C0010; +561f : 5B8D000C; +5620 : 5B8E0008; +5621 : 5B9D0004; +5622 : B8406000; +5623 : 34020001; +5624 : B8205800; +5625 : B8607000; +5626 : B8806800; +5627 : FBFFFF73; +5628 : B9600800; +5629 : 34020000; +562a : FBFFFF70; +562b : B8202800; +562c : 4420001E; +562d : 28A10018; +562e : 5C2CFFFA; +562f : 28A1001C; +5630 : 5C2EFFF8; +5631 : 28A10020; +5632 : 5C2DFFF6; +5633 : 296100B0; +5634 : 59650028; +5635 : 28A2000C; +5636 : 34210020; +5637 : B4210800; +5638 : B4210800; +5639 : B5610800; +563a : 28230000; +563b : 34010000; +563c : B4431800; +563d : 59630074; +563e : 28A30014; +563f : 59600078; +5640 : 34630001; +5641 : C8621000; +5642 : 59620070; +5643 : 2B9D0004; +5644 : 2B8B0014; +5645 : 2B8C0010; +5646 : 2B8D000C; +5647 : 2B8E0008; +5648 : 379C0014; +5649 : C3A00000; +564a : 3401FFFE; +564b : E3FFFFF8; +564c : 58200028; +564d : 34010000; +564e : C3A00000; +564f : 379CFFF8; +5650 : 5B8B0008; +5651 : 5B9D0004; +5652 : B8205800; +5653 : FBFFFFC9; +5654 : 4C200005; +5655 : 2B9D0004; +5656 : 2B8B0008; +5657 : 379C0008; +5658 : C3A00000; +5659 : 29610074; +565a : 59600028; +565b : 2B9D0004; +565c : 2B8B0008; +565d : 379C0008; +565e : C3A00000; +565f : 379CFFF0; +5660 : 5B8B0010; +5661 : 5B8C000C; +5662 : 5B8D0008; +5663 : 5B9D0004; +5664 : 28250028; +5665 : B8205800; +5666 : B8406000; +5667 : B8806800; +5668 : 3401FFFE; +5669 : 44A00012; +566a : 4C400002; +566b : 296C0078; +566c : 29610070; +566d : B58D1000; +566e : 54410013; +566f : 29640014; +5670 : 44800014; +5671 : 29620074; +5672 : B8600800; +5673 : B9A01800; +5674 : B5821000; +5675 : B4821000; +5676 : F8000160; +5677 : B9A00800; +5678 : 4C010003; +5679 : B42C6000; +567a : 596C0078; +567b : 2B9D0004; +567c : 2B8B0010; +567d : 2B8C000C; +567e : 2B8D0008; +567f : 379C0010; +5680 : C3A00000; +5681 : 29640014; +5682 : C82C6800; +5683 : 5C80FFEE; +5684 : 29620074; +5685 : 2965001C; +5686 : B9600800; +5687 : B5821000; +5688 : B9A02000; +5689 : D8A00000; +568a : E3FFFFEE; +568b : 379CFFF0; +568c : 5B8B0010; +568d : 5B8C000C; +568e : 5B8D0008; +568f : 5B9D0004; +5690 : 28250028; +5691 : B8205800; +5692 : B8406000; +5693 : B8806800; +5694 : 3401FFFE; +5695 : 44A00012; +5696 : 4C400002; +5697 : 296C0078; +5698 : 29610070; +5699 : B58D1000; +569a : 54410013; +569b : 29640014; +569c : 44800014; +569d : 29610074; +569e : B8601000; +569f : B9A01800; +56a0 : B5810800; +56a1 : B4810800; +56a2 : F8000134; +56a3 : B9A00800; +56a4 : 4C010003; +56a5 : B42C6000; +56a6 : 596C0078; +56a7 : 2B9D0004; +56a8 : 2B8B0010; +56a9 : 2B8C000C; +56aa : 2B8D0008; +56ab : 379C0010; +56ac : C3A00000; +56ad : 29640014; +56ae : C82C6800; +56af : 5C80FFEE; +56b0 : 29620074; +56b1 : 29650020; +56b2 : B9600800; +56b3 : B5821000; +56b4 : B9A02000; +56b5 : D8A00000; +56b6 : E3FFFFEE; +56b7 : 379CFFF0; +56b8 : 5B8B0010; +56b9 : 5B8C000C; +56ba : 5B8D0008; +56bb : 5B9D0004; +56bc : 28240028; +56bd : B8205800; +56be : B8406000; +56bf : B8606800; +56c0 : 3401FFFE; +56c1 : 44800012; +56c2 : 4C400002; +56c3 : 296C0078; +56c4 : 29610070; +56c5 : B58D1000; +56c6 : 54410013; +56c7 : 29640014; +56c8 : 44800014; +56c9 : 29610074; +56ca : 340200FF; +56cb : B9A01800; +56cc : B5810800; +56cd : B4810800; +56ce : F8000186; +56cf : B9A00800; +56d0 : 4C010003; +56d1 : B42C6000; +56d2 : 596C0078; +56d3 : 2B9D0004; +56d4 : 2B8B0010; +56d5 : 2B8C000C; +56d6 : 2B8D0008; +56d7 : 379C0010; +56d8 : C3A00000; +56d9 : 29640014; +56da : C82C6800; +56db : 5C80FFEE; +56dc : 29620074; +56dd : 29640024; +56de : B9600800; +56df : B5821000; +56e0 : B9A01800; +56e1 : D8800000; +56e2 : E3FFFFEE; +56e3 : 2045FFFF; +56e4 : 00460010; +56e5 : 2088FFFF; +56e6 : 00890010; +56e7 : 89053800; +56e8 : 89064000; +56e9 : 89252800; +56ea : 00EA0010; +56eb : 89263000; +56ec : B5052800; +56ed : B4AA2800; +56ee : 50A80003; +56ef : 78080001; +56f0 : B4C83000; +56f1 : 88431000; +56f2 : 88812000; +56f3 : 00A10010; +56f4 : 3CA50010; +56f5 : B4C13000; +56f6 : 20E7FFFF; +56f7 : B4440800; +56f8 : B4260800; +56f9 : B4A71000; +56fa : C3A00000; +56fb : 44600008; +56fc : 34040020; +56fd : C8832000; +56fe : 48800006; +56ff : C8041000; +5700 : 34030000; +5701 : 80221000; +5702 : B8600800; +5703 : C3A00000; +5704 : BC242000; +5705 : 80431000; +5706 : 80231800; +5707 : B8821000; +5708 : B8600800; +5709 : E3FFFFFA; +570a : 44600008; +570b : 34040020; +570c : C8832000; +570d : 48800006; +570e : C8040800; +570f : 34030000; +5710 : BC410800; +5711 : B8601000; +5712 : C3A00000; +5713 : 80442000; +5714 : BC230800; +5715 : BC431800; +5716 : B8810800; +5717 : B8601000; +5718 : E3FFFFFA; +5719 : 44600008; +571a : 34040020; +571b : C8832000; +571c : 48800006; +571d : 1423001F; +571e : C8041000; +571f : 94221000; +5720 : B8600800; +5721 : C3A00000; +5722 : BC242000; +5723 : 80431000; +5724 : 94231800; +5725 : B8821000; +5726 : B8600800; +5727 : E3FFFFFA; +5728 : 379CFFF8; +5729 : 5B8B0008; +572a : 5B9D0004; +572b : 44400022; +572c : B8412000; +572d : 3403000F; +572e : 5483000B; +572f : 78030001; +5730 : 386394D8; +5731 : 3C210004; +5732 : B4621000; +5733 : B4410800; +5734 : 40210000; +5735 : 2B9D0004; +5736 : 2B8B0008; +5737 : 379C0008; +5738 : C3A00000; +5739 : 340B0000; +573a : 4C200003; +573b : C8010800; +573c : 340B0001; +573d : 4C400003; +573e : C8021000; +573f : 196B0001; +5740 : 90C01800; +5741 : 20630002; +5742 : 44600008; +5743 : 8C220800; +5744 : 45600002; +5745 : C8010800; +5746 : 2B9D0004; +5747 : 2B8B0008; +5748 : 379C0008; +5749 : C3A00000; +574a : 34030000; +574b : F800004A; +574c : E3FFFFF8; +574d : 90000800; +574e : 20210001; +574f : 3C210001; +5750 : D0010000; +5751 : 90E00800; +5752 : BBA0F000; +5753 : 342100A0; +5754 : C0200000; +5755 : 379CFFF8; +5756 : 5B8B0008; +5757 : 5B9D0004; +5758 : 44400015; +5759 : 340B0000; +575a : 4C200003; +575b : C8010800; +575c : 340B0001; +575d : 1443001F; +575e : 90C02000; +575f : 98621000; +5760 : 20840002; +5761 : C8431000; +5762 : 44800008; +5763 : C4220800; +5764 : 45600002; +5765 : C8010800; +5766 : 2B9D0004; +5767 : 2B8B0008; +5768 : 379C0008; +5769 : C3A00000; +576a : 34030001; +576b : F800002A; +576c : E3FFFFF8; +576d : 90000800; +576e : 20210001; +576f : 3C210001; +5770 : D0010000; +5771 : 90E00800; +5772 : BBA0F000; +5773 : 342100A0; +5774 : C0200000; +5775 : 379CFFFC; +5776 : 5B9D0004; +5777 : 44400006; +5778 : 34030000; +5779 : F800001C; +577a : 2B9D0004; +577b : 379C0004; +577c : C3A00000; +577d : 90000800; +577e : 20210001; +577f : 3C210001; +5780 : D0010000; +5781 : 90E00800; +5782 : BBA0F000; +5783 : 342100A0; +5784 : C0200000; +5785 : 379CFFFC; +5786 : 5B9D0004; +5787 : 44400006; +5788 : 34030001; +5789 : F800000C; +578a : 2B9D0004; +578b : 379C0004; +578c : C3A00000; +578d : 90000800; +578e : 20210001; +578f : 3C210001; +5790 : D0010000; +5791 : 90E00800; +5792 : BBA0F000; +5793 : 342100A0; +5794 : C0200000; +5795 : F4222000; +5796 : 44800018; +5797 : 34040001; +5798 : 4C40000B; +5799 : 34050000; +579a : 54410003; +579b : C8220800; +579c : B8A42800; +579d : 00840001; +579e : 00420001; +579f : 5C80FFFB; +57a0 : 5C600002; +57a1 : B8A00800; +57a2 : C3A00000; +57a3 : 3C420001; +57a4 : 3C840001; +57a5 : F4222800; +57a6 : 7C860000; +57a7 : A0C52800; +57a8 : 44A00002; +57a9 : 4C40FFFA; +57aa : 34050000; +57ab : 4480FFF5; +57ac : 34050000; +57ad : E3FFFFED; +57ae : 34040001; +57af : 34050000; +57b0 : E3FFFFEA; +57b1 : 1422001F; +57b2 : 98410800; +57b3 : C8220800; +57b4 : C3A00000; +57b5 : 34060003; +57b6 : B8202000; +57b7 : B8402800; +57b8 : 50C3000C; +57b9 : B8413000; +57ba : 20C60003; +57bb : 5CC0000B; +57bc : 34010003; +57bd : 28860000; +57be : 28A20000; +57bf : 5CC20005; +57c0 : 3463FFFC; +57c1 : 34840004; +57c2 : 34A50004; +57c3 : 5461FFFA; +57c4 : 34010000; +57c5 : 4460000E; +57c6 : 40860000; +57c7 : 40A10000; +57c8 : 3462FFFF; +57c9 : 44C10006; +57ca : E000000A; +57cb : 40860000; +57cc : 40A10000; +57cd : 3442FFFF; +57ce : 5CC10006; +57cf : 34840001; +57d0 : 34A50001; +57d1 : 5C40FFFA; +57d2 : 34010000; +57d3 : C3A00000; +57d4 : C8C10800; +57d5 : C3A00000; +57d6 : 3404000F; +57d7 : B8203800; +57d8 : B8403000; +57d9 : 5083002D; +57da : B8412000; +57db : 20840003; +57dc : 5C80002B; +57dd : B8402000; +57de : B8202800; +57df : B8603000; +57e0 : 3407000F; +57e1 : 28880000; +57e2 : 34C6FFF0; +57e3 : 58A80000; +57e4 : 28880004; +57e5 : 58A80004; +57e6 : 28880008; +57e7 : 58A80008; +57e8 : 2888000C; +57e9 : 34840010; +57ea : 58A8000C; +57eb : 34A50010; +57ec : 54C7FFF5; +57ed : 3463FFF0; +57ee : 00660004; +57ef : 2063000F; +57f0 : 34C60001; +57f1 : 3CC60004; +57f2 : B4263800; +57f3 : B4463000; +57f4 : 34020003; +57f5 : 50430011; +57f6 : 34020000; +57f7 : 34080003; +57f8 : B4C22000; +57f9 : 28850000; +57fa : B4E22000; +57fb : 34420004; +57fc : 58850000; +57fd : C8622000; +57fe : 5488FFFA; +57ff : 3463FFFC; +5800 : 00620002; +5801 : 20630003; +5802 : 34420001; +5803 : 3C420002; +5804 : B4E23800; +5805 : B4C23000; +5806 : 44600008; +5807 : 34020000; +5808 : B4C22000; +5809 : 40850000; +580a : B4E22000; +580b : 34420001; +580c : 30850000; +580d : 5C43FFFB; +580e : C3A00000; +580f : B8203800; +5810 : B8403000; +5811 : 5041000C; +5812 : B4432000; +5813 : 5024000A; +5814 : 4460003F; +5815 : B4231000; +5816 : 3484FFFF; +5817 : 40850000; +5818 : 3442FFFF; +5819 : 3463FFFF; +581a : 30450000; +581b : 5C60FFFB; +581c : C3A00000; +581d : 3404000F; +581e : 5083002D; +581f : B8412000; +5820 : 20840003; +5821 : 5C80002B; +5822 : B8402000; +5823 : B8202800; +5824 : B8603000; +5825 : 3407000F; +5826 : 28880000; +5827 : 34C6FFF0; +5828 : 58A80000; +5829 : 28880004; +582a : 58A80004; +582b : 28880008; +582c : 58A80008; +582d : 2888000C; +582e : 34840010; +582f : 58A8000C; +5830 : 34A50010; +5831 : 54C7FFF5; +5832 : 3463FFF0; +5833 : 00660004; +5834 : 2063000F; +5835 : 34C60001; +5836 : 3CC60004; +5837 : B4263800; +5838 : B4463000; +5839 : 34020003; +583a : 50430011; +583b : 34020000; +583c : 34080003; +583d : B4C22000; +583e : 28850000; +583f : B4E22000; +5840 : 34420004; +5841 : 58850000; +5842 : C8622000; +5843 : 5488FFFA; +5844 : 3463FFFC; +5845 : 00620002; +5846 : 20630003; +5847 : 34420001; +5848 : 3C420002; +5849 : B4E23800; +584a : B4C23000; +584b : 44600008; +584c : 34020000; +584d : B4C22000; +584e : 40850000; +584f : B4E22000; +5850 : 34420001; +5851 : 30850000; +5852 : 5C43FFFB; +5853 : C3A00000; +5854 : 20250003; +5855 : B8202000; +5856 : 44A0000B; +5857 : 4460002C; +5858 : 3463FFFF; +5859 : 204600FF; +585a : E0000003; +585b : 44600028; +585c : 3463FFFF; +585d : 30860000; +585e : 34840001; +585f : 20850003; +5860 : 5CA0FFFB; +5861 : 34050003; +5862 : 50A3001A; +5863 : 204500FF; +5864 : 3CA60008; +5865 : 340A000F; +5866 : B8C52800; +5867 : 3CA60010; +5868 : B8804000; +5869 : B8C53000; +586a : B8603800; +586b : B8802800; +586c : 3409000F; +586d : 546A0017; +586e : 34040000; +586f : 34070003; +5870 : B5042800; +5871 : 34840004; +5872 : 58A60000; +5873 : C8642800; +5874 : 54A7FFFC; +5875 : 3463FFFC; +5876 : 00640002; +5877 : 20630003; +5878 : 34840001; +5879 : 3C840002; +587a : B5044000; +587b : B9002000; +587c : 44600007; +587d : 204200FF; +587e : 34050000; +587f : B4853000; +5880 : 30C20000; +5881 : 34A50001; +5882 : 5C65FFFD; +5883 : C3A00000; +5884 : 58A60000; +5885 : 58A60004; +5886 : 58A60008; +5887 : 58A6000C; +5888 : 34E7FFF0; +5889 : 34A50010; +588a : 54E9FFFA; +588b : 3463FFF0; +588c : 00680004; +588d : 2063000F; +588e : 35080001; +588f : 3D080004; +5890 : B4884000; +5891 : 34040003; +5892 : 5464FFDC; +5893 : B9002000; +5894 : E3FFFFE8; +5895 : 78030001; +5896 : 3863AD80; +5897 : 28670000; +5898 : B8204800; +5899 : 34030000; +589a : 34060001; +589b : E0000009; +589c : 40840000; +589d : B4E44000; +589e : 41080001; +589f : 21080003; +58a0 : 45060012; +58a1 : C8A40800; +58a2 : 5C200013; +58a3 : 44810012; +58a4 : B5232800; +58a5 : 40A50000; +58a6 : B4432000; +58a7 : 34630001; +58a8 : B4E54000; +58a9 : 41080001; +58aa : 21080003; +58ab : 5D06FFF1; +58ac : 40840000; +58ad : 34A50020; +58ae : B4E44000; +58af : 41080001; +58b0 : 21080003; +58b1 : 5D06FFF0; +58b2 : 34840020; +58b3 : C8A40800; +58b4 : 4420FFEF; +58b5 : C3A00000; +58b6 : B8411800; +58b7 : 20630003; +58b8 : 5C60001D; +58b9 : B8202000; +58ba : 28430000; +58bb : 28210000; +58bc : 5C230018; +58bd : 78030001; +58be : 386395D8; +58bf : 28670000; +58c0 : 78030001; +58c1 : 386395DC; +58c2 : 28660000; +58c3 : A4201800; +58c4 : B4270800; +58c5 : A0231800; +58c6 : A0661800; +58c7 : 34010000; +58c8 : 44600003; +58c9 : E000001C; +58ca : 5C600019; +58cb : 34840004; +58cc : 28810000; +58cd : 34420004; +58ce : 28480000; +58cf : B4272800; +58d0 : A4201800; +58d1 : A0A31800; +58d2 : A0661800; +58d3 : 4428FFF7; +58d4 : B8800800; +58d5 : 40230000; +58d6 : 5C600006; +58d7 : E0000009; +58d8 : 34210001; +58d9 : 40230000; +58da : 34420001; +58db : 44600005; +58dc : 40440000; +58dd : 4464FFFB; +58de : C8640800; +58df : C3A00000; +58e0 : 40440000; +58e1 : C8640800; +58e2 : C3A00000; +58e3 : 34010000; +58e4 : C3A00000; +58e5 : C3A00000; +58e6 : B8412800; +58e7 : 20A50003; +58e8 : B8403800; +58e9 : B8202000; +58ea : 5CA00018; +58eb : 78040001; +58ec : 388495D8; +58ed : 28430000; +58ee : 28880000; +58ef : 78040001; +58f0 : 388495DC; +58f1 : 28870000; +58f2 : A4603000; +58f3 : B4682000; +58f4 : A0C43000; +58f5 : A0C73000; +58f6 : B8202000; +58f7 : 5CC5000A; +58f8 : 58830000; +58f9 : 34420004; +58fa : 28430000; +58fb : 34840004; +58fc : A4603000; +58fd : B4682800; +58fe : A0C52800; +58ff : A0A72800; +5900 : 44A0FFF8; +5901 : B8403800; +5902 : 34030000; +5903 : B4E32800; +5904 : 40A50000; +5905 : B4833000; +5906 : 34630001; +5907 : 30C50000; +5908 : 5CA0FFFB; +5909 : C3A00000; +590a : 20220003; +590b : 4440002C; +590c : 40230000; +590d : 34020000; +590e : 44600027; +590f : B8201000; +5910 : E0000003; +5911 : 40430000; +5912 : 44600022; +5913 : 34420001; +5914 : 20430003; +5915 : 5C60FFFC; +5916 : 78040001; +5917 : 388495D8; +5918 : 28430000; +5919 : 28860000; +591a : 78040001; +591b : 388495DC; +591c : 28850000; +591d : A4602000; +591e : B4661800; +591f : A0641800; +5920 : A0651800; +5921 : 5C600011; +5922 : 34420004; +5923 : 28430000; +5924 : B4662000; +5925 : A4601800; +5926 : A0831800; +5927 : A0651800; +5928 : 5C60000A; +5929 : 34420004; +592a : 28430000; +592b : B4662000; +592c : A4601800; +592d : A0831800; +592e : A0651800; +592f : 4460FFF3; +5930 : E0000002; +5931 : 34420001; +5932 : 40430000; +5933 : 5C60FFFE; +5934 : C8411000; +5935 : B8400800; +5936 : C3A00000; +5937 : B8201000; +5938 : E3FFFFDE; +5939 : 34060000; +593a : 44600017; +593b : B8413800; +593c : 20E70003; +593d : 3464FFFF; +593e : 44E00015; +593f : 40230000; +5940 : 40450000; +5941 : 5C65000F; +5942 : 34060000; +5943 : 4480000E; +5944 : 34210001; +5945 : 34420001; +5946 : 5C600004; +5947 : E000000A; +5948 : 44800033; +5949 : 44600032; +594a : 40230000; +594b : 40450000; +594c : 3484FFFF; +594d : 34210001; +594e : 34420001; +594f : 4465FFF9; +5950 : C8653000; +5951 : B8C00800; +5952 : C3A00000; +5953 : B8202800; +5954 : 34010003; +5955 : B8402000; +5956 : 50230028; +5957 : 28A10000; +5958 : 28420000; +5959 : 5C220025; +595a : 3463FFFC; +595b : B8E03000; +595c : 4460FFF5; +595d : 78020001; +595e : 384295D8; +595f : 28490000; +5960 : 78020001; +5961 : 384295DC; +5962 : 28480000; +5963 : A4201000; +5964 : B4290800; +5965 : A0220800; +5966 : A0280800; +5967 : 34070003; +5968 : 5C20FFE9; +5969 : 34A50004; +596a : 34840004; +596b : 54670006; +596c : B8A00800; +596d : B8801000; +596e : 44600014; +596f : 3464FFFF; +5970 : E3FFFFCF; +5971 : 28A10000; +5972 : 288A0000; +5973 : B4293000; +5974 : A4201000; +5975 : A0C21000; +5976 : A0481000; +5977 : 5C2A0007; +5978 : 3463FFFC; +5979 : 44600002; +597a : 4440FFEF; +597b : 34060000; +597c : B8C00800; +597d : C3A00000; +597e : B8801000; +597f : B8A00800; +5980 : 3464FFFF; +5981 : E3FFFFBE; +5982 : 40A30000; +5983 : 40850000; +5984 : C8653000; +5985 : E3FFFFCC; +5986 : B8412000; +5987 : 20840003; +5988 : 74650003; +5989 : 64840000; +598a : B8403000; +598b : A0852000; +598c : B8202800; +598d : 44800015; +598e : 78040001; +598f : 388495D8; +5990 : 28890000; +5991 : 78040001; +5992 : 388495DC; +5993 : 28880000; +5994 : 340A0003; +5995 : E0000006; +5996 : 58A40000; +5997 : 3463FFFC; +5998 : 34A50004; +5999 : 34420004; +599a : 51430007; +599b : 28440000; +599c : A4803800; +599d : B4893000; +599e : A0E63000; +599f : A0C83000; +59a0 : 44C0FFF6; +59a1 : B8403000; +59a2 : 44600014; +59a3 : 40C20000; +59a4 : 3463FFFF; +59a5 : 34A40001; +59a6 : 30A20000; +59a7 : 44400009; +59a8 : 34C20001; +59a9 : 4460000E; +59aa : 40450000; +59ab : 3463FFFF; +59ac : 34420001; +59ad : 30850000; +59ae : 34840001; +59af : 5CA0FFFA; +59b0 : 34020000; +59b1 : 44600007; +59b2 : B4822800; +59b3 : 30A00000; +59b4 : 34420001; +59b5 : 5C62FFFD; +59b6 : C3A00000; +59b7 : C3A00000; +59b8 : C3A00000; +59b9 : 34030000; +59ba : 4440000C; +59bb : 40240000; +59bc : 4480000A; +59bd : 3442FFFF; +59be : B8201800; +59bf : E0000004; +59c0 : 40640000; +59c1 : 3442FFFF; +59c2 : 44800003; +59c3 : 34630001; +59c4 : 5C40FFFC; +59c5 : C8611800; +59c6 : B8600800; +59c7 : C3A00000; +59c8 : 57522043; +59c9 : 6F72653A; +59ca : 20737461; +59cb : 7274696E; +59cc : 67207570; +59cd : 2E2E2E0A; +59ce : 00000000; +59cf : 556E6162; +59d0 : 6C652074; +59d1 : 6F206465; +59d2 : 7465726D; +59d3 : 696E6520; +59d4 : 4D414320; +59d5 : 61646472; +59d6 : 6573730A; +59d7 : 00000000; +59d8 : 4C6F6361; +59d9 : 6C204D41; +59da : 43206164; +59db : 64726573; +59dc : 733A2025; +59dd : 3032783A; +59de : 25303278; +59df : 3A253032; +59e0 : 783A2530; +59e1 : 32783A25; +59e2 : 3032783A; +59e3 : 25303278; +59e4 : 0A000000; +59e5 : 4E657720; +59e6 : 6D617820; +59e7 : 72756E20; +59e8 : 74696D65; +59e9 : 20666F72; +59ea : 20612074; +59eb : 61736B20; +59ec : 25732C20; +59ed : 6F6C6420; +59ee : 256C642C; +59ef : 206E6577; +59f0 : 2025640A; +59f1 : 00000000; +59f2 : 7461736B; +59f3 : 2025732C; +59f4 : 2072756E; +59f5 : 20666F72; +59f6 : 20256420; +59f7 : 6D730A00; +59f8 : 73706C6C; +59f9 : 2D626800; +59fa : 7368656C; +59fb : 6C2B6775; +59fc : 69000000; +59fd : 70747000; +59fe : 75707469; +59ff : 6D650000; +5a00 : 63686563; +5a01 : 6B2D6C69; +5a02 : 6E6B0000; +5a03 : 69646C65; +5a04 : 00000000; +5a05 : 64696167; +5a06 : 2D66736D; +5a07 : 2D312D25; +5a08 : 733A2025; +5a09 : 3039642E; +5a0a : 25303364; +5a0b : 3A200000; +5a0c : 454E5445; +5a0d : 52202573; +5a0e : 2C207061; +5a0f : 636B6574; +5a10 : 206C656E; +5a11 : 2025690A; +5a12 : 00000000; +5a13 : 25733A20; +5a14 : 7265656E; +5a15 : 74657220; +5a16 : 696E2025; +5a17 : 69206D73; +5a18 : 0A000000; +5a19 : 4C454156; +5a1a : 45202573; +5a1b : 20286E65; +5a1c : 78743A20; +5a1d : 25336929; +5a1e : 0A0A0000; +5a1f : 52454356; +5a20 : 20253032; +5a21 : 64206279; +5a22 : 74657320; +5a23 : 61742025; +5a24 : 39642E25; +5a25 : 3039642E; +5a26 : 25303364; +5a27 : 20287479; +5a28 : 70652025; +5a29 : 782C2025; +5a2a : 73290A00; +5a2b : 66736D3A; +5a2c : 20556E6B; +5a2d : 6E6F776E; +5a2e : 20737461; +5a2f : 74652066; +5a30 : 6F722070; +5a31 : 6F727420; +5a32 : 25730A00; +5a33 : 57726F6E; +5a34 : 6720646F; +5a35 : 6D61696E; +5a36 : 2025693A; +5a37 : 20646973; +5a38 : 63617264; +5a39 : 0A000000; +5a3a : 416C7465; +5a3b : 726E6174; +5a3c : 65206D61; +5a3d : 73746572; +5a3e : 3A206469; +5a3f : 73636172; +5a40 : 640A0000; +5a41 : 4C6F6F70; +5a42 : 696E6720; +5a43 : 6672616D; +5a44 : 653A2064; +5a45 : 69736361; +5a46 : 72640A00; +5a47 : 66736D20; +5a48 : 666F7220; +5a49 : 25733A20; +5a4a : 4572726F; +5a4b : 72202569; +5a4c : 20696E20; +5a4d : 25730A00; +5a4e : 70707369; +5a4f : 00000000; +5a50 : 25732D25; +5a51 : 692D2573; +5a52 : 3A200000; +5a53 : 25733A20; +5a54 : 6572726F; +5a55 : 72207061; +5a56 : 7273696E; +5a57 : 67202225; +5a58 : 73220A00; +5a59 : 64696167; +5a5a : 2D636F6E; +5a5b : 66696700; +5a5c : 64696167; +5a5d : 2D657874; +5a5e : 656E7369; +5a5f : 6F6E0000; +5a60 : 64696167; +5a61 : 2D626D63; +5a62 : 00000000; +5a63 : 64696167; +5a64 : 2D736572; +5a65 : 766F0000; +5a66 : 64696167; +5a67 : 2D667261; +5a68 : 6D657300; +5a69 : 64696167; +5a6a : 2D74696D; +5a6b : 65000000; +5a6c : 64696167; +5a6d : 2D66736D; +5a6e : 00000000; +5a6f : 6E657720; +5a70 : 74696D65; +5a71 : 6F757420; +5a72 : 666F7220; +5a73 : 25733A20; +5a74 : 25690A00; +5a75 : 74696D65; +5a76 : 6F757420; +5a77 : 65787069; +5a78 : 7265643A; +5a79 : 2025730A; +5a7a : 00000000; +5a7b : 52455155; +5a7c : 45535400; +5a7d : 53594E43; +5a7e : 5F53454E; +5a7f : 44000000; +5a80 : 414E4E5F; +5a81 : 52454345; +5a82 : 49505400; +5a83 : 414E4E5F; +5a84 : 53454E44; +5a85 : 00000000; +5a86 : 4641554C; +5a87 : 54000000; +5a88 : 5155414C; +5a89 : 00000000; +5a8a : 73796E63; +5a8b : 00000000; +5a8c : 64656C61; +5a8d : 795F7265; +5a8e : 71000000; +5a8f : 7064656C; +5a90 : 61795F72; +5a91 : 65710000; +5a92 : 7064656C; +5a93 : 61795F72; +5a94 : 65737000; +5a95 : 64656C61; +5a96 : 795F7265; +5a97 : 73700000; +5a98 : 7064656C; +5a99 : 61795F72; +5a9a : 6573705F; +5a9b : 666F6C6C; +5a9c : 6F775F75; +5a9d : 70000000; +5a9e : 616E6E6F; +5a9f : 756E6365; +5aa0 : 00000000; +5aa1 : 7369676E; +5aa2 : 616C696E; +5aa3 : 67000000; +5aa4 : 6D616E61; +5aa5 : 67656D65; +5aa6 : 6E740000; +5aa7 : 50505369; +5aa8 : 20666F72; +5aa9 : 20575250; +5aaa : 432E2043; +5aab : 6F6D6D69; +5aac : 74202573; +5aad : 2C206275; +5aae : 696C7420; +5aaf : 6F6E2044; +5ab0 : 65632031; +5ab1 : 38203230; +5ab2 : 31370A00; +5ab3 : 70707369; +5ab4 : 2D763230; +5ab5 : 31362E31; +5ab6 : 322D3839; +5ab7 : 2D676362; +5ab8 : 35393334; +5ab9 : 65000000; +5aba : 50545020; +5abb : 73746172; +5abc : 740A0000; +5abd : 50545020; +5abe : 73746F70; +5abf : 0A000000; +5ac0 : 4C6F636B; +5ac1 : 696E6720; +5ac2 : 504C4C00; +5ac3 : 0A4C6F63; +5ac4 : 6B207469; +5ac5 : 6D656F75; +5ac6 : 742E0000; +5ac7 : 2E000000; +5ac8 : 77723100; +5ac9 : 20696E76; +5aca : 616C6964; +5acb : 00000000; +5acc : 25735449; +5acd : 4D453A20; +5ace : 28256C69; +5acf : 202D2030; +5ad0 : 78256C78; +5ad1 : 2920256C; +5ad2 : 692E2530; +5ad3 : 366C6925; +5ad4 : 730A0000; +5ad5 : 25732573; +5ad6 : 25303278; +5ad7 : 2D253032; +5ad8 : 782D2530; +5ad9 : 32782D25; +5ada : 3032782D; +5adb : 25303278; +5adc : 2D253032; +5add : 782D2530; +5ade : 32782D25; +5adf : 3032782D; +5ae0 : 25303278; +5ae1 : 2D253032; +5ae2 : 780A0000; +5ae3 : 25732573; +5ae4 : 25732028; +5ae5 : 73697A65; +5ae6 : 20256929; +5ae7 : 0A000000; +5ae8 : 25732573; +5ae9 : 00000000; +5aea : 25303278; +5aeb : 00000000; +5aec : 25735645; +5aed : 5253494F; +5aee : 4E3A2075; +5aef : 6E737570; +5af0 : 706F7274; +5af1 : 65642028; +5af2 : 2569290A; +5af3 : 00000000; +5af4 : 25735645; +5af5 : 5253494F; +5af6 : 4E3A2025; +5af7 : 69202874; +5af8 : 79706520; +5af9 : 25692C20; +5afa : 6C656E20; +5afb : 25692C20; +5afc : 646F6D61; +5afd : 696E2025; +5afe : 69290A00; +5aff : 2573464C; +5b00 : 4147533A; +5b01 : 20307825; +5b02 : 30347820; +5b03 : 28636F72; +5b04 : 72656374; +5b05 : 696F6E20; +5b06 : 30782530; +5b07 : 38783A25; +5b08 : 30387820; +5b09 : 25303875; +5b0a : 290A0000; +5b0b : 504F5254; +5b0c : 3A200000; +5b0d : 25735245; +5b0e : 53543A20; +5b0f : 73657120; +5b10 : 25692C20; +5b11 : 6374726C; +5b12 : 2025692C; +5b13 : 206C6F67; +5b14 : 2D696E74; +5b15 : 65727661; +5b16 : 6C202569; +5b17 : 0A000000; +5b18 : 25734D45; +5b19 : 53534147; +5b1a : 453A2028; +5b1b : 45292053; +5b1c : 594E430A; +5b1d : 00000000; +5b1e : 25732573; +5b1f : 256C752E; +5b20 : 25303969; +5b21 : 0A000000; +5b22 : 4D53472D; +5b23 : 53594E43; +5b24 : 3A200000; +5b25 : 25734D45; +5b26 : 53534147; +5b27 : 453A2028; +5b28 : 45292044; +5b29 : 454C4159; +5b2a : 5F524551; +5b2b : 0A000000; +5b2c : 4D53472D; +5b2d : 44454C41; +5b2e : 595F5245; +5b2f : 513A2000; +5b30 : 25734D45; +5b31 : 53534147; +5b32 : 453A2028; +5b33 : 47292046; +5b34 : 4F4C4C4F; +5b35 : 575F5550; +5b36 : 0A000000; +5b37 : 4D53472D; +5b38 : 464F4C4C; +5b39 : 4F575F55; +5b3a : 503A2000; +5b3b : 25734D45; +5b3c : 53534147; +5b3d : 453A2028; +5b3e : 47292044; +5b3f : 454C4159; +5b40 : 5F524553; +5b41 : 500A0000; +5b42 : 4D53472D; +5b43 : 44454C41; +5b44 : 595F5245; +5b45 : 53503A20; +5b46 : 00000000; +5b47 : 25734D45; +5b48 : 53534147; +5b49 : 453A2028; +5b4a : 47292041; +5b4b : 4E4E4F55; +5b4c : 4E43450A; +5b4d : 00000000; +5b4e : 4D53472D; +5b4f : 414E4E4F; +5b50 : 554E4345; +5b51 : 3A207374; +5b52 : 616D7020; +5b53 : 00000000; +5b54 : 25732573; +5b55 : 25303278; +5b56 : 2D253032; +5b57 : 782D2530; +5b58 : 34780A00; +5b59 : 4D53472D; +5b5a : 414E4E4F; +5b5b : 554E4345; +5b5c : 3A206772; +5b5d : 616E646D; +5b5e : 61737465; +5b5f : 722D7175; +5b60 : 616C6974; +5b61 : 79200000; +5b62 : 25734D53; +5b63 : 472D414E; +5b64 : 4E4F554E; +5b65 : 43453A20; +5b66 : 6772616E; +5b67 : 646D6173; +5b68 : 7465722D; +5b69 : 7072696F; +5b6a : 20256920; +5b6b : 25690A00; +5b6c : 25732573; +5b6d : 25303278; +5b6e : 2D253032; +5b6f : 782D2530; +5b70 : 32782D25; +5b71 : 3032782D; +5b72 : 25303278; +5b73 : 2D253032; +5b74 : 782D2530; +5b75 : 32782D25; +5b76 : 3032780A; +5b77 : 00000000; +5b78 : 4D53472D; +5b79 : 414E4E4F; +5b7a : 554E4345; +5b7b : 3A206772; +5b7c : 616E646D; +5b7d : 61737465; +5b7e : 722D6964; +5b7f : 20000000; +5b80 : 25734D45; +5b81 : 53534147; +5b82 : 453A2028; +5b83 : 47292053; +5b84 : 49474E41; +5b85 : 4C494E47; +5b86 : 0A000000; +5b87 : 4D53472D; +5b88 : 5349474E; +5b89 : 414C494E; +5b8a : 473A2074; +5b8b : 61726765; +5b8c : 742D706F; +5b8d : 72742000; +5b8e : 2573544C; +5b8f : 563A2074; +5b90 : 6F6F2073; +5b91 : 686F7274; +5b92 : 20282569; +5b93 : 202D2025; +5b94 : 69203D20; +5b95 : 2569290A; +5b96 : 00000000; +5b97 : 2573544C; +5b98 : 563A2074; +5b99 : 79706520; +5b9a : 25303478; +5b9b : 206C656E; +5b9c : 20256920; +5b9d : 6F756920; +5b9e : 25303278; +5b9f : 3A253032; +5ba0 : 783A2530; +5ba1 : 32782073; +5ba2 : 75622025; +5ba3 : 3032783A; +5ba4 : 25303278; +5ba5 : 3A253032; +5ba6 : 780A0000; +5ba7 : 2573544C; +5ba8 : 563A2074; +5ba9 : 6F6F2073; +5baa : 686F7274; +5bab : 20286578; +5bac : 70656374; +5bad : 65642025; +5bae : 692C2074; +5baf : 6F74616C; +5bb0 : 20256929; +5bb1 : 0A000000; +5bb2 : 544C563A; +5bb3 : 20000000; +5bb4 : 746C762D; +5bb5 : 636F6E74; +5bb6 : 656E7400; +5bb7 : 44554D50; +5bb8 : 3A200000; +5bb9 : 7061796C; +5bba : 6F616400; +5bbb : 2573564C; +5bbc : 414E2025; +5bbd : 690A0000; +5bbe : 25734554; +5bbf : 483A2025; +5bc0 : 30347820; +5bc1 : 28253032; +5bc2 : 783A2530; +5bc3 : 32783A25; +5bc4 : 3032783A; +5bc5 : 25303278; +5bc6 : 3A253032; +5bc7 : 783A2530; +5bc8 : 3278202D; +5bc9 : 3E202530; +5bca : 32783A25; +5bcb : 3032783A; +5bcc : 25303278; +5bcd : 3A253032; +5bce : 783A2530; +5bcf : 32783A25; +5bd0 : 30327829; +5bd1 : 0A000000; +5bd2 : 25734950; +5bd3 : 3A202569; +5bd4 : 20282569; +5bd5 : 2E25692E; +5bd6 : 25692E25; +5bd7 : 69202D3E; +5bd8 : 2025692E; +5bd9 : 25692E25; +5bda : 692E2569; +5bdb : 29206C65; +5bdc : 6E202569; +5bdd : 0A000000; +5bde : 25735544; +5bdf : 503A2028; +5be0 : 2569202D; +5be1 : 3E202569; +5be2 : 29206C65; +5be3 : 6E202569; +5be4 : 0A000000; +5be5 : 25733A20; +5be6 : 256C690A; +5be7 : 00000000; +5be8 : 5761726E; +5be9 : 696E673A; +5bea : 2025733A; +5beb : 2063616E; +5bec : 206E6F74; +5bed : 2061646A; +5bee : 75737420; +5bef : 66726571; +5bf0 : 5F707062; +5bf1 : 20256C69; +5bf2 : 0A000000; +5bf3 : 25733A20; +5bf4 : 25396C75; +5bf5 : 2E253039; +5bf6 : 6C690A00; +5bf7 : 25733A20; +5bf8 : 736E743D; +5bf9 : 25642C20; +5bfa : 7365633D; +5bfb : 256C642C; +5bfc : 206E7365; +5bfd : 633D256C; +5bfe : 640A0000; +5bff : 25303964; +5c00 : 20253039; +5c01 : 64202530; +5c02 : 33642000; +5c03 : 73656E64; +5c04 : 3A200000; +5c05 : 72656376; +5c06 : 3A200000; +5c07 : 25303964; +5c08 : 20253039; +5c09 : 64202530; +5c0a : 33640000; +5c0b : 20202025; +5c0c : 39642E25; +5c0d : 33640A00; +5c0e : 696E6974; +5c0f : 69616C69; +5c10 : 7A696E67; +5c11 : 00000000; +5c12 : 6661756C; +5c13 : 74790000; +5c14 : 64697361; +5c15 : 626C6564; +5c16 : 00000000; +5c17 : 6C697374; +5c18 : 656E696E; +5c19 : 67000000; +5c1a : 7072652D; +5c1b : 6D617374; +5c1c : 65720000; +5c1d : 70617373; +5c1e : 69766500; +5c1f : 756E6361; +5c20 : 6C696272; +5c21 : 61746564; +5c22 : 00000000; +5c23 : 736C6176; +5c24 : 65000000; +5c25 : 756E6361; +5c26 : 6C696272; +5c27 : 61746564; +5c28 : 2F77722D; +5c29 : 70726573; +5c2a : 656E7400; +5c2b : 6D617374; +5c2c : 65722F77; +5c2d : 722D6D2D; +5c2e : 6C6F636B; +5c2f : 00000000; +5c30 : 756E6361; +5c31 : 6C696272; +5c32 : 61746564; +5c33 : 2F77722D; +5c34 : 732D6C6F; +5c35 : 636B0000; +5c36 : 756E6361; +5c37 : 6C696272; +5c38 : 61746564; +5c39 : 2F77722D; +5c3a : 6C6F636B; +5c3b : 65640000; +5c3c : 77722D63; +5c3d : 616C6962; +5c3e : 72617469; +5c3f : 6F6E0000; +5c40 : 77722D63; +5c41 : 616C6962; +5c42 : 72617465; +5c43 : 64000000; +5c44 : 77722D72; +5c45 : 6573702D; +5c46 : 63616C69; +5c47 : 622D7265; +5c48 : 71000000; +5c49 : 77722D6C; +5c4a : 696E6B2D; +5c4b : 6F6E0000; +5c4c : 6162736F; +5c4d : 6C757465; +5c4e : 2D63616C; +5c4f : 69627261; +5c50 : 74696F6E; +5c51 : 00000000; +5c52 : 686F6F6B; +5c53 : 3A202573; +5c54 : 0A000000; +5c55 : 5432206F; +5c56 : 72205433; +5c57 : 20696E63; +5c58 : 6F727265; +5c59 : 63742C20; +5c5a : 64697363; +5c5b : 61726469; +5c5c : 6E672074; +5c5d : 75706C65; +5c5e : 0A000000; +5c5f : 5433206F; +5c60 : 72205436; +5c61 : 20696E63; +5c62 : 6F727265; +5c63 : 63742C20; +5c64 : 64697363; +5c65 : 61726469; +5c66 : 6E672074; +5c67 : 75706C65; +5c68 : 0A000000; +5c69 : 48616E64; +5c6a : 7368616B; +5c6b : 65206661; +5c6c : 696C7572; +5c6d : 653A206E; +5c6e : 6F77206E; +5c6f : 6F6E2D77; +5c70 : 72202573; +5c71 : 0A000000; +5c72 : 52657472; +5c73 : 79206F6E; +5c74 : 2074696D; +5c75 : 656F7574; +5c76 : 0A000000; +5c77 : 25733A20; +5c78 : 73756273; +5c79 : 74617465; +5c7a : 2025690A; +5c7b : 00000000; +5c7c : 54783D3E; +5c7d : 3E736361; +5c7e : 6C656450; +5c7f : 69636F73; +5c80 : 65636F6E; +5c81 : 64732E6D; +5c82 : 7362203D; +5c83 : 20307825; +5c84 : 780A0000; +5c85 : 54783D3E; +5c86 : 3E736361; +5c87 : 6C656450; +5c88 : 69636F73; +5c89 : 65636F6E; +5c8a : 64732E6C; +5c8b : 7362203D; +5c8c : 20307825; +5c8d : 780A0000; +5c8e : 52782066; +5c8f : 69786564; +5c90 : 2064656C; +5c91 : 6179203D; +5c92 : 2025640A; +5c93 : 00000000; +5c94 : 52783D3E; +5c95 : 3E736361; +5c96 : 6C656450; +5c97 : 69636F73; +5c98 : 65636F6E; +5c99 : 64732E6D; +5c9a : 7362203D; +5c9b : 20307825; +5c9c : 780A0000; +5c9d : 52783D3E; +5c9e : 3E736361; +5c9f : 6C656450; +5ca0 : 69636F73; +5ca1 : 65636F6E; +5ca2 : 64732E6C; +5ca3 : 7362203D; +5ca4 : 20307825; +5ca5 : 780A0000; +5ca6 : 23232320; +5ca7 : 74342E70; +5ca8 : 68617365; +5ca9 : 20697320; +5caa : 616C7265; +5cab : 61647920; +5cac : 636F7272; +5cad : 65637465; +5cae : 6420666F; +5caf : 72206269; +5cb0 : 74736C69; +5cb1 : 64650A00; +5cb2 : 74313A20; +5cb3 : 20202020; +5cb4 : 20202020; +5cb5 : 20202020; +5cb6 : 20202020; +5cb7 : 20202020; +5cb8 : 74343A20; +5cb9 : 20202020; +5cba : 20202020; +5cbb : 20202020; +5cbc : 20202020; +5cbd : 20626974; +5cbe : 736C6964; +5cbf : 653A2025; +5cc0 : 640A0000; +5cc1 : 20202020; +5cc2 : 20207365; +5cc3 : 632E2020; +5cc4 : 20202020; +5cc5 : 206E732E; +5cc6 : 70686120; +5cc7 : 20202020; +5cc8 : 20207365; +5cc9 : 632E2020; +5cca : 20202020; +5ccb : 206E732E; +5ccc : 7068610A; +5ccd : 00000000; +5cce : 4552524F; +5ccf : 523A204E; +5cd0 : 65772063; +5cd1 : 6C617373; +5cd2 : 2025690A; +5cd3 : 00000000; +5cd4 : 4255473A; +5cd5 : 20547279; +5cd6 : 696E6720; +5cd7 : 746F2073; +5cd8 : 656E6420; +5cd9 : 696E7661; +5cda : 6C696420; +5cdb : 77725F6D; +5cdc : 7367206D; +5cdd : 6F64653D; +5cde : 25782069; +5cdf : 643D2578; +5ce0 : 00000000; +5ce1 : 68616E64; +5ce2 : 6C652053; +5ce3 : 69676E61; +5ce4 : 6C696E67; +5ce5 : 206D7367; +5ce6 : 2C206661; +5ce7 : 696C6564; +5ce8 : 2C205468; +5ce9 : 69732069; +5cea : 73206E6F; +5ceb : 74206F72; +5cec : 67616E69; +5ced : 7A617469; +5cee : 6F6E2065; +5cef : 7874656E; +5cf0 : 73696F6E; +5cf1 : 20544C56; +5cf2 : 203D2030; +5cf3 : 7825780A; +5cf4 : 00000000; +5cf5 : 68616E64; +5cf6 : 6C652053; +5cf7 : 69676E61; +5cf8 : 6C696E67; +5cf9 : 206D7367; +5cfa : 2C206661; +5cfb : 696C6564; +5cfc : 2C206E6F; +5cfd : 74204345; +5cfe : 524E2773; +5cff : 204F5549; +5d00 : 203D2030; +5d01 : 7825780A; +5d02 : 00000000; +5d03 : 68616E64; +5d04 : 6C652053; +5d05 : 69676E61; +5d06 : 6C696E67; +5d07 : 206D7367; +5d08 : 2C206661; +5d09 : 696C6564; +5d0a : 2C206E6F; +5d0b : 74205768; +5d0c : 69746520; +5d0d : 52616262; +5d0e : 6974206D; +5d0f : 61676963; +5d10 : 206E756D; +5d11 : 62657220; +5d12 : 3D203078; +5d13 : 25780A00; +5d14 : 68616E64; +5d15 : 6C652053; +5d16 : 69676E61; +5d17 : 6C696E67; +5d18 : 206D7367; +5d19 : 2C206661; +5d1a : 696C6564; +5d1b : 2C206E6F; +5d1c : 74207375; +5d1d : 70706F72; +5d1e : 74656420; +5d1f : 76657273; +5d20 : 696F6E20; +5d21 : 6E756D62; +5d22 : 6572203D; +5d23 : 20307825; +5d24 : 780A0000; +5d25 : 2573203D; +5d26 : 20256C64; +5d27 : 3A253039; +5d28 : 6C643A25; +5d29 : 30336C64; +5d2a : 0A000000; +5d2b : 556E696E; +5d2c : 69746961; +5d2d : 6C697A65; +5d2e : 64000000; +5d2f : 4552524F; +5d30 : 523A2025; +5d31 : 733A2054; +5d32 : 696D6573; +5d33 : 74616D70; +5d34 : 73496E63; +5d35 : 6F727265; +5d36 : 63743A20; +5d37 : 25642025; +5d38 : 64202564; +5d39 : 2025640A; +5d3a : 00000000; +5d3b : 73657276; +5d3c : 6F3A7431; +5d3d : 00000000; +5d3e : 73657276; +5d3f : 6F3A7432; +5d40 : 00000000; +5d41 : 73657276; +5d42 : 6F3A7433; +5d43 : 00000000; +5d44 : 73657276; +5d45 : 6F3A7434; +5d46 : 00000000; +5d47 : 73657276; +5d48 : 6F3A7435; +5d49 : 00000000; +5d4a : 73657276; +5d4b : 6F3A7436; +5d4c : 00000000; +5d4d : 2D3E6D64; +5d4e : 656C6179; +5d4f : 00000000; +5d50 : 4552524F; +5d51 : 523A2025; +5d52 : 733A2054; +5d53 : 696D6573; +5d54 : 74616D70; +5d55 : 73496E63; +5d56 : 6F727265; +5d57 : 63743A20; +5d58 : 25642025; +5d59 : 64200A00; +5d5a : 20287761; +5d5b : 69742066; +5d5c : 6F722068; +5d5d : 77290000; +5d5e : 6F666673; +5d5f : 65745F68; +5d60 : 773A2025; +5d61 : 6C692E25; +5d62 : 30396C69; +5d63 : 20282B25; +5d64 : 6C69290A; +5d65 : 00000000; +5d66 : 504C4C20; +5d67 : 4F75744F; +5d68 : 664C6F63; +5d69 : 6B2C2073; +5d6a : 686F756C; +5d6b : 64207265; +5d6c : 73746172; +5d6d : 74207379; +5d6e : 6E630A00; +5d6f : 73657276; +5d70 : 6F3A6275; +5d71 : 73790A00; +5d72 : 77725F73; +5d73 : 6572766F; +5d74 : 20737461; +5d75 : 74653A20; +5d76 : 25732573; +5d77 : 0A000000; +5d78 : 6F6C6473; +5d79 : 65747020; +5d7a : 25692C20; +5d7b : 6F666673; +5d7c : 65742025; +5d7d : 693A2530; +5d7e : 34690A00; +5d7f : 61646A75; +5d80 : 73742070; +5d81 : 68617365; +5d82 : 2025690A; +5d83 : 00000000; +5d84 : 53594E43; +5d85 : 5F4E5345; +5d86 : 43000000; +5d87 : 53594E43; +5d88 : 5F534543; +5d89 : 00000000; +5d8a : 53594E43; +5d8b : 5F504841; +5d8c : 53450000; +5d8d : 54524143; +5d8e : 4B5F5048; +5d8f : 41534500; +5d90 : 57414954; +5d91 : 5F4F4646; +5d92 : 5345545F; +5d93 : 53544142; +5d94 : 4C450000; +5d95 : 636F756C; +5d96 : 64206E6F; +5d97 : 74207365; +5d98 : 6E642073; +5d99 : 796E630A; +5d9a : 00000000; +5d9b : 636F756C; +5d9c : 64206E6F; +5d9d : 74207365; +5d9e : 6E642061; +5d9f : 6E6E6F75; +5da0 : 6E63650A; +5da1 : 00000000; +5da2 : 636F756C; +5da3 : 64206E6F; +5da4 : 74207365; +5da5 : 6E642072; +5da6 : 65717565; +5da7 : 73740A00; +5da8 : 4E657720; +5da9 : 666F7265; +5daa : 69676E20; +5dab : 4D617374; +5dac : 65722025; +5dad : 69206164; +5dae : 6465640A; +5daf : 00000000; +5db0 : 25733A20; +5db1 : 63616E27; +5db2 : 7420696E; +5db3 : 69742065; +5db4 : 7874656E; +5db5 : 73696F6E; +5db6 : 0A000000; +5db7 : 636C6F63; +5db8 : 6B20636C; +5db9 : 61737320; +5dba : 3D202564; +5dbb : 0A000000; +5dbc : 636C6F63; +5dbd : 6B206163; +5dbe : 63757261; +5dbf : 6379203D; +5dc0 : 2025640A; +5dc1 : 00000000; +5dc2 : 49676E6F; +5dc3 : 72656420; +5dc4 : 6672616D; +5dc5 : 65202569; +5dc6 : 0A000000; +5dc7 : 70705F73; +5dc8 : 6C617665; +5dc9 : 203A2044; +5dca : 656C6179; +5dcb : 20526573; +5dcc : 7020646F; +5dcd : 65736E27; +5dce : 74206D61; +5dcf : 74636820; +5dd0 : 44656C61; +5dd1 : 79205265; +5dd2 : 71202866; +5dd3 : 20257829; +5dd4 : 0A000000; +5dd5 : 70705F70; +5dd6 : 636C6F63; +5dd7 : 6B203A20; +5dd8 : 5044656C; +5dd9 : 61792052; +5dda : 65737020; +5ddb : 646F6573; +5ddc : 6E277420; +5ddd : 6D617463; +5dde : 68205044; +5ddf : 656C6179; +5de0 : 20526571; +5de1 : 0A000000; +5de2 : 25733A20; +5de3 : 5044656C; +5de4 : 61792052; +5de5 : 65737020; +5de6 : 462D7570; +5de7 : 20646F65; +5de8 : 736E2774; +5de9 : 206D6174; +5dea : 63682050; +5deb : 44656C61; +5dec : 79205265; +5ded : 710A0000; +5dee : 4552524F; +5def : 523A2025; +5df0 : 733A2046; +5df1 : 6F6C6C6F; +5df2 : 77207570; +5df3 : 206D6573; +5df4 : 73616765; +5df5 : 20697320; +5df6 : 6E6F7420; +5df7 : 66726F6D; +5df8 : 20637572; +5df9 : 72656E74; +5dfa : 20706172; +5dfb : 656E740A; +5dfc : 00000000; +5dfd : 4552524F; +5dfe : 523A2025; +5dff : 733A2053; +5e00 : 6C617665; +5e01 : 20776173; +5e02 : 206E6F74; +5e03 : 20776169; +5e04 : 74696E67; +5e05 : 20612066; +5e06 : 6F6C6C6F; +5e07 : 77207570; +5e08 : 206D6573; +5e09 : 73616765; +5e0a : 0A000000; +5e0b : 4552524F; +5e0c : 523A2025; +5e0d : 733A2053; +5e0e : 65717565; +5e0f : 6E636549; +5e10 : 44202564; +5e11 : 20646F65; +5e12 : 736E2774; +5e13 : 206D6174; +5e14 : 6368206C; +5e15 : 61737420; +5e16 : 53796E63; +5e17 : 206D6573; +5e18 : 73616765; +5e19 : 2025640A; +5e1a : 00000000; +5e1b : 25732825; +5e1c : 6429204D; +5e1d : 65737361; +5e1e : 67652063; +5e1f : 616E2774; +5e20 : 20626520; +5e21 : 73656E74; +5e22 : 0A000000; +5e23 : 53454E54; +5e24 : 20253032; +5e25 : 64206279; +5e26 : 74657320; +5e27 : 61742025; +5e28 : 642E2530; +5e29 : 39642E25; +5e2a : 30336420; +5e2b : 28257329; +5e2c : 0A000000; +5e2d : 25733A25; +5e2e : 693A2045; +5e2f : 72726F72; +5e30 : 20310A00; +5e31 : 25733A25; +5e32 : 693A2045; +5e33 : 72726F72; +5e34 : 20320A00; +5e35 : 7072652D; +5e36 : 00000000; +5e37 : 42657374; +5e38 : 20666F72; +5e39 : 6569676E; +5e3a : 206D6173; +5e3b : 74657220; +5e3c : 69732025; +5e3d : 692F2569; +5e3e : 0A000000; +5e3f : 25733A20; +5e40 : 6572726F; +5e41 : 720A0000; +5e42 : 25733A20; +5e43 : 70617373; +5e44 : 6976650A; +5e45 : 00000000; +5e46 : 25733A20; +5e47 : 25736D61; +5e48 : 73746572; +5e49 : 0A000000; +5e4a : 4E657720; +5e4b : 55544320; +5e4c : 6F666673; +5e4d : 65743A20; +5e4e : 25690A00; +5e4f : 25733A20; +5e50 : 736C6176; +5e51 : 650A0000; +5e52 : 2D000000; +5e53 : 25732564; +5e54 : 2E253039; +5e55 : 64000000; +5e56 : 5472696D; +5e57 : 20746F6F; +5e58 : 2D6C6F6E; +5e59 : 67206D70; +5e5a : 643A2025; +5e5b : 690A0000; +5e5c : 41667465; +5e5d : 72206176; +5e5e : 67282569; +5e5f : 292C206D; +5e60 : 65616E50; +5e61 : 61746844; +5e62 : 656C6179; +5e63 : 3A202569; +5e64 : 0A000000; +5e65 : 6572726F; +5e66 : 7220696E; +5e67 : 20745F6F; +5e68 : 70732D3E; +5e69 : 73657276; +5e6a : 6F5F696E; +5e6b : 69740000; +5e6c : 496E6974; +5e6d : 69616C69; +5e6e : 7A65643A; +5e6f : 206F6273; +5e70 : 5F647269; +5e71 : 66742025; +5e72 : 6C6C690A; +5e73 : 00000000; +5e74 : 4F666673; +5e75 : 65742066; +5e76 : 726F6D20; +5e77 : 6D617374; +5e78 : 65723A20; +5e79 : 20202020; +5e7a : 25730A00; +5e7b : 54313A20; +5e7c : 25730A00; +5e7d : 54323A20; +5e7e : 25730A00; +5e7f : 4F627365; +5e80 : 72766564; +5e81 : 20647269; +5e82 : 66743A20; +5e83 : 2539690A; +5e84 : 00000000; +5e85 : 64697363; +5e86 : 61726420; +5e87 : 54332F54; +5e88 : 343A2077; +5e89 : 65206D69; +5e8a : 73732054; +5e8b : 312F5432; +5e8c : 0A000000; +5e8d : 54333A20; +5e8e : 25730A00; +5e8f : 54343A20; +5e90 : 25730A00; +5e91 : 4D617374; +5e92 : 65722074; +5e93 : 6F20736C; +5e94 : 6176653A; +5e95 : 2025730A; +5e96 : 00000000; +5e97 : 536C6176; +5e98 : 6520746F; +5e99 : 206D6173; +5e9a : 7465723A; +5e9b : 2025730A; +5e9c : 00000000; +5e9d : 6D65616E; +5e9e : 50617468; +5e9f : 44656C61; +5ea0 : 793A2025; +5ea1 : 730A0000; +5ea2 : 54353A20; +5ea3 : 25730A00; +5ea4 : 54363A20; +5ea5 : 25730A00; +5ea6 : 536C6176; +5ea7 : 65204F6E; +5ea8 : 6C792C20; +5ea9 : 636C6F63; +5eaa : 6B20636C; +5eab : 61737320; +5eac : 73657420; +5ead : 746F2025; +5eae : 640A0000; +5eaf : 25323075; +5eb0 : 00000000; +5eb1 : 25750000; +5eb2 : 25313175; +5eb3 : 25303975; +5eb4 : 00000000; +5eb5 : 25752530; +5eb6 : 39750000; +5eb7 : 6C6E6B3A; +5eb8 : 25642072; +5eb9 : 783A2564; +5eba : 2074783A; +5ebb : 25642000; +5ebc : 6C6F636B; +5ebd : 3A256420; +5ebe : 00000000; +5ebf : 7074703A; +5ec0 : 25732000; +5ec1 : 73763A25; +5ec2 : 64200000; +5ec3 : 73733A27; +5ec4 : 25732720; +5ec5 : 00000000; +5ec6 : 61757825; +5ec7 : 643A2578; +5ec8 : 20000000; +5ec9 : 7365633A; +5eca : 2564206E; +5ecb : 7365633A; +5ecc : 25642000; +5ecd : 6D753A25; +5ece : 73200000; +5ecf : 646D733A; +5ed0 : 25732000; +5ed1 : 6474786D; +5ed2 : 3A256420; +5ed3 : 6472786D; +5ed4 : 3A256420; +5ed5 : 00000000; +5ed6 : 64747873; +5ed7 : 3A256420; +5ed8 : 64727873; +5ed9 : 3A256420; +5eda : 00000000; +5edb : 6173796D; +5edc : 3A256420; +5edd : 00000000; +5ede : 63727474; +5edf : 3A257320; +5ee0 : 00000000; +5ee1 : 636B6F3A; +5ee2 : 25642000; +5ee3 : 73657470; +5ee4 : 3A256420; +5ee5 : 00000000; +5ee6 : 75636E74; +5ee7 : 3A256420; +5ee8 : 00000000; +5ee9 : 68643A25; +5eea : 64206D64; +5eeb : 3A256420; +5eec : 61643A25; +5eed : 64200000; +5eee : 70636200; +5eef : 74656D70; +5ef0 : 3A202564; +5ef1 : 2E253034; +5ef2 : 64204300; +5ef3 : 0A0A5054; +5ef4 : 50207374; +5ef5 : 61747573; +5ef6 : 3A200000; +5ef7 : 25730000; +5ef8 : 0A0A5379; +5ef9 : 6E632069; +5efa : 6E666F20; +5efb : 6E6F7420; +5efc : 76616C69; +5efd : 640A0000; +5efe : 0A0A5379; +5eff : 6E636872; +5f00 : 6F6E697A; +5f01 : 6174696F; +5f02 : 6E207374; +5f03 : 61747573; +5f04 : 3A0A0000; +5f05 : 57522050; +5f06 : 54502043; +5f07 : 6F726520; +5f08 : 53796E63; +5f09 : 204D6F6E; +5f0a : 69746F72; +5f0b : 20257300; +5f0c : 0A457363; +5f0d : 203D2065; +5f0e : 78697400; +5f0f : 0A0A5441; +5f10 : 49205469; +5f11 : 6D653A20; +5f12 : 20202020; +5f13 : 20202020; +5f14 : 20202020; +5f15 : 20202020; +5f16 : 20000000; +5f17 : 0A0A4C69; +5f18 : 6E6B2073; +5f19 : 74617475; +5f1a : 733A0000; +5f1b : 0A25733A; +5f1c : 20000000; +5f1d : 77727531; +5f1e : 00000000; +5f1f : 4C696E6B; +5f20 : 20757020; +5f21 : 20200000; +5f22 : 4C696E6B; +5f23 : 20646F77; +5f24 : 6E200000; +5f25 : 2852583A; +5f26 : 2025642C; +5f27 : 2054583A; +5f28 : 20256429; +5f29 : 00000000; +5f2a : 20495076; +5f2b : 343A2000; +5f2c : 424F4F54; +5f2d : 50207275; +5f2e : 6E6E696E; +5f2f : 67000000; +5f30 : 25732028; +5f31 : 66726F6D; +5f32 : 20626F6F; +5f33 : 74702900; +5f34 : 25732028; +5f35 : 73746174; +5f36 : 69632061; +5f37 : 73736967; +5f38 : 6E6D656E; +5f39 : 74290000; +5f3a : 0A4D6F64; +5f3b : 653A2000; +5f3c : 5752204F; +5f3d : 66660000; +5f3e : 0A436C6F; +5f3f : 636B206F; +5f40 : 66667365; +5f41 : 743A2020; +5f42 : 20202020; +5f43 : 20202020; +5f44 : 20202020; +5f45 : 20202000; +5f46 : 2532692E; +5f47 : 25303969; +5f48 : 20730000; +5f49 : 25692E25; +5f4a : 30396920; +5f4b : 73000000; +5f4c : 25396920; +5f4d : 6E730000; +5f4e : 0A4F6E65; +5f4f : 2D776179; +5f50 : 2064656C; +5f51 : 61792061; +5f52 : 76657261; +5f53 : 6765643A; +5f54 : 20202020; +5f55 : 20202000; +5f56 : 0A4F6273; +5f57 : 65727665; +5f58 : 64206472; +5f59 : 6966743A; +5f5a : 20202020; +5f5b : 20202020; +5f5c : 20202020; +5f5d : 20202000; +5f5e : 5752204D; +5f5f : 61737465; +5f60 : 72202000; +5f61 : 57522053; +5f62 : 6C617665; +5f63 : 20202000; +5f64 : 57522055; +5f65 : 6E6B6E6F; +5f66 : 776E2000; +5f67 : 4C6F636B; +5f68 : 65642000; +5f69 : 4E6F4C6F; +5f6a : 636B2000; +5f6b : 43616C69; +5f6c : 62726174; +5f6d : 65640000; +5f6e : 556E6361; +5f6f : 6C696272; +5f70 : 61746564; +5f71 : 00000000; +5f72 : 53657276; +5f73 : 6F207374; +5f74 : 6174653A; +5f75 : 20202020; +5f76 : 20202020; +5f77 : 20202020; +5f78 : 20202000; +5f79 : 50686173; +5f7a : 65207472; +5f7b : 61636B69; +5f7c : 6E673A20; +5f7d : 20202020; +5f7e : 20202020; +5f7f : 20202000; +5f80 : 4F4E0A00; +5f81 : 4F46460A; +5f82 : 00000000; +5f83 : 41757820; +5f84 : 636C6F63; +5f85 : 6B202564; +5f86 : 20737461; +5f87 : 7475733A; +5f88 : 20202020; +5f89 : 20202020; +5f8a : 00000000; +5f8b : 656E6162; +5f8c : 6C656400; +5f8d : 2C206C6F; +5f8e : 636B6564; +5f8f : 00000000; +5f90 : 0A54696D; +5f91 : 696E6720; +5f92 : 70617261; +5f93 : 6D657465; +5f94 : 72733A0A; +5f95 : 00000000; +5f96 : 526F756E; +5f97 : 642D7472; +5f98 : 69702074; +5f99 : 696D6520; +5f9a : 286D7529; +5f9b : 3A200000; +5f9c : 25732070; +5f9d : 730A0000; +5f9e : 4D617374; +5f9f : 65722D73; +5fa0 : 6C617665; +5fa1 : 2064656C; +5fa2 : 61793A20; +5fa3 : 20200000; +5fa4 : 4D617374; +5fa5 : 65722050; +5fa6 : 48592064; +5fa7 : 656C6179; +5fa8 : 733A2020; +5fa9 : 20202020; +5faa : 20202020; +5fab : 20000000; +5fac : 54583A20; +5fad : 25396420; +5fae : 70732C20; +5faf : 52583A20; +5fb0 : 25396420; +5fb1 : 70730A00; +5fb2 : 536C6176; +5fb3 : 65205048; +5fb4 : 59206465; +5fb5 : 6C617973; +5fb6 : 3A202020; +5fb7 : 20202020; +5fb8 : 20202020; +5fb9 : 20000000; +5fba : 546F7461; +5fbb : 6C206C69; +5fbc : 6E6B2061; +5fbd : 73796D6D; +5fbe : 65747279; +5fbf : 3A000000; +5fc0 : 25323164; +5fc1 : 2070730A; +5fc2 : 00000000; +5fc3 : 4361626C; +5fc4 : 65207274; +5fc5 : 74206465; +5fc6 : 6C61793A; +5fc7 : 20202020; +5fc8 : 20200000; +5fc9 : 436C6F63; +5fca : 6B206F66; +5fcb : 66736574; +5fcc : 3A000000; +5fcd : 25323964; +5fce : 2070730A; +5fcf : 00000000; +5fd0 : 50686173; +5fd1 : 65207365; +5fd2 : 74706F69; +5fd3 : 6E743A00; +5fd4 : 25323764; +5fd5 : 2070730A; +5fd6 : 00000000; +5fd7 : 536B6577; +5fd8 : 3A202020; +5fd9 : 20200000; +5fda : 25333264; +5fdb : 2070730A; +5fdc : 00000000; +5fdd : 55706461; +5fde : 74652063; +5fdf : 6F756E74; +5fe0 : 65723A00; +5fe1 : 25323764; +5fe2 : 0A000000; +5fe3 : 756E6B6E; +5fe4 : 6F776E00; +5fe5 : 64696167; +5fe6 : 73000000; +5fe7 : 73746174; +5fe8 : 73000000; +5fe9 : 1B5B3125; +5fea : 63000000; +5feb : 436F6D6D; +5fec : 616E6420; +5fed : 22257322; +5fee : 3A206572; +5fef : 726F7220; +5ff0 : 25640A00; +5ff1 : 556E7265; +5ff2 : 636F676E; +5ff3 : 697A6564; +5ff4 : 20636F6D; +5ff5 : 6D616E64; +5ff6 : 20222573; +5ff7 : 222E0A00; +5ff8 : 77726323; +5ff9 : 20000000; +5ffa : 25630000; +5ffb : 65786563; +5ffc : 7574696E; +5ffd : 673A2025; +5ffe : 730A0000; +5fff : 456D7074; +6000 : 7920696E; +6001 : 69742073; +6002 : 63726970; +6003 : 742E2E2E; +6004 : 0A000000; +6005 : 2D2D2062; +6006 : 75696C74; +6007 : 2D696E20; +6008 : 73637269; +6009 : 7074202D; +600a : 2D0A0000; +600b : 28656D70; +600c : 7479290A; +600d : 00000000; +600e : 57522043; +600f : 6F726520; +6010 : 6275696C; +6011 : 643A2025; +6012 : 7325730A; +6013 : 00000000; +6014 : 4275696C; +6015 : 743A2025; +6016 : 73202573; +6017 : 20627920; +6018 : 25730A00; +6019 : 4275696C; +601a : 7420666F; +601b : 72202564; +601c : 206B4220; +601d : 52414D2C; +601e : 20737461; +601f : 636B2069; +6020 : 73202564; +6021 : 20627974; +6022 : 65730A00; +6023 : 5741524E; +6024 : 494E473A; +6025 : 20686172; +6026 : 64776172; +6027 : 65207361; +6028 : 79732025; +6029 : 696B4220; +602a : 3C3D2052; +602b : 414D203C; +602c : 2025696B; +602d : 420A0000; +602e : 76657200; +602f : 25733B20; +6030 : 25732025; +6031 : 730A0000; +6032 : 556E6B6E; +6033 : 6F776E20; +6034 : 73756263; +6035 : 6F6D6D61; +6036 : 6E642022; +6037 : 2573220A; +6038 : 00000000; +6039 : 73746172; +603a : 74000000; +603b : 73746F70; +603c : 00000000; +603d : 65326500; +603e : 64656C61; +603f : 79000000; +6040 : 676D0000; +6041 : 61627363; +6042 : 616C0000; +6043 : 6D6F6465; +6044 : 00000000; +6045 : 73746F70; +6046 : 70656400; +6047 : 72756E6E; +6048 : 696E6700; +6049 : 70327000; +604a : 41766169; +604b : 6C61626C; +604c : 6520636F; +604d : 6D6D616E; +604e : 64733A0A; +604f : 00000000; +6050 : 20202573; +6051 : 0A000000; +6052 : 68656C70; +6053 : 00000000; +6054 : 25303278; +6055 : 3A253032; +6056 : 783A2530; +6057 : 32783A25; +6058 : 3032783A; +6059 : 25303278; +605a : 3A253032; +605b : 78000000; +605c : 67657400; +605d : 67657470; +605e : 00000000; +605f : 73657400; +6060 : 73657470; +6061 : 00000000; +6062 : 4D41432D; +6063 : 61646472; +6064 : 6573733A; +6065 : 2025730A; +6066 : 00000000; +6067 : 6D616300; +6068 : 72657365; +6069 : 74000000; +606a : 6D617800; +606b : 7072696E; +606c : 745F7461; +606d : 736B5F74; +606e : 696D655F; +606f : 74687265; +6070 : 73686F6C; +6071 : 64202564; +6072 : 0A000000; +6073 : 20697465; +6074 : 72617469; +6075 : 6F6E7320; +6076 : 20202020; +6077 : 7365636F; +6078 : 6E64732E; +6079 : 6D696372; +607a : 6F732020; +607b : 20206D61; +607c : 785F6D73; +607d : 206E616D; +607e : 650A0000; +607f : 20202539; +6080 : 6C692020; +6081 : 2025396C; +6082 : 692E2530; +6083 : 366C6920; +6084 : 25396C64; +6085 : 2025730A; +6086 : 00000000; +6087 : 70730000; +6088 : 25750A00; +6089 : 55736167; +608a : 653A2072; +608b : 65667265; +608c : 7368203C; +608d : 7365636F; +608e : 6E64733E; +608f : 0A000000; +6090 : 72656672; +6091 : 65736800; +6092 : 73746174; +6093 : 69737469; +6094 : 6373206E; +6095 : 6F77206F; +6096 : 66660A00; +6097 : 62747300; +6098 : 6F666600; +6099 : 73746174; +609a : 00000000; +609b : 57726F6E; +609c : 67207061; +609d : 72616D65; +609e : 7465720A; +609f : 00000000; +60a0 : 65726173; +60a1 : 65000000; +60a2 : 436F756C; +60a3 : 64206E6F; +60a4 : 74206572; +60a5 : 61736520; +60a6 : 44420A00; +60a7 : 61646400; +60a8 : 53465020; +60a9 : 44422069; +60aa : 73206675; +60ab : 6C6C0A00; +60ac : 49324320; +60ad : 6572726F; +60ae : 720A0000; +60af : 53465020; +60b0 : 64617461; +60b1 : 62617365; +60b2 : 20657272; +60b3 : 6F722028; +60b4 : 2564290A; +60b5 : 00000000; +60b6 : 25642053; +60b7 : 46507320; +60b8 : 696E2044; +60b9 : 420A0000; +60ba : 73686F77; +60bb : 00000000; +60bc : 53465020; +60bd : 64617461; +60be : 62617365; +60bf : 20656D70; +60c0 : 74790A00; +60c1 : 25643A20; +60c2 : 504E3A00; +60c3 : 20645478; +60c4 : 3A202538; +60c5 : 64206452; +60c6 : 783A2025; +60c7 : 38642061; +60c8 : 6C706861; +60c9 : 3A202538; +60ca : 640A0000; +60cb : 6D617463; +60cc : 68000000; +60cd : 4E6F2053; +60ce : 46502E0A; +60cf : 00000000; +60d0 : 53465020; +60d1 : 72656164; +60d2 : 20657272; +60d3 : 6F720A00; +60d4 : 436F756C; +60d5 : 64206E6F; +60d6 : 74206D61; +60d7 : 74636820; +60d8 : 746F2044; +60d9 : 420A0000; +60da : 53465020; +60db : 6D617463; +60dc : 6865642C; +60dd : 20645478; +60de : 3D256420; +60df : 6452783D; +60e0 : 25642061; +60e1 : 6C706861; +60e2 : 3D25640A; +60e3 : 00000000; +60e4 : 656E6100; +60e5 : 73667000; +60e6 : 696E6974; +60e7 : 00000000; +60e8 : 636C0000; +60e9 : 73707300; +60ea : 67707300; +60eb : 25642025; +60ec : 640A0000; +60ed : 73646163; +60ee : 00000000; +60ef : 67646163; +60f0 : 00000000; +60f1 : 63686563; +60f2 : 6B76636F; +60f3 : 00000000; +60f4 : 706C6C00; +60f5 : 666F7263; +60f6 : 65000000; +60f7 : 466F756E; +60f8 : 64207068; +60f9 : 61736520; +60fa : 7472616E; +60fb : 73697469; +60fc : 6F6E2069; +60fd : 6E204545; +60fe : 50524F4D; +60ff : 3A202564; +6100 : 70730A00; +6101 : 4D656173; +6102 : 7572696E; +6103 : 67207432; +6104 : 2F743420; +6105 : 70686173; +6106 : 65207472; +6107 : 616E7369; +6108 : 74696F6E; +6109 : 2E2E2E0A; +610a : 00000000; +610b : 63616C69; +610c : 62726174; +610d : 696F6E00; +610e : 73657473; +610f : 65630000; +6110 : 7365746E; +6111 : 73656300; +6112 : 72617700; +6113 : 2573202B; +6114 : 2564206E; +6115 : 616E6F73; +6116 : 65636F6E; +6117 : 64732E0A; +6118 : 00000000; +6119 : 74696D65; +611a : 00000000; +611b : 67756900; +611c : 66730000; +611d : 66736500; +611e : 73646200; +611f : 4F4E0000; +6120 : 4F464600; +6121 : 656E6162; +6122 : 6C650000; +6123 : 64697361; +6124 : 626C6500; +6125 : 70686173; +6126 : 65207472; +6127 : 61636B69; +6128 : 6E672025; +6129 : 730A0000; +612a : 70747261; +612b : 636B0000; +612c : 25642E25; +612d : 642E2564; +612e : 2E256400; +612f : 49502D61; +6130 : 64647265; +6131 : 73733A20; +6132 : 696E2074; +6133 : 7261696E; +6134 : 696E670A; +6135 : 00000000; +6136 : 49502D61; +6137 : 64647265; +6138 : 73733A20; +6139 : 25732028; +613a : 66726F6D; +613b : 20626F6F; +613c : 7470290A; +613d : 00000000; +613e : 49502D61; +613f : 64647265; +6140 : 73733A20; +6141 : 25732028; +6142 : 73746174; +6143 : 69632061; +6144 : 73736967; +6145 : 6E6D656E; +6146 : 74290A00; +6147 : 69700000; +6148 : 50505349; +6149 : 20766572; +614a : 626F7369; +614b : 74793A20; +614c : 2530386C; +614d : 780A0000; +614e : 76657262; +614f : 6F736500; +6150 : 436F756C; +6151 : 64206E6F; +6152 : 74206572; +6153 : 61736520; +6154 : 696E6974; +6155 : 20736372; +6156 : 6970740A; +6157 : 00000000; +6158 : 436F756C; +6159 : 64206E6F; +615a : 74206164; +615b : 64207468; +615c : 6520636F; +615d : 6D6D616E; +615e : 640A0000; +615f : 4F4B2E0A; +6160 : 00000000; +6161 : 626F6F74; +6162 : 00000000; +6163 : 25692028; +6164 : 22257322; +6165 : 29206F75; +6166 : 74206F66; +6167 : 2072616E; +6168 : 67650A00; +6169 : 63757272; +616a : 656E7420; +616b : 766C616E; +616c : 3A202569; +616d : 20283078; +616e : 2578290A; +616f : 00000000; +6170 : 766C616E; +6171 : 00000000; +6172 : 41757820; +6173 : 64696167; +6174 : 6E6F7374; +6175 : 69637320; +6176 : 696E666F; +6177 : 3A0A0000; +6178 : 69643A20; +6179 : 25642E25; +617a : 642C2072; +617b : 2F772077; +617c : 6F726473; +617d : 3A202564; +617e : 2C20722F; +617f : 6F20776F; +6180 : 7264733A; +6181 : 2025640A; +6182 : 00000000; +6183 : 726F0000; +6184 : 576F7264; +6185 : 20256420; +6186 : 69732030; +6187 : 78253038; +6188 : 780A0000; +6189 : 72770000; +618a : 77000000; +618b : 56616C75; +618c : 65203078; +618d : 25303878; +618e : 20777269; +618f : 7474656E; +6190 : 20746F20; +6191 : 74686520; +6192 : 776F7264; +6193 : 2025640A; +6194 : 00000000; +6195 : 64696167; +6196 : 00000000; +6197 : 25732C20; +6198 : 25732025; +6199 : 642C2025; +619a : 642C2025; +619b : 3032643A; +619c : 25303264; +619d : 3A253032; +619e : 64000000; +619f : 25732025; +61a0 : 32642025; +61a1 : 3032643A; +61a2 : 25303264; +61a3 : 3A253032; +61a4 : 64000000; +61a5 : 2534642D; +61a6 : 25303264; +61a7 : 2D253032; +61a8 : 642D2530; +61a9 : 32643A25; +61aa : 3032643A; +61ab : 25303264; +61ac : 00000000; +61ad : 1B5B3025; +61ae : 643B3325; +61af : 646D0000; +61b0 : 1B5B6D00; +61b1 : 1B5B2564; +61b2 : 3B256466; +61b3 : 00000000; +61b4 : 1B5B324A; +61b5 : 1B5B313B; +61b6 : 31480000; +61b7 : 53756E00; +61b8 : 4D6F6E00; +61b9 : 54756500; +61ba : 57656400; +61bb : 54687500; +61bc : 46726900; +61bd : 53617400; +61be : 4A616E00; +61bf : 46656200; +61c0 : 4D617200; +61c1 : 41707200; +61c2 : 4D617900; +61c3 : 4A756E00; +61c4 : 4A756C00; +61c5 : 41756700; +61c6 : 53657000; +61c7 : 4F637400; +61c8 : 4E6F7600; +61c9 : 44656300; +61ca : 4C6F6F70; +61cb : 73207065; +61cc : 72206A69; +61cd : 6666793A; +61ce : 2025690A; +61cf : 00000000; +61d0 : 25733A20; +61d1 : 6E6F2073; +61d2 : 6F636B65; +61d3 : 7420736C; +61d4 : 6F747320; +61d5 : 6C656674; +61d6 : 0A000000; +61d7 : 77723000; +61d8 : 6E65742D; +61d9 : 62680000; +61da : 69707634; +61db : 00000000; +61dc : 61727000; +61dd : 44697363; +61de : 6F766572; +61df : 65642049; +61e0 : 50206164; +61e1 : 64726573; +61e2 : 73202825; +61e3 : 642E2564; +61e4 : 2E25642E; +61e5 : 25642921; +61e6 : 0A000000; +61e7 : 534E4D50; +61e8 : 3A205346; +61e9 : 50207570; +61ea : 64617465; +61eb : 6420696E; +61ec : 206D656D; +61ed : 6F72792C; +61ee : 20726573; +61ef : 74617274; +61f0 : 20505450; +61f1 : 0A000000; +61f2 : 494E5641; +61f3 : 4C494400; +61f4 : 25642E25; +61f5 : 30346400; +61f6 : 736E6D70; +61f7 : 00000000; +61f8 : 44656320; +61f9 : 31382032; +61fa : 30313720; +61fb : 30393A33; +61fc : 323A3438; +61fd : 00000000; +61fe : 6C6C6470; +61ff : 20757064; +6200 : 6174650A; +6201 : 00000000; +6202 : 6C6C6470; +6203 : 00000000; +6204 : 30313233; +6205 : 34353637; +6206 : 38396162; +6207 : 63646566; +6208 : 00000000; +6209 : 49443A20; +620a : 25780A00; +620b : 6E6F2070; +620c : 66696C74; +620d : 65722072; +620e : 756C652D; +620f : 73657421; +6210 : 0A000000; +6211 : 7066696C; +6212 : 7465723A; +6213 : 2077726F; +6214 : 6E67206D; +6215 : 61676963; +6216 : 206E756D; +6217 : 62657220; +6218 : 28676F74; +6219 : 20307825; +621a : 78290A00; +621b : 7066696C; +621c : 7465723A; +621d : 2077726F; +621e : 6E672072; +621f : 756C652D; +6220 : 7365742C; +6221 : 2063616E; +6222 : 27742061; +6223 : 70706C79; +6224 : 0A000000; +6225 : 4572726F; +6226 : 723A204D; +6227 : 696E6963; +6228 : 2048444C; +6229 : 20766572; +622a : 73696F6E; +622b : 20256420; +622c : 6E6F7420; +622d : 73757070; +622e : 6F727465; +622f : 64206279; +6230 : 2073770A; +6231 : 00000000; +6232 : 5761726E; +6233 : 696E673A; +6234 : 204D696E; +6235 : 69632072; +6236 : 65636569; +6237 : 76656420; +6238 : 6572726F; +6239 : 6E656F75; +623a : 73206672; +623b : 616D650A; +623c : 00000000; +623d : 5761726E; +623e : 696E673A; +623f : 204D696E; +6240 : 69632052; +6241 : 78206669; +6242 : 666F2066; +6243 : 756C6C2C; +6244 : 20657870; +6245 : 65637420; +6246 : 77726F6E; +6247 : 67206672; +6248 : 616D6573; +6249 : 0A000000; +624a : 5761726E; +624b : 696E673A; +624c : 20747820; +624d : 6E6F7420; +624e : 7465726D; +624f : 696E6174; +6250 : 65642069; +6251 : 6E66696E; +6252 : 69746520; +6253 : 6D63723D; +6254 : 30782578; +6255 : 0A000000; +6256 : 5761726E; +6257 : 696E673A; +6258 : 20747820; +6259 : 74696D65; +625a : 7374616D; +625b : 70206E65; +625c : 76657220; +625d : 62656361; +625e : 6D652061; +625f : 7661696C; +6260 : 61626C65; +6261 : 0A000000; +6262 : 66657463; +6263 : 68696E67; +6264 : 20646961; +6265 : 675F7277; +6266 : 5F776F72; +6267 : 64730A00; +6268 : 66657463; +6269 : 68696E67; +626a : 20646961; +626b : 675F726F; +626c : 5F776F72; +626d : 64730A00; +626e : 64657620; +626f : 20307825; +6270 : 30386C78; +6271 : 20402025; +6272 : 30366C78; +6273 : 2C202573; +6274 : 0A000000; +6275 : 66706761; +6276 : 2D617265; +6277 : 61000000; +6278 : 4572726F; +6279 : 72202564; +627a : 20776869; +627b : 6C652072; +627c : 65616469; +627d : 6E672074; +627e : 32347020; +627f : 66726F6D; +6280 : 2073746F; +6281 : 72616765; +6282 : 0A000000; +6283 : 74323470; +6284 : 20726561; +6285 : 64206672; +6286 : 6F6D2073; +6287 : 746F7261; +6288 : 67653A20; +6289 : 25642070; +628a : 730A0000; +628b : 57616974; +628c : 696E6720; +628d : 666F7220; +628e : 6C696E6B; +628f : 2E2E2E0A; +6290 : 00000000; +6291 : 4C6F636B; +6292 : 696E6720; +6293 : 504C4C2E; +6294 : 2E2E0A00; +6295 : 43616C69; +6296 : 62726174; +6297 : 696E6720; +6298 : 52582074; +6299 : 696D6573; +629a : 74616D70; +629b : 65722E2E; +629c : 2E0A0000; +629d : 4661696C; +629e : 65640000; +629f : 53756363; +62a0 : 65737300; +62a1 : 57726F74; +62a2 : 65206E65; +62a3 : 77207432; +62a4 : 34702076; +62a5 : 616C7565; +62a6 : 3A202564; +62a7 : 20707320; +62a8 : 28257329; +62a9 : 0A000000; +62aa : 20454E4F; +62ab : 53504300; +62ac : 25732573; +62ad : 3A000000; +62ae : 74656D70; +62af : 00000000; +62b0 : 74656D70; +62b1 : 65726174; +62b2 : 75726500; +62b3 : 7366703A; +62b4 : 20636F72; +62b5 : 72757074; +62b6 : 65642063; +62b7 : 6865636B; +62b8 : 73756D0A; +62b9 : 00000000; +62ba : 73646266; +62bb : 733A2066; +62bc : 6F756E64; +62bd : 20617420; +62be : 25692069; +62bf : 6E20466C; +62c0 : 6173680A; +62c1 : 00000000; +62c2 : 73646266; +62c3 : 733A2066; +62c4 : 6F756E64; +62c5 : 20617420; +62c6 : 25692069; +62c7 : 6E205731; +62c8 : 0A000000; +62c9 : 73646266; +62ca : 733A2066; +62cb : 6F756E64; +62cc : 20617420; +62cd : 25692069; +62ce : 6E204932; +62cf : 43283078; +62d0 : 25325829; +62d1 : 0A000000; +62d2 : 66696C65; +62d3 : 20307825; +62d4 : 30387820; +62d5 : 40202534; +62d6 : 692C206E; +62d7 : 616D6520; +62d8 : 25730A00; +62d9 : 25733A20; +62da : 53444220; +62db : 6572726F; +62dc : 720A0000; +62dd : 25733A20; +62de : 53444220; +62df : 66696C65; +62e0 : 20697320; +62e1 : 656D7074; +62e2 : 790A0000; +62e3 : 25733A20; +62e4 : 5573696E; +62e5 : 67205731; +62e6 : 20736572; +62e7 : 69616C20; +62e8 : 6E756D62; +62e9 : 65720A00; +62ea : 25733A20; +62eb : 6661696C; +62ec : 7572650A; +62ed : 00000000; +62ee : 25733A20; +62ef : 53444220; +62f0 : 6572726F; +62f1 : 722C2063; +62f2 : 616E2774; +62f3 : 20736176; +62f4 : 650A0000; +62f5 : 41646469; +62f6 : 6E67206E; +62f7 : 65772053; +62f8 : 46502065; +62f9 : 6E747279; +62fa : 0A000000; +62fb : 55706461; +62fc : 74652065; +62fd : 78697374; +62fe : 696E6720; +62ff : 53465020; +6300 : 656E7472; +6301 : 790A0000; +6302 : 2D2D2075; +6303 : 7365722D; +6304 : 64656669; +6305 : 6E656420; +6306 : 73637269; +6307 : 7074202D; +6308 : 2D0A0000; +6309 : 45726173; +630a : 696E6720; +630b : 466C6173; +630c : 68283078; +630d : 2578292E; +630e : 2E2E0A00; +630f : 45726173; +6310 : 696E6720; +6311 : 45455052; +6312 : 4F4D2025; +6313 : 64202830; +6314 : 78257829; +6315 : 2E2E2E0A; +6316 : 00000000; +6317 : 45726173; +6318 : 696E6720; +6319 : 312D5720; +631a : 45455052; +631b : 4F4D2028; +631c : 30782578; +631d : 292E2E2E; +631e : 0A000000; +631f : 66696C65; +6320 : 6E616D65; +6321 : 3A202573; +6322 : 3B206669; +6323 : 7273743A; +6324 : 2025783B; +6325 : 206C6173; +6326 : 743A2025; +6327 : 780A0000; +6328 : 466F726D; +6329 : 61747469; +632a : 6E672053; +632b : 44424653; +632c : 20696E20; +632d : 466C6173; +632e : 68283078; +632f : 2578292E; +6330 : 2E2E0A00; +6331 : 49324320; +6332 : 45455052; +6333 : 4F4D206E; +6334 : 6F742066; +6335 : 6F756E64; +6336 : 0A000000; +6337 : 466F726D; +6338 : 61747469; +6339 : 6E672053; +633a : 44424653; +633b : 20696E20; +633c : 49324320; +633d : 45455052; +633e : 4F4D2025; +633f : 64202830; +6340 : 78257829; +6341 : 2E2E2E0A; +6342 : 00000000; +6343 : 312D5769; +6344 : 72652045; +6345 : 4550524F; +6346 : 4D206E6F; +6347 : 7420666F; +6348 : 756E640A; +6349 : 00000000; +634a : 466F726D; +634b : 61747469; +634c : 6E672053; +634d : 44424653; +634e : 20696E20; +634f : 312D5720; +6350 : 45455052; +6351 : 4F4D2028; +6352 : 30782578; +6353 : 292E2E2E; +6354 : 0A000000; +6355 : 65657072; +6356 : 6F6D0000; +6357 : 6F666673; +6358 : 65742025; +6359 : 34692028; +635a : 30782530; +635b : 3378293A; +635c : 20253369; +635d : 20283078; +635e : 25303278; +635f : 290A0000; +6360 : 77726974; +6361 : 65283078; +6362 : 25782C20; +6363 : 2569293A; +6364 : 20726573; +6365 : 756C7420; +6366 : 3D202569; +6367 : 0A000000; +6368 : 72656164; +6369 : 28307825; +636a : 782C2025; +636b : 69293A20; +636c : 72657375; +636d : 6C74203D; +636e : 2025690A; +636f : 00000000; +6370 : 64657669; +6371 : 63652025; +6372 : 693A2025; +6373 : 30387825; +6374 : 3038780A; +6375 : 00000000; +6376 : 74656D70; +6377 : 3A202564; +6378 : 2E253034; +6379 : 640A0000; +637a : 77310000; +637b : 77317200; +637c : 77317700; +637d : 3C556E6B; +637e : 6E6F776E; +637f : 3E000000; +6380 : 736F6674; +6381 : 706C6C3A; +6382 : 20697271; +6383 : 73202564; +6384 : 20736571; +6385 : 20257320; +6386 : 6D6F6465; +6387 : 20256420; +6388 : 616C6967; +6389 : 6E6D656E; +638a : 745F7374; +638b : 61746520; +638c : 25642048; +638d : 4C256420; +638e : 4D4C2564; +638f : 2048593D; +6390 : 2564204D; +6391 : 593D2564; +6392 : 2044656C; +6393 : 436E743D; +6394 : 25640A00; +6395 : 73746172; +6396 : 742D6578; +6397 : 74000000; +6398 : 77616974; +6399 : 2D657874; +639a : 00000000; +639b : 73746172; +639c : 742D6865; +639d : 6C706572; +639e : 00000000; +639f : 77616974; +63a0 : 2D68656C; +63a1 : 70657200; +63a2 : 73746172; +63a3 : 742D6D61; +63a4 : 696E0000; +63a5 : 77616974; +63a6 : 2D6D6169; +63a7 : 6E000000; +63a8 : 72656164; +63a9 : 79000000; +63aa : 636C6561; +63ab : 722D6461; +63ac : 63730000; +63ad : 77616974; +63ae : 2D636C65; +63af : 61722D64; +63b0 : 61637300; +63b1 : BADC0FFE; +63b2 : 3B9ACA00; +63b3 : 000F4240; +63b4 : 41C64E6D; +63b5 : 7FFFFFFF; +63b6 : 00080030; +63b7 : C4653600; +63b8 : FFF0BDC0; +63b9 : 0007D000; +63ba : 3B9AC9FF; +63bb : 00010043; +63bc : 00010044; +63bd : 00015180; +63be : 83AA7E80; +63bf : 7FFFFFFE; +63c0 : 80000001; +63c1 : 00062000; +63c2 : 005EE000; +63c3 : 01000001; +63c4 : 11223344; +63c5 : E0001FFF; +63c6 : 00246000; +63c7 : 01554000; +63c8 : 02468000; +63c9 : 13578000; +63ca : 0FFFFFFF; +63cb : 059682F0; +63cc : 0EE6B27F; +63cd : 01312D02; +63ce : 01312D0A; +63cf : 46696C65; +63d0 : 44617461; +63d1 : 7366702D; +63d2 : 5344422D; +63d3 : 6D61632D; +63d4 : 63616C69; +63d5 : 77722D69; +63d6 : 003D0137; +63d7 : 8000001F; +63d8 : 009895B6; +63d9 : C4000001; +63da : 000186A0; +63db : 00FFFFFF; +63dc : FFFDB610; +63dd : 000249F0; +63de : 05F5E100; +63df : 0BEBC200; +63e0 : FA0A1F00; +63e1 : 01312D03; +63e2 : 011B1900; +63e3 : 00000000; +63e4 : 00000000; +63e5 : 00000000; +63e6 : 0180C200; +63e7 : 000E0000; +63e8 : 0000002C; +63e9 : 0000002C; +63ea : 00000036; +63eb : 00000036; +63ec : 00000000; +63ed : 00000000; +63ee : 00000000; +63ef : 00000000; +63f0 : 0000002C; +63f1 : 00000036; +63f2 : 00000036; +63f3 : 00000040; +63f4 : 00000022; +63f5 : 00000030; +63f6 : 70705F64; +63f7 : 6961675F; +63f8 : 70617273; +63f9 : 65000000; +63fa : 00000000; +63fb : 00016964; +63fc : 00016970; +63fd : 00016980; +63fe : 0001698C; +63ff : 00016998; +6400 : 000169A4; +6401 : 000169B0; +6402 : 00001C84; +6403 : 00001CF4; +6404 : 0000200C; +6405 : 0000200C; +6406 : 0000200C; +6407 : 0000200C; +6408 : 0000200C; +6409 : 0000200C; +640a : 00001D70; +640b : 00001DE0; +640c : 0000200C; +640d : 00001E74; +640e : 00001FE0; +640f : 77727063; +6410 : 5F74696D; +6411 : 655F6164; +6412 : 6A757374; +6413 : 5F6F6666; +6414 : 73657400; +6415 : 77725F73; +6416 : 31000000; +6417 : 77727063; +6418 : 5F74696D; +6419 : 655F6164; +641a : 6A757374; +641b : 00000000; +641c : 77727063; +641d : 5F74696D; +641e : 655F7365; +641f : 74000000; +6420 : 77727063; +6421 : 5F74696D; +6422 : 655F6765; +6423 : 74000000; +6424 : 77727063; +6425 : 5F6E6574; +6426 : 5F73656E; +6427 : 64000000; +6428 : 011B1900; +6429 : 00000180; +642a : C200000E; +642b : 77725F75; +642c : 6E706163; +642d : 6B5F616E; +642e : 6E6F756E; +642f : 63650000; +6430 : 77725F70; +6431 : 61636B5F; +6432 : 616E6E6F; +6433 : 756E6365; +6434 : 00000000; +6435 : 6765745F; +6436 : 70657273; +6437 : 69737465; +6438 : 6E745F6D; +6439 : 61630000; +643a : 77725F68; +643b : 616E646C; +643c : 655F666F; +643d : 6C6C6F77; +643e : 75700000; +643f : 77725F68; +6440 : 616E646C; +6441 : 655F616E; +6442 : 6E6F756E; +6443 : 63650000; +6444 : 77725F65; +6445 : 78656375; +6446 : 74655F73; +6447 : 6C617665; +6448 : 00000000; +6449 : 77725F68; +644a : 616E646C; +644b : 655F7265; +644c : 73700000; +644d : 77725F6E; +644e : 65775F73; +644f : 6C617665; +6450 : 00000000; +6451 : 77725F6D; +6452 : 61737465; +6453 : 725F6D73; +6454 : 67000000; +6455 : 77725F6C; +6456 : 69737465; +6457 : 6E696E67; +6458 : 00000000; +6459 : 77725F6F; +645a : 70656E00; +645b : 77725F69; +645c : 6E697400; +645d : 00003594; +645e : 000035BC; +645f : 000035DC; +6460 : 0000364C; +6461 : 0000366C; +6462 : 00003688; +6463 : 000036A8; +6464 : 00003734; +6465 : 00003754; +6466 : 77725F63; +6467 : 616C6962; +6468 : 72617469; +6469 : 6F6E0000; +646a : 00004C08; +646b : 00004BF0; +646c : 00004C30; +646d : 00004CE8; +646e : 00004C84; +646f : 000174AC; +6470 : 00017610; +6471 : 0001761C; +6472 : 00017628; +6473 : 00017634; +6474 : 00017640; +6475 : 77725F65; +6476 : 32655F6F; +6477 : 66667365; +6478 : 74000000; +6479 : 70705F69; +647a : 6E697469; +647b : 616C697A; +647c : 696E6700; +647d : 00005EF0; +647e : 000056F4; +647f : 00000000; +6480 : 00000000; +6481 : 00000000; +6482 : 00000000; +6483 : 00000000; +6484 : 00000000; +6485 : 00000000; +6486 : 00000000; +6487 : 00000000; +6488 : 000051EC; +6489 : 00005D04; +648a : 00000000; +648b : 00000000; +648c : 00000000; +648d : 00000000; +648e : 00000000; +648f : 00000000; +6490 : 00000000; +6491 : 00005DE8; +6492 : 00005950; +6493 : 00000000; +6494 : 000051EC; +6495 : 73745F63; +6496 : 6F6D5F73; +6497 : 6C617665; +6498 : 5F68616E; +6499 : 646C655F; +649a : 666F6C6C; +649b : 6F777570; +649c : 00000000; +649d : 626D635F; +649e : 64617461; +649f : 7365745F; +64a0 : 636D7000; +64a1 : 626D635F; +64a2 : 73746174; +64a3 : 655F6465; +64a4 : 63697369; +64a5 : 6F6E0000; +64a6 : 00018114; +64a7 : 0001811C; +64a8 : 000180F4; +64a9 : 00018124; +64aa : 00000000; +64ab : 00018100; +64ac : 0001706C; +64ad : 0001708C; +64ae : 00018104; +64af : 0000001F; +64b0 : 0000001C; +64b1 : 0000001F; +64b2 : 0000001E; +64b3 : 0000001F; +64b4 : 0000001E; +64b5 : 0000001F; +64b6 : 0000001F; +64b7 : 0000001E; +64b8 : 0000001F; +64b9 : 0000001E; +64ba : 0000001F; +64bb : 0000001F; +64bc : 0000001D; +64bd : 0000001F; +64be : 0000001E; +64bf : 0000001F; +64c0 : 0000001E; +64c1 : 0000001F; +64c2 : 0000001F; +64c3 : 0000001E; +64c4 : 0000001F; +64c5 : 0000001E; +64c6 : 0000001F; +64c7 : 000186DC; +64c8 : 000186E0; +64c9 : 000186E4; +64ca : 000186E8; +64cb : 000186EC; +64cc : 000186F0; +64cd : 000186F4; +64ce : 000186F8; +64cf : 000186FC; +64d0 : 00018700; +64d1 : 00018704; +64d2 : 00018708; +64d3 : 0001870C; +64d4 : 00018710; +64d5 : 00018714; +64d6 : 00018718; +64d7 : 0001871C; +64d8 : 00018720; +64d9 : 00018724; +64da : 70747064; +64db : 5F6E6574; +64dc : 69665F63; +64dd : 72656174; +64de : 655F736F; +64df : 636B6574; +64e0 : 00000000; +64e1 : 0000C98C; +64e2 : 0000C99C; +64e3 : 0000CA00; +64e4 : 0000CA00; +64e5 : 0000C9AC; +64e6 : 0000CA00; +64e7 : 0000CA00; +64e8 : 30FF0201; +64e9 : FA040670; +64ea : 75626C69; +64eb : 63FDFF02; +64ec : F90201FC; +64ed : 0201FB30; +64ee : FF30FF06; +64ef : 0000DAF4; +64f0 : 0000DB04; +64f1 : 0000DB28; +64f2 : 0000DB5C; +64f3 : 0000DB8C; +64f4 : 0000DBC8; +64f5 : 0000DC84; +64f6 : 0000DDB0; +64f7 : 0000DD20; +64f8 : 7365745F; +64f9 : 70657273; +64fa : 69737465; +64fb : 6E745F6D; +64fc : 61630000; +64fd : 00000000; +64fe : 00000100; +64ff : 00000200; +6500 : 00000300; +6501 : 00170000; +6502 : 002E0000; +6503 : 00600000; +6504 : 00000000; +6505 : 00000040; +6506 : 00000080; +6507 : 00000100; +6508 : 00000200; +6509 : 00000400; +650a : 000000C8; +650b : 000039D0; +650c : 00013B7C; +650d : 00013C00; +650e : 00013C38; +650f : 00013CB8; +6510 : 00013D44; +6511 : 00013D5C; +6512 : 00013C5C; +6513 : 00013BA4; +6514 : 00013B00; +6515 : 00013B34; +6516 : 00000000; +6517 : 00000000; +6518 : 00000000; +6519 : 00000000; +651a : 00000001; +651b : 00000001; +651c : 00000001; +651d : 00000001; +651e : 00000000; +651f : 00000000; +6520 : 00000000; +6521 : 00014888; +6522 : 000148A8; +6523 : 000148B4; +6524 : 000148C4; +6525 : 000148E4; +6526 : 000148F4; +6527 : 0001495C; +6528 : 00014914; +6529 : 0001481C; +652a : 00014860; +652b : 00000000; +652c : 00018E54; +652d : 00018E60; +652e : 00018E6C; +652f : 00018E7C; +6530 : 00018E88; +6531 : 00018E94; +6532 : 00017050; +6533 : 00018EA0; +6534 : 00018EA8; +6535 : 00018EB4; +6536 : 00000000; +6537 : 00000000; +6538 : 00000000; +6539 : 00000000; +653a : 00010000; +653b : 00000000; +653c : 00000000; +653d : 00000000; +653e : 00020100; +653f : 00000000; +6540 : 00000000; +6541 : 00000000; +6542 : 00030101; +6543 : 00000000; +6544 : 00000000; +6545 : 00000000; +6546 : 00040201; +6547 : 01000000; +6548 : 00000000; +6549 : 00000000; +654a : 00050201; +654b : 01010000; +654c : 00000000; +654d : 00000000; +654e : 00060302; +654f : 01010100; +6550 : 00000000; +6551 : 00000000; +6552 : 00070302; +6553 : 01010101; +6554 : 00000000; +6555 : 00000000; +6556 : 00080402; +6557 : 02010101; +6558 : 01000000; +6559 : 00000000; +655a : 00090403; +655b : 02010101; +655c : 01010000; +655d : 00000000; +655e : 000A0503; +655f : 02020101; +6560 : 01010100; +6561 : 00000000; +6562 : 000B0503; +6563 : 02020101; +6564 : 01010101; +6565 : 00000000; +6566 : 000C0604; +6567 : 03020201; +6568 : 01010101; +6569 : 01000000; +656a : 000D0604; +656b : 03020201; +656c : 01010101; +656d : 01010000; +656e : 000E0704; +656f : 03020202; +6570 : 01010101; +6571 : 01010100; +6572 : 000F0705; +6573 : 03030202; +6574 : 01010101; +6575 : 01010101; +6576 : FEFEFEFF; +6577 : 80808080; +6578 : 00202020; +6579 : 20202020; +657a : 20202828; +657b : 28282820; +657c : 20202020; +657d : 20202020; +657e : 20202020; +657f : 20202020; +6580 : 20881010; +6581 : 10101010; +6582 : 10101010; +6583 : 10101010; +6584 : 10040404; +6585 : 04040404; +6586 : 04040410; +6587 : 10101010; +6588 : 10104141; +6589 : 41414141; +658a : 01010101; +658b : 01010101; +658c : 01010101; +658d : 01010101; +658e : 01010101; +658f : 10101010; +6590 : 10104242; +6591 : 42424242; +6592 : 02020202; +6593 : 02020202; +6594 : 02020202; +6595 : 02020202; +6596 : 02020202; +6597 : 10101010; +6598 : 20000000; +6599 : 00000000; +659a : 00000000; +659b : 00000000; +659c : 00000000; +659d : 00000000; +659e : 00000000; +659f : 00000000; +65a0 : 00000000; +65a1 : 00000000; +65a2 : 00000000; +65a3 : 00000000; +65a4 : 00000000; +65a5 : 00000000; +65a6 : 00000000; +65a7 : 00000000; +65a8 : 00000000; +65a9 : 00000000; +65aa : 00000000; +65ab : 00000000; +65ac : 00000000; +65ad : 00000000; +65ae : 00000000; +65af : 00000000; +65b0 : 00000000; +65b1 : 00000000; +65b2 : 00000000; +65b3 : 00000000; +65b4 : 00000000; +65b5 : 00000000; +65b6 : 00000000; +65b7 : 00000000; +65b8 : 00000000; +65b9 : 00000000; +65ba : 0001ADB8; +65bb : 0001ADD8; +65bc : 0001ADE8; +65bd : 0001ADF8; +65be : 000003E8; +65bf : 00000001; +65c0 : 00000955; +65c1 : 00000001; +65c2 : 000169EC; +65c3 : 00000002; +65c4 : 00000000; +65c5 : 000169F4; +65c6 : 00000001; +65c7 : 00000000; +65c8 : 00016A00; +65c9 : 00000000; +65ca : 00000000; +65cb : 00016A0C; +65cc : 00000001; +65cd : 00000000; +65ce : 00016A18; +65cf : 00000000; +65d0 : 00000FA0; +65d1 : 00016A20; +65d2 : 00000000; +65d3 : 00000000; +65d4 : 00000000; +65d5 : 00000000; +65d6 : 00000000; +65d7 : 00000000; +65d8 : 00000000; +65d9 : 00000000; +65da : 00016A28; +65db : 002C0100; +65dc : 00010000; +65dd : 00016A30; +65de : 002C0100; +65df : 017F0000; +65e0 : 00016A3C; +65e1 : 00360101; +65e2 : 057F0000; +65e3 : 00016A48; +65e4 : 00360101; +65e5 : 057F0000; +65e6 : 00000000; +65e7 : 00000000; +65e8 : 00000000; +65e9 : 00000000; +65ea : 00000000; +65eb : 00000000; +65ec : 00000000; +65ed : 00000000; +65ee : 00000000; +65ef : 00000000; +65f0 : 00000000; +65f1 : 00000000; +65f2 : 00016A6C; +65f3 : 002C0000; +65f4 : 02010000; +65f5 : 00016A54; +65f6 : 00360000; +65f7 : 03020000; +65f8 : 00016A60; +65f9 : 00360001; +65fa : 057F0000; +65fb : 00016A78; +65fc : 00400000; +65fd : 05000000; +65fe : 00016A84; +65ff : FFFF0000; +6600 : 057F0000; +6601 : 00016A90; +6602 : FFFF0000; +6603 : 047F0000; +6604 : 00000000; +6605 : 00000000; +6606 : 00000000; +6607 : 00000000; +6608 : 00000000; +6609 : 00000000; +660a : 00000000; +660b : 00000000; +660c : 00000000; +660d : 00000000; +660e : 00000000; +660f : 00000000; +6610 : 00000000; +6611 : 00000000; +6612 : 00000000; +6613 : 00000000; +6614 : 00000000; +6615 : 00000000; +6616 : 00019C40; +6617 : 00019D60; +6618 : 00019D44; +6619 : 0001B0E4; +661a : 0001B164; +661b : 00000000; +661c : 00000000; +661d : 00000000; +661e : 00000000; +661f : 00000000; +6620 : 00000000; +6621 : 00000000; +6622 : 00000000; +6623 : 00000000; +6624 : 00000000; +6625 : 00000000; +6626 : 00000000; +6627 : 00000000; +6628 : 00000000; +6629 : 00000000; +662a : 00000000; +662b : 00000000; +662c : 00000000; +662d : 00000000; +662e : 00000000; +662f : 00000000; +6630 : 00000000; +6631 : 00000000; +6632 : 00000000; +6633 : 00000000; +6634 : 00000000; +6635 : 00000000; +6636 : 00000000; +6637 : 00000000; +6638 : 00000000; +6639 : 00000000; +663a : 00000000; +663b : 00000000; +663c : 00000000; +663d : 00000000; +663e : 00000000; +663f : 00000000; +6640 : 00000000; +6641 : 00000000; +6642 : 00000000; +6643 : 00000000; +6644 : 00000000; +6645 : 00000000; +6646 : 00000000; +6647 : 00000000; +6648 : 00000000; +6649 : 00000000; +664a : 00000000; +664b : 00000000; +664c : 00000000; +664d : 00000000; +664e : 00000000; +664f : 00000000; +6650 : 00000000; +6651 : 00000000; +6652 : 00000000; +6653 : 00000000; +6654 : 00000000; +6655 : 00000000; +6656 : 00000000; +6657 : 00000000; +6658 : 00000000; +6659 : 00000000; +665a : 00000000; +665b : 00000000; +665c : 00000000; +665d : 00000000; +665e : 00000000; +665f : 00000000; +6660 : 00000000; +6661 : 00000000; +6662 : 00000000; +6663 : 00000000; +6664 : 00000000; +6665 : 00000000; +6666 : 00000000; +6667 : 00000000; +6668 : 00000000; +6669 : 00000000; +666a : 00000000; +666b : 00000000; +666c : 00000000; +666d : 00000000; +666e : 00000000; +666f : 00000000; +6670 : 00000000; +6671 : 00000000; +6672 : 00000000; +6673 : 00000000; +6674 : 00000000; +6675 : 00000000; +6676 : 00000000; +6677 : 00000000; +6678 : 00000000; +6679 : 00000000; +667a : 00000000; +667b : 00000000; +667c : 00000000; +667d : 00000000; +667e : 00000000; +667f : 00000000; +6680 : 00000000; +6681 : 00000000; +6682 : 00000000; +6683 : 00000000; +6684 : 00000000; +6685 : 00000000; +6686 : 00000000; +6687 : 00000000; +6688 : 00000000; +6689 : 00000000; +668a : 00000000; +668b : 00000000; +668c : 00000000; +668d : 00000000; +668e : 00000000; +668f : 00000000; +6690 : 00000000; +6691 : 00000000; +6692 : 00000000; +6693 : 00000000; +6694 : 00000000; +6695 : 00000000; +6696 : 00000000; +6697 : 00000000; +6698 : 00000000; +6699 : 00000000; +669a : 00000000; +669b : 00000000; +669c : 00000000; +669d : 00000000; +669e : 00000000; +669f : 00000000; +66a0 : 00000000; +66a1 : 00000000; +66a2 : 00000000; +66a3 : 00000000; +66a4 : 00000000; +66a5 : 00000000; +66a6 : 00000000; +66a7 : 00000000; +66a8 : 00000000; +66a9 : 00000000; +66aa : 00000000; +66ab : 00000000; +66ac : 00000000; +66ad : 00000000; +66ae : 00000000; +66af : 00000000; +66b0 : 00000000; +66b1 : 00000000; +66b2 : 00000000; +66b3 : 00000000; +66b4 : 00000000; +66b5 : 00000000; +66b6 : 00000000; +66b7 : 00000000; +66b8 : 00000000; +66b9 : 00000000; +66ba : 00000000; +66bb : 00000000; +66bc : 00000000; +66bd : 00000000; +66be : 00000000; +66bf : 00000000; +66c0 : 00000000; +66c1 : 00000000; +66c2 : 00000000; +66c3 : 00000000; +66c4 : 00000000; +66c5 : 00000000; +66c6 : 00000000; +66c7 : 00000000; +66c8 : 00000000; +66c9 : 00000000; +66ca : 00000000; +66cb : 00000000; +66cc : 00000000; +66cd : 00000000; +66ce : 00000000; +66cf : 00000000; +66d0 : 00000000; +66d1 : 00000000; +66d2 : 00000000; +66d3 : 00000000; +66d4 : 00000000; +66d5 : 00000000; +66d6 : 00000000; +66d7 : 00000000; +66d8 : 00000000; +66d9 : 00000000; +66da : 00000000; +66db : 00000000; +66dc : 00000000; +66dd : 00000000; +66de : 00000000; +66df : 00000000; +66e0 : 00019C88; +66e1 : 00000000; +66e2 : 00000000; +66e3 : 00000000; +66e4 : 00000000; +66e5 : 00000000; +66e6 : 00000000; +66e7 : 00000000; +66e8 : 00000000; +66e9 : 00000000; +66ea : 00000000; +66eb : 00000000; +66ec : 00000000; +66ed : 00000000; +66ee : 00000000; +66ef : 00000000; +66f0 : 00000000; +66f1 : 00000000; +66f2 : 00000000; +66f3 : 00000000; +66f4 : 00000000; +66f5 : 00000000; +66f6 : 00000000; +66f7 : 00000000; +66f8 : 00000000; +66f9 : 00000000; +66fa : 00000000; +66fb : 00000000; +66fc : 00000000; +66fd : 00000000; +66fe : 00016B20; +66ff : 00016B20; +6700 : 00000000; +6701 : 00000001; +6702 : 00000000; +6703 : 00000000; +6704 : 00000000; +6705 : 00000000; +6706 : 00000000; +6707 : 00000000; +6708 : 00000000; +6709 : 00000000; +670a : 00000000; +670b : 00000000; +670c : 00000000; +670d : 00000000; +670e : 00000000; +670f : 00000000; +6710 : 00019828; +6711 : 0001B1E8; +6712 : 00000000; +6713 : 0001B228; +6714 : 0001B250; +6715 : 0001B280; +6716 : 0001B2A8; +6717 : 00000000; +6718 : 00000000; +6719 : 00000000; +671a : 00000000; +671b : 00000000; +671c : 00000000; +671d : 00000000; +671e : 00000000; +671f : 00000000; +6720 : 0001B2C8; +6721 : 000003E8; +6722 : 00000000; +6723 : 00000000; +6724 : 00000000; +6725 : 00000000; +6726 : 00019C9C; +6727 : 00019D08; +6728 : 00000000; +6729 : 00000000; +672a : 00000000; +672b : 00000000; +672c : 00000000; +672d : 00000000; +672e : 00000000; +672f : 00000000; +6730 : 00000000; +6731 : 00000000; +6732 : 00000000; +6733 : 00000000; +6734 : 00000000; +6735 : 00000000; +6736 : 00000000; +6737 : 00000000; +6738 : 00000000; +6739 : 00000000; +673a : 00000000; +673b : 00000000; +673c : 00000000; +673d : 00000000; +673e : 00000000; +673f : 00000000; +6740 : 00000000; +6741 : 00000000; +6742 : 000010F0; +6743 : 00001128; +6744 : 000011B8; +6745 : 000011C0; +6746 : 00001218; +6747 : 00001244; +6748 : 0000129C; +6749 : 000012C0; +674a : 00001384; +674b : 0000138C; +674c : 00001394; +674d : 000013F8; +674e : 00001414; +674f : 000011E4; +6750 : 00000000; +6751 : 00002460; +6752 : 000023D8; +6753 : 0000237C; +6754 : 00002324; +6755 : 00000000; +6756 : 00000000; +6757 : 000022FC; +6758 : 000028D0; +6759 : 000028B0; +675a : 000026A8; +675b : 000024F4; +675c : 00000000; +675d : 00000000; +675e : 00000000; +675f : 00000000; +6760 : 00000000; +6761 : 00000000; +6762 : 00000000; +6763 : 00000000; +6764 : 00000000; +6765 : 00000000; +6766 : 00000000; +6767 : 00000200; +6768 : 00000000; +6769 : 0001B3E8; +676a : 00000001; +676b : 00017038; +676c : 000053C8; +676d : 00000002; +676e : 00017048; +676f : 000055D4; +6770 : 00000003; +6771 : 00017050; +6772 : 00005620; +6773 : 00000004; +6774 : 0001705C; +6775 : 00005630; +6776 : 00000005; +6777 : 00017068; +6778 : 00005720; +6779 : 00000006; +677a : 0001706C; +677b : 00005720; +677c : 00000007; +677d : 00017074; +677e : 0000588C; +677f : 00000008; +6780 : 0001707C; +6781 : 000058E0; +6782 : 00000009; +6783 : 0001708C; +6784 : 00005A6C; +6785 : 00000064; +6786 : 00017094; +6787 : 0000314C; +6788 : 00000066; +6789 : 000170AC; +678a : 00003234; +678b : 00000065; +678c : 000170C0; +678d : 00003308; +678e : 00000067; +678f : 000170D8; +6790 : 000033EC; +6791 : 00000068; +6792 : 000170F0; +6793 : 000034C0; +6794 : 00000069; +6795 : 00017100; +6796 : 00003794; +6797 : 0000006A; +6798 : 00017110; +6799 : 00003868; +679a : 0000006B; +679b : 00017124; +679c : 000039A0; +679d : 00000075; +679e : 00017130; +679f : 00004F18; +67a0 : 00000000; +67a1 : 00000000; +67a2 : 00000000; +67a3 : 00000001; +67a4 : 00017038; +67a5 : 000053C8; +67a6 : 00000002; +67a7 : 00017048; +67a8 : 000055D4; +67a9 : 00000003; +67aa : 00017050; +67ab : 00005620; +67ac : 00000004; +67ad : 0001705C; +67ae : 00005630; +67af : 00000005; +67b0 : 00017068; +67b1 : 00005720; +67b2 : 00000006; +67b3 : 0001706C; +67b4 : 00005720; +67b5 : 00000007; +67b6 : 00017074; +67b7 : 0000588C; +67b8 : 00000008; +67b9 : 0001707C; +67ba : 000058E0; +67bb : 00000009; +67bc : 0001708C; +67bd : 00005A6C; +67be : 00000000; +67bf : 00000000; +67c0 : 00000000; +67c1 : 00002B44; +67c2 : 00002A64; +67c3 : 00000000; +67c4 : 00002A1C; +67c5 : 00002F50; +67c6 : 00002F08; +67c7 : 00002E1C; +67c8 : 0000298C; +67c9 : 00002DA8; +67ca : 00002D2C; +67cb : 00002CB8; +67cc : 00000000; +67cd : 00000000; +67ce : 00002C50; +67cf : 00002BE4; +67d0 : 00000001; +67d1 : 000000BB; +67d2 : 000000FE; +67d3 : FFFFF060; +67d4 : 00000001; +67d5 : 00000000; +67d6 : 000A03E8; +67d7 : 00060100; +67d8 : 00000000; +67d9 : 00000080; +67da : 00000080; +67db : 00000000; +67dc : 00000000; +67dd : 00019828; +67de : 766C616E; +67df : 206F6666; +67e0 : 3B707470; +67e1 : 2073746F; +67e2 : 703B7366; +67e3 : 70206D61; +67e4 : 7463683B; +67e5 : 6D6F6465; +67e6 : 20736C61; +67e7 : 76653B70; +67e8 : 74702073; +67e9 : 74617274; +67ea : 00000000; +67eb : 00019F78; +67ec : 000180E4; +67ed : 000017D8; +67ee : 00000001; +67ef : 000180EC; +67f0 : 000017D8; +67f1 : 00000000; +67f2 : 000180F4; +67f3 : 00001474; +67f4 : 00000000; +67f5 : 000180F8; +67f6 : 00001474; +67f7 : 00000000; +67f8 : 00018100; +67f9 : 000015B4; +67fa : 00000001; +67fb : 0001706C; +67fc : 000015B4; +67fd : 00000002; +67fe : 0001708C; +67ff : 000015B4; +6800 : 00000003; +6801 : 00018104; +6802 : 000015B4; +6803 : 00000004; +6804 : 00000000; +6805 : 00000000; +6806 : 00000000; +6807 : 00000000; +6808 : 00000000; +6809 : 00000000; +680a : 00000000; +680b : 00000000; +680c : 00000000; +680d : 00000000; +680e : 00000200; +680f : 00000000; +6810 : 0001B914; +6811 : 00000000; +6812 : 00000000; +6813 : 00000000; +6814 : 00000000; +6815 : 00000000; +6816 : 00000000; +6817 : 00000000; +6818 : 00000000; +6819 : 00000000; +681a : 00000000; +681b : 00000060; +681c : 00000000; +681d : 0001BB14; +681e : 00000000; +681f : 00000000; +6820 : 00000000; +6821 : 00000000; +6822 : 00000000; +6823 : 00000000; +6824 : 00000000; +6825 : 00000000; +6826 : 00000000; +6827 : 00000000; +6828 : 00000080; +6829 : 00000000; +682a : 0001BB74; +682b : 00000000; +682c : 00000000; +682d : 00000000; +682e : 00000000; +682f : 00000000; +6830 : 00000000; +6831 : 00000000; +6832 : 00000000; +6833 : 00000000; +6834 : 00000000; +6835 : 00000080; +6836 : 00000000; +6837 : 0001BBF8; +6838 : 0001A1DC; +6839 : 0000CEDC; +683a : 0001A1E8; +683b : 09000000; +683c : 0001A24C; +683d : 0000CEDC; +683e : 0001A258; +683f : 09000000; +6840 : 0001A2A8; +6841 : 0000CCCC; +6842 : 0001A2B4; +6843 : 0A000000; +6844 : 0001A2F0; +6845 : 0000CEDC; +6846 : 0001A2FC; +6847 : 09000000; +6848 : 0001A3C4; +6849 : 0000CEDC; +684a : 0001A3D0; +684b : 09000000; +684c : 0001A538; +684d : 0000CEDC; +684e : 0001A544; +684f : 09000000; +6850 : 0001A5D0; +6851 : 0000CEDC; +6852 : 0001A5DC; +6853 : 09000000; +6854 : 0001A654; +6855 : 0000CCCC; +6856 : 0001A660; +6857 : 0A000000; +6858 : 0001A190; +6859 : 0000C61C; +685a : 0001A6C4; +685b : 0C000000; +685c : 0001A19C; +685d : 0000C61C; +685e : 0001A6EC; +685f : 0C000000; +6860 : 00000000; +6861 : 00000000; +6862 : 00000000; +6863 : 00000000; +6864 : 2B060104; +6865 : 01606502; +6866 : 00000101; +6867 : 2B060104; +6868 : 01606502; +6869 : 00000201; +686a : 00000000; +686b : 00000000; +686c : 00000000; +686d : 00000000; +686e : 00000000; +686f : 00000000; +6870 : 00000000; +6871 : 00000000; +6872 : 00000000; +6873 : 00000000; +6874 : 00000100; +6875 : 00000000; +6876 : 0001BCA8; +6877 : 2B060104; +6878 : 01606501; +6879 : 01000000; +687a : 0001A714; +687b : 0000D47C; +687c : 00000000; +687d : 0001C284; +687e : 02040005; +687f : 0001A718; +6880 : 0000D450; +6881 : 00000000; +6882 : 000196E8; +6883 : 02040004; +6884 : 0001A71C; +6885 : 0000D450; +6886 : 00000000; +6887 : 000196F4; +6888 : 02040004; +6889 : 0001A720; +688a : 0000D450; +688b : 00000000; +688c : 0001A724; +688d : 02040004; +688e : 00000000; +688f : 00000000; +6890 : 00000000; +6891 : 00000000; +6892 : 00000000; +6893 : 2B060104; +6894 : 01606501; +6895 : 02000000; +6896 : 0001A728; +6897 : 0000D944; +6898 : 00000000; +6899 : 00000004; +689a : 02460001; +689b : 0001A72C; +689c : 0000D944; +689d : 00000000; +689e : 00000005; +689f : 02040001; +68a0 : 0001A730; +68a1 : 0000D944; +68a2 : 00000000; +68a3 : 00000002; +68a4 : 02430001; +68a5 : 00000000; +68a6 : 00000000; +68a7 : 00000000; +68a8 : 00000000; +68a9 : 00000000; +68aa : 2B060104; +68ab : 01606501; +68ac : 03010000; +68ad : 0001A734; +68ae : 0000D814; +68af : 00000000; +68b0 : 00000000; +68b1 : 01040001; +68b2 : 0001A738; +68b3 : 0000D814; +68b4 : 00000000; +68b5 : 00000000; +68b6 : 01040001; +68b7 : 00000000; +68b8 : 00000000; +68b9 : 00000000; +68ba : 00000000; +68bb : 00000000; +68bc : 2B060104; +68bd : 01606501; +68be : 04000000; +68bf : 0001A73C; +68c0 : 0000D47C; +68c1 : 00000000; +68c2 : 0001AD90; +68c3 : 02020004; +68c4 : 0001A740; +68c5 : 0000D47C; +68c6 : 00000000; +68c7 : 0001AD94; +68c8 : 02410004; +68c9 : 0001A744; +68ca : 0000D47C; +68cb : 00000000; +68cc : 0001AD98; +68cd : 02020004; +68ce : 0001A748; +68cf : 0000D47C; +68d0 : 00000000; +68d1 : 0001AD9C; +68d2 : 02020004; +68d3 : 0001A74C; +68d4 : 0000D47C; +68d5 : 00000000; +68d6 : 0001ADA0; +68d7 : 02410004; +68d8 : 0001A750; +68d9 : 0000D47C; +68da : 00000000; +68db : 0001ADA4; +68dc : 02410004; +68dd : 0001A754; +68de : 0000D47C; +68df : 00000000; +68e0 : 0001ADA8; +68e1 : 02020004; +68e2 : 0001A758; +68e3 : 0000D47C; +68e4 : 00000000; +68e5 : 0001ADAC; +68e6 : 02020004; +68e7 : 0001A75C; +68e8 : 0000D47C; +68e9 : 00000000; +68ea : 0001ADB0; +68eb : 02410004; +68ec : 00000000; +68ed : 00000000; +68ee : 00000000; +68ef : 00000000; +68f0 : 00000000; +68f1 : 2B060104; +68f2 : 01606501; +68f3 : 05000000; +68f4 : 0001A760; +68f5 : 0000D450; +68f6 : 00000000; +68f7 : 0001BC7C; +68f8 : 02021404; +68f9 : 0001A764; +68fa : 0000D3C4; +68fb : 00000000; +68fc : 0001BC7C; +68fd : 02028808; +68fe : 0001A768; +68ff : 0000D3C4; +6900 : 00000000; +6901 : 0001BC7C; +6902 : 02028008; +6903 : 0001A76C; +6904 : 0000D450; +6905 : 00000000; +6906 : 0001BC7C; +6907 : 02464008; +6908 : 0001A770; +6909 : 0000D450; +690a : 00000000; +690b : 0001BC7C; +690c : 02415804; +690d : 0001A774; +690e : 0000D2B0; +690f : 00000000; +6910 : 00000001; +6911 : 02460001; +6912 : 0001A778; +6913 : 0000D450; +6914 : 00000000; +6915 : 0001BC7C; +6916 : 02021804; +6917 : 0001A77C; +6918 : 0000D450; +6919 : 00000000; +691a : 0001BC7C; +691b : 02021C04; +691c : 0001A780; +691d : 0000D450; +691e : 00000000; +691f : 0001BC7C; +6920 : 02022004; +6921 : 0001A784; +6922 : 0000D450; +6923 : 00000000; +6924 : 0001BC7C; +6925 : 02022404; +6926 : 0001A788; +6927 : 0000D450; +6928 : 00000000; +6929 : 0001BC7C; +692a : 02419004; +692b : 0001A78C; +692c : 0000D450; +692d : 00000000; +692e : 0001BC7C; +692f : 02419404; +6930 : 0001A790; +6931 : 0000D450; +6932 : 00000000; +6933 : 0001BC7C; +6934 : 02419804; +6935 : 0001A794; +6936 : 0000D2B0; +6937 : 00000000; +6938 : 00000002; +6939 : 02460001; +693a : 0001A798; +693b : 0000D47C; +693c : 00000000; +693d : 00019C38; +693e : 02410004; +693f : 0001A79C; +6940 : 0000D47C; +6941 : 00000000; +6942 : 00019C3C; +6943 : 02410004; +6944 : 0001A7A0; +6945 : 0000D450; +6946 : 00000000; +6947 : 0001BC7C; +6948 : 02022804; +6949 : 00000000; +694a : 00000000; +694b : 00000000; +694c : 00000000; +694d : 00000000; +694e : 2B060104; +694f : 01606501; +6950 : 06000000; +6951 : 0001A7A4; +6952 : 0000D47C; +6953 : 0000D634; +6954 : 0001BDA8; +6955 : 02020004; +6956 : 0001A7A8; +6957 : 0000D47C; +6958 : 0000D694; +6959 : 0001BDAC; +695a : 02020004; +695b : 0001A7AC; +695c : 0000D47C; +695d : 0000CCA8; +695e : 0001BC80; +695f : 02040010; +6960 : 0001A7B0; +6961 : 0000D47C; +6962 : 0000CCA8; +6963 : 0001BC94; +6964 : 02020004; +6965 : 0001A7B4; +6966 : 0000D47C; +6967 : 0000CCA8; +6968 : 0001BC98; +6969 : 02020004; +696a : 0001A7B8; +696b : 0000D47C; +696c : 0000CCA8; +696d : 0001BC90; +696e : 02020004; +696f : 00000000; +6970 : 00000000; +6971 : 00000000; +6972 : 00000000; +6973 : 00000000; +6974 : 2B060104; +6975 : 01606501; +6976 : 07000000; +6977 : 0001A7BC; +6978 : 0000D5D4; +6979 : 00000000; +697a : 00000001; +697b : 02020001; +697c : 0001A7C0; +697d : 0000D47C; +697e : 00000000; +697f : 0001BFBC; +6980 : 02040010; +6981 : 0001A7C4; +6982 : 0000D47C; +6983 : 00000000; +6984 : 0001BF48; +6985 : 02020004; +6986 : 0001A7C8; +6987 : 0000D47C; +6988 : 00000000; +6989 : 0001C27C; +698a : 02410004; +698b : 0001A7CC; +698c : 0000D47C; +698d : 00000000; +698e : 0001C280; +698f : 02410004; +6990 : 00000000; +6991 : 00000000; +6992 : 00000000; +6993 : 00000000; +6994 : 00000000; +6995 : 2B060104; +6996 : 01606501; +6997 : 08010000; +6998 : 0001A7D0; +6999 : 0000D4A4; +699a : 00000000; +699b : 00000000; +699c : 01040001; +699d : 0001A7D4; +699e : 0000D4A4; +699f : 00000000; +69a0 : 00000000; +69a1 : 01020001; +69a2 : 0001A7D8; +69a3 : 0000D4A4; +69a4 : 00000000; +69a5 : 00000000; +69a6 : 01020001; +69a7 : 0001A7DC; +69a8 : 0000D4A4; +69a9 : 00000000; +69aa : 00000000; +69ab : 01020001; +69ac : 00000000; +69ad : 00000000; +69ae : 00000000; +69af : 00000000; +69b0 : 00000000; +69b1 : 00000000; +69b2 : 0000D294; +69b3 : 00000000; +69b4 : 00000001; +69b5 : 04420001; +69b6 : 00000000; +69b7 : 00000000; +69b8 : 00000000; +69b9 : 00000000; +69ba : 00000000; +69bb : 00000000; +69bc : 0000D294; +69bd : 0000D278; +69be : 00000000; +69bf : 04420001; +69c0 : 00000000; +69c1 : 00000000; +69c2 : 00000000; +69c3 : 00000000; +69c4 : 00000000; +69c5 : 01000000; +69c6 : 02000000; +69c7 : 03000000; +69c8 : 04000000; +69c9 : 000187E0; +69ca : 01000000; +69cb : 02000000; +69cc : 03000000; +69cd : 02000000; +69ce : 03000000; +69cf : 01000000; +69d0 : 02000000; +69d1 : 03000000; +69d2 : 04000000; +69d3 : 05000000; +69d4 : 06000000; +69d5 : 07000000; +69d6 : 08000000; +69d7 : 09000000; +69d8 : 05000000; +69d9 : 08000000; +69da : 09000000; +69db : 0A000000; +69dc : 0C000000; +69dd : 0D000000; +69de : 0E000000; +69df : 0F000000; +69e0 : 10000000; +69e1 : 11000000; +69e2 : 12000000; +69e3 : 13000000; +69e4 : 14000000; +69e5 : 16000000; +69e6 : 17000000; +69e7 : 18000000; +69e8 : 1A000000; +69e9 : 01000000; +69ea : 02000000; +69eb : 03000000; +69ec : 04000000; +69ed : 05000000; +69ee : 06000000; +69ef : 01000000; +69f0 : 02000000; +69f1 : 03000000; +69f2 : 04000000; +69f3 : 05000000; +69f4 : 02000000; +69f5 : 03000000; +69f6 : 04000000; +69f7 : 05000000; +69f8 : 0001AA5C; +69f9 : 0001AB58; +69fa : 0001AB58; +69fb : 0001AC3C; +69fc : 00000004; +69fd : 00000008; +69fe : 0000000F; +69ff : 00000100; +6a00 : 00000200; +6a01 : 0000012C; +6a02 : 046362A0; +6a03 : 00000000; +6a04 : 0001C2BC; +6a05 : 00000000; +6a06 : 00000000; +6a07 : 0000CE42; +6a08 : AB28633A; +6a09 : 00000000; +6a0a : 0001BFA0; +6a0b : 00000000; +6a0c : 00000000; +6a0d : 0000CE42; +6a0e : 650C2D4F; +6a0f : 00000000; +6a10 : 0001C2C4; +6a11 : 00000000; +6a12 : 00000000; +6a13 : 0000CE42; +6a14 : 65158DC0; +6a15 : 00000000; +6a16 : 0001BFD4; +6a17 : 00000000; +6a18 : 00000000; +6a19 : 0000CE42; +6a1a : DE0D8CED; +6a1b : 00000000; +6a1c : 0001C2C0; +6a1d : 00000000; +6a1e : 00000000; +6a1f : 0000CE42; +6a20 : FF07FC47; +6a21 : 00000000; +6a22 : 0001C28C; +6a23 : 00000000; +6a24 : 00000000; +6a25 : 0000CE42; +6a26 : E2D13D04; +6a27 : 00000000; +6a28 : 0001C278; +6a29 : 00000000; +6a2a : 00000000; +6a2b : 0000CE42; +6a2c : 779C5443; +6a2d : 00000000; +6a2e : 0001C2B8; +6a2f : 00000000; +6a30 : 00000000; +6a31 : 00000651; +6a32 : 68202B22; +6a33 : 00000000; +6a34 : 000189D4; +6a35 : 00000000; +6a36 : 00000001; +6a37 : 00030000; +6a38 : 00000004; +6a39 : 00000000; +6a3a : 00000000; +6a3b : 00000000; +6a3c : 00000000; +6a3d : 00000000; +6a3e : 00000000; +6a3f : 00000000; +6a40 : 00000000; +6a41 : 00000000; +6a42 : 00000000; +6a43 : 00000000; +6a44 : 00000000; +6a45 : 00000000; +6a46 : 00000000; +6a47 : 00000000; +6a48 : 00000000; +6a49 : 00000000; +6a4a : 00000000; +6a4b : 00000000; +6a4c : 00000000; +6a4d : 00000000; +6a4e : 00000000; +6a4f : 00000000; +6a50 : 00000000; +6a51 : 00000000; +6a52 : 00000000; +6a53 : 00000000; +6a54 : 00000000; +6a55 : 00000000; +6a56 : 00000000; +6a57 : 00000000; +6a58 : 00000000; +6a59 : 00000000; +6a5a : 00000000; +6a5b : 00000000; +6a5c : 00000000; +6a5d : 00000000; +6a5e : 00000000; +6a5f : 00000000; +6a60 : 00000000; +6a61 : 00000000; +6a62 : 00018D54; +6a63 : 0001BF78; +6a64 : 00000001; +6a65 : 00000000; +6a66 : 00000000; +6a67 : 00000000; +6a68 : 00000000; +6a69 : 00010D5C; +6a6a : 00010F18; +6a6b : 00000000; +6a6c : 00000000; +6a6d : 00000000; +6a6e : 00000000; +6a6f : 00000000; +6a70 : 00000000; +6a71 : 00000000; +6a72 : 00000000; +6a73 : 00000000; +6a74 : 00000000; +6a75 : 00000000; +6a76 : 00000000; +6a77 : 00000000; +6a78 : 00000000; +6a79 : 00000000; +6a7a : 00000000; +6a7b : 00000000; +6a7c : 00000000; +6a7d : 00000000; +6a7e : 00000000; +6a7f : 00000000; +6a80 : 00000000; +6a81 : 00000000; +6a82 : 00000000; +6a83 : 00000000; +6a84 : 00000000; +6a85 : 00000000; +6a86 : 00000000; +6a87 : 00000000; +6a88 : 00000000; +6a89 : 00000000; +6a8a : 00000000; +6a8b : 00000000; +6a8c : 00000000; +6a8d : 00000000; +6a8e : 00000000; +6a8f : 00000000; +6a90 : 00012AF4; +6a91 : 00012B28; +6a92 : 00012B58; +6a93 : 00017BB8; +6a94 : 80000000; +6a95 : 00000000; +6a96 : 00000000; +6a97 : 44332211; +6a98 : 00000000; +6a99 : 04000000; +6a9a : 138046E2; +6a9b : 01000000; +6a9c : 9000CFEA; +6a9d : 01000000; +6a9e : 108157F3; +6a9f : 01000000; +6aa0 : 0BE0FFFF; +6aa1 : 01000000; +6aa2 : 88E0FFFF; +6aa3 : 01000000; +6aa4 : 08E1FFFF; +6aa5 : 01000000; +6aa6 : 1B0020E0; +6aa7 : 01000000; +6aa8 : 9800C0EB; +6aa9 : 01000000; +6aaa : 6B2130E0; +6aab : 01000000; +6aac : 69610DE0; +6aad : 01000000; +6aae : 10A38900; +6aaf : 04000000; +6ab0 : 6B0320F0; +6ab1 : 01000000; +6ab2 : BB0D8001; +6ab3 : 04000000; +6ab4 : 33E31EF1; +6ab5 : 01000000; +6ab6 : 31C35FF9; +6ab7 : 01000000; +6ab8 : 2B0300E1; +6ab9 : 01000000; +6aba : 43C300E1; +6abb : 01000000; +6abc : 79411400; +6abd : 04000000; +6abe : CB250060; +6abf : 00000000; +6ac0 : D3250260; +6ac1 : 00000000; +6ac2 : 50EA8101; +6ac3 : 04000000; +6ac4 : 81C88001; +6ac5 : 04000000; +6ac6 : 802FC100; +6ac7 : 04000000; +6ac8 : 5B090080; +6ac9 : 01000000; +6aca : 59092080; +6acb : 01000000; +6acc : C06AC100; +6acd : 04000000; +6ace : 63097AFD; +6acf : 01000000; +6ad0 : F88A8101; +6ad1 : 04000000; +6ad2 : F48A8101; +6ad3 : 04000000; +6ad4 : 00000000; +6ad5 : 08000000; +6ad6 : 44332211; +6ad7 : 00000000; +6ad8 : 04000000; +6ad9 : 138046E2; +6ada : 01000000; +6adb : 9000CFEA; +6adc : 01000000; +6add : 108157F3; +6ade : 01000000; +6adf : 0BE0FFFF; +6ae0 : 01000000; +6ae1 : 88E0FFFF; +6ae2 : 01000000; +6ae3 : 08E1FFFF; +6ae4 : 01000000; +6ae5 : 1B0020E0; +6ae6 : 01000000; +6ae7 : 9800C0EB; +6ae8 : 01000000; +6ae9 : 6B2130E0; +6aea : 01000000; +6aeb : 69610DE0; +6aec : 01000000; +6aed : 10A38900; +6aee : 04000000; +6aef : 6B0320F0; +6af0 : 01000000; +6af1 : BF0D8001; +6af2 : 04000000; +6af3 : A34355E1; +6af4 : 00000000; +6af5 : 33E41EF1; +6af6 : 01000000; +6af7 : 31C45FF9; +6af8 : 01000000; +6af9 : 2B0400E1; +6afa : 01000000; +6afb : 43C400E1; +6afc : 01000000; +6afd : 81229800; +6afe : 04000000; +6aff : C0908001; +6b00 : 04000000; +6b01 : 69228001; +6b02 : 04000000; +6b03 : A34301E0; +6b04 : 00000000; +6b05 : A16301E0; +6b06 : 00000000; +6b07 : F88D8001; +6b08 : 04000000; +6b09 : A38302E0; +6b0a : 00000000; +6b0b : F08D8001; +6b0c : 04000000; +6b0d : 00000000; +6b0e : 08000000; +6b0f : 5344422D; +6b10 : 00050101; +6b11 : 00000000; +6b12 : 00000000; +6b13 : 00000000; +6b14 : 0000037F; +6b15 : 46696C65; +6b16 : 44617461; +6b17 : 2E202020; +6b18 : 00000001; +6b19 : 00000000; +6b1a : 2E202020; +6b1b : 20202020; +6b1c : 20202020; +6b1d : 20202020; +6b1e : 20202000; +6b1f : 00000000; +6b20 : 00000006; +6b21 : 00000000; +6b22 : 00000140; +6b23 : 00000000; +6b24 : 0000023F; +6b25 : 46696C65; +6b26 : 44617461; +6b27 : 77722D69; +6b28 : 00000001; +6b29 : 00000000; +6b2a : 77722D69; +6b2b : 6E697420; +6b2c : 20202020; +6b2d : 20202020; +6b2e : 20202001; +6b2f : 00000000; +6b30 : 00000006; +6b31 : 00000000; +6b32 : 00000240; +6b33 : 00000000; +6b34 : 000002BF; +6b35 : 46696C65; +6b36 : 44617461; +6b37 : 63616C69; +6b38 : 00000001; +6b39 : 00000000; +6b3a : 63616C69; +6b3b : 62726174; +6b3c : 696F6E20; +6b3d : 20202020; +6b3e : 20202001; +6b3f : 00000000; +6b40 : 00000006; +6b41 : 00000000; +6b42 : 000002C0; +6b43 : 00000000; +6b44 : 000002C5; +6b45 : 46696C65; +6b46 : 44617461; +6b47 : 6D61632D; +6b48 : 00000001; +6b49 : 00000000; +6b4a : 6D61632D; +6b4b : 61646472; +6b4c : 65737320; +6b4d : 20202020; +6b4e : 20202001; +6b4f : 00000000; +6b50 : 00000006; +6b51 : 00000000; +6b52 : 00000300; +6b53 : 00000000; +6b54 : 0000037F; +6b55 : 46696C65; +6b56 : 44617461; +6b57 : 7366702D; +6b58 : 00000001; +6b59 : 00000000; +6b5a : 7366702D; +6b5b : 64617461; +6b5c : 62617365; +6b5d : 20202020; +6b5e : 20202001; +6b5f : FFFFFFFF; +6b60 : 000195E0; +6b61 : 5B1157A7; +6b62 : 00000003; +6b63 : 00000000; +6b64 : 00000000; +6b65 : 00000000; +6b66 : 00000000; +6b67 : 00000000; +6b68 : 00000000; +6b69 : 00000000; +6b6a : 00000000; +6b6b : 00000000; +6b6c : 00000000; +6b6d : 00000000; +6b6e : 77727063; +6b6f : 2D76342E; +6b70 : 32000000; +6b71 : 00000000; +6b72 : 00000000; +6b73 : 00000000; +6b74 : 00000000; +6b75 : 00000000; +6b76 : 44656320; +6b77 : 31382032; +6b78 : 30313700; +6b79 : 00000000; +6b7a : 30393A33; +6b7b : 323A3530; +6b7c : 00000000; +6b7d : 00000000; +6b7e : 47727A65; +6b7f : 676F727A; +6b80 : 2044616E; +6b81 : 696C756B; +6b82 : 00000000; +6b83 : 00000000; +6b84 : 00000000; +6b85 : 00000000; +6b86 : 000180B8; +6b87 : 00009640; +6b88 : 0001810C; +6b89 : 00009700; +6b8a : 000167F4; +6b8b : 00009700; +6b8c : 00018148; +6b8d : 0000983C; +6b8e : 0001819C; +6b8f : 00009954; +6b90 : 0001821C; +6b91 : 00009A64; +6b92 : 000167F8; +6b93 : 00009B9C; +6b94 : 00018240; +6b95 : 00009BCC; +6b96 : 00018264; +6b97 : 00009C2C; +6b98 : 00018394; +6b99 : 00009D30; +6b9a : 000183D0; +6b9b : 0000A0C8; +6b9c : 0001842C; +6b9d : 0000A330; +6b9e : 00018464; +6b9f : 0000A408; +6ba0 : 0001846C; +6ba1 : 0000A568; +6ba2 : 00018478; +6ba3 : 0000A580; +6ba4 : 000184A8; +6ba5 : 0000A728; +6ba6 : 0001851C; +6ba7 : 0000A878; +6ba8 : 00018538; +6ba9 : 0000A968; +6baa : 00018398; +6bab : 0000A9B0; +6bac : 000185C0; +6bad : 0000AA94; +6bae : 00018654; +6baf : 0000AB78; +6bb0 : 00018AB8; +6bb1 : 00010AA4; +6bb2 : 00018DE8; +6bb3 : 00012DA4; +6bb4 : 00018DEC; +6bb5 : 00012CA8; +6bb6 : 00018DF0; +6bb7 : 00012BAC; +6bb8 : 000136A0; +6bb9 : 00000000; +6bba : 0001AA4C; +6bbb : 0001680C; +6bbc : 00000000; +6bbd : 000002A4; +6bbe : 00000000; +6bbf : 00000000; +6bc0 : 00000000; +6bc1 : 00000000; +6bc2 : 00000000; +6bc3 : 000167E0; +6bc4 : 00000000; +6bc5 : 00000000; +6bc6 : 00015268; +6bc7 : 00000000; +6bc8 : 00000000; +6bc9 : 00000000; +6bca : 00000000; +6bcb : 000167E8; +6bcc : 00000000; +6bcd : 000094C0; +6bce : 000004E4; +6bcf : 00000000; +6bd0 : 00000000; +6bd1 : 00000000; +6bd2 : 00000000; +6bd3 : 000167F4; +6bd4 : 00000000; +6bd5 : 00000000; +6bd6 : 00001818; +6bd7 : 00000000; +6bd8 : 00000000; +6bd9 : 00000000; +6bda : 00000000; +6bdb : 000167F8; +6bdc : 00000000; +6bdd : 00000280; +6bde : 00000214; +6bdf : 00000000; +6be0 : 00000000; +6be1 : 00000000; +6be2 : 00000000; +6be3 : 00016800; +6be4 : 00000000; +6be5 : 00000000; +6be6 : 000003F4; +6be7 : 00000000; +6be8 : 00000000; +6be9 : 00000000; +6bea : 00000000; +6beb : 00017F94; +6bec : 00000000; +6bed : 00000000; +6bee : 000082A0; +6bef : 00000000; +6bf0 : 00000000; +6bf1 : 00000000; +6bf2 : 00000000; +6bf3 : 00017F9C; +6bf4 : 00000000; +6bf5 : 00000000; +6bf6 : 00007EE8; +6bf7 : 00000000; +6bf8 : 00000000; +6bf9 : 00000000; +6bfa : 00000000; +6bfb : 00018760; +6bfc : 0001C2A4; +6bfd : 00000000; +6bfe : 0000B29C; +6bff : 00000000; +6c00 : 00000000; +6c01 : 00000000; +6c02 : 00000000; +6c03 : 00018768; +6c04 : 0001C2A4; +6c05 : 0000BA10; +6c06 : 0000BBF8; +6c07 : 00000000; +6c08 : 00000000; +6c09 : 00000000; +6c0a : 00000000; +6c0b : 00018770; +6c0c : 0001C2A4; +6c0d : 0000BFEC; +6c0e : 0000BE60; +6c0f : 00000000; +6c10 : 00000000; +6c11 : 00000000; +6c12 : 00000000; +6c13 : 000187D8; +6c14 : 0001C2A4; +6c15 : 0000D9F0; +6c16 : 0000C8C4; +6c17 : 00000000; +6c18 : 00000000; +6c19 : 00000000; +6c1a : 00000000; +6c1b : 00018808; +6c1c : 00000000; +6c1d : 0000DF64; +6c1e : 0000DE54; +6c1f : 00000000; +6c20 : 00000000; +6c21 : 00000000; +6c22 : 00000000; +6c23 : 00018AC0; +6c24 : 00000000; +6c25 : 0001077C; +6c26 : 000107C8; +6c27 : 00000000; +6c28 : 00000000; +6c29 : 00000000; +6c2a : 00000000; +6c2b : 00000000; +6c2c : 00000000; +6c2d : 00000000; +6c2e : 00000000; +6c2f : 00000000; +6c30 : 00000000; +6c31 : 00000000; +6c32 : 00000000; +6c33 : 00000000; +6c34 : 00000000; +6c35 : 00000000; +6c36 : 00000000; +6c37 : 00000000; +6c38 : 00000000; +6c39 : 00000000; +6c3a : 00000000; +6c3b : 00000000; +6c3c : 00000000; +6c3d : 00000000; +6c3e : 00000000; +6c3f : 00000000; +6c40 : 00000000; +6c41 : 00000000; +6c42 : 00000000; +6c43 : 00000000; +6c44 : 00000000; +6c45 : 00000000; +6c46 : 00000000; +6c47 : 00000000; +6c48 : 00000000; +6c49 : 00000000; +6c4a : 00000000; +6c4b : 00000000; +6c4c : 00000000; +6c4d : 00000000; +6c4e : 00000000; +6c4f : 00000000; +6c50 : 00000000; +6c51 : 00000000; +6c52 : 00000000; +6c53 : 00000000; +6c54 : 00000000; +6c55 : 00000000; +6c56 : 00000000; +6c57 : 00000000; +6c58 : 00000000; +6c59 : 00000000; +6c5a : 00000000; +6c5b : 00000000; +6c5c : 00000000; +6c5d : 00000000; +6c5e : 00000000; +6c5f : 00000000; +6c60 : 00000000; +6c61 : 00000000; +6c62 : 00000000; +6c63 : 00000000; +6c64 : 00000000; +6c65 : 00000000; +6c66 : 00000000; +6c67 : 00000000; +6c68 : 00000000; +6c69 : 00000000; +6c6a : 00000000; +6c6b : 00000000; +6c6c : 00000000; +6c6d : 00000000; +6c6e : 00000000; +6c6f : 00000000; +6c70 : 00000000; +6c71 : 00000000; +6c72 : 00000000; +6c73 : 00000000; +6c74 : 00000000; +6c75 : 00000000; +6c76 : 00000000; +6c77 : 00000000; +6c78 : 00000000; +6c79 : 00000000; +6c7a : 00000000; +6c7b : 00000000; +6c7c : 00000000; +6c7d : 00000000; +6c7e : 00000000; +6c7f : 00000000; +6c80 : 00000000; +6c81 : 00000000; +6c82 : 00000000; +6c83 : 00000000; +6c84 : 00000000; +6c85 : 00000000; +6c86 : 00000000; +6c87 : 00000000; +6c88 : 00000000; +6c89 : 00000000; +6c8a : 00000000; +6c8b : 00000000; +6c8c : 00000000; +6c8d : 00000000; +6c8e : 00000000; +6c8f : 00000000; +6c90 : 00000000; +6c91 : 00000000; +6c92 : 00000000; +6c93 : 00000000; +6c94 : 00000000; +6c95 : 00000000; +6c96 : 00000000; +6c97 : 00000000; +6c98 : 00000000; +6c99 : 00000000; +6c9a : 00000000; +6c9b : 00000000; +6c9c : 00000000; +6c9d : 00000000; +6c9e : 00000000; +6c9f : 00000000; +6ca0 : 00000000; +6ca1 : 00000000; +6ca2 : 00000000; +6ca3 : 00000000; +6ca4 : 00000000; +6ca5 : 00000000; +6ca6 : 00000000; +6ca7 : 00000000; +6ca8 : 00000000; +6ca9 : 00000000; +6caa : 00000000; +6cab : 00000000; +6cac : 00000000; +6cad : 00000000; +6cae : 00000000; +6caf : 00000000; +6cb0 : 00000000; +6cb1 : 00000000; +6cb2 : 00000000; +6cb3 : 00000000; +6cb4 : 00000000; +6cb5 : 00000000; +6cb6 : 00000000; +6cb7 : 00000000; +6cb8 : 00000000; +6cb9 : 00000000; +6cba : 00000000; +6cbb : 00000000; +6cbc : 00000000; +6cbd : 00000000; +6cbe : 00000000; +6cbf : 00000000; +6cc0 : 00000000; +6cc1 : 00000000; +6cc2 : 00000000; +6cc3 : 00000000; +6cc4 : 00000000; +6cc5 : 00000000; +6cc6 : 00000000; +6cc7 : 00000000; +6cc8 : 00000000; +6cc9 : 00000000; +6cca : 00000000; +6ccb : 00000000; +6ccc : 00000000; +6ccd : 00000000; +6cce : 00000000; +6ccf : 00000000; +6cd0 : 00000000; +6cd1 : 00000000; +6cd2 : 00000000; +6cd3 : 00000000; +6cd4 : 00000000; +6cd5 : 00000000; +6cd6 : 00000000; +6cd7 : 00000000; +6cd8 : 00000000; +6cd9 : 00000000; +6cda : 00000000; +6cdb : 00000000; +6cdc : 00000000; +6cdd : 00000000; +6cde : 00000000; +6cdf : 00000000; +6ce0 : 00000000; +6ce1 : 00000000; +6ce2 : 00000000; +6ce3 : 00000000; +6ce4 : 00000000; +6ce5 : 00000000; +6ce6 : 00000000; +6ce7 : 00000000; +6ce8 : 00000000; +6ce9 : 00000000; +6cea : 00000000; +6ceb : 00000000; +6cec : 00000000; +6ced : 00000000; +6cee : 00000000; +6cef : 00000000; +6cf0 : 00000000; +6cf1 : 00000000; +6cf2 : 00000000; +6cf3 : 00000000; +6cf4 : 00000000; +6cf5 : 00000000; +6cf6 : 00000000; +6cf7 : 00000000; +6cf8 : 00000000; +6cf9 : 00000000; +6cfa : 00000000; +6cfb : 00000000; +6cfc : 00000000; +6cfd : 00000000; +6cfe : 00000000; +6cff : 00000000; +6d00 : 00000000; +6d01 : 00000000; +6d02 : 00000000; +6d03 : 00000000; +6d04 : 00000000; +6d05 : 00000000; +6d06 : 00000000; +6d07 : 00000000; +6d08 : 00000000; +6d09 : 00000000; +6d0a : 00000000; +6d0b : 00000000; +6d0c : 00000000; +6d0d : 00000000; +6d0e : 00000000; +6d0f : 00000000; +6d10 : 00000000; +6d11 : 00000000; +6d12 : 00000000; +6d13 : 00000000; +6d14 : 00000000; +6d15 : 00000000; +6d16 : 00000000; +6d17 : 00000000; +6d18 : 00000000; +6d19 : 00000000; +6d1a : 00000000; +6d1b : 00000000; +6d1c : 00000000; +6d1d : 00000000; +6d1e : 00000000; +6d1f : 00000000; +6d20 : 00000000; +6d21 : 00000000; +6d22 : 00000000; +6d23 : 00000000; +6d24 : 00000000; +6d25 : 00000000; +6d26 : 00000000; +6d27 : 00000000; +6d28 : 00000000; +6d29 : 00000000; +6d2a : 00000000; +6d2b : 00000000; +6d2c : 00000000; +6d2d : 00000000; +6d2e : 00000000; +6d2f : 00000000; +6d30 : 00000000; +6d31 : 00000000; +6d32 : 00000000; +6d33 : 00000000; +6d34 : 00000000; +6d35 : 00000000; +6d36 : 00000000; +6d37 : 00000000; +6d38 : 00000000; +6d39 : 00000000; +6d3a : 00000000; +6d3b : 00000000; +6d3c : 00000000; +6d3d : 00000000; +6d3e : 00000000; +6d3f : 00000000; +6d40 : 00000000; +6d41 : 00000000; +6d42 : 00000000; +6d43 : 00000000; +6d44 : 00000000; +6d45 : 00000000; +6d46 : 00000000; +6d47 : 00000000; +6d48 : 00000000; +6d49 : 00000000; +6d4a : 00000000; +6d4b : 00000000; +6d4c : 00000000; +6d4d : 00000000; +6d4e : 00000000; +6d4f : 00000000; +6d50 : 00000000; +6d51 : 00000000; +6d52 : 00000000; +6d53 : 00000000; +6d54 : 00000000; +6d55 : 00000000; +6d56 : 00000000; +6d57 : 00000000; +6d58 : 00000000; +6d59 : 00000000; +6d5a : 00000000; +6d5b : 00000000; +6d5c : 00000000; +6d5d : 00000000; +6d5e : 00000000; +6d5f : 00000000; +6d60 : 00000000; +6d61 : 00000000; +6d62 : 00000000; +6d63 : 00000000; +6d64 : 00000000; +6d65 : 00000000; +6d66 : 00000000; +6d67 : 00000000; +6d68 : 00000000; +6d69 : 00000000; +6d6a : 00000000; +6d6b : 00000000; +6d6c : 00000000; +6d6d : 00000000; +6d6e : 00000000; +6d6f : 00000000; +6d70 : 00000000; +6d71 : 00000000; +6d72 : 00000000; +6d73 : 00000000; +6d74 : 00000000; +6d75 : 00000000; +6d76 : 00000000; +6d77 : 00000000; +6d78 : 00000000; +6d79 : 00000000; +6d7a : 00000000; +6d7b : 00000000; +6d7c : 00000000; +6d7d : 00000000; +6d7e : 00000000; +6d7f : 00000000; +6d80 : 00000000; +6d81 : 00000000; +6d82 : 00000000; +6d83 : 00000000; +6d84 : 00000000; +6d85 : 00000000; +6d86 : 00000000; +6d87 : 00000000; +6d88 : 00000000; +6d89 : 00000000; +6d8a : 00000000; +6d8b : 00000000; +6d8c : 00000000; +6d8d : 00000000; +6d8e : 00000000; +6d8f : 00000000; +6d90 : 00000000; +6d91 : 00000000; +6d92 : 00000000; +6d93 : 00000000; +6d94 : 00000000; +6d95 : 00000000; +6d96 : 00000000; +6d97 : 00000000; +6d98 : 00000000; +6d99 : 00000000; +6d9a : 00000000; +6d9b : 00000000; +6d9c : 00000000; +6d9d : 00000000; +6d9e : 00000000; +6d9f : 00000000; +6da0 : 00000000; +6da1 : 00000000; +6da2 : 00000000; +6da3 : 00000000; +6da4 : 00000000; +6da5 : 00000000; +6da6 : 00000000; +6da7 : 00000000; +6da8 : 00000000; +6da9 : 00000000; +6daa : 00000000; +6dab : 00000000; +6dac : 00000000; +6dad : 00000000; +6dae : 00000000; +6daf : 00000000; +6db0 : 00000000; +6db1 : 00000000; +6db2 : 00000000; +6db3 : 00000000; +6db4 : 00000000; +6db5 : 00000000; +6db6 : 00000000; +6db7 : 00000000; +6db8 : 00000000; +6db9 : 00000000; +6dba : 00000000; +6dbb : 00000000; +6dbc : 00000000; +6dbd : 00000000; +6dbe : 00000000; +6dbf : 00000000; +6dc0 : 00000000; +6dc1 : 00000000; +6dc2 : 00000000; +6dc3 : 00000000; +6dc4 : 00000000; +6dc5 : 00000000; +6dc6 : 00000000; +6dc7 : 00000000; +6dc8 : 00000000; +6dc9 : 00000000; +6dca : 00000000; +6dcb : 00000000; +6dcc : 00000000; +6dcd : 00000000; +6dce : 00000000; +6dcf : 00000000; +6dd0 : 00000000; +6dd1 : 00000000; +6dd2 : 00000000; +6dd3 : 00000000; +6dd4 : 00000000; +6dd5 : 00000000; +6dd6 : 00000000; +6dd7 : 00000000; +6dd8 : 00000000; +6dd9 : 00000000; +6dda : 00000000; +6ddb : 00000000; +6ddc : 00000000; +6ddd : 00000000; +6dde : 00000000; +6ddf : 00000000; +6de0 : 00000000; +6de1 : 00000000; +6de2 : 00000000; +6de3 : 00000000; +6de4 : 00000000; +6de5 : 00000000; +6de6 : 00000000; +6de7 : 00000000; +6de8 : 00000000; +6de9 : 00000000; +6dea : 00000000; +6deb : 00000000; +6dec : 00000000; +6ded : 00000000; +6dee : 00000000; +6def : 00000000; +6df0 : 00000000; +6df1 : 00000000; +6df2 : 00000000; +6df3 : 00000000; +6df4 : 00000000; +6df5 : 00000000; +6df6 : 00000000; +6df7 : 00000000; +6df8 : 00000000; +6df9 : 00000000; +6dfa : 00000000; +6dfb : 00000000; +6dfc : 00000000; +6dfd : 00000000; +6dfe : 00000000; +6dff : 00000000; +6e00 : 00000000; +6e01 : 00000000; +6e02 : 00000000; +6e03 : 00000000; +6e04 : 00000000; +6e05 : 00000000; +6e06 : 00000000; +6e07 : 00000000; +6e08 : 00000000; +6e09 : 00000000; +6e0a : 00000000; +6e0b : 00000000; +6e0c : 00000000; +6e0d : 00000000; +6e0e : 00000000; +6e0f : 00000000; +6e10 : 00000000; +6e11 : 00000000; +6e12 : 00000000; +6e13 : 00000000; +6e14 : 00000000; +6e15 : 00000000; +6e16 : 00000000; +6e17 : 00000000; +6e18 : 00000000; +6e19 : 00000000; +6e1a : 00000000; +6e1b : 00000000; +6e1c : 00000000; +6e1d : 00000000; +6e1e : 00000000; +6e1f : 00000000; +6e20 : 00000000; +6e21 : 00000000; +6e22 : 00000000; +6e23 : 00000000; +6e24 : 00000000; +6e25 : 00000000; +6e26 : 00000000; +6e27 : 00000000; +6e28 : 00000000; +6e29 : 00000000; +6e2a : 00000000; +6e2b : 00000000; +6e2c : 00000000; +6e2d : 00000000; +6e2e : 00000000; +6e2f : 00000000; +6e30 : 00000000; +6e31 : 00000000; +6e32 : 00000000; +6e33 : 00000000; +6e34 : 00000000; +6e35 : 00000000; +6e36 : 00000000; +6e37 : 00000000; +6e38 : 00000000; +6e39 : 00000000; +6e3a : 00000000; +6e3b : 00000000; +6e3c : 00000000; +6e3d : 00000000; +6e3e : 00000000; +6e3f : 00000000; +6e40 : 00000000; +6e41 : 00000000; +6e42 : 00000000; +6e43 : 00000000; +6e44 : 00000000; +6e45 : 00000000; +6e46 : 00000000; +6e47 : 00000000; +6e48 : 00000000; +6e49 : 00000000; +6e4a : 00000000; +6e4b : 00000000; +6e4c : 00000000; +6e4d : 00000000; +6e4e : 00000000; +6e4f : 00000000; +6e50 : 00000000; +6e51 : 00000000; +6e52 : 00000000; +6e53 : 00000000; +6e54 : 00000000; +6e55 : 00000000; +6e56 : 00000000; +6e57 : 00000000; +6e58 : 00000000; +6e59 : 00000000; +6e5a : 00000000; +6e5b : 00000000; +6e5c : 00000000; +6e5d : 00000000; +6e5e : 00000000; +6e5f : 00000000; +6e60 : 00000000; +6e61 : 00000000; +6e62 : 00000000; +6e63 : 00000000; +6e64 : 00000000; +6e65 : 00000000; +6e66 : 00000000; +6e67 : 00000000; +6e68 : 00000000; +6e69 : 00000000; +6e6a : 00000000; +6e6b : 00000000; +6e6c : 00000000; +6e6d : 00000000; +6e6e : 00000000; +6e6f : 00000000; +6e70 : 00000000; +6e71 : 00000000; +6e72 : 00000000; +6e73 : 00000000; +6e74 : 00000000; +6e75 : 00000000; +6e76 : 00000000; +6e77 : 00000000; +6e78 : 00000000; +6e79 : 00000000; +6e7a : 00000000; +6e7b : 00000000; +6e7c : 00000000; +6e7d : 00000000; +6e7e : 00000000; +6e7f : 00000000; +6e80 : 00000000; +6e81 : 00000000; +6e82 : 00000000; +6e83 : 00000000; +6e84 : 00000000; +6e85 : 00000000; +6e86 : 00000000; +6e87 : 00000000; +6e88 : 00000000; +6e89 : 00000000; +6e8a : 00000000; +6e8b : 00000000; +6e8c : 00000000; +6e8d : 00000000; +6e8e : 00000000; +6e8f : 00000000; +6e90 : 00000000; +6e91 : 00000000; +6e92 : 00000000; +6e93 : 00000000; +6e94 : 00000000; +6e95 : 00000000; +6e96 : 00000000; +6e97 : 00000000; +6e98 : 00000000; +6e99 : 00000000; +6e9a : 00000000; +6e9b : 00000000; +6e9c : 00000000; +6e9d : 00000000; +6e9e : 00000000; +6e9f : 00000000; +6ea0 : 00000000; +6ea1 : 00000000; +6ea2 : 00000000; +6ea3 : 00000000; +6ea4 : 00000000; +6ea5 : 00000000; +6ea6 : 00000000; +6ea7 : 00000000; +6ea8 : 00000000; +6ea9 : 00000000; +6eaa : 00000000; +6eab : 00000000; +6eac : 00000000; +6ead : 00000000; +6eae : 00000000; +6eaf : 00000000; +6eb0 : 00000000; +6eb1 : 00000000; +6eb2 : 00000000; +6eb3 : 00000000; +6eb4 : 00000000; +6eb5 : 00000000; +6eb6 : 00000000; +6eb7 : 00000000; +6eb8 : 00000000; +6eb9 : 00000000; +6eba : 00000000; +6ebb : 00000000; +6ebc : 00000000; +6ebd : 00000000; +6ebe : 00000000; +6ebf : 00000000; +6ec0 : 00000000; +6ec1 : 00000000; +6ec2 : 00000000; +6ec3 : 00000000; +6ec4 : 00000000; +6ec5 : 00000000; +6ec6 : 00000000; +6ec7 : 00000000; +6ec8 : 00000000; +6ec9 : 00000000; +6eca : 00000000; +6ecb : 00000000; +6ecc : 00000000; +6ecd : 00000000; +6ece : 00000000; +6ecf : 00000000; +6ed0 : 00000000; +6ed1 : 00000000; +6ed2 : 00000000; +6ed3 : 00000000; +6ed4 : 00000000; +6ed5 : 00000000; +6ed6 : 00000000; +6ed7 : 00000000; +6ed8 : 00000000; +6ed9 : 00000000; +6eda : 00000000; +6edb : 00000000; +6edc : 00000000; +6edd : 00000000; +6ede : 00000000; +6edf : 00000000; +6ee0 : 00000000; +6ee1 : 00000000; +6ee2 : 00000000; +6ee3 : 00000000; +6ee4 : 00000000; +6ee5 : 00000000; +6ee6 : 00000000; +6ee7 : 00000000; +6ee8 : 00000000; +6ee9 : 00000000; +6eea : 00000000; +6eeb : 00000000; +6eec : 00000000; +6eed : 00000000; +6eee : 00000000; +6eef : 00000000; +6ef0 : 00000000; +6ef1 : 00000000; +6ef2 : 00000000; +6ef3 : 00000000; +6ef4 : 00000000; +6ef5 : 00000000; +6ef6 : 00000000; +6ef7 : 00000000; +6ef8 : 00000000; +6ef9 : 00000000; +6efa : 00000000; +6efb : 00000000; +6efc : 00000000; +6efd : 00000000; +6efe : 00000000; +6eff : 00000000; +6f00 : 00000000; +6f01 : 00000000; +6f02 : 00000000; +6f03 : 00000000; +6f04 : 00000000; +6f05 : 00000000; +6f06 : 00000000; +6f07 : 00000000; +6f08 : 00000000; +6f09 : 00000000; +6f0a : 00000000; +6f0b : 00000000; +6f0c : 00000000; +6f0d : 00000000; +6f0e : 00000000; +6f0f : 00000000; +6f10 : 00000000; +6f11 : 00000000; +6f12 : 00000000; +6f13 : 00000000; +6f14 : 00000000; +6f15 : 00000000; +6f16 : 00000000; +6f17 : 00000000; +6f18 : 00000000; +6f19 : 00000000; +6f1a : 00000000; +6f1b : 00000000; +6f1c : 00000000; +6f1d : 00000000; +6f1e : 00000000; +6f1f : 00000000; +6f20 : 00000000; +6f21 : 00000000; +6f22 : 00000000; +6f23 : 00000000; +6f24 : 00000000; +6f25 : 00000000; +6f26 : 00000000; +6f27 : 00000000; +6f28 : 00000000; +6f29 : 00000000; +6f2a : 00000000; +6f2b : 00000000; +6f2c : 00000000; +6f2d : 00000000; +6f2e : 00000000; +6f2f : 00000000; +6f30 : 00000000; +6f31 : 00000000; +6f32 : 00000000; +6f33 : 00000000; +6f34 : 00000000; +6f35 : 00000000; +6f36 : 00000000; +6f37 : 00000000; +6f38 : 00000000; +6f39 : 00000000; +6f3a : 00000000; +6f3b : 00000000; +6f3c : 00000000; +6f3d : 00000000; +6f3e : 00000000; +6f3f : 00000000; +6f40 : 00000000; +6f41 : 00000000; +6f42 : 00000000; +6f43 : 00000000; +6f44 : 00000000; +6f45 : 00000000; +6f46 : 00000000; +6f47 : 00000000; +6f48 : 00000000; +6f49 : 00000000; +6f4a : 00000000; +6f4b : 00000000; +6f4c : 00000000; +6f4d : 00000000; +6f4e : 00000000; +6f4f : 00000000; +6f50 : 00000000; +6f51 : 00000000; +6f52 : 00000000; +6f53 : 00000000; +6f54 : 00000000; +6f55 : 00000000; +6f56 : 00000000; +6f57 : 00000000; +6f58 : 00000000; +6f59 : 00000000; +6f5a : 00000000; +6f5b : 00000000; +6f5c : 00000000; +6f5d : 00000000; +6f5e : 00000000; +6f5f : 00000000; +6f60 : 00000000; +6f61 : 00000000; +6f62 : 00000000; +6f63 : 00000000; +6f64 : 00000000; +6f65 : 00000000; +6f66 : 00000000; +6f67 : 00000000; +6f68 : 00000000; +6f69 : 00000000; +6f6a : 00000000; +6f6b : 00000000; +6f6c : 00000000; +6f6d : 00000000; +6f6e : 00000000; +6f6f : 00000000; +6f70 : 00000000; +6f71 : 00000000; +6f72 : 00000000; +6f73 : 00000000; +6f74 : 00000000; +6f75 : 00000000; +6f76 : 00000000; +6f77 : 00000000; +6f78 : 00000000; +6f79 : 00000000; +6f7a : 00000000; +6f7b : 00000000; +6f7c : 00000000; +6f7d : 00000000; +6f7e : 00000000; +6f7f : 00000000; +6f80 : 00000000; +6f81 : 00000000; +6f82 : 00000000; +6f83 : 00000000; +6f84 : 00000000; +6f85 : 00000000; +6f86 : 00000000; +6f87 : 00000000; +6f88 : 00000000; +6f89 : 00000000; +6f8a : 00000000; +6f8b : 00000000; +6f8c : 00000000; +6f8d : 00000000; +6f8e : 00000000; +6f8f : 00000000; +6f90 : 00000000; +6f91 : 00000000; +6f92 : 00000000; +6f93 : 00000000; +6f94 : 00000000; +6f95 : 00000000; +6f96 : 00000000; +6f97 : 00000000; +6f98 : 00000000; +6f99 : 00000000; +6f9a : 00000000; +6f9b : 00000000; +6f9c : 00000000; +6f9d : 00000000; +6f9e : 00000000; +6f9f : 00000000; +6fa0 : 00000000; +6fa1 : 00000000; +6fa2 : 00000000; +6fa3 : 00000000; +6fa4 : 00000000; +6fa5 : 00000000; +6fa6 : 00000000; +6fa7 : 00000000; +6fa8 : 00000000; +6fa9 : 00000000; +6faa : 00000000; +6fab : 00000000; +6fac : 00000000; +6fad : 00000000; +6fae : 00000000; +6faf : 00000000; +6fb0 : 00000000; +6fb1 : 00000000; +6fb2 : 00000000; +6fb3 : 00000000; +6fb4 : 00000000; +6fb5 : 00000000; +6fb6 : 00000000; +6fb7 : 00000000; +6fb8 : 00000000; +6fb9 : 00000000; +6fba : 00000000; +6fbb : 00000000; +6fbc : 00000000; +6fbd : 00000000; +6fbe : 00000000; +6fbf : 00000000; +6fc0 : 00000000; +6fc1 : 00000000; +6fc2 : 00000000; +6fc3 : 00000000; +6fc4 : 00000000; +6fc5 : 00000000; +6fc6 : 00000000; +6fc7 : 00000000; +6fc8 : 00000000; +6fc9 : 00000000; +6fca : 00000000; +6fcb : 00000000; +6fcc : 00000000; +6fcd : 00000000; +6fce : 00000000; +6fcf : 00000000; +6fd0 : 00000000; +6fd1 : 00000000; +6fd2 : 00000000; +6fd3 : 00000000; +6fd4 : 00000000; +6fd5 : 00000000; +6fd6 : 00000000; +6fd7 : 00000000; +6fd8 : 00000000; +6fd9 : 00000000; +6fda : 00000000; +6fdb : 00000000; +6fdc : 00000000; +6fdd : 00000000; +6fde : 00000000; +6fdf : 00000000; +6fe0 : 00000000; +6fe1 : 00000000; +6fe2 : 00000000; +6fe3 : 00000000; +6fe4 : 00000000; +6fe5 : 00000000; +6fe6 : 00000000; +6fe7 : 00000000; +6fe8 : 00000000; +6fe9 : 00000000; +6fea : 00000000; +6feb : 00000000; +6fec : 00000000; +6fed : 00000000; +6fee : 00000000; +6fef : 00000000; +6ff0 : 00000000; +6ff1 : 00000000; +6ff2 : 00000000; +6ff3 : 00000000; +6ff4 : 00000000; +6ff5 : 00000000; +6ff6 : 00000000; +6ff7 : 00000000; +6ff8 : 00000000; +6ff9 : 00000000; +6ffa : 00000000; +6ffb : 00000000; +6ffc : 00000000; +6ffd : 00000000; +6ffe : 00000000; +6fff : 00000000; +7000 : 00000000; +7001 : 00000000; +7002 : 00000000; +7003 : 00000000; +7004 : 00000000; +7005 : 00000000; +7006 : 00000000; +7007 : 00000000; +7008 : 00000000; +7009 : 00000000; +700a : 00000000; +700b : 00000000; +700c : 00000000; +700d : 00000000; +700e : 00000000; +700f : 00000000; +7010 : 00000000; +7011 : 00000000; +7012 : 00000000; +7013 : 00000000; +7014 : 00000000; +7015 : 00000000; +7016 : 00000000; +7017 : 00000000; +7018 : 00000000; +7019 : 00000000; +701a : 00000000; +701b : 00000000; +701c : 00000000; +701d : 00000000; +701e : 00000000; +701f : 00000000; +7020 : 00000000; +7021 : 00000000; +7022 : 00000000; +7023 : 00000000; +7024 : 00000000; +7025 : 00000000; +7026 : 00000000; +7027 : 00000000; +7028 : 00000000; +7029 : 00000000; +702a : 00000000; +702b : 00000000; +702c : 00000000; +702d : 00000000; +702e : 00000000; +702f : 00000000; +7030 : 00000000; +7031 : 00000000; +7032 : 00000000; +7033 : 00000000; +7034 : 00000000; +7035 : 00000000; +7036 : 00000000; +7037 : 00000000; +7038 : 00000000; +7039 : 00000000; +703a : 00000000; +703b : 00000000; +703c : 00000000; +703d : 00000000; +703e : 00000000; +703f : 00000000; +7040 : 00000000; +7041 : 00000000; +7042 : 00000000; +7043 : 00000000; +7044 : 00000000; +7045 : 00000000; +7046 : 00000000; +7047 : 00000000; +7048 : 00000000; +7049 : 00000000; +704a : 00000000; +704b : 00000000; +704c : 00000000; +704d : 00000000; +704e : 00000000; +704f : 00000000; +7050 : 00000000; +7051 : 00000000; +7052 : 00000000; +7053 : 00000000; +7054 : 00000000; +7055 : 00000000; +7056 : 00000000; +7057 : 00000000; +7058 : 00000000; +7059 : 00000000; +705a : 00000000; +705b : 00000000; +705c : 00000000; +705d : 00000000; +705e : 00000000; +705f : 00000000; +7060 : 00000000; +7061 : 00000000; +7062 : 00000000; +7063 : 00000000; +7064 : 00000000; +7065 : 00000000; +7066 : 00000000; +7067 : 00000000; +7068 : 00000000; +7069 : 00000000; +706a : 00000000; +706b : 00000000; +706c : 00000000; +706d : 00000000; +706e : 00000000; +706f : 00000000; +7070 : 00000000; +7071 : 00000000; +7072 : 00000000; +7073 : 00000000; +7074 : 00000000; +7075 : 00000000; +7076 : 00000000; +7077 : 00000000; +7078 : 00000000; +7079 : 00000000; +707a : 00000000; +707b : 00000000; +707c : 00000000; +707d : 00000000; +707e : 00000000; +707f : 00000000; +7080 : 00000000; +7081 : 00000000; +7082 : 00000000; +7083 : 00000000; +7084 : 00000000; +7085 : 00000000; +7086 : 00000000; +7087 : 00000000; +7088 : 00000000; +7089 : 00000000; +708a : 00000000; +708b : 00000000; +708c : 00000000; +708d : 00000000; +708e : 00000000; +708f : 00000000; +7090 : 00000000; +7091 : 00000000; +7092 : 00000000; +7093 : 00000000; +7094 : 00000000; +7095 : 00000000; +7096 : 00000000; +7097 : 00000000; +7098 : 00000000; +7099 : 00000000; +709a : 00000000; +709b : 00000000; +709c : 00000000; +709d : 00000000; +709e : 00000000; +709f : 00000000; +70a0 : 00000000; +70a1 : 00000000; +70a2 : 00000000; +70a3 : 00000000; +70a4 : 00000000; +70a5 : 00000000; +70a6 : 00000000; +70a7 : 00000000; +70a8 : 00000000; +70a9 : 00000000; +70aa : 00000000; +70ab : 00000000; +70ac : 00000000; +70ad : 00000000; +70ae : 00000000; +70af : 00000000; +70b0 : 00000000; +70b1 : 00000000; +70b2 : 00000000; +70b3 : 00000000; +70b4 : 00000000; +70b5 : 00000000; +70b6 : 00000000; +70b7 : 00000000; +70b8 : 00000000; +70b9 : 00000000; +70ba : 00000000; +70bb : 00000000; +70bc : 00000000; +70bd : 00000000; +70be : 00000000; +70bf : 00000000; +70c0 : 00000000; +70c1 : 00000000; +70c2 : 00000000; +70c3 : 00000000; +70c4 : 00000000; +70c5 : 00000000; +70c6 : 00000000; +70c7 : 00000000; +70c8 : 00000000; +70c9 : 00000000; +70ca : 00000000; +70cb : 00000000; +70cc : 00000000; +70cd : 00000000; +70ce : 00000000; +70cf : 00000000; +70d0 : 00000000; +70d1 : 00000000; +70d2 : 00000000; +70d3 : 00000000; +70d4 : 00000000; +70d5 : 00000000; +70d6 : 00000000; +70d7 : 00000000; +70d8 : 00000000; +70d9 : 00000000; +70da : 00000000; +70db : 00000000; +70dc : 00000000; +70dd : 00000000; +70de : 00000000; +70df : 00000000; +70e0 : 00000000; +70e1 : 00000000; +70e2 : 00000000; +70e3 : 00000000; +70e4 : 00000000; +70e5 : 00000000; +70e6 : 00000000; +70e7 : 00000000; +70e8 : 00000000; +70e9 : 00000000; +70ea : 00000000; +70eb : 00000000; +70ec : 00000000; +70ed : 00000000; +70ee : 00000000; +70ef : 00000000; +70f0 : 00000000; +70f1 : 00000000; +70f2 : 00000000; +70f3 : 00000000; +70f4 : 00000000; +70f5 : 00000000; +70f6 : 00000000; +70f7 : 00000000; +70f8 : 00000000; +70f9 : 00000000; +70fa : 00000000; +70fb : 00000000; +70fc : 00000000; +70fd : 00000000; +70fe : 00000000; +70ff : 00000000; +7100 : 00000000; +7101 : 00000000; +7102 : 00000000; +7103 : 00000000; +7104 : 00000000; +7105 : 00000000; +7106 : 00000000; +7107 : 00000000; +7108 : 00000000; +7109 : 00000000; +710a : 00000000; +710b : 00000000; +710c : 00000000; +710d : 00000000; +710e : 00000000; +710f : 00000000; +7110 : 00000000; +7111 : 00000000; +7112 : 00000000; +7113 : 00000000; +7114 : 00000000; +7115 : 00000000; +7116 : 00000000; +7117 : 00000000; +7118 : 00000000; +7119 : 00000000; +711a : 00000000; +711b : 00000000; +711c : 00000000; +711d : 00000000; +711e : 00000000; +711f : 00000000; +7120 : 00000000; +7121 : 00000000; +7122 : 00000000; +7123 : 00000000; +7124 : 00000000; +7125 : 00000000; +7126 : 00000000; +7127 : 00000000; +7128 : 00000000; +7129 : 00000000; +712a : 00000000; +712b : 00000000; +712c : 00000000; +712d : 00000000; +712e : 00000000; +712f : 00000000; +7130 : 00000000; +7131 : 00000000; +7132 : 00000000; +7133 : 00000000; +7134 : 00000000; +7135 : 00000000; +7136 : 00000000; +7137 : 00000000; +7138 : 00000000; +7139 : 00000000; +713a : 00000000; +713b : 00000000; +713c : 00000000; +713d : 00000000; +713e : 00000000; +713f : 00000000; +7140 : 00000000; +7141 : 00000000; +7142 : 00000000; +7143 : 00000000; +7144 : 00000000; +7145 : 00000000; +7146 : 00000000; +7147 : 00000000; +7148 : 00000000; +7149 : 00000000; +714a : 00000000; +714b : 00000000; +714c : 00000000; +714d : 00000000; +714e : 00000000; +714f : 00000000; +7150 : 00000000; +7151 : 00000000; +7152 : 00000000; +7153 : 00000000; +7154 : 00000000; +7155 : 00000000; +7156 : 00000000; +7157 : 00000000; +7158 : 00000000; +7159 : 00000000; +715a : 00000000; +715b : 00000000; +715c : 00000000; +715d : 00000000; +715e : 00000000; +715f : 00000000; +7160 : 00000000; +7161 : 00000000; +7162 : 00000000; +7163 : 00000000; +7164 : 00000000; +7165 : 00000000; +7166 : 00000000; +7167 : 00000000; +7168 : 00000000; +7169 : 00000000; +716a : 00000000; +716b : 00000000; +716c : 00000000; +716d : 00000000; +716e : 00000000; +716f : 00000000; +7170 : 00000000; +7171 : 00000000; +7172 : 00000000; +7173 : 00000000; +7174 : 00000000; +7175 : 00000000; +7176 : 00000000; +7177 : 00000000; +7178 : 00000000; +7179 : 00000000; +717a : 00000000; +717b : 00000000; +717c : 00000000; +717d : 00000000; +717e : 00000000; +717f : 00000000; +7180 : 00000000; +7181 : 00000000; +7182 : 00000000; +7183 : 00000000; +7184 : 00000000; +7185 : 00000000; +7186 : 00000000; +7187 : 00000000; +7188 : 00000000; +7189 : 00000000; +718a : 00000000; +718b : 00000000; +718c : 00000000; +718d : 00000000; +718e : 00000000; +718f : 00000000; +7190 : 00000000; +7191 : 00000000; +7192 : 00000000; +7193 : 00000000; +7194 : 00000000; +7195 : 00000000; +7196 : 00000000; +7197 : 00000000; +7198 : 00000000; +7199 : 00000000; +719a : 00000000; +719b : 00000000; +719c : 00000000; +719d : 00000000; +719e : 00000000; +719f : 00000000; +71a0 : 00000000; +71a1 : 00000000; +71a2 : 00000000; +71a3 : 00000000; +71a4 : 00000000; +71a5 : 00000000; +71a6 : 00000000; +71a7 : 00000000; +71a8 : 00000000; +71a9 : 00000000; +71aa : 00000000; +71ab : 00000000; +71ac : 00000000; +71ad : 00000000; +71ae : 00000000; +71af : 00000000; +71b0 : 00000000; +71b1 : 00000000; +71b2 : 00000000; +71b3 : 00000000; +71b4 : 00000000; +71b5 : 00000000; +71b6 : 00000000; +71b7 : 00000000; +71b8 : 00000000; +71b9 : 00000000; +71ba : 00000000; +71bb : 00000000; +71bc : 00000000; +71bd : 00000000; +71be : 00000000; +71bf : 00000000; +71c0 : 00000000; +71c1 : 00000000; +71c2 : 00000000; +71c3 : 00000000; +71c4 : 00000000; +71c5 : 00000000; +71c6 : 00000000; +71c7 : 00000000; +71c8 : 00000000; +71c9 : 00000000; +71ca : 00000000; +71cb : 00000000; +71cc : 00000000; +71cd : 00000000; +71ce : 00000000; +71cf : 00000000; +71d0 : 00000000; +71d1 : 00000000; +71d2 : 00000000; +71d3 : 00000000; +71d4 : 00000000; +71d5 : 00000000; +71d6 : 00000000; +71d7 : 00000000; +71d8 : 00000000; +71d9 : 00000000; +71da : 00000000; +71db : 00000000; +71dc : 00000000; +71dd : 00000000; +71de : 00000000; +71df : 00000000; +71e0 : 00000000; +71e1 : 00000000; +71e2 : 00000000; +71e3 : 00000000; +71e4 : 00000000; +71e5 : 00000000; +71e6 : 00000000; +71e7 : 00000000; +71e8 : 00000000; +71e9 : 00000000; +71ea : 00000000; +71eb : 00000000; +71ec : 00000000; +71ed : 00000000; +71ee : 00000000; +71ef : 00000000; +71f0 : 00000000; +71f1 : 00000000; +71f2 : 00000000; +71f3 : 00000000; +71f4 : 00000000; +71f5 : 00000000; +71f6 : 00000000; +71f7 : 00000000; +71f8 : 00000000; +71f9 : 00000000; +71fa : 00000000; +71fb : 00000000; +71fc : 00000000; +71fd : 00000000; +71fe : 00000000; +71ff : 00000000; +7200 : 00000000; +7201 : 00000000; +7202 : 00000000; +7203 : 00000000; +7204 : 00000000; +7205 : 00000000; +7206 : 00000000; +7207 : 00000000; +7208 : 00000000; +7209 : 00000000; +720a : 00000000; +720b : 00000000; +720c : 00000000; +720d : 00000000; +720e : 00000000; +720f : 00000000; +7210 : 00000000; +7211 : 00000000; +7212 : 00000000; +7213 : 00000000; +7214 : 00000000; +7215 : 00000000; +7216 : 00000000; +7217 : 00000000; +7218 : 00000000; +7219 : 00000000; +721a : 00000000; +721b : 00000000; +721c : 00000000; +721d : 00000000; +721e : 00000000; +721f : 00000000; +7220 : 00000000; +7221 : 00000000; +7222 : 00000000; +7223 : 00000000; +7224 : 00000000; +7225 : 00000000; +7226 : 00000000; +7227 : 00000000; +7228 : 00000000; +7229 : 00000000; +722a : 00000000; +722b : 00000000; +722c : 00000000; +722d : 00000000; +722e : 00000000; +722f : 00000000; +7230 : 00000000; +7231 : 00000000; +7232 : 00000000; +7233 : 00000000; +7234 : 00000000; +7235 : 00000000; +7236 : 00000000; +7237 : 00000000; +7238 : 00000000; +7239 : 00000000; +723a : 00000000; +723b : 00000000; +723c : 00000000; +723d : 00000000; +723e : 00000000; +723f : 00000000; +7240 : 00000000; +7241 : 00000000; +7242 : 00000000; +7243 : 00000000; +7244 : 00000000; +7245 : 00000000; +7246 : 00000000; +7247 : 00000000; +7248 : 00000000; +7249 : 00000000; +724a : 00000000; +724b : 00000000; +724c : 00000000; +724d : 00000000; +724e : 00000000; +724f : 00000000; +7250 : 00000000; +7251 : 00000000; +7252 : 00000000; +7253 : 00000000; +7254 : 00000000; +7255 : 00000000; +7256 : 00000000; +7257 : 00000000; +7258 : 00000000; +7259 : 00000000; +725a : 00000000; +725b : 00000000; +725c : 00000000; +725d : 00000000; +725e : 00000000; +725f : 00000000; +7260 : 00000000; +7261 : 00000000; +7262 : 00000000; +7263 : 00000000; +7264 : 00000000; +7265 : 00000000; +7266 : 00000000; +7267 : 00000000; +7268 : 00000000; +7269 : 00000000; +726a : 00000000; +726b : 00000000; +726c : 00000000; +726d : 00000000; +726e : 00000000; +726f : 00000000; +7270 : 00000000; +7271 : 00000000; +7272 : 00000000; +7273 : 00000000; +7274 : 00000000; +7275 : 00000000; +7276 : 00000000; +7277 : 00000000; +7278 : 00000000; +7279 : 00000000; +727a : 00000000; +727b : 00000000; +727c : 00000000; +727d : 00000000; +727e : 00000000; +727f : 00000000; +7280 : 00000000; +7281 : 00000000; +7282 : 00000000; +7283 : 00000000; +7284 : 00000000; +7285 : 00000000; +7286 : 00000000; +7287 : 00000000; +7288 : 00000000; +7289 : 00000000; +728a : 00000000; +728b : 00000000; +728c : 00000000; +728d : 00000000; +728e : 00000000; +728f : 00000000; +7290 : 00000000; +7291 : 00000000; +7292 : 00000000; +7293 : 00000000; +7294 : 00000000; +7295 : 00000000; +7296 : 00000000; +7297 : 00000000; +7298 : 00000000; +7299 : 00000000; +729a : 00000000; +729b : 00000000; +729c : 00000000; +729d : 00000000; +729e : 00000000; +729f : 00000000; +72a0 : 00000000; +72a1 : 00000000; +72a2 : 00000000; +72a3 : 00000000; +72a4 : 00000000; +72a5 : 00000000; +72a6 : 00000000; +72a7 : 00000000; +72a8 : 00000000; +72a9 : 00000000; +72aa : 00000000; +72ab : 00000000; +72ac : 00000000; +72ad : 00000000; +72ae : 00000000; +72af : 00000000; +72b0 : 00000000; +72b1 : 00000000; +72b2 : 00000000; +72b3 : 00000000; +72b4 : 00000000; +72b5 : 00000000; +72b6 : 00000000; +72b7 : 00000000; +72b8 : 00000000; +72b9 : 00000000; +72ba : 00000000; +72bb : 00000000; +72bc : 00000000; +72bd : 00000000; +72be : 00000000; +72bf : 00000000; +72c0 : 00000000; +72c1 : 00000000; +72c2 : 00000000; +72c3 : 00000000; +72c4 : 00000000; +72c5 : 00000000; +72c6 : 00000000; +72c7 : 00000000; +72c8 : 00000000; +72c9 : 00000000; +72ca : 00000000; +72cb : 00000000; +72cc : 00000000; +72cd : 00000000; +72ce : 00000000; +72cf : 00000000; +72d0 : 00000000; +72d1 : 00000000; +72d2 : 00000000; +72d3 : 00000000; +72d4 : 00000000; +72d5 : 00000000; +72d6 : 00000000; +72d7 : 00000000; +72d8 : 00000000; +72d9 : 00000000; +72da : 00000000; +72db : 00000000; +72dc : 00000000; +72dd : 00000000; +72de : 00000000; +72df : 00000000; +72e0 : 00000000; +72e1 : 00000000; +72e2 : 00000000; +72e3 : 00000000; +72e4 : 00000000; +72e5 : 00000000; +72e6 : 00000000; +72e7 : 00000000; +72e8 : 00000000; +72e9 : 00000000; +72ea : 00000000; +72eb : 00000000; +72ec : 00000000; +72ed : 00000000; +72ee : 00000000; +72ef : 00000000; +72f0 : 00000000; +72f1 : 00000000; +72f2 : 00000000; +72f3 : 00000000; +72f4 : 00000000; +72f5 : 00000000; +72f6 : 00000000; +72f7 : 00000000; +72f8 : 00000000; +72f9 : 00000000; +72fa : 00000000; +72fb : 00000000; +72fc : 00000000; +72fd : 00000000; +72fe : 00000000; +72ff : 00000000; +7300 : 00000000; +7301 : 00000000; +7302 : 00000000; +7303 : 00000000; +7304 : 00000000; +7305 : 00000000; +7306 : 00000000; +7307 : 00000000; +7308 : 00000000; +7309 : 00000000; +730a : 00000000; +730b : 00000000; +730c : 00000000; +730d : 00000000; +730e : 00000000; +730f : 00000000; +7310 : 00000000; +7311 : 00000000; +7312 : 00000000; +7313 : 00000000; +7314 : 00000000; +7315 : 00000000; +7316 : 00000000; +7317 : 00000000; +7318 : 00000000; +7319 : 00000000; +731a : 00000000; +731b : 00000000; +731c : 00000000; +731d : 00000000; +731e : 00000000; +731f : 00000000; +7320 : 00000000; +7321 : 00000000; +7322 : 00000000; +7323 : 00000000; +7324 : 00000000; +7325 : 00000000; +7326 : 00000000; +7327 : 00000000; +7328 : 00000000; +7329 : 00000000; +732a : 00000000; +732b : 00000000; +732c : 00000000; +732d : 00000000; +732e : 00000000; +732f : 00000000; +7330 : 00000000; +7331 : 00000000; +7332 : 00000000; +7333 : 00000000; +7334 : 00000000; +7335 : 00000000; +7336 : 00000000; +7337 : 00000000; +7338 : 00000000; +7339 : 00000000; +733a : 00000000; +733b : 00000000; +733c : 00000000; +733d : 00000000; +733e : 00000000; +733f : 00000000; +7340 : 00000000; +7341 : 00000000; +7342 : 00000000; +7343 : 00000000; +7344 : 00000000; +7345 : 00000000; +7346 : 00000000; +7347 : 00000000; +7348 : 00000000; +7349 : 00000000; +734a : 00000000; +734b : 00000000; +734c : 00000000; +734d : 00000000; +734e : 00000000; +734f : 00000000; +7350 : 00000000; +7351 : 00000000; +7352 : 00000000; +7353 : 00000000; +7354 : 00000000; +7355 : 00000000; +7356 : 00000000; +7357 : 00000000; +7358 : 00000000; +7359 : 00000000; +735a : 00000000; +735b : 00000000; +735c : 00000000; +735d : 00000000; +735e : 00000000; +735f : 00000000; +7360 : 00000000; +7361 : 00000000; +7362 : 00000000; +7363 : 00000000; +7364 : 00000000; +7365 : 00000000; +7366 : 00000000; +7367 : 00000000; +7368 : 00000000; +7369 : 00000000; +736a : 00000000; +736b : 00000000; +736c : 00000000; +736d : 00000000; +736e : 00000000; +736f : 00000000; +7370 : 00000000; +7371 : 00000000; +7372 : 00000000; +7373 : 00000000; +7374 : 00000000; +7375 : 00000000; +7376 : 00000000; +7377 : 00000000; +7378 : 00000000; +7379 : 00000000; +737a : 00000000; +737b : 00000000; +737c : 00000000; +737d : 00000000; +737e : 00000000; +737f : 00000000; +7380 : 00000000; +7381 : 00000000; +7382 : 00000000; +7383 : 00000000; +7384 : 00000000; +7385 : 00000000; +7386 : 00000000; +7387 : 00000000; +7388 : 00000000; +7389 : 00000000; +738a : 00000000; +738b : 00000000; +738c : 00000000; +738d : 00000000; +738e : 00000000; +738f : 00000000; +7390 : 00000000; +7391 : 00000000; +7392 : 00000000; +7393 : 00000000; +7394 : 00000000; +7395 : 00000000; +7396 : 00000000; +7397 : 00000000; +7398 : 00000000; +7399 : 00000000; +739a : 00000000; +739b : 00000000; +739c : 00000000; +739d : 00000000; +739e : 00000000; +739f : 00000000; +73a0 : 00000000; +73a1 : 00000000; +73a2 : 00000000; +73a3 : 00000000; +73a4 : 00000000; +73a5 : 00000000; +73a6 : 00000000; +73a7 : 00000000; +73a8 : 00000000; +73a9 : 00000000; +73aa : 00000000; +73ab : 00000000; +73ac : 00000000; +73ad : 00000000; +73ae : 00000000; +73af : 00000000; +73b0 : 00000000; +73b1 : 00000000; +73b2 : 00000000; +73b3 : 00000000; +73b4 : 00000000; +73b5 : 00000000; +73b6 : 00000000; +73b7 : 00000000; +73b8 : 00000000; +73b9 : 00000000; +73ba : 00000000; +73bb : 00000000; +73bc : 00000000; +73bd : 00000000; +73be : 00000000; +73bf : 00000000; +73c0 : 00000000; +73c1 : 00000000; +73c2 : 00000000; +73c3 : 00000000; +73c4 : 00000000; +73c5 : 00000000; +73c6 : 00000000; +73c7 : 00000000; +73c8 : 00000000; +73c9 : 00000000; +73ca : 00000000; +73cb : 00000000; +73cc : 00000000; +73cd : 00000000; +73ce : 00000000; +73cf : 00000000; +73d0 : 00000000; +73d1 : 00000000; +73d2 : 00000000; +73d3 : 00000000; +73d4 : 00000000; +73d5 : 00000000; +73d6 : 00000000; +73d7 : 00000000; +73d8 : 00000000; +73d9 : 00000000; +73da : 00000000; +73db : 00000000; +73dc : 00000000; +73dd : 00000000; +73de : 00000000; +73df : 00000000; +73e0 : 00000000; +73e1 : 00000000; +73e2 : 00000000; +73e3 : 00000000; +73e4 : 00000000; +73e5 : 00000000; +73e6 : 00000000; +73e7 : 00000000; +73e8 : 00000000; +73e9 : 00000000; +73ea : 00000000; +73eb : 00000000; +73ec : 00000000; +73ed : 00000000; +73ee : 00000000; +73ef : 00000000; +73f0 : 00000000; +73f1 : 00000000; +73f2 : 00000000; +73f3 : 00000000; +73f4 : 00000000; +73f5 : 00000000; +73f6 : 00000000; +73f7 : 00000000; +73f8 : 00000000; +73f9 : 00000000; +73fa : 00000000; +73fb : 00000000; +73fc : 00000000; +73fd : 00000000; +73fe : 00000000; +73ff : 00000000; +7400 : 00000000; +7401 : 00000000; +7402 : 00000000; +7403 : 00000000; +7404 : 00000000; +7405 : 00000000; +7406 : 00000000; +7407 : 00000000; +7408 : 00000000; +7409 : 00000000; +740a : 00000000; +740b : 00000000; +740c : 00000000; +740d : 00000000; +740e : 00000000; +740f : 00000000; +7410 : 00000000; +7411 : 00000000; +7412 : 00000000; +7413 : 00000000; +7414 : 00000000; +7415 : 00000000; +7416 : 00000000; +7417 : 00000000; +7418 : 00000000; +7419 : 00000000; +741a : 00000000; +741b : 00000000; +741c : 00000000; +741d : 00000000; +741e : 00000000; +741f : 00000000; +7420 : 00000000; +7421 : 00000000; +7422 : 00000000; +7423 : 00000000; +7424 : 00000000; +7425 : 00000000; +7426 : 00000000; +7427 : 00000000; +7428 : 00000000; +7429 : 00000000; +742a : 00000000; +742b : 00000000; +742c : 00000000; +742d : 00000000; +742e : 00000000; +742f : 00000000; +7430 : 00000000; +7431 : 00000000; +7432 : 00000000; +7433 : 00000000; +7434 : 00000000; +7435 : 00000000; +7436 : 00000000; +7437 : 00000000; +7438 : 00000000; +7439 : 00000000; +743a : 00000000; +743b : 00000000; +743c : 00000000; +743d : 00000000; +743e : 00000000; +743f : 00000000; +7440 : 00000000; +7441 : 00000000; +7442 : 00000000; +7443 : 00000000; +7444 : 00000000; +7445 : 00000000; +7446 : 00000000; +7447 : 00000000; +7448 : 00000000; +7449 : 00000000; +744a : 00000000; +744b : 00000000; +744c : 00000000; +744d : 00000000; +744e : 00000000; +744f : 00000000; +7450 : 00000000; +7451 : 00000000; +7452 : 00000000; +7453 : 00000000; +7454 : 00000000; +7455 : 00000000; +7456 : 00000000; +7457 : 00000000; +7458 : 00000000; +7459 : 00000000; +745a : 00000000; +745b : 00000000; +745c : 00000000; +745d : 00000000; +745e : 00000000; +745f : 00000000; +7460 : 00000000; +7461 : 00000000; +7462 : 00000000; +7463 : 00000000; +7464 : 00000000; +7465 : 00000000; +7466 : 00000000; +7467 : 00000000; +7468 : 00000000; +7469 : 00000000; +746a : 00000000; +746b : 00000000; +746c : 00000000; +746d : 00000000; +746e : 00000000; +746f : 00000000; +7470 : 00000000; +7471 : 00000000; +7472 : 00000000; +7473 : 00000000; +7474 : 00000000; +7475 : 00000000; +7476 : 00000000; +7477 : 00000000; +7478 : 00000000; +7479 : 00000000; +747a : 00000000; +747b : 00000000; +747c : 00000000; +747d : 00000000; +747e : 00000000; +747f : 00000000; +7480 : 00000000; +7481 : 00000000; +7482 : 00000000; +7483 : 00000000; +7484 : 00000000; +7485 : 00000000; +7486 : 00000000; +7487 : 00000000; +7488 : 00000000; +7489 : 00000000; +748a : 00000000; +748b : 00000000; +748c : 00000000; +748d : 00000000; +748e : 00000000; +748f : 00000000; +7490 : 00000000; +7491 : 00000000; +7492 : 00000000; +7493 : 00000000; +7494 : 00000000; +7495 : 00000000; +7496 : 00000000; +7497 : 00000000; +7498 : 00000000; +7499 : 00000000; +749a : 00000000; +749b : 00000000; +749c : 00000000; +749d : 00000000; +749e : 00000000; +749f : 00000000; +74a0 : 00000000; +74a1 : 00000000; +74a2 : 00000000; +74a3 : 00000000; +74a4 : 00000000; +74a5 : 00000000; +74a6 : 00000000; +74a7 : 00000000; +74a8 : 00000000; +74a9 : 00000000; +74aa : 00000000; +74ab : 00000000; +74ac : 00000000; +74ad : 00000000; +74ae : 00000000; +74af : 00000000; +74b0 : 00000000; +74b1 : 00000000; +74b2 : 00000000; +74b3 : 00000000; +74b4 : 00000000; +74b5 : 00000000; +74b6 : 00000000; +74b7 : 00000000; +74b8 : 00000000; +74b9 : 00000000; +74ba : 00000000; +74bb : 00000000; +74bc : 00000000; +74bd : 00000000; +74be : 00000000; +74bf : 00000000; +74c0 : 00000000; +74c1 : 00000000; +74c2 : 00000000; +74c3 : 00000000; +74c4 : 00000000; +74c5 : 00000000; +74c6 : 00000000; +74c7 : 00000000; +74c8 : 00000000; +74c9 : 00000000; +74ca : 00000000; +74cb : 00000000; +74cc : 00000000; +74cd : 00000000; +74ce : 00000000; +74cf : 00000000; +74d0 : 00000000; +74d1 : 00000000; +74d2 : 00000000; +74d3 : 00000000; +74d4 : 00000000; +74d5 : 00000000; +74d6 : 00000000; +74d7 : 00000000; +74d8 : 00000000; +74d9 : 00000000; +74da : 00000000; +74db : 00000000; +74dc : 00000000; +74dd : 00000000; +74de : 00000000; +74df : 00000000; +74e0 : 00000000; +74e1 : 00000000; +74e2 : 00000000; +74e3 : 00000000; +74e4 : 00000000; +74e5 : 00000000; +74e6 : 00000000; +74e7 : 00000000; +74e8 : 00000000; +74e9 : 00000000; +74ea : 00000000; +74eb : 00000000; +74ec : 00000000; +74ed : 00000000; +74ee : 00000000; +74ef : 00000000; +74f0 : 00000000; +74f1 : 00000000; +74f2 : 00000000; +74f3 : 00000000; +74f4 : 00000000; +74f5 : 00000000; +74f6 : 00000000; +74f7 : 00000000; +74f8 : 00000000; +74f9 : 00000000; +74fa : 00000000; +74fb : 00000000; +74fc : 00000000; +74fd : 00000000; +74fe : 00000000; +74ff : 00000000; +7500 : 00000000; +7501 : 00000000; +7502 : 00000000; +7503 : 00000000; +7504 : 00000000; +7505 : 00000000; +7506 : 00000000; +7507 : 00000000; +7508 : 00000000; +7509 : 00000000; +750a : 00000000; +750b : 00000000; +750c : 00000000; +750d : 00000000; +750e : 00000000; +750f : 00000000; +7510 : 00000000; +7511 : 00000000; +7512 : 00000000; +7513 : 00000000; +7514 : 00000000; +7515 : 00000000; +7516 : 00000000; +7517 : 00000000; +7518 : 00000000; +7519 : 00000000; +751a : 00000000; +751b : 00000000; +751c : 00000000; +751d : 00000000; +751e : 00000000; +751f : 00000000; +7520 : 00000000; +7521 : 00000000; +7522 : 00000000; +7523 : 00000000; +7524 : 00000000; +7525 : 00000000; +7526 : 00000000; +7527 : 00000000; +7528 : 00000000; +7529 : 00000000; +752a : 00000000; +752b : 00000000; +752c : 00000000; +752d : 00000000; +752e : 00000000; +752f : 00000000; +7530 : 00000000; +7531 : 00000000; +7532 : 00000000; +7533 : 00000000; +7534 : 00000000; +7535 : 00000000; +7536 : 00000000; +7537 : 00000000; +7538 : 00000000; +7539 : 00000000; +753a : 00000000; +753b : 00000000; +753c : 00000000; +753d : 00000000; +753e : 00000000; +753f : 00000000; +7540 : 00000000; +7541 : 00000000; +7542 : 00000000; +7543 : 00000000; +7544 : 00000000; +7545 : 00000000; +7546 : 00000000; +7547 : 00000000; +7548 : 00000000; +7549 : 00000000; +754a : 00000000; +754b : 00000000; +754c : 00000000; +754d : 00000000; +754e : 00000000; +754f : 00000000; +7550 : 00000000; +7551 : 00000000; +7552 : 00000000; +7553 : 00000000; +7554 : 00000000; +7555 : 00000000; +7556 : 00000000; +7557 : 00000000; +7558 : 00000000; +7559 : 00000000; +755a : 00000000; +755b : 00000000; +755c : 00000000; +755d : 00000000; +755e : 00000000; +755f : 00000000; +7560 : 00000000; +7561 : 00000000; +7562 : 00000000; +7563 : 00000000; +7564 : 00000000; +7565 : 00000000; +7566 : 00000000; +7567 : 00000000; +7568 : 00000000; +7569 : 00000000; +756a : 00000000; +756b : 00000000; +756c : 00000000; +756d : 00000000; +756e : 00000000; +756f : 00000000; +7570 : 00000000; +7571 : 00000000; +7572 : 00000000; +7573 : 00000000; +7574 : 00000000; +7575 : 00000000; +7576 : 00000000; +7577 : 00000000; +7578 : 00000000; +7579 : 00000000; +757a : 00000000; +757b : 00000000; +757c : 00000000; +757d : 00000000; +757e : 00000000; +757f : 00000000; +7580 : 00000000; +7581 : 00000000; +7582 : 00000000; +7583 : 00000000; +7584 : 00000000; +7585 : 00000000; +7586 : 00000000; +7587 : 00000000; +7588 : 00000000; +7589 : 00000000; +758a : 00000000; +758b : 00000000; +758c : 00000000; +758d : 00000000; +758e : 00000000; +758f : 00000000; +7590 : 00000000; +7591 : 00000000; +7592 : 00000000; +7593 : 00000000; +7594 : 00000000; +7595 : 00000000; +7596 : 00000000; +7597 : 00000000; +7598 : 00000000; +7599 : 00000000; +759a : 00000000; +759b : 00000000; +759c : 00000000; +759d : 00000000; +759e : 00000000; +759f : 00000000; +75a0 : 00000000; +75a1 : 00000000; +75a2 : 00000000; +75a3 : 00000000; +75a4 : 00000000; +75a5 : 00000000; +75a6 : 00000000; +75a7 : 00000000; +75a8 : 00000000; +75a9 : 00000000; +75aa : 00000000; +75ab : 00000000; +75ac : 00000000; +75ad : 00000000; +75ae : 00000000; +75af : 00000000; +75b0 : 00000000; +75b1 : 00000000; +75b2 : 00000000; +75b3 : 00000000; +75b4 : 00000000; +75b5 : 00000000; +75b6 : 00000000; +75b7 : 00000000; +75b8 : 00000000; +75b9 : 00000000; +75ba : 00000000; +75bb : 00000000; +75bc : 00000000; +75bd : 00000000; +75be : 00000000; +75bf : 00000000; +75c0 : 00000000; +75c1 : 00000000; +75c2 : 00000000; +75c3 : 00000000; +75c4 : 00000000; +75c5 : 00000000; +75c6 : 00000000; +75c7 : 00000000; +75c8 : 00000000; +75c9 : 00000000; +75ca : 00000000; +75cb : 00000000; +75cc : 00000000; +75cd : 00000000; +75ce : 00000000; +75cf : 00000000; +75d0 : 00000000; +75d1 : 00000000; +75d2 : 00000000; +75d3 : 00000000; +75d4 : 00000000; +75d5 : 00000000; +75d6 : 00000000; +75d7 : 00000000; +75d8 : 00000000; +75d9 : 00000000; +75da : 00000000; +75db : 00000000; +75dc : 00000000; +75dd : 00000000; +75de : 00000000; +75df : 00000000; +75e0 : 00000000; +75e1 : 00000000; +75e2 : 00000000; +75e3 : 00000000; +75e4 : 00000000; +75e5 : 00000000; +75e6 : 00000000; +75e7 : 00000000; +75e8 : 00000000; +75e9 : 00000000; +75ea : 00000000; +75eb : 00000000; +75ec : 00000000; +75ed : 00000000; +75ee : 00000000; +75ef : 00000000; +75f0 : 00000000; +75f1 : 00000000; +75f2 : 00000000; +75f3 : 00000000; +75f4 : 00000000; +75f5 : 00000000; +75f6 : 00000000; +75f7 : 00000000; +75f8 : 00000000; +75f9 : 00000000; +75fa : 00000000; +75fb : 00000000; +75fc : 00000000; +75fd : 00000000; +75fe : 00000000; +75ff : 00000000; +7600 : 00000000; +7601 : 00000000; +7602 : 00000000; +7603 : 00000000; +7604 : 00000000; +7605 : 00000000; +7606 : 00000000; +7607 : 00000000; +7608 : 00000000; +7609 : 00000000; +760a : 00000000; +760b : 00000000; +760c : 00000000; +760d : 00000000; +760e : 00000000; +760f : 00000000; +7610 : 00000000; +7611 : 00000000; +7612 : 00000000; +7613 : 00000000; +7614 : 00000000; +7615 : 00000000; +7616 : 00000000; +7617 : 00000000; +7618 : 00000000; +7619 : 00000000; +761a : 00000000; +761b : 00000000; +761c : 00000000; +761d : 00000000; +761e : 00000000; +761f : 00000000; +7620 : 00000000; +7621 : 00000000; +7622 : 00000000; +7623 : 00000000; +7624 : 00000000; +7625 : 00000000; +7626 : 00000000; +7627 : 00000000; +7628 : 00000000; +7629 : 00000000; +762a : 00000000; +762b : 00000000; +762c : 00000000; +762d : 00000000; +762e : 00000000; +762f : 00000000; +7630 : 00000000; +7631 : 00000000; +7632 : 00000000; +7633 : 00000000; +7634 : 00000000; +7635 : 00000000; +7636 : 00000000; +7637 : 00000000; +7638 : 00000000; +7639 : 00000000; +763a : 00000000; +763b : 00000000; +763c : 00000000; +763d : 00000000; +763e : 00000000; +763f : 00000000; +7640 : 00000000; +7641 : 00000000; +7642 : 00000000; +7643 : 00000000; +7644 : 00000000; +7645 : 00000000; +7646 : 00000000; +7647 : 00000000; +7648 : 00000000; +7649 : 00000000; +764a : 00000000; +764b : 00000000; +764c : 00000000; +764d : 00000000; +764e : 00000000; +764f : 00000000; +7650 : 00000000; +7651 : 00000000; +7652 : 00000000; +7653 : 00000000; +7654 : 00000000; +7655 : 00000000; +7656 : 00000000; +7657 : 00000000; +7658 : 00000000; +7659 : 00000000; +765a : 00000000; +765b : 00000000; +765c : 00000000; +765d : 00000000; +765e : 00000000; +765f : 00000000; +7660 : 00000000; +7661 : 00000000; +7662 : 00000000; +7663 : 00000000; +7664 : 00000000; +7665 : 00000000; +7666 : 00000000; +7667 : 00000000; +7668 : 00000000; +7669 : 00000000; +766a : 00000000; +766b : 00000000; +766c : 00000000; +766d : 00000000; +766e : 00000000; +766f : 00000000; +7670 : 00000000; +7671 : 00000000; +7672 : 00000000; +7673 : 00000000; +7674 : 00000000; +7675 : 00000000; +7676 : 00000000; +7677 : 00000000; +7678 : 00000000; +7679 : 00000000; +767a : 00000000; +767b : 00000000; +767c : 00000000; +767d : 00000000; +767e : 00000000; +767f : 00000000; +7680 : 00000000; +7681 : 00000000; +7682 : 00000000; +7683 : 00000000; +7684 : 00000000; +7685 : 00000000; +7686 : 00000000; +7687 : 00000000; +7688 : 00000000; +7689 : 00000000; +768a : 00000000; +768b : 00000000; +768c : 00000000; +768d : 00000000; +768e : 00000000; +768f : 00000000; +7690 : 00000000; +7691 : 00000000; +7692 : 00000000; +7693 : 00000000; +7694 : 00000000; +7695 : 00000000; +7696 : 00000000; +7697 : 00000000; +7698 : 00000000; +7699 : 00000000; +769a : 00000000; +769b : 00000000; +769c : 00000000; +769d : 00000000; +769e : 00000000; +769f : 00000000; +76a0 : 00000000; +76a1 : 00000000; +76a2 : 00000000; +76a3 : 00000000; +76a4 : 00000000; +76a5 : 00000000; +76a6 : 00000000; +76a7 : 00000000; +76a8 : 00000000; +76a9 : 00000000; +76aa : 00000000; +76ab : 00000000; +76ac : 00000000; +76ad : 00000000; +76ae : 00000000; +76af : 00000000; +76b0 : 00000000; +76b1 : 00000000; +76b2 : 00000000; +76b3 : 00000000; +76b4 : 00000000; +76b5 : 00000000; +76b6 : 00000000; +76b7 : 00000000; +76b8 : 00000000; +76b9 : 00000000; +76ba : 00000000; +76bb : 00000000; +76bc : 00000000; +76bd : 00000000; +76be : 00000000; +76bf : 00000000; +76c0 : 00000000; +76c1 : 00000000; +76c2 : 00000000; +76c3 : 00000000; +76c4 : 00000000; +76c5 : 00000000; +76c6 : 00000000; +76c7 : 00000000; +76c8 : 00000000; +76c9 : 00000000; +76ca : 00000000; +76cb : 00000000; +76cc : 00000000; +76cd : 00000000; +76ce : 00000000; +76cf : 00000000; +76d0 : 00000000; +76d1 : 00000000; +76d2 : 00000000; +76d3 : 00000000; +76d4 : 00000000; +76d5 : 00000000; +76d6 : 00000000; +76d7 : 00000000; +76d8 : 00000000; +76d9 : 00000000; +76da : 00000000; +76db : 00000000; +76dc : 00000000; +76dd : 00000000; +76de : 00000000; +76df : 00000000; +76e0 : 00000000; +76e1 : 00000000; +76e2 : 00000000; +76e3 : 00000000; +76e4 : 00000000; +76e5 : 00000000; +76e6 : 00000000; +76e7 : 00000000; +76e8 : 00000000; +76e9 : 00000000; +76ea : 00000000; +76eb : 00000000; +76ec : 00000000; +76ed : 00000000; +76ee : 00000000; +76ef : 00000000; +76f0 : 00000000; +76f1 : 00000000; +76f2 : 00000000; +76f3 : 00000000; +76f4 : 00000000; +76f5 : 00000000; +76f6 : 00000000; +76f7 : 00000000; +76f8 : 00000000; +76f9 : 00000000; +76fa : 00000000; +76fb : 00000000; +76fc : 00000000; +76fd : 00000000; +76fe : 00000000; +76ff : 00000000; +7700 : 00000000; +7701 : 00000000; +7702 : 00000000; +7703 : 00000000; +7704 : 00000000; +7705 : 00000000; +7706 : 00000000; +7707 : 00000000; +7708 : 00000000; +7709 : 00000000; +770a : 00000000; +770b : 00000000; +770c : 00000000; +770d : 00000000; +770e : 00000000; +770f : 00000000; +7710 : 00000000; +7711 : 00000000; +7712 : 00000000; +7713 : 00000000; +7714 : 00000000; +7715 : 00000000; +7716 : 00000000; +7717 : 00000000; +7718 : 00000000; +7719 : 00000000; +771a : 00000000; +771b : 00000000; +771c : 00000000; +771d : 00000000; +771e : 00000000; +771f : 00000000; +7720 : 00000000; +7721 : 00000000; +7722 : 00000000; +7723 : 00000000; +7724 : 00000000; +7725 : 00000000; +7726 : 00000000; +7727 : 00000000; +7728 : 00000000; +7729 : 00000000; +772a : 00000000; +772b : 00000000; +772c : 00000000; +772d : 00000000; +772e : 00000000; +772f : 00000000; +7730 : 00000000; +7731 : 00000000; +7732 : 00000000; +7733 : 00000000; +7734 : 00000000; +7735 : 00000000; +7736 : 00000000; +7737 : 00000000; +7738 : 00000000; +7739 : 00000000; +773a : 00000000; +773b : 00000000; +773c : 00000000; +773d : 00000000; +773e : 00000000; +773f : 00000000; +7740 : 00000000; +7741 : 00000000; +7742 : 00000000; +7743 : 00000000; +7744 : 00000000; +7745 : 00000000; +7746 : 00000000; +7747 : 00000000; +7748 : 00000000; +7749 : 00000000; +774a : 00000000; +774b : 00000000; +774c : 00000000; +774d : 00000000; +774e : 00000000; +774f : 00000000; +7750 : 00000000; +7751 : 00000000; +7752 : 00000000; +7753 : 00000000; +7754 : 00000000; +7755 : 00000000; +7756 : 00000000; +7757 : 00000000; +7758 : 00000000; +7759 : 00000000; +775a : 00000000; +775b : 00000000; +775c : 00000000; +775d : 00000000; +775e : 00000000; +775f : 00000000; +7760 : 00000000; +7761 : 00000000; +7762 : 00000000; +7763 : 00000000; +7764 : 00000000; +7765 : 00000000; +7766 : 00000000; +7767 : 00000000; +7768 : 00000000; +7769 : 00000000; +776a : 00000000; +776b : 00000000; +776c : 00000000; +776d : 00000000; +776e : 00000000; +776f : 00000000; +7770 : 00000000; +7771 : 00000000; +7772 : 00000000; +7773 : 00000000; +7774 : 00000000; +7775 : 00000000; +7776 : 00000000; +7777 : 00000000; +7778 : 00000000; +7779 : 00000000; +777a : 00000000; +777b : 00000000; +777c : 00000000; +777d : 00000000; +777e : 00000000; +777f : 00000000; +7780 : 00000000; +7781 : 00000000; +7782 : 00000000; +7783 : 00000000; +7784 : 00000000; +7785 : 00000000; +7786 : 00000000; +7787 : 00000000; +7788 : 00000000; +7789 : 00000000; +778a : 00000000; +778b : 00000000; +778c : 00000000; +778d : 00000000; +778e : 00000000; +778f : 00000000; +7790 : 00000000; +7791 : 00000000; +7792 : 00000000; +7793 : 00000000; +7794 : 00000000; +7795 : 00000000; +7796 : 00000000; +7797 : 00000000; +7798 : 00000000; +7799 : 00000000; +779a : 00000000; +779b : 00000000; +779c : 00000000; +779d : 00000000; +779e : 00000000; +779f : 00000000; +77a0 : 00000000; +77a1 : 00000000; +77a2 : 00000000; +77a3 : 00000000; +77a4 : 00000000; +77a5 : 00000000; +77a6 : 00000000; +77a7 : 00000000; +77a8 : 00000000; +77a9 : 00000000; +77aa : 00000000; +77ab : 00000000; +77ac : 00000000; +77ad : 00000000; +77ae : 00000000; +77af : 00000000; +77b0 : 00000000; +77b1 : 00000000; +77b2 : 00000000; +77b3 : 00000000; +77b4 : 00000000; +77b5 : 00000000; +77b6 : 00000000; +77b7 : 00000000; +77b8 : 00000000; +77b9 : 00000000; +77ba : 00000000; +77bb : 00000000; +77bc : 00000000; +77bd : 00000000; +77be : 00000000; +77bf : 00000000; +77c0 : 00000000; +77c1 : 00000000; +77c2 : 00000000; +77c3 : 00000000; +77c4 : 00000000; +77c5 : 00000000; +77c6 : 00000000; +77c7 : 00000000; +77c8 : 00000000; +77c9 : 00000000; +77ca : 00000000; +77cb : 00000000; +77cc : 00000000; +77cd : 00000000; +77ce : 00000000; +77cf : 00000000; +77d0 : 00000000; +77d1 : 00000000; +77d2 : 00000000; +77d3 : 00000000; +77d4 : 00000000; +77d5 : 00000000; +77d6 : 00000000; +77d7 : 00000000; +77d8 : 00000000; +77d9 : 00000000; +77da : 00000000; +77db : 00000000; +77dc : 00000000; +77dd : 00000000; +77de : 00000000; +77df : 00000000; +77e0 : 00000000; +77e1 : 00000000; +77e2 : 00000000; +77e3 : 00000000; +77e4 : 00000000; +77e5 : 00000000; +77e6 : 00000000; +77e7 : 00000000; +77e8 : 00000000; +77e9 : 00000000; +77ea : 00000000; +77eb : 00000000; +77ec : 00000000; +77ed : 00000000; +77ee : 00000000; +77ef : 00000000; +77f0 : 00000000; +77f1 : 00000000; +77f2 : 00000000; +77f3 : 00000000; +77f4 : 00000000; +77f5 : 00000000; +77f6 : 00000000; +77f7 : 00000000; +77f8 : 00000000; +77f9 : 00000000; +77fa : 00000000; +77fb : 00000000; +77fc : 00000000; +77fd : 00000000; +77fe : 00000000; +77ff : 00000000; +7800 : 00000000; +7801 : 00000000; +7802 : 00000000; +7803 : 00000000; +7804 : 00000000; +7805 : 00000000; +7806 : 00000000; +7807 : 00000000; +7808 : 00000000; +7809 : 00000000; +780a : 00000000; +780b : 00000000; +780c : 00000000; +780d : 00000000; +780e : 00000000; +780f : 00000000; +7810 : 00000000; +7811 : 00000000; +7812 : 00000000; +7813 : 00000000; +7814 : 00000000; +7815 : 00000000; +7816 : 00000000; +7817 : 00000000; +7818 : 00000000; +7819 : 00000000; +781a : 00000000; +781b : 00000000; +781c : 00000000; +781d : 00000000; +781e : 00000000; +781f : 00000000; +7820 : 00000000; +7821 : 00000000; +7822 : 00000000; +7823 : 00000000; +7824 : 00000000; +7825 : 00000000; +7826 : 00000000; +7827 : 00000000; +7828 : 00000000; +7829 : 00000000; +782a : 00000000; +782b : 00000000; +782c : 00000000; +782d : 00000000; +782e : 00000000; +782f : 00000000; +7830 : 00000000; +7831 : 00000000; +7832 : 00000000; +7833 : 00000000; +7834 : 00000000; +7835 : 00000000; +7836 : 00000000; +7837 : 00000000; +7838 : 00000000; +7839 : 00000000; +783a : 00000000; +783b : 00000000; +783c : 00000000; +783d : 00000000; +783e : 00000000; +783f : 00000000; +7840 : 00000000; +7841 : 00000000; +7842 : 00000000; +7843 : 00000000; +7844 : 00000000; +7845 : 00000000; +7846 : 00000000; +7847 : 00000000; +7848 : 00000000; +7849 : 00000000; +784a : 00000000; +784b : 00000000; +784c : 00000000; +784d : 00000000; +784e : 00000000; +784f : 00000000; +7850 : 00000000; +7851 : 00000000; +7852 : 00000000; +7853 : 00000000; +7854 : 00000000; +7855 : 00000000; +7856 : 00000000; +7857 : 00000000; +7858 : 00000000; +7859 : 00000000; +785a : 00000000; +785b : 00000000; +785c : 00000000; +785d : 00000000; +785e : 00000000; +785f : 00000000; +7860 : 00000000; +7861 : 00000000; +7862 : 00000000; +7863 : 00000000; +7864 : 00000000; +7865 : 00000000; +7866 : 00000000; +7867 : 00000000; +7868 : 00000000; +7869 : 00000000; +786a : 00000000; +786b : 00000000; +786c : 00000000; +786d : 00000000; +786e : 00000000; +786f : 00000000; +7870 : 00000000; +7871 : 00000000; +7872 : 00000000; +7873 : 00000000; +7874 : 00000000; +7875 : 00000000; +7876 : 00000000; +7877 : 00000000; +7878 : 00000000; +7879 : 00000000; +787a : 00000000; +787b : 00000000; +787c : 00000000; +787d : 00000000; +787e : 00000000; +787f : 00000000; +7880 : 00000000; +7881 : 00000000; +7882 : 00000000; +7883 : 00000000; +7884 : 00000000; +7885 : 00000000; +7886 : 00000000; +7887 : 00000000; +7888 : 00000000; +7889 : 00000000; +788a : 00000000; +788b : 00000000; +788c : 00000000; +788d : 00000000; +788e : 00000000; +788f : 00000000; +7890 : 00000000; +7891 : 00000000; +7892 : 00000000; +7893 : 00000000; +7894 : 00000000; +7895 : 00000000; +7896 : 00000000; +7897 : 00000000; +7898 : 00000000; +7899 : 00000000; +789a : 00000000; +789b : 00000000; +789c : 00000000; +789d : 00000000; +789e : 00000000; +789f : 00000000; +78a0 : 00000000; +78a1 : 00000000; +78a2 : 00000000; +78a3 : 00000000; +78a4 : 00000000; +78a5 : 00000000; +78a6 : 00000000; +78a7 : 00000000; +78a8 : 00000000; +78a9 : 00000000; +78aa : 00000000; +78ab : 00000000; +78ac : 00000000; +78ad : 00000000; +78ae : 00000000; +78af : 00000000; +78b0 : 00000000; +78b1 : 00000000; +78b2 : 00000000; +78b3 : 00000000; +78b4 : 00000000; +78b5 : 00000000; +78b6 : 00000000; +78b7 : 00000000; +78b8 : 00000000; +78b9 : 00000000; +78ba : 00000000; +78bb : 00000000; +78bc : 00000000; +78bd : 00000000; +78be : 00000000; +78bf : 00000000; +78c0 : 00000000; +78c1 : 00000000; +78c2 : 00000000; +78c3 : 00000000; +78c4 : 00000000; +78c5 : 00000000; +78c6 : 00000000; +78c7 : 00000000; +78c8 : 00000000; +78c9 : 00000000; +78ca : 00000000; +78cb : 00000000; +78cc : 00000000; +78cd : 00000000; +78ce : 00000000; +78cf : 00000000; +78d0 : 00000000; +78d1 : 00000000; +78d2 : 00000000; +78d3 : 00000000; +78d4 : 00000000; +78d5 : 00000000; +78d6 : 00000000; +78d7 : 00000000; +78d8 : 00000000; +78d9 : 00000000; +78da : 00000000; +78db : 00000000; +78dc : 00000000; +78dd : 00000000; +78de : 00000000; +78df : 00000000; +78e0 : 00000000; +78e1 : 00000000; +78e2 : 00000000; +78e3 : 00000000; +78e4 : 00000000; +78e5 : 00000000; +78e6 : 00000000; +78e7 : 00000000; +78e8 : 00000000; +78e9 : 00000000; +78ea : 00000000; +78eb : 00000000; +78ec : 00000000; +78ed : 00000000; +78ee : 00000000; +78ef : 00000000; +78f0 : 00000000; +78f1 : 00000000; +78f2 : 00000000; +78f3 : 00000000; +78f4 : 00000000; +78f5 : 00000000; +78f6 : 00000000; +78f7 : 00000000; +78f8 : 00000000; +78f9 : 00000000; +78fa : 00000000; +78fb : 00000000; +78fc : 00000000; +78fd : 00000000; +78fe : 00000000; +78ff : 00000000; +7900 : 00000000; +7901 : 00000000; +7902 : 00000000; +7903 : 00000000; +7904 : 00000000; +7905 : 00000000; +7906 : 00000000; +7907 : 00000000; +7908 : 00000000; +7909 : 00000000; +790a : 00000000; +790b : 00000000; +790c : 00000000; +790d : 00000000; +790e : 00000000; +790f : 00000000; +7910 : 00000000; +7911 : 00000000; +7912 : 00000000; +7913 : 00000000; +7914 : 00000000; +7915 : 00000000; +7916 : 00000000; +7917 : 00000000; +7918 : 00000000; +7919 : 00000000; +791a : 00000000; +791b : 00000000; +791c : 00000000; +791d : 00000000; +791e : 00000000; +791f : 00000000; +7920 : 00000000; +7921 : 00000000; +7922 : 00000000; +7923 : 00000000; +7924 : 00000000; +7925 : 00000000; +7926 : 00000000; +7927 : 00000000; +7928 : 00000000; +7929 : 00000000; +792a : 00000000; +792b : 00000000; +792c : 00000000; +792d : 00000000; +792e : 00000000; +792f : 00000000; +7930 : 00000000; +7931 : 00000000; +7932 : 00000000; +7933 : 00000000; +7934 : 00000000; +7935 : 00000000; +7936 : 00000000; +7937 : 00000000; +7938 : 00000000; +7939 : 00000000; +793a : 00000000; +793b : 00000000; +793c : 00000000; +793d : 00000000; +793e : 00000000; +793f : 00000000; +7940 : 00000000; +7941 : 00000000; +7942 : 00000000; +7943 : 00000000; +7944 : 00000000; +7945 : 00000000; +7946 : 00000000; +7947 : 00000000; +7948 : 00000000; +7949 : 00000000; +794a : 00000000; +794b : 00000000; +794c : 00000000; +794d : 00000000; +794e : 00000000; +794f : 00000000; +7950 : 00000000; +7951 : 00000000; +7952 : 00000000; +7953 : 00000000; +7954 : 00000000; +7955 : 00000000; +7956 : 00000000; +7957 : 00000000; +7958 : 00000000; +7959 : 00000000; +795a : 00000000; +795b : 00000000; +795c : 00000000; +795d : 00000000; +795e : 00000000; +795f : 00000000; +7960 : 00000000; +7961 : 00000000; +7962 : 00000000; +7963 : 00000000; +7964 : 00000000; +7965 : 00000000; +7966 : 00000000; +7967 : 00000000; +7968 : 00000000; +7969 : 00000000; +796a : 00000000; +796b : 00000000; +796c : 00000000; +796d : 00000000; +796e : 00000000; +796f : 00000000; +7970 : 00000000; +7971 : 00000000; +7972 : 00000000; +7973 : 00000000; +7974 : 00000000; +7975 : 00000000; +7976 : 00000000; +7977 : 00000000; +7978 : 00000000; +7979 : 00000000; +797a : 00000000; +797b : 00000000; +797c : 00000000; +797d : 00000000; +797e : 00000000; +797f : 00000000; +7980 : 00000000; +7981 : 00000000; +7982 : 00000000; +7983 : 00000000; +7984 : 00000000; +7985 : 00000000; +7986 : 00000000; +7987 : 00000000; +7988 : 00000000; +7989 : 00000000; +798a : 00000000; +798b : 00000000; +798c : 00000000; +798d : 00000000; +798e : 00000000; +798f : 00000000; +7990 : 00000000; +7991 : 00000000; +7992 : 00000000; +7993 : 00000000; +7994 : 00000000; +7995 : 00000000; +7996 : 00000000; +7997 : 00000000; +7998 : 00000000; +7999 : 00000000; +799a : 00000000; +799b : 00000000; +799c : 00000000; +799d : 00000000; +799e : 00000000; +799f : 00000000; +79a0 : 00000000; +79a1 : 00000000; +79a2 : 00000000; +79a3 : 00000000; +79a4 : 00000000; +79a5 : 00000000; +79a6 : 00000000; +79a7 : 00000000; +79a8 : 00000000; +79a9 : 00000000; +79aa : 00000000; +79ab : 00000000; +79ac : 00000000; +79ad : 00000000; +79ae : 00000000; +79af : 00000000; +79b0 : 00000000; +79b1 : 00000000; +79b2 : 00000000; +79b3 : 00000000; +79b4 : 00000000; +79b5 : 00000000; +79b6 : 00000000; +79b7 : 00000000; +79b8 : 00000000; +79b9 : 00000000; +79ba : 00000000; +79bb : 00000000; +79bc : 00000000; +79bd : 00000000; +79be : 00000000; +79bf : 00000000; +79c0 : 00000000; +79c1 : 00000000; +79c2 : 00000000; +79c3 : 00000000; +79c4 : 00000000; +79c5 : 00000000; +79c6 : 00000000; +79c7 : 00000000; +79c8 : 00000000; +79c9 : 00000000; +79ca : 00000000; +79cb : 00000000; +79cc : 00000000; +79cd : 00000000; +79ce : 00000000; +79cf : 00000000; +79d0 : 00000000; +79d1 : 00000000; +79d2 : 00000000; +79d3 : 00000000; +79d4 : 00000000; +79d5 : 00000000; +79d6 : 00000000; +79d7 : 00000000; +79d8 : 00000000; +79d9 : 00000000; +79da : 00000000; +79db : 00000000; +79dc : 00000000; +79dd : 00000000; +79de : 00000000; +79df : 00000000; +79e0 : 00000000; +79e1 : 00000000; +79e2 : 00000000; +79e3 : 00000000; +79e4 : 00000000; +79e5 : 00000000; +79e6 : 00000000; +79e7 : 00000000; +79e8 : 00000000; +79e9 : 00000000; +79ea : 00000000; +79eb : 00000000; +79ec : 00000000; +79ed : 00000000; +79ee : 00000000; +79ef : 00000000; +79f0 : 00000000; +79f1 : 00000000; +79f2 : 00000000; +79f3 : 00000000; +79f4 : 00000000; +79f5 : 00000000; +79f6 : 00000000; +79f7 : 00000000; +79f8 : 00000000; +79f9 : 00000000; +79fa : 00000000; +79fb : 00000000; +79fc : 00000000; +79fd : 00000000; +79fe : 00000000; +79ff : 00000000; +7a00 : 00000000; +7a01 : 00000000; +7a02 : 00000000; +7a03 : 00000000; +7a04 : 00000000; +7a05 : 00000000; +7a06 : 00000000; +7a07 : 00000000; +7a08 : 00000000; +7a09 : 00000000; +7a0a : 00000000; +7a0b : 00000000; +7a0c : 00000000; +7a0d : 00000000; +7a0e : 00000000; +7a0f : 00000000; +7a10 : 00000000; +7a11 : 00000000; +7a12 : 00000000; +7a13 : 00000000; +7a14 : 00000000; +7a15 : 00000000; +7a16 : 00000000; +7a17 : 00000000; +7a18 : 00000000; +7a19 : 00000000; +7a1a : 00000000; +7a1b : 00000000; +7a1c : 00000000; +7a1d : 00000000; +7a1e : 00000000; +7a1f : 00000000; +7a20 : 00000000; +7a21 : 00000000; +7a22 : 00000000; +7a23 : 00000000; +7a24 : 00000000; +7a25 : 00000000; +7a26 : 00000000; +7a27 : 00000000; +7a28 : 00000000; +7a29 : 00000000; +7a2a : 00000000; +7a2b : 00000000; +7a2c : 00000000; +7a2d : 00000000; +7a2e : 00000000; +7a2f : 00000000; +7a30 : 00000000; +7a31 : 00000000; +7a32 : 00000000; +7a33 : 00000000; +7a34 : 00000000; +7a35 : 00000000; +7a36 : 00000000; +7a37 : 00000000; +7a38 : 00000000; +7a39 : 00000000; +7a3a : 00000000; +7a3b : 00000000; +7a3c : 00000000; +7a3d : 00000000; +7a3e : 00000000; +7a3f : 00000000; +7a40 : 00000000; +7a41 : 00000000; +7a42 : 00000000; +7a43 : 00000000; +7a44 : 00000000; +7a45 : 00000000; +7a46 : 00000000; +7a47 : 00000000; +7a48 : 00000000; +7a49 : 00000000; +7a4a : 00000000; +7a4b : 00000000; +7a4c : 00000000; +7a4d : 00000000; +7a4e : 00000000; +7a4f : 00000000; +7a50 : 00000000; +7a51 : 00000000; +7a52 : 00000000; +7a53 : 00000000; +7a54 : 00000000; +7a55 : 00000000; +7a56 : 00000000; +7a57 : 00000000; +7a58 : 00000000; +7a59 : 00000000; +7a5a : 00000000; +7a5b : 00000000; +7a5c : 00000000; +7a5d : 00000000; +7a5e : 00000000; +7a5f : 00000000; +7a60 : 00000000; +7a61 : 00000000; +7a62 : 00000000; +7a63 : 00000000; +7a64 : 00000000; +7a65 : 00000000; +7a66 : 00000000; +7a67 : 00000000; +7a68 : 00000000; +7a69 : 00000000; +7a6a : 00000000; +7a6b : 00000000; +7a6c : 00000000; +7a6d : 00000000; +7a6e : 00000000; +7a6f : 00000000; +7a70 : 00000000; +7a71 : 00000000; +7a72 : 00000000; +7a73 : 00000000; +7a74 : 00000000; +7a75 : 00000000; +7a76 : 00000000; +7a77 : 00000000; +7a78 : 00000000; +7a79 : 00000000; +7a7a : 00000000; +7a7b : 00000000; +7a7c : 00000000; +7a7d : 00000000; +7a7e : 00000000; +7a7f : 00000000; +7a80 : 00000000; +7a81 : 00000000; +7a82 : 00000000; +7a83 : 00000000; +7a84 : 00000000; +7a85 : 00000000; +7a86 : 00000000; +7a87 : 00000000; +7a88 : 00000000; +7a89 : 00000000; +7a8a : 00000000; +7a8b : 00000000; +7a8c : 00000000; +7a8d : 00000000; +7a8e : 00000000; +7a8f : 00000000; +7a90 : 00000000; +7a91 : 00000000; +7a92 : 00000000; +7a93 : 00000000; +7a94 : 00000000; +7a95 : 00000000; +7a96 : 00000000; +7a97 : 00000000; +7a98 : 00000000; +7a99 : 00000000; +7a9a : 00000000; +7a9b : 00000000; +7a9c : 00000000; +7a9d : 00000000; +7a9e : 00000000; +7a9f : 00000000; +7aa0 : 00000000; +7aa1 : 00000000; +7aa2 : 00000000; +7aa3 : 00000000; +7aa4 : 00000000; +7aa5 : 00000000; +7aa6 : 00000000; +7aa7 : 00000000; +7aa8 : 00000000; +7aa9 : 00000000; +7aaa : 00000000; +7aab : 00000000; +7aac : 00000000; +7aad : 00000000; +7aae : 00000000; +7aaf : 00000000; +7ab0 : 00000000; +7ab1 : 00000000; +7ab2 : 00000000; +7ab3 : 00000000; +7ab4 : 00000000; +7ab5 : 00000000; +7ab6 : 00000000; +7ab7 : 00000000; +7ab8 : 00000000; +7ab9 : 00000000; +7aba : 00000000; +7abb : 00000000; +7abc : 00000000; +7abd : 00000000; +7abe : 00000000; +7abf : 00000000; +7ac0 : 00000000; +7ac1 : 00000000; +7ac2 : 00000000; +7ac3 : 00000000; +7ac4 : 00000000; +7ac5 : 00000000; +7ac6 : 00000000; +7ac7 : 00000000; +7ac8 : 00000000; +7ac9 : 00000000; +7aca : 00000000; +7acb : 00000000; +7acc : 00000000; +7acd : 00000000; +7ace : 00000000; +7acf : 00000000; +7ad0 : 00000000; +7ad1 : 00000000; +7ad2 : 00000000; +7ad3 : 00000000; +7ad4 : 00000000; +7ad5 : 00000000; +7ad6 : 00000000; +7ad7 : 00000000; +7ad8 : 00000000; +7ad9 : 00000000; +7ada : 00000000; +7adb : 00000000; +7adc : 00000000; +7add : 00000000; +7ade : 00000000; +7adf : 00000000; +7ae0 : 00000000; +7ae1 : 00000000; +7ae2 : 00000000; +7ae3 : 00000000; +7ae4 : 00000000; +7ae5 : 00000000; +7ae6 : 00000000; +7ae7 : 00000000; +7ae8 : 00000000; +7ae9 : 00000000; +7aea : 00000000; +7aeb : 00000000; +7aec : 00000000; +7aed : 00000000; +7aee : 00000000; +7aef : 00000000; +7af0 : 00000000; +7af1 : 00000000; +7af2 : 00000000; +7af3 : 00000000; +7af4 : 00000000; +7af5 : 00000000; +7af6 : 00000000; +7af7 : 00000000; +7af8 : 00000000; +7af9 : 00000000; +7afa : 00000000; +7afb : 00000000; +7afc : 00000000; +7afd : 00000000; +7afe : 00000000; +7aff : 00000000; +7b00 : 00000000; +7b01 : 00000000; +7b02 : 00000000; +7b03 : 00000000; +7b04 : 00000000; +7b05 : 00000000; +7b06 : 00000000; +7b07 : 00000000; +7b08 : 00000000; +7b09 : 00000000; +7b0a : 00000000; +7b0b : 00000000; +7b0c : 00000000; +7b0d : 00000000; +7b0e : 00000000; +7b0f : 00000000; +7b10 : 00000000; +7b11 : 00000000; +7b12 : 00000000; +7b13 : 00000000; +7b14 : 00000000; +7b15 : 00000000; +7b16 : 00000000; +7b17 : 00000000; +7b18 : 00000000; +7b19 : 00000000; +7b1a : 00000000; +7b1b : 00000000; +7b1c : 00000000; +7b1d : 00000000; +7b1e : 00000000; +7b1f : 00000000; +7b20 : 00000000; +7b21 : 00000000; +7b22 : 00000000; +7b23 : 00000000; +7b24 : 00000000; +7b25 : 00000000; +7b26 : 00000000; +7b27 : 00000000; +7b28 : 00000000; +7b29 : 00000000; +7b2a : 00000000; +7b2b : 00000000; +7b2c : 00000000; +7b2d : 00000000; +7b2e : 00000000; +7b2f : 00000000; +7b30 : 00000000; +7b31 : 00000000; +7b32 : 00000000; +7b33 : 00000000; +7b34 : 00000000; +7b35 : 00000000; +7b36 : 00000000; +7b37 : 00000000; +7b38 : 00000000; +7b39 : 00000000; +7b3a : 00000000; +7b3b : 00000000; +7b3c : 00000000; +7b3d : 00000000; +7b3e : 00000000; +7b3f : 00000000; +7b40 : 00000000; +7b41 : 00000000; +7b42 : 00000000; +7b43 : 00000000; +7b44 : 00000000; +7b45 : 00000000; +7b46 : 00000000; +7b47 : 00000000; +7b48 : 00000000; +7b49 : 00000000; +7b4a : 00000000; +7b4b : 00000000; +7b4c : 00000000; +7b4d : 00000000; +7b4e : 00000000; +7b4f : 00000000; +7b50 : 00000000; +7b51 : 00000000; +7b52 : 00000000; +7b53 : 00000000; +7b54 : 00000000; +7b55 : 00000000; +7b56 : 00000000; +7b57 : 00000000; +7b58 : 00000000; +7b59 : 00000000; +7b5a : 00000000; +7b5b : 00000000; +7b5c : 00000000; +7b5d : 00000000; +7b5e : 00000000; +7b5f : 00000000; +7b60 : 00000000; +7b61 : 00000000; +7b62 : 00000000; +7b63 : 00000000; +7b64 : 00000000; +7b65 : 00000000; +7b66 : 00000000; +7b67 : 00000000; +7b68 : 00000000; +7b69 : 00000000; +7b6a : 00000000; +7b6b : 00000000; +7b6c : 00000000; +7b6d : 00000000; +7b6e : 00000000; +7b6f : 00000000; +7b70 : 00000000; +7b71 : 00000000; +7b72 : 00000000; +7b73 : 00000000; +7b74 : 00000000; +7b75 : 00000000; +7b76 : 00000000; +7b77 : 00000000; +7b78 : 00000000; +7b79 : 00000000; +7b7a : 00000000; +7b7b : 00000000; +7b7c : 00000000; +7b7d : 00000000; +7b7e : 00000000; +7b7f : 00000000; +7b80 : 00000000; +7b81 : 00000000; +7b82 : 00000000; +7b83 : 00000000; +7b84 : 00000000; +7b85 : 00000000; +7b86 : 00000000; +7b87 : 00000000; +7b88 : 00000000; +7b89 : 00000000; +7b8a : 00000000; +7b8b : 00000000; +7b8c : 00000000; +7b8d : 00000000; +7b8e : 00000000; +7b8f : 00000000; +7b90 : 00000000; +7b91 : 00000000; +7b92 : 00000000; +7b93 : 00000000; +7b94 : 00000000; +7b95 : 00000000; +7b96 : 00000000; +7b97 : 00000000; +7b98 : 00000000; +7b99 : 00000000; +7b9a : 00000000; +7b9b : 00000000; +7b9c : 00000000; +7b9d : 00000000; +7b9e : 00000000; +7b9f : 00000000; +7ba0 : 00000000; +7ba1 : 00000000; +7ba2 : 00000000; +7ba3 : 00000000; +7ba4 : 00000000; +7ba5 : 00000000; +7ba6 : 00000000; +7ba7 : 00000000; +7ba8 : 00000000; +7ba9 : 00000000; +7baa : 00000000; +7bab : 00000000; +7bac : 00000000; +7bad : 00000000; +7bae : 00000000; +7baf : 00000000; +7bb0 : 00000000; +7bb1 : 00000000; +7bb2 : 00000000; +7bb3 : 00000000; +7bb4 : 00000000; +7bb5 : 00000000; +7bb6 : 00000000; +7bb7 : 00000000; +7bb8 : 00000000; +7bb9 : 00000000; +7bba : 00000000; +7bbb : 00000000; +7bbc : 00000000; +7bbd : 00000000; +7bbe : 00000000; +7bbf : 00000000; +7bc0 : 00000000; +7bc1 : 00000000; +7bc2 : 00000000; +7bc3 : 00000000; +7bc4 : 00000000; +7bc5 : 00000000; +7bc6 : 00000000; +7bc7 : 00000000; +7bc8 : 00000000; +7bc9 : 00000000; +7bca : 00000000; +7bcb : 00000000; +7bcc : 00000000; +7bcd : 00000000; +7bce : 00000000; +7bcf : 00000000; +7bd0 : 00000000; +7bd1 : 00000000; +7bd2 : 00000000; +7bd3 : 00000000; +7bd4 : 00000000; +7bd5 : 00000000; +7bd6 : 00000000; +7bd7 : 00000000; +7bd8 : 00000000; +7bd9 : 00000000; +7bda : 00000000; +7bdb : 00000000; +7bdc : 00000000; +7bdd : 00000000; +7bde : 00000000; +7bdf : 00000000; +7be0 : 00000000; +7be1 : 00000000; +7be2 : 00000000; +7be3 : 00000000; +7be4 : 00000000; +7be5 : 00000000; +7be6 : 00000000; +7be7 : 00000000; +7be8 : 00000000; +7be9 : 00000000; +7bea : 00000000; +7beb : 00000000; +7bec : 00000000; +7bed : 00000000; +7bee : 00000000; +7bef : 00000000; +7bf0 : 00000000; +7bf1 : 00000000; +7bf2 : 00000000; +7bf3 : 00000000; +7bf4 : 00000000; +7bf5 : 00000000; +7bf6 : 00000000; +7bf7 : 00000000; +7bf8 : 00000000; +7bf9 : 00000000; +7bfa : 00000000; +7bfb : 00000000; +7bfc : 00000000; +7bfd : 00000000; +7bfe : 00000000; +7bff : 00000000; +7c00 : 00000000; +7c01 : 00000000; +7c02 : 00000000; +7c03 : 00000000; +7c04 : 00000000; +7c05 : 00000000; +7c06 : 00000000; +7c07 : 00000000; +7c08 : 00000000; +7c09 : 00000000; +7c0a : 00000000; +7c0b : 00000000; +7c0c : 00000000; +7c0d : 00000000; +7c0e : 00000000; +7c0f : 00000000; +7c10 : 00000000; +7c11 : 00000000; +7c12 : 00000000; +7c13 : 00000000; +7c14 : 00000000; +7c15 : 00000000; +7c16 : 00000000; +7c17 : 00000000; +7c18 : 00000000; +7c19 : 00000000; +7c1a : 00000000; +7c1b : 00000000; +7c1c : 00000000; +7c1d : 00000000; +7c1e : 00000000; +7c1f : 00000000; +7c20 : 00000000; +7c21 : 00000000; +7c22 : 00000000; +7c23 : 00000000; +7c24 : 00000000; +7c25 : 00000000; +7c26 : 00000000; +7c27 : 00000000; +7c28 : 00000000; +7c29 : 00000000; +7c2a : 00000000; +7c2b : 00000000; +7c2c : 00000000; +7c2d : 00000000; +7c2e : 00000000; +7c2f : 00000000; +7c30 : 00000000; +7c31 : 00000000; +7c32 : 00000000; +7c33 : 00000000; +7c34 : 00000000; +7c35 : 00000000; +7c36 : 00000000; +7c37 : 00000000; +7c38 : 00000000; +7c39 : 00000000; +7c3a : 00000000; +7c3b : 00000000; +7c3c : 00000000; +7c3d : 00000000; +7c3e : 00000000; +7c3f : 00000000; +7c40 : 00000000; +7c41 : 00000000; +7c42 : 00000000; +7c43 : 00000000; +7c44 : 00000000; +7c45 : 00000000; +7c46 : 00000000; +7c47 : 00000000; +7c48 : 00000000; +7c49 : 00000000; +7c4a : 00000000; +7c4b : 00000000; +7c4c : 00000000; +7c4d : 00000000; +7c4e : 00000000; +7c4f : 00000000; +7c50 : 00000000; +7c51 : 00000000; +7c52 : 00000000; +7c53 : 00000000; +7c54 : 00000000; +7c55 : 00000000; +7c56 : 00000000; +7c57 : 00000000; +7c58 : 00000000; +7c59 : 00000000; +7c5a : 00000000; +7c5b : 00000000; +7c5c : 00000000; +7c5d : 00000000; +7c5e : 00000000; +7c5f : 00000000; +7c60 : 00000000; +7c61 : 00000000; +7c62 : 00000000; +7c63 : 00000000; +7c64 : 00000000; +7c65 : 00000000; +7c66 : 00000000; +7c67 : 00000000; +7c68 : 00000000; +7c69 : 00000000; +7c6a : 00000000; +7c6b : 00000000; +7c6c : 00000000; +7c6d : 00000000; +7c6e : 00000000; +7c6f : 00000000; +7c70 : 00000000; +7c71 : 00000000; +7c72 : 00000000; +7c73 : 00000000; +7c74 : 00000000; +7c75 : 00000000; +7c76 : 00000000; +7c77 : 00000000; +7c78 : 00000000; +7c79 : 00000000; +7c7a : 00000000; +7c7b : 00000000; +7c7c : 00000000; +7c7d : 00000000; +7c7e : 00000000; +7c7f : 00000000; +7c80 : 00000000; +7c81 : 00000000; +7c82 : 00000000; +7c83 : 00000000; +7c84 : 00000000; +7c85 : 00000000; +7c86 : 00000000; +7c87 : 00000000; +7c88 : 00000000; +7c89 : 00000000; +7c8a : 00000000; +7c8b : 00000000; +7c8c : 00000000; +7c8d : 00000000; +7c8e : 00000000; +7c8f : 00000000; +7c90 : 00000000; +7c91 : 00000000; +7c92 : 00000000; +7c93 : 00000000; +7c94 : 00000000; +7c95 : 00000000; +7c96 : 00000000; +7c97 : 00000000; +7c98 : 00000000; +7c99 : 00000000; +7c9a : 00000000; +7c9b : 00000000; +7c9c : 00000000; +7c9d : 00000000; +7c9e : 00000000; +7c9f : 00000000; +7ca0 : 00000000; +7ca1 : 00000000; +7ca2 : 00000000; +7ca3 : 00000000; +7ca4 : 00000000; +7ca5 : 00000000; +7ca6 : 00000000; +7ca7 : 00000000; +7ca8 : 00000000; +7ca9 : 00000000; +7caa : 00000000; +7cab : 00000000; +7cac : 00000000; +7cad : 00000000; +7cae : 00000000; +7caf : 00000000; +7cb0 : 00000000; +7cb1 : 00000000; +7cb2 : 00000000; +7cb3 : 00000000; +7cb4 : 00000000; +7cb5 : 00000000; +7cb6 : 00000000; +7cb7 : 00000000; +7cb8 : 00000000; +7cb9 : 00000000; +7cba : 00000000; +7cbb : 00000000; +7cbc : 00000000; +7cbd : 00000000; +7cbe : 00000000; +7cbf : 00000000; +7cc0 : 00000000; +7cc1 : 00000000; +7cc2 : 00000000; +7cc3 : 00000000; +7cc4 : 00000000; +7cc5 : 00000000; +7cc6 : 00000000; +7cc7 : 00000000; +7cc8 : 00000000; +7cc9 : 00000000; +7cca : 00000000; +7ccb : 00000000; +7ccc : 00000000; +7ccd : 00000000; +7cce : 00000000; +7ccf : 00000000; +7cd0 : 00000000; +7cd1 : 00000000; +7cd2 : 00000000; +7cd3 : 00000000; +7cd4 : 00000000; +7cd5 : 00000000; +7cd6 : 00000000; +7cd7 : 00000000; +7cd8 : 00000000; +7cd9 : 00000000; +7cda : 00000000; +7cdb : 00000000; +7cdc : 00000000; +7cdd : 00000000; +7cde : 00000000; +7cdf : 00000000; +7ce0 : 00000000; +7ce1 : 00000000; +7ce2 : 00000000; +7ce3 : 00000000; +7ce4 : 00000000; +7ce5 : 00000000; +7ce6 : 00000000; +7ce7 : 00000000; +7ce8 : 00000000; +7ce9 : 00000000; +7cea : 00000000; +7ceb : 00000000; +7cec : 00000000; +7ced : 00000000; +7cee : 00000000; +7cef : 00000000; +7cf0 : 00000000; +7cf1 : 00000000; +7cf2 : 00000000; +7cf3 : 00000000; +7cf4 : 00000000; +7cf5 : 00000000; +7cf6 : 00000000; +7cf7 : 00000000; +7cf8 : 00000000; +7cf9 : 00000000; +7cfa : 00000000; +7cfb : 00000000; +7cfc : 00000000; +7cfd : 00000000; +7cfe : 00000000; +7cff : 00000000; +7d00 : 00000000; +7d01 : 00000000; +7d02 : 00000000; +7d03 : 00000000; +7d04 : 00000000; +7d05 : 00000000; +7d06 : 00000000; +7d07 : 00000000; +7d08 : 00000000; +7d09 : 00000000; +7d0a : 00000000; +7d0b : 00000000; +7d0c : 00000000; +7d0d : 00000000; +7d0e : 00000000; +7d0f : 00000000; +7d10 : 00000000; +7d11 : 00000000; +7d12 : 00000000; +7d13 : 00000000; +7d14 : 00000000; +7d15 : 00000000; +7d16 : 00000000; +7d17 : 00000000; +7d18 : 00000000; +7d19 : 00000000; +7d1a : 00000000; +7d1b : 00000000; +7d1c : 00000000; +7d1d : 00000000; +7d1e : 00000000; +7d1f : 00000000; +7d20 : 00000000; +7d21 : 00000000; +7d22 : 00000000; +7d23 : 00000000; +7d24 : 00000000; +7d25 : 00000000; +7d26 : 00000000; +7d27 : 00000000; +7d28 : 00000000; +7d29 : 00000000; +7d2a : 00000000; +7d2b : 00000000; +7d2c : 00000000; +7d2d : 00000000; +7d2e : 00000000; +7d2f : 00000000; +7d30 : 00000000; +7d31 : 00000000; +7d32 : 00000000; +7d33 : 00000000; +7d34 : 00000000; +7d35 : 00000000; +7d36 : 00000000; +7d37 : 00000000; +7d38 : 00000000; +7d39 : 00000000; +7d3a : 00000000; +7d3b : 00000000; +7d3c : 00000000; +7d3d : 00000000; +7d3e : 00000000; +7d3f : 00000000; +7d40 : 00000000; +7d41 : 00000000; +7d42 : 00000000; +7d43 : 00000000; +7d44 : 00000000; +7d45 : 00000000; +7d46 : 00000000; +7d47 : 00000000; +7d48 : 00000000; +7d49 : 00000000; +7d4a : 00000000; +7d4b : 00000000; +7d4c : 00000000; +7d4d : 00000000; +7d4e : 00000000; +7d4f : 00000000; +7d50 : 00000000; +7d51 : 00000000; +7d52 : 00000000; +7d53 : 00000000; +7d54 : 00000000; +7d55 : 00000000; +7d56 : 00000000; +7d57 : 00000000; +7d58 : 00000000; +7d59 : 00000000; +7d5a : 00000000; +7d5b : 00000000; +7d5c : 00000000; +7d5d : 00000000; +7d5e : 00000000; +7d5f : 00000000; +7d60 : 00000000; +7d61 : 00000000; +7d62 : 00000000; +7d63 : 00000000; +7d64 : 00000000; +7d65 : 00000000; +7d66 : 00000000; +7d67 : 00000000; +7d68 : 00000000; +7d69 : 00000000; +7d6a : 00000000; +7d6b : 00000000; +7d6c : 00000000; +7d6d : 00000000; +7d6e : 00000000; +7d6f : 00000000; +7d70 : 00000000; +7d71 : 00000000; +7d72 : 00000000; +7d73 : 00000000; +7d74 : 00000000; +7d75 : 00000000; +7d76 : 00000000; +7d77 : 00000000; +7d78 : 00000000; +7d79 : 00000000; +7d7a : 00000000; +7d7b : 00000000; +7d7c : 00000000; +7d7d : 00000000; +7d7e : 00000000; +7d7f : 00000000; +7d80 : 00000000; +7d81 : 00000000; +7d82 : 00000000; +7d83 : 00000000; +7d84 : 00000000; +7d85 : 00000000; +7d86 : 00000000; +7d87 : 00000000; +7d88 : 00000000; +7d89 : 00000000; +7d8a : 00000000; +7d8b : 00000000; +7d8c : 00000000; +7d8d : 00000000; +7d8e : 00000000; +7d8f : 00000000; +7d90 : 00000000; +7d91 : 00000000; +7d92 : 00000000; +7d93 : 00000000; +7d94 : 00000000; +7d95 : 00000000; +7d96 : 00000000; +7d97 : 00000000; +7d98 : 00000000; +7d99 : 00000000; +7d9a : 00000000; +7d9b : 00000000; +7d9c : 00000000; +7d9d : 00000000; +7d9e : 00000000; +7d9f : 00000000; +7da0 : 00000000; +7da1 : 00000000; +7da2 : 00000000; +7da3 : 00000000; +7da4 : 00000000; +7da5 : 00000000; +7da6 : 00000000; +7da7 : 00000000; +7da8 : 00000000; +7da9 : 00000000; +7daa : 00000000; +7dab : 00000000; +7dac : 00000000; +7dad : 00000000; +7dae : 00000000; +7daf : 00000000; +7db0 : 00000000; +7db1 : 00000000; +7db2 : 00000000; +7db3 : 00000000; +7db4 : 00000000; +7db5 : 00000000; +7db6 : 00000000; +7db7 : 00000000; +7db8 : 00000000; +7db9 : 00000000; +7dba : 00000000; +7dbb : 00000000; +7dbc : 00000000; +7dbd : 00000000; +7dbe : 00000000; +7dbf : 00000000; +7dc0 : 00000000; +7dc1 : 00000000; +7dc2 : 00000000; +7dc3 : 00000000; +7dc4 : 00000000; +7dc5 : 00000000; +7dc6 : 00000000; +7dc7 : 00000000; +7dc8 : 00000000; +7dc9 : 00000000; +7dca : 00000000; +7dcb : 00000000; +7dcc : 00000000; +7dcd : 00000000; +7dce : 00000000; +7dcf : 00000000; +7dd0 : 00000000; +7dd1 : 00000000; +7dd2 : 00000000; +7dd3 : 00000000; +7dd4 : 00000000; +7dd5 : 00000000; +7dd6 : 00000000; +7dd7 : 00000000; +7dd8 : 00000000; +7dd9 : 00000000; +7dda : 00000000; +7ddb : 00000000; +7ddc : 00000000; +7ddd : 00000000; +7dde : 00000000; +7ddf : 00000000; +7de0 : 00000000; +7de1 : 00000000; +7de2 : 00000000; +7de3 : 00000000; +7de4 : 00000000; +7de5 : 00000000; +7de6 : 00000000; +7de7 : 00000000; +7de8 : 00000000; +7de9 : 00000000; +7dea : 00000000; +7deb : 00000000; +7dec : 00000000; +7ded : 00000000; +7dee : 00000000; +7def : 00000000; +7df0 : 00000000; +7df1 : 00000000; +7df2 : 00000000; +7df3 : 00000000; +7df4 : 00000000; +7df5 : 00000000; +7df6 : 00000000; +7df7 : 00000000; +7df8 : 00000000; +7df9 : 00000000; +7dfa : 00000000; +7dfb : 00000000; +7dfc : 00000000; +7dfd : 00000000; +7dfe : 00000000; +7dff : 00000000; +7e00 : 00000000; +7e01 : 00000000; +7e02 : 00000000; +7e03 : 00000000; +7e04 : 00000000; +7e05 : 00000000; +7e06 : 00000000; +7e07 : 00000000; +7e08 : 00000000; +7e09 : 00000000; +7e0a : 00000000; +7e0b : 00000000; +7e0c : 00000000; +7e0d : 00000000; +7e0e : 00000000; +7e0f : 00000000; +7e10 : 00000000; +7e11 : 00000000; +7e12 : 00000000; +7e13 : 00000000; +7e14 : 00000000; +7e15 : 00000000; +7e16 : 00000000; +7e17 : 00000000; +7e18 : 00000000; +7e19 : 00000000; +7e1a : 00000000; +7e1b : 00000000; +7e1c : 00000000; +7e1d : 00000000; +7e1e : 00000000; +7e1f : 00000000; +7e20 : 00000000; +7e21 : 00000000; +7e22 : 00000000; +7e23 : 00000000; +7e24 : 00000000; +7e25 : 00000000; +7e26 : 00000000; +7e27 : 00000000; +7e28 : 00000000; +7e29 : 00000000; +7e2a : 00000000; +7e2b : 00000000; +7e2c : 00000000; +7e2d : 00000000; +7e2e : 00000000; +7e2f : 00000000; +7e30 : 00000000; +7e31 : 00000000; +7e32 : 00000000; +7e33 : 00000000; +7e34 : 00000000; +7e35 : 00000000; +7e36 : 00000000; +7e37 : 00000000; +7e38 : 00000000; +7e39 : 00000000; +7e3a : 00000000; +7e3b : 00000000; +7e3c : 00000000; +7e3d : 00000000; +7e3e : 00000000; +7e3f : 00000000; +7e40 : 00000000; +7e41 : 00000000; +7e42 : 00000000; +7e43 : 00000000; +7e44 : 00000000; +7e45 : 00000000; +7e46 : 00000000; +7e47 : 00000000; +7e48 : 00000000; +7e49 : 00000000; +7e4a : 00000000; +7e4b : 00000000; +7e4c : 00000000; +7e4d : 00000000; +7e4e : 00000000; +7e4f : 00000000; +7e50 : 00000000; +7e51 : 00000000; +7e52 : 00000000; +7e53 : 00000000; +7e54 : 00000000; +7e55 : 00000000; +7e56 : 00000000; +7e57 : 00000000; +7e58 : 00000000; +7e59 : 00000000; +7e5a : 00000000; +7e5b : 00000000; +7e5c : 00000000; +7e5d : 00000000; +7e5e : 00000000; +7e5f : 00000000; +7e60 : 00000000; +7e61 : 00000000; +7e62 : 00000000; +7e63 : 00000000; +7e64 : 00000000; +7e65 : 00000000; +7e66 : 00000000; +7e67 : 00000000; +7e68 : 00000000; +7e69 : 00000000; +7e6a : 00000000; +7e6b : 00000000; +7e6c : 00000000; +7e6d : 00000000; +7e6e : 00000000; +7e6f : 00000000; +7e70 : 00000000; +7e71 : 00000000; +7e72 : 00000000; +7e73 : 00000000; +7e74 : 00000000; +7e75 : 00000000; +7e76 : 00000000; +7e77 : 00000000; +7e78 : 00000000; +7e79 : 00000000; +7e7a : 00000000; +7e7b : 00000000; +7e7c : 00000000; +7e7d : 00000000; +7e7e : 00000000; +7e7f : 00000000; +7e80 : 00000000; +7e81 : 00000000; +7e82 : 00000000; +7e83 : 00000000; +7e84 : 00000000; +7e85 : 00000000; +7e86 : 00000000; +7e87 : 00000000; +7e88 : 00000000; +7e89 : 00000000; +7e8a : 00000000; +7e8b : 00000000; +7e8c : 00000000; +7e8d : 00000000; +7e8e : 00000000; +7e8f : 00000000; +7e90 : 00000000; +7e91 : 00000000; +7e92 : 00000000; +7e93 : 00000000; +7e94 : 00000000; +7e95 : 00000000; +7e96 : 00000000; +7e97 : 00000000; +7e98 : 00000000; +7e99 : 00000000; +7e9a : 00000000; +7e9b : 00000000; +7e9c : 00000000; +7e9d : 00000000; +7e9e : 00000000; +7e9f : 00000000; +7ea0 : 00000000; +7ea1 : 00000000; +7ea2 : 00000000; +7ea3 : 00000000; +7ea4 : 00000000; +7ea5 : 00000000; +7ea6 : 00000000; +7ea7 : 00000000; +7ea8 : 00000000; +7ea9 : 00000000; +7eaa : 00000000; +7eab : 00000000; +7eac : 00000000; +7ead : 00000000; +7eae : 00000000; +7eaf : 00000000; +7eb0 : 00000000; +7eb1 : 00000000; +7eb2 : 00000000; +7eb3 : 00000000; +7eb4 : 00000000; +7eb5 : 00000000; +7eb6 : 00000000; +7eb7 : 00000000; +7eb8 : 00000000; +7eb9 : 00000000; +7eba : 00000000; +7ebb : 00000000; +7ebc : 00000000; +7ebd : 00000000; +7ebe : 00000000; +7ebf : 00000000; +7ec0 : 00000000; +7ec1 : 00000000; +7ec2 : 00000000; +7ec3 : 00000000; +7ec4 : 00000000; +7ec5 : 00000000; +7ec6 : 00000000; +7ec7 : 00000000; +7ec8 : 00000000; +7ec9 : 00000000; +7eca : 00000000; +7ecb : 00000000; +7ecc : 00000000; +7ecd : 00000000; +7ece : 00000000; +7ecf : 00000000; +7ed0 : 00000000; +7ed1 : 00000000; +7ed2 : 00000000; +7ed3 : 00000000; +7ed4 : 00000000; +7ed5 : 00000000; +7ed6 : 00000000; +7ed7 : 00000000; +7ed8 : 00000000; +7ed9 : 00000000; +7eda : 00000000; +7edb : 00000000; +7edc : 00000000; +7edd : 00000000; +7ede : 00000000; +7edf : 00000000; +7ee0 : 00000000; +7ee1 : 00000000; +7ee2 : 00000000; +7ee3 : 00000000; +7ee4 : 00000000; +7ee5 : 00000000; +7ee6 : 00000000; +7ee7 : 00000000; +7ee8 : 00000000; +7ee9 : 00000000; +7eea : 00000000; +7eeb : 00000000; +7eec : 00000000; +7eed : 00000000; +7eee : 00000000; +7eef : 00000000; +7ef0 : 00000000; +7ef1 : 00000000; +7ef2 : 00000000; +7ef3 : 00000000; +7ef4 : 00000000; +7ef5 : 00000000; +7ef6 : 00000000; +7ef7 : 00000000; +7ef8 : 00000000; +7ef9 : 00000000; +7efa : 00000000; +7efb : 00000000; +7efc : 00000000; +7efd : 00000000; +7efe : 00000000; +7eff : 00000000; +7f00 : 00000000; +7f01 : 00000000; +7f02 : 00000000; +7f03 : 00000000; +7f04 : 00000000; +7f05 : 00000000; +7f06 : 00000000; +7f07 : 00000000; +7f08 : 00000000; +7f09 : 00000000; +7f0a : 00000000; +7f0b : 00000000; +7f0c : 00000000; +7f0d : 00000000; +7f0e : 00000000; +7f0f : 00000000; +7f10 : 00000000; +7f11 : 00000000; +7f12 : 00000000; +7f13 : 00000000; +7f14 : 00000000; +7f15 : 00000000; +7f16 : 00000000; +7f17 : 00000000; +7f18 : 00000000; +7f19 : 00000000; +7f1a : 00000000; +7f1b : 00000000; +7f1c : 00000000; +7f1d : 00000000; +7f1e : 00000000; +7f1f : 00000000; +7f20 : 00000000; +7f21 : 00000000; +7f22 : 00000000; +7f23 : 00000000; +7f24 : 00000000; +7f25 : 00000000; +7f26 : 00000000; +7f27 : 00000000; +7f28 : 00000000; +7f29 : 00000000; +7f2a : 00000000; +7f2b : 00000000; +7f2c : 00000000; +7f2d : 00000000; +7f2e : 00000000; +7f2f : 00000000; +7f30 : 00000000; +7f31 : 00000000; +7f32 : 00000000; +7f33 : 00000000; +7f34 : 00000000; +7f35 : 00000000; +7f36 : 00000000; +7f37 : 00000000; +7f38 : 00000000; +7f39 : 00000000; +7f3a : 00000000; +7f3b : 00000000; +7f3c : 00000000; +7f3d : 00000000; +7f3e : 00000000; +7f3f : 00000000; +7f40 : 00000000; +7f41 : 00000000; +7f42 : 00000000; +7f43 : 00000000; +7f44 : 00000000; +7f45 : 00000000; +7f46 : 00000000; +7f47 : 00000000; +7f48 : 00000000; +7f49 : 00000000; +7f4a : 00000000; +7f4b : 00000000; +7f4c : 00000000; +7f4d : 00000000; +7f4e : 00000000; +7f4f : 00000000; +7f50 : 00000000; +7f51 : 00000000; +7f52 : 00000000; +7f53 : 00000000; +7f54 : 00000000; +7f55 : 00000000; +7f56 : 00000000; +7f57 : 00000000; +7f58 : 00000000; +7f59 : 00000000; +7f5a : 00000000; +7f5b : 00000000; +7f5c : 00000000; +7f5d : 00000000; +7f5e : 00000000; +7f5f : 00000000; +7f60 : 00000000; +7f61 : 00000000; +7f62 : 00000000; +7f63 : 00000000; +7f64 : 00000000; +7f65 : 00000000; +7f66 : 00000000; +7f67 : 00000000; +7f68 : 00000000; +7f69 : 00000000; +7f6a : 00000000; +7f6b : 00000000; +7f6c : 00000000; +7f6d : 00000000; +7f6e : 00000000; +7f6f : 00000000; +7f70 : 00000000; +7f71 : 00000000; +7f72 : 00000000; +7f73 : 00000000; +7f74 : 00000000; +7f75 : 00000000; +7f76 : 00000000; +7f77 : 00000000; +7f78 : 00000000; +7f79 : 00000000; +7f7a : 00000000; +7f7b : 00000000; +7f7c : 00000000; +7f7d : 00000000; +7f7e : 00000000; +7f7f : 00000000; +7f80 : 00000000; +7f81 : 00000000; +7f82 : 00000000; +7f83 : 00000000; +7f84 : 00000000; +7f85 : 00000000; +7f86 : 00000000; +7f87 : 00000000; +7f88 : 00000000; +7f89 : 00000000; +7f8a : 00000000; +7f8b : 00000000; +7f8c : 00000000; +7f8d : 00000000; +7f8e : 00000000; +7f8f : 00000000; +7f90 : 00000000; +7f91 : 00000000; +7f92 : 00000000; +7f93 : 00000000; +7f94 : 00000000; +7f95 : 00000000; +7f96 : 00000000; +7f97 : 00000000; +7f98 : 00000000; +7f99 : 00000000; +7f9a : 00000000; +7f9b : 00000000; +7f9c : 00000000; +7f9d : 00000000; +7f9e : 00000000; +7f9f : 00000000; +7fa0 : 00000000; +7fa1 : 00000000; +7fa2 : 00000000; +7fa3 : 00000000; +7fa4 : 00000000; +7fa5 : 00000000; +7fa6 : 00000000; +7fa7 : 00000000; +7fa8 : 00000000; +7fa9 : 00000000; +7faa : 00000000; +7fab : 00000000; +7fac : 00000000; +7fad : 00000000; +7fae : 00000000; +7faf : 00000000; +7fb0 : 00000000; +7fb1 : 00000000; +7fb2 : 00000000; +7fb3 : 00000000; +7fb4 : 00000000; +7fb5 : 00000000; +7fb6 : 00000000; +7fb7 : 00000000; +7fb8 : 00000000; +7fb9 : 00000000; +7fba : 00000000; +7fbb : 00000000; +7fbc : 00000000; +7fbd : 00000000; +7fbe : 00000000; +7fbf : 00000000; +7fc0 : 00000000; +7fc1 : 00000000; +7fc2 : 00000000; +7fc3 : 00000000; +7fc4 : 00000000; +7fc5 : 00000000; +7fc6 : 00000000; +7fc7 : 00000000; +7fc8 : 00000000; +7fc9 : 00000000; +7fca : 00000000; +7fcb : 00000000; +7fcc : 00000000; +7fcd : 00000000; +7fce : 00000000; +7fcf : 00000000; +7fd0 : 00000000; +7fd1 : 00000000; +7fd2 : 00000000; +7fd3 : 00000000; +7fd4 : 00000000; +7fd5 : 00000000; +7fd6 : 00000000; +7fd7 : 00000000; +7fd8 : 00000000; +7fd9 : 00000000; +7fda : 00000000; +7fdb : 00000000; +7fdc : 00000000; +7fdd : 00000000; +7fde : 00000000; +7fdf : 00000000; +7fe0 : 00000000; +7fe1 : 00000000; +7fe2 : 00000000; +7fe3 : 00000000; +7fe4 : 00000000; +7fe5 : 00000000; +7fe6 : 00000000; +7fe7 : 00000000; +7fe8 : 00000000; +7fe9 : 00000000; +7fea : 00000000; +7feb : 00000000; +7fec : 00000000; +7fed : 00000000; +7fee : 00000000; +7fef : 00000000; +7ff0 : 00000000; +7ff1 : 00000000; +7ff2 : 00000000; +7ff3 : 00000000; +7ff4 : 00000000; +7ff5 : 00000000; +7ff6 : 00000000; +7ff7 : 00000000; +7ff8 : 00000000; +7ff9 : 00000000; +7ffa : 00000000; +7ffb : 00000000; +7ffc : 00000000; +7ffd : 00000000; +7ffe : 00000000; +7fff : 00000000; +END; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8_sim.bram b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8_sim.bram new file mode 100644 index 000000000..8d4e519ba --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8_sim.bram @@ -0,0 +1,32768 @@ +10011000000000000000000000000000 +11010000000000000000000000000000 +11010000001000000000000000000000 +01111000000000010000000000000000 +00111000001000010000000000000000 +11010000111000010000000000000000 +11111000000000000000000000111010 +00110100000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +01010111010100100101000001000011 +00101101001011010010110100101101 +00000001001000110100010101100111 +10001001101010111100110111101111 +00000000000000001001010001111000 +00000000000000000000000000000000 +00000000000000001000010100001000 +00000000000000001000110110101000 +00000000000000000000000000000000 +00000010000101000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001000010000110100 +01011011100111010000000000000000 +11111000000000000000000000011110 +00110100000000010000000000000010 +11111000000000000001001000111110 +11100000000000000000000000101110 +00110100000000000000000000000000 +00110100000000000000000000000000 +00110100000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +10011000000000000000000000000000 +01111000000111000000000000000001 +00111011100111001111111111111100 +01111000000000010000000000000000 +00111000001000011000111001000000 +00110100000000100000000000000000 +01111000000000110000000000000000 +00111000011000111001011101100100 +11001000011000010001100000000000 +11111000000000000001011001100011 +00110100000000010000000000000000 +00110100000000100000000000000000 +00110100000000110000000000000000 +11111000000000000000000000111000 +11100000000000000000000000000000 +00110111100111001111111111000100 +01011011100000010000000000000100 +01011011100000100000000000001000 +01011011100000110000000000001100 +01011011100001000000000000010000 +01011011100001010000000000010100 +01011011100001100000000000011000 +01011011100001110000000000011100 +01011011100010000000000000100000 +01011011100010010000000000100100 +01011011100010100000000000101000 +01011011100111100000000000110100 +01011011100111110000000000111000 +00101011100000010000000000111100 +01011011100000010000000000110000 +10111011100000000000100000000000 +00110100001000010000000000111100 +01011011100000010000000000101100 +11000011101000000000000000000000 +00101011100000010000000000000100 +00101011100000100000000000001000 +00101011100000110000000000001100 +00101011100001000000000000010000 +00101011100001010000000000010100 +00101011100001100000000000011000 +00101011100001110000000000011100 +00101011100010000000000000100000 +00101011100010010000000000100100 +00101011100010100000000000101000 +00101011100111010000000000110000 +00101011100111100000000000110100 +00101011100111110000000000111000 +00101011100111000000000000101100 +00110100000000000000000000000000 +11000011110000000000000000000000 +10010000000000000001000000000000 +00110100000000011111111111111110 +10100000010000010000100000000000 +11010000000000010000000000000000 +10010000001000000001000000000000 +00110100000000011111111111111110 +10100000010000010000100000000000 +11010000001000010000000000000000 +11000011101000000000000000000000 +10010000000000000001000000000000 +00110100000000011111111111111110 +10100000010000010000100000000000 +11010000000000010000000000000000 +10010000001000000001000000000000 +00111000010000100000000000000001 +11010000001000100000000000000000 +00111000001000010000000000000001 +11010000000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100111010000000000000100 +01111000000000010000000000000000 +01111000000000110000000000000000 +00111000001000011001011101011000 +01111000000000100000000000000010 +00111000011000111000000100101000 +01011000001000100000000000000000 +00101000011000100000000000000000 +01111000000000010000000000000000 +01111000000000110000000000000000 +00111000001000011001010001000000 +00111000011000111000000100101100 +01011000001000100000000000000000 +00101000011000100000000000000000 +01111000000000010000000000000000 +01111000000000110000000000000000 +00111000001000011001011101100000 +00111000011000111000000100110000 +01011000001000100000000000000000 +00101000011000100000000000000000 +01111000000000010000000000000000 +01111000000000110000000000000000 +00111000001000011001010001110100 +00111000011000111000000100110100 +01011000001000100000000000000000 +00101000011000100000000000000000 +01111000000000010000000000000000 +01111000000000110000000000000000 +00111000001000011001011101011100 +00111000011000111000000100111000 +01011000001000100000000000000000 +00101000011000100000000000000000 +01111000000000010000000000000000 +01111000000000110000000000000000 +00111000001000011001011100101100 +00111000011000111000000100111100 +01011000001000100000000000000000 +00101000011000100000000000000000 +01111000000000010000000000000000 +01111000000000110000000000000000 +00111000011000111000000101000000 +00111000001000011001011100011000 +01011000001000100000000000000000 +00101000011000100000000000000000 +01111000000000010000000000000000 +00111000001000011001011101010100 +01011000001000100000000000000000 +00110100000000010000000000000001 +11111000000000000000110001011101 +00110100000000011111111111011110 +00110011100000010000000000001000 +00110100000000011111111110101101 +00110011100000010000000000001001 +00110100000000101111111111101111 +00110100000000011111111110111110 +00110011100000010000000000001010 +00110011100000100000000000001011 +00110011100000010000000000001101 +00110100000000101111111110111010 +00110111100000010000000000001000 +00110011100000100000000000001100 +11111000000000000000100110001001 +00110100000000100000000000000001 +00110100000000010000000000000001 +11111000000000000000100011011110 +11111000000000000000101110001100 +11111000000000000000110101101101 +11111000000000000001001001101011 +00110100000000010000000000000001 +11111000000000000000110111101001 +01111000000000010000000000000000 +00111000001000011000010000110100 +00110100000000100000000000000010 +01011000001000100000000000001100 +11100000000000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000001000 +01011011100111010000000000000100 +01011011100001000000000000001100 +01011011100001010000000000010000 +10111000100000000101100000000000 +01011011100001100000000000010100 +01111000000001000000000000000000 +01011011100001110000000000011000 +01011011100010000000000000011100 +00111000100001000101110111001100 +00110100000001010000000000000000 +01000100001000000000000000000011 +00101000001001000000001111010100 +00101000001001010000000000011100 +01111000000001100000000000000000 +00111000110001101000111001000100 +00101000110000010000000000000000 +00111100010000100000000000000010 +10111000101000010010100000000000 +10000000101000100010100000000000 +00100000101001010000000000001111 +01010100011001010000000000001100 +01111000000001010000000000000000 +00111000101001011000000111111000 +10110100101000100010100000000000 +01111000000001100000000000000000 +00101000101000100000000000000000 +10111000110000000000100000000000 +00111000001000010101110111010100 +11111000000000000000011101101110 +10111001011000000000100000000000 +00110111100000100000000000010000 +11111000000000000000011101010111 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000110000000000000001 +00110100000000010000000000000011 +00110100000000100000000000000000 +11111000000000000001001001000011 +00110100000000010000000000000000 +00110100000000100000000000000001 +11111000000000000001001101101001 +11111000000000000000110001001010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00110100000000010000000000000000 +10111000010000000110000000000000 +11111000000000000001001011100000 +01000101100000000000000000000101 +01100100001000100000000000000000 +11001000000000100001000000000000 +00111000010000100000000000000001 +11100000000000000000000000010011 +01111000000010110000000000000000 +00111001011010111000111001001000 +01011100001011000000000000000100 +01011001011000000000000000000000 +00110100000000101111111111111111 +11100000000000000000000000001101 +00101001011011000000000000000000 +00110100000000100000000000000001 +01011101100000000000000000001010 +01111000000000100000000000000000 +00111000010000101000010000110000 +00110100000000010000000000000011 +11111000000000000000110011010101 +00110100000000100000000000000010 +01001001100000010000000000000100 +00110100000000010000000000000001 +01011001011000010000000000000000 +00110100000000100000000000000001 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000010000000000000000 +00110100000000100000000000000001 +11111000000000000001001100111001 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000001000010000001101011000 +00101000001000010000000000010000 +00101000001000110000000000001100 +01000100010000110000000000000100 +01011000001000100000000000001100 +10111000010000000000100000000000 +11111000000000000000110101111000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +11111000000000000000110101101010 +00110100000000100000000000000001 +01011100001000000000000000000011 +11111000000000000001001100010010 +01111100001000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000010100000000000 +10111000001000100000100000000000 +10111000010000000010000000000000 +10111000011000000101100000000000 +01000100001000000000000000000101 +00110100000000010000000000000001 +10111000101000000001000000000000 +10111000100000000001100000000000 +11111000000000000000110011101111 +01000101011000000000000000000101 +00010101011000100000000000011111 +00110100000000010000000000000010 +10111001011000000001100000000000 +11111000000000000000110011101010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000001000000001000000000000 +00110100000000011111111111111111 +11111000000000000001001010010110 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111100100100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000110000000000000 +00101000001000100000001111010000 +10111000100000000111000000000000 +00110111100000010000000000011000 +10111000011000000101100000000000 +10111000101000000110100000000000 +11111000000000000000010100011101 +01000101110000000000000000000101 +01111000000000010000000000000000 +00111000001000011000101010101100 +00101000001000010000000000000000 +01011001110000010000000000000000 +01000101101000000000000000000011 +00101011100000010000000011001100 +01011001101000010000000000000000 +00101011100000100000000001101100 +00110100000000011111111111111101 +01000100010000000000000000010011 +01000101100000000000000000000111 +00101011100000100000000001100000 +00101011100000010000000001011000 +10110100010000010000100000000000 +00101011100000100000000010100000 +10110100001000100000100000000000 +01011001100000010000000000000000 +00101011100000100000000001101000 +00110100000000011111111111111101 +01000100010000000000000000001001 +00110100000000010000000000000000 +01000101011000000000000000000111 +00101011100000110000000001100100 +00101011100000100000000001011100 +10110100011000100001000000000000 +00101011100000110000000010100100 +10110100010000110001000000000000 +01011001011000100000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000011011100 +11000011101000000000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00110100000001000000000000000000 +10111000010000000110000000000000 +10111000011000000101100000000000 +00110111100000100000000000010000 +00110111100000110000000000010100 +00110100000001010000000000000000 +01011011100000000000000000010100 +01011011100000000000000000010000 +11111011111111111111111110111111 +00110100000000010000000000000001 +01011101100000010000000000000011 +00101011100000010000000000010000 +11100000000000000000000000000010 +00101011100000010000000000010100 +01011001011000010000000000000000 +00110100000000010000000000000001 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +11111000000000000000100001010110 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +11111000000000000000100001011010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +01111000000000010000000000000000 +00111000001000011000111001001100 +00101000001000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000010001010000000000001000 +00101100010001000000000000001100 +00101000010011010000000000000000 +00111100101001010000000000010000 +10111000001000000110000000000000 +00101000010010110000000000000100 +10111000101001000000100000000000 +00110100000000100000001111101000 +11111000000000000001010000101110 +00010101101000100000000000011000 +10111000001000000011000000000000 +01111000000001110000000000000000 +00100000010000100000000011000000 +00110100000000010000000010000000 +00111000111001110111010101001100 +01011100010000010000000000000011 +01111000000001110000000000000000 +00111000111001110101111110111000 +01111000000001000000000000000000 +10111000100000000000100000000000 +10111001100000000001000000000000 +10111001011000000001100000000000 +10111001011000000010000000000000 +10111001011000000010100000000000 +00111000001000010101111111000100 +11111000000000000000011001110100 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100111010000000000011000 +10111000001000000101000000000000 +01000000011000010000000000000101 +01000000011001000000000000000000 +01000000011001010000000000000001 +01000000011001100000000000000010 +01000000011001110000000000000011 +01000000011010000000000000000100 +01011011100000010000000000000100 +01000000011000010000000000000110 +10111000010000000100100000000000 +10111001010000000001000000000000 +01011011100000010000000000001000 +01000000011000010000000000000111 +01011011100000010000000000001100 +01000000011000010000000000001000 +01011011100000010000000000010000 +01000000011000010000000000001001 +10111001001000000001100000000000 +01011011100000010000000000010100 +01111000000000010000000000000000 +00111000001000010101111111101000 +11111000000000000000011001010110 +00101011100111010000000000011000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111010000 +01011011100010110000000000110000 +01011011100011000000000000101100 +01011011100011010000000000101000 +01011011100011100000000000100100 +01011011100011110000000000100000 +01011011100100000000000000011100 +01011011100100010000000000011000 +01011011100100100000000000010100 +01011011100100110000000000010000 +01011011100101000000000000001100 +01011011100101010000000000001000 +01011011100111010000000000000100 +10111000011000000011000000000000 +10111000001000001001100000000000 +10111000010000001001000000000000 +01111000000000010000000000000000 +10111000100000001010100000000000 +00111000001000010110000000100000 +10111010011000000001000000000000 +10111010010000000001100000000000 +10111000110000000010000000000000 +10111000101000001010000000000000 +01111000000100010000000000000000 +11111000000000000000011000111010 +01111000000100000000000000000000 +01111000000011110000000000000000 +01111000000011100000000000000000 +01111000000011010000000000000000 +10111000001000000101100000000000 +00110100000011000000000000000000 +00111010001100010110000000110100 +00111010000100000110000000111100 +00111001111011110111000011101100 +00111001110011100111101010111100 +00111001101011010111001101110100 +11100000000000000000000000010111 +01011100110000000000000000000110 +10111010001000000000100000000000 +10111010011000000001000000000000 +10111010010000000001100000000000 +11111000000000000000011000101001 +10110101011000010101100000000000 +10110110101011000001000000000000 +01000000010000100000000000000000 +10111010000000000000100000000000 +00110101100011000000000000000001 +11111000000000000000011000100011 +00100001100000100000000000000011 +10110100001010110101100000000000 +10111001111000000011000000000000 +01011100010000000000000000000101 +00100001100000010000000000001111 +10111001110000000011000000000000 +01000100001000100000000000000010 +10111001101000000011000000000000 +10111000110000000000100000000000 +11111000000000000000011000011001 +10110101011000010101100000000000 +00100001100001100000000000001111 +01001010100011001111111111101001 +01000100110000000000000000000101 +01111000000000010000000000000000 +00111000001000010111101010111100 +11111000000000000000011000010010 +10110100001010110101100000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000110000 +00101011100011000000000000101100 +00101011100011010000000000101000 +00101011100011100000000000100100 +00101011100011110000000000100000 +00101011100100000000000000011100 +00101011100100010000000000011000 +00101011100100100000000000010100 +00101011100100110000000000010000 +00101011100101000000000000001100 +00101011100101010000000000001000 +00110111100111000000000000110000 +11000011101000000000000000000000 +00110111100111001111111110111000 +01011011100010110000000001001000 +01011011100011000000000001000100 +01011011100011010000000001000000 +01011011100011100000000000111100 +01011011100011110000000000111000 +01011011100100000000000000110100 +01011011100100010000000000110000 +01011011100100100000000000101100 +01011011100100110000000000101000 +01011011100101000000000000100100 +01011011100101010000000000100000 +01011011100101100000000000011100 +01011011100101110000000000011000 +01011011100110000000000000010100 +01011011100111010000000000010000 +10111000011000001000000000000000 +01000000010000110000000000000001 +10111000001000000110000000000000 +00110100000000010000000000000010 +00100000011000110000000000001111 +10111000010000000110100000000000 +01000000010011100000000000000000 +01000100011000010000000000000110 +01111000000000010000000000000000 +10111001100000000001000000000000 +00111000001000010110000001000100 +11111000000000000000010111100110 +11100000000000000000000101010000 +01000000010001010000000000000010 +01000000010001100000000000000011 +00100001110011100000000000001111 +00111100101001010000000000001000 +01111000000000010000000000000000 +10111000110001010010100000000000 +01000001101001100000000000000100 +00110100000000110000000000000010 +10111001110000000010000000000000 +00110100010010110000000000100010 +00111000001000010110000001100100 +10111001100000000001000000000000 +11111000000000000000010111011000 +01000001101000110000000000000110 +01000001101001000000000000000111 +00101001101001010000000000001100 +00111100011000110000000000001000 +01111000000000010000000000000000 +10111000100000110001100000000000 +00101001101001000000000000001000 +10111000101000000011000000000000 +10111001100000000001000000000000 +00111000001000010110000010010000 +11111000000000000000010111001101 +01111000000000100000000000000000 +10111001100000000000100000000000 +00111000010000100110000011000000 +00110101101000110000000000010100 +11111011111111111111111101011011 +01000001101000110000000000011110 +01000001101001000000000000011111 +01000001101001010000000000100001 +00111100011000110000000000001000 +01111000000000010000000000000000 +10111000100000110001100000000000 +01000001101001000000000000100000 +00111000001000010110000011001000 +10111001100000000001000000000000 +11111000000000000000010110111110 +00110100000000010000000000001100 +01010101110000010000000011101001 +01111000000000010000000000000000 +00111101110011100000000000000010 +00111000001000011000001000011000 +10110100001011100000100000000000 +00101000001000010000000000000000 +11000000001000000000000000000000 +01111000000000010000000000000000 +10111001100000000001000000000000 +00111000001000010110000011110100 +11111000000000000000010110110010 +01000001011000100000000000000010 +01000001011000010000000000000011 +01000001011001000000000000000100 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100100001000000000000001000 +10111000001000100000100000000000 +10111000100000010010000000000000 +01000001011000100000000000000110 +01000001011000010000000000000111 +01000001011001010000000000001000 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100101001010000000000001000 +10111000001000100000100000000000 +10111000101000010010100000000000 +01111000000000110000000000000000 +01111000000000010000000000000000 +01000001011001110000000000000101 +01000001011001100000000000001001 +00111000001000010110000100001100 +10111001100000000001000000000000 +00111000011000110110000100011100 +11100000000000000000000000011100 +01111000000000010000000000000000 +10111001100000000001000000000000 +00111000001000010110000100101000 +11111000000000000000010110010110 +01000001011000100000000000000010 +01000001011000010000000000000011 +01000001011001000000000000000100 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100100001000000000000001000 +10111000001000100000100000000000 +10111000100000010010000000000000 +01000001011000100000000000000110 +01000001011000010000000000000111 +01000001011001010000000000001000 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100101001010000000000001000 +10111000001000100000100000000000 +01000001011001110000000000000101 +01000001011001100000000000001001 +10111000101000010010100000000000 +01111000000000110000000000000000 +01111000000000010000000000000000 +00111000001000010110000100001100 +10111001100000000001000000000000 +00111000011000110110000101000100 +10111000111001000010000000000000 +10111000110001010010100000000000 +11111000000000000000010101111100 +11100000000000000000000010100110 +01111000000000010000000000000000 +10111001100000000001000000000000 +00111000001000010110000101010100 +11111000000000000000010101110111 +01000001011000100000000000000010 +01000001011000010000000000000011 +01000001011001000000000000000100 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100100001000000000000001000 +10111000001000100000100000000000 +10111000100000010010000000000000 +01000001011000100000000000000110 +01000001011000010000000000000111 +01000001011001010000000000001000 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100101001010000000000001000 +10111000001000100000100000000000 +10111000101000010010100000000000 +01111000000000110000000000000000 +01111000000000010000000000000000 +01000001011001110000000000000101 +01000001011001100000000000001001 +00111000001000010110000100001100 +10111001100000000001000000000000 +00111000011000110110000101110000 +11100011111111111111111111100001 +01111000000000010000000000000000 +10111001100000000001000000000000 +00111000001000010110000110000000 +11111000000000000000010101011011 +01000001011000100000000000000010 +01000001011000010000000000000011 +01000001011001000000000000000100 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100100001000000000000001000 +10111000001000100000100000000000 +10111000100000010010000000000000 +01000001011000100000000000000110 +01000001011000010000000000000111 +01000001011001010000000000001000 +00111100010000100000000000011000 +00111100001000010000000000010000 +01000001011001110000000000000101 +01000001011001100000000000001001 +00111100101001010000000000001000 +10111000001000100000100000000000 +01111000000011100000000000000000 +00111001110011100110000110011100 +10111000101000010010100000000000 +01111000000000010000000000000000 +10111001100000000001000000000000 +10111001110000000001100000000000 +10111000111001000010000000000000 +10111000110001010010100000000000 +00111000001000010110000100001100 +11111000000000000000010101000000 +00110101011000110000000000001010 +10111001100000000000100000000000 +10111001110000000001000000000000 +11111011111111111111111011001111 +00110100000010110000000000110110 +11100000000000000000000010011000 +01111000000000010000000000000000 +10111001100000000001000000000000 +00111000001000010110000110110000 +11111000000000000000010100110110 +01000001011000100000000000000010 +01000001011000010000000000000011 +01000001011001000000000000000100 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100100001000000000000001000 +10111000001000100000100000000000 +10111000100000010010000000000000 +01000001011000100000000000000110 +01000001011000010000000000000111 +01000001011001010000000000001000 +00111100010000100000000000011000 +00111100001000010000000000010000 +01000001011001110000000000000101 +01000001011001100000000000001001 +00111100101001010000000000001000 +10111000001000100000100000000000 +10111000101000010010100000000000 +01111000000000110000000000000000 +01111000000000010000000000000000 +10111000111001000010000000000000 +10111000110001010010100000000000 +10111001100000000001000000000000 +00111000011000110110000111001100 +00111000001000010110000100001100 +11111000000000000000010100011100 +01000001011000100000000000001110 +01000001011000010000000000001111 +01000001011001000000000000010000 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100100001000000000000001000 +10111000001000100000100000000000 +10111000100000010010000000000000 +01000001011000100000000000010010 +01000001011000010000000000010011 +01000001011001010000000000010100 +00111100010000100000000000011000 +00111100001000010000000000010000 +00111100101001010000000000001000 +10111000001000100000100000000000 +10111000101000010010100000000000 +01000001011000100000000000010110 +01000001011000010000000000010111 +01000001011001100000000000011000 +00111100010000100000000000011000 +00111100001000010000000000010000 +01000001011010010000000000010001 +01000001011010000000000000010101 +01000001011001110000000000011001 +00111100110001100000000000001000 +10111000001000100000100000000000 +10111000110000010011000000000000 +01111000000000110000000000000000 +01111000000000010000000000000000 +10111001001001000010000000000000 +10111001000001010010100000000000 +10111000111001100011000000000000 +10111001100000000001000000000000 +00111000011000110110000111111000 +00111000001000010110000111100100 +11111000000000000000010011111000 +01000001011000110000000000001101 +01000001011001000000000000011010 +01111000000000010000000000000000 +10111001100000000001000000000000 +00111000001000010110001000011100 +11111000000000000000010011110010 +01000001011000010000000000100000 +01000001011001000000000000011011 +01000001011001010000000000011100 +01000001011001100000000000011101 +01000001011001110000000000011110 +01000001011010000000000000011111 +01011011100000010000000000000100 +01000001011000010000000000100001 +01111000000000110000000000000000 +10111001100000000001000000000000 +01011011100000010000000000001000 +01000001011000010000000000100010 +00111000011000110110001001110100 +00110100000010110000000001000000 +01011011100000010000000000001100 +01111000000000010000000000000000 +00111000001000010110001001000100 +11111000000000000000010011100000 +11100000000000000000000000111101 +01111000000000010000000000000000 +10111001100000000001000000000000 +00111000001000010110001010010100 +11111000000000000000010011011011 +01111000000000100000000000000000 +10111001100000000000100000000000 +00111000010000100110001010110000 +10111001011000000001100000000000 +11111011111111111111111001101001 +00110100000010110000000000101100 +11100000000000000000000000110010 +00110100000010110000000000100010 +11100000000000000000000000110000 +01010101111101110000000000001001 +01111000000000010000000000000000 +10111001100000000001000000000000 +10111010000000000001100000000000 +10111001011000000010000000000000 +10111001111000000010100000000000 +00111000001000010110001011001100 +11111000000000000000010011001010 +11100000000000000000000000110100 +10110101101010110111000000000000 +01000001110101100000000000000010 +01000001110000010000000000000011 +01000001110000110000000000000000 +00111110110101100000000000001000 +01000001110001000000000000000001 +10111000001101101011000000000000 +01000001110000010000000000001000 +01000001110001010000000000000100 +01000001110001100000000000000101 +01000001110001110000000000000110 +01000001110010000000000000000111 +01011011100000010000000000000100 +01000001110000010000000000001001 +00111100011000110000000000001000 +00110110110100010000000000000100 +01011011100000010000000000001000 +10111000100000110001100000000000 +10111010101000000000100000000000 +10111001100000000001000000000000 +10111010001000000010000000000000 +11111000000000000000010010110011 +01001101111100010000000000000111 +10111010010000000000100000000000 +10111001100000000001000000000000 +10111010001000000001100000000000 +10111001111000000010000000000000 +11111000000000000000010010101101 +11100000000000000000000000001000 +10111001100000000000100000000000 +10111010100000000001000000000000 +10111010011000000001100000000000 +00110101110001000000000000001010 +00110110110001011111111111111010 +11111011111111111111111001010100 +10111010001000000111100000000000 +10110101011011110101100000000000 +11100000000000000000000000001011 +01111000000101010000000000000000 +01111000000101000000000000000000 +01111000000100110000000000000000 +01111000000100100000000000000000 +00110100000110000000000000000010 +00110100000101110000000000001001 +00111010101101010110001011110000 +00111010100101000110001101011100 +00111010011100110110001101100100 +00111010010100100110001100110000 +01001101011100000000000000000011 +11001010000010110111100000000000 +01001001111110001111111111000101 +01111000000000100000000000000000 +01111000000000110000000000000000 +10111001100000000000100000000000 +00111000010000100110001101110000 +00111000011000110110001101111000 +10111001101000000010000000000000 +10111010000000000010100000000000 +11111011111111111111111000111100 +00101011100111010000000000010000 +00101011100010110000000001001000 +00101011100011000000000001000100 +00101011100011010000000001000000 +00101011100011100000000000111100 +00101011100011110000000000111000 +00101011100100000000000000110100 +00101011100100010000000000110000 +00101011100100100000000000101100 +00101011100100110000000000101000 +00101011100101000000000000100100 +00101011100101010000000000100000 +00101011100101100000000000011100 +00101011100101110000000000011000 +00101011100110000000000000010100 +00110111100111000000000001001000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +10111000010000000101100000000000 +01000100100000000000000000000101 +10111000100000000001000000000000 +01011011100000110000000000010000 +11111011111111111111110111100001 +00101011100000110000000000010000 +10111001100000000000100000000000 +10111001011000000001000000000000 +11111011111111111111111001101110 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00101000001011010000000000000000 +10111000001000000111100000000000 +00101000001011100000000000000100 +10111000010000000110000000000000 +00110100000010110000000000000000 +00110100000000010000000000000000 +00110100000001000000000000000000 +01010100010011010000000000000110 +10111001101000000000100000000000 +11111000000000000001001000101110 +10001000001011000001000000000000 +10111001011000000010000000000000 +11001001101000100110100000000000 +00110100000000110000000000000000 +00110100000000100000000000000001 +11100000000000000000000000001011 +00111101100001010000000000000001 +00111101011010110000000000000001 +11110101100001010110000000000000 +00111100011000110000000000000001 +10110101100010110101100000000000 +10111000101000000110000000000000 +00111100010001010000000000000001 +11110100010001010001000000000000 +10110100010000110001100000000000 +10111000101000000001000000000000 +00010101011001010000000000011111 +11001000101011000011000000000000 +11110100110001010011000000000000 +11001000101010110010100000000000 +11001000101001100010100000000000 +00000000101001010000000000011111 +00110100000001100000000000000001 +01010101101010110000000000000100 +01011101101010110000000000000010 +01010101110011000000000000000010 +00110100000001100000000000000000 +10100000101001100011000000000000 +01011100110000001111111111101010 +01010101011011010000000000001101 +01011101011011010000000000000010 +01010101100011100000000000001011 +11001001110011000010100000000000 +11110100101011100111000000000000 +11001001101010110110100000000000 +11001001101011100110100000000000 +10111000101000000111000000000000 +10110100100000100010100000000000 +11110100100001010010000000000000 +10110100001000110000100000000000 +10110100100000010000100000000000 +10111000101000000010000000000000 +00111100011001010000000000011111 +00000000010000100000000000000001 +00000000011000110000000000000001 +10111000101000100001000000000000 +10111000011000100010100000000000 +01000100101000000000000000000110 +00111101011001010000000000011111 +00000001100011000000000000000001 +00000001011010110000000000000001 +10111000101011000110000000000000 +11100011111111111111111111101001 +01011001111000010000000000000000 +10111001110000000000100000000000 +01011001111001000000000000000100 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +11111000000000000000100011011011 +10110100001010110000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000001000000000000000000 +10111000010000000101100000000000 +01111000000001010000000000000000 +00110100000000100000000000000110 +00110100000000110000000000000001 +00111000100001000110010000101000 +00111000101001011000001001001100 +10111001011000000011000000000000 +11111011111111111111110001110110 +01000101011000000000000000000101 +00010101011000100000000000011111 +00110100000000010000000000000010 +10111001011000000001100000000000 +11111000000000000000100111100110 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +10111000010000000101100000000000 +10111000011000000011000000000000 +01000100011000000000000000001000 +01111000000001000000000000000000 +01111000000001010000000000000000 +00110100000000100000000000000110 +00110100000000110000000000000001 +00111000100001000110010000110100 +00111000101001011000001001101100 +11111011111111111111110001011101 +10111001100000000000100000000000 +10111001011000000001000000000000 +11111011111111111111111111011001 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000110100000000000 +01000100010000000000000000010101 +00101000010000010000000000001000 +00101100010010110000000000001100 +00101000010011000000000000000100 +00111100001000010000000000010000 +00110100000001000000000000000011 +10111000001010110101100000000000 +00101000010000010000000000000000 +10111001011000000001100000000000 +10111001100000000001000000000000 +11111000000000000000100111010111 +01111000000001000000000000000000 +01111000000001010000000000000000 +10111001101000000000100000000000 +00110100000000100000000000000110 +00110100000000110000000000000001 +00111000100001000110010001100000 +00111000101001011000001010000000 +10111001100000000011000000000000 +10111001011000000011100000000000 +11111011111111111111110000111010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +10111000001000000110000000000000 +00110111100000100000000000011000 +00110111100000010000000000010000 +11111000000000000000100111011101 +00101011100001110000000000011000 +00101011100000010000000000010000 +00101011100001100000000000010100 +00000000111000100000000000010000 +01011001011000010000000000000000 +01011001011000100000000000001000 +00111100111000010000000000010000 +01111000000000100000000000000000 +00111000010000101000111001000100 +01011001011000010000000000001100 +00101000010000010000000000000000 +01011001011001100000000000000100 +00100000001000010000000000000001 +01011100001000000000000000001001 +01111000000001000000000000000000 +01111000000001010000000000000000 +10111001100000000000100000000000 +00110100000000100000000000000110 +00110100000000110000000000000010 +00111000100001000110010001100000 +00111000101001011000001010010000 +11111011111111111111110000010100 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111110110000 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +00001000100001000000000000001100 +10111000001000000101100000000000 +00110100001011010000000100010000 +01111000000000010000000000000000 +00111000001000011000010001000100 +10110100001001000000100000000000 +10111000010000000111100000000000 +01000000001000100000000000000111 +01111000000001010000000000000000 +00110111100011000000000001000000 +00001000010000100000000000000110 +00111000101001011000001010110000 +00101001011100000000000001101000 +00110100000000011000100011110111 +10110100010001010001000000000000 +10111000011000000111000000000000 +00001111100000010000000001001100 +00110100000000110000000000000110 +10111001100000000000100000000000 +11111000000000000001000110010100 +10111001100000000001000000000000 +10111010000000000000100000000000 +10111001111000000001100000000000 +10111001110000000010000000000000 +00110111100001010000000000100000 +11111000000000000000001100101111 +10111000001000000110000000000000 +01000101101000000000000000011111 +00101011100000010000000000101000 +00101011100000100000000000100100 +00101011100000110000000000100000 +00010100001001010000000000011111 +00000000001001000000000000010000 +00111100101001010000000000010000 +00111100001000010000000000010000 +10111000100001010010100000000000 +00101011100001000000000000111100 +01011001011000110000000100010000 +01011001011000100000000100010100 +01011001011001010000000100011000 +01011001011000010000000100011100 +01011100100000000000000000000100 +01111000000001001000111100000000 +10111000011001000001100000000000 +01011001011000110000000100010000 +00111100101010010000000000010000 +00000000001010000000000000010000 +00101001011001110000000100010100 +01111000000001000000000000000000 +01111000000001010000000000000000 +10111001011000000000100000000000 +00110100000000100000000000000101 +00110100000000110000000000000010 +00111000100001000110010001110000 +00111000101001011000001010100000 +10111001100000000011000000000000 +10111001001010000100000000000000 +11111011111111111111101111001100 +01111000000000010000000000000000 +00111000001000011000111001001100 +00101000001000100000000000000000 +00110100000000010000000000000100 +01011100010000010000000000001101 +00101001011001000000000100011100 +00101001011001010000000100011000 +00101001011000100000000100010100 +00000000100000110000000000010000 +00100000100001001111111111111111 +00001000100001000000001111101000 +00111100101001010000000000010000 +01111000000000010000000000000000 +00000000100001000000000000010000 +00111000001000010110010010010000 +10111000101000110001100000000000 +11111000000000000000001101000111 +01001100000011000000000000010000 +01111000000000010000000000000000 +00111000001000011000111001000100 +00101000001000100000000000000000 +00101001011000010000000000011100 +10111000010000010000100000000000 +00000000001000010000000000010100 +00110100000000100000000000000001 +00100000001000010000000000001111 +01010000010000010000000000000111 +01111000000000010000000000000000 +00111000001000010110010010100000 +10111001111000000001000000000000 +10111001110000000001100000000000 +10111001101000000010000000000000 +11111011111111111111111010111011 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000001010000 +11000011101000000000000000000000 +00110111100111001111111110010000 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +00101000001000010000000001101000 +10111000011000000010100000000000 +10111000010000000111000000000000 +10111000100000000101100000000000 +00110111100000100000000001000000 +10111000101000000010000000000000 +10111001110000000001100000000000 +00110111100001010000000000100000 +11111000000000000000001001011111 +10111000001000000110100000000000 +01001100000000010000000001100101 +01000101011000000000000000100001 +00101011100000010000000000101100 +00101011100011110000000000100100 +00101011100100000000000000100000 +00111100001000010000000000010000 +00110100000000100000001111101000 +01011001011100000000000000000000 +01011001011011110000000000000100 +11111000000000000001000010111001 +00101011100001010000000000101000 +10111000001000000010000000000000 +00010100001000100000000000011111 +00010100101000010000000000011111 +00000000101000110000000000010000 +00111100101001010000000000010000 +00111100001000010000000000010000 +10110100100001010010100000000000 +10111000011000010000100000000000 +11110100100001010010000000000000 +10110100010000010000100000000000 +10110100100000010000100000000000 +01011001011000010000000000001000 +00101011100000010000000000111100 +01011001011001010000000000001100 +01011100001000000000000000001001 +01111000000000010000000000000000 +00111000001000011000111001001100 +00101000001000100000000000000000 +00110100000000010000000000000100 +01000100010000010000000000000100 +01111000000000011000111100000000 +10111010000000011000000000000000 +01011001011100000000000000000000 +01111000000000010000000000000000 +00111000001000011000111001000100 +00101001100000100000000000011100 +00101000001000010000000000000000 +10111000001000100000100000000000 +00000000001000010000000000010100 +00110100000000100000000000000001 +00100000001000010000000000001111 +01010000010000010000000000000111 +01111000000000010000000000000000 +00111000001000010110010010101000 +10111001110000000001000000000000 +10111001101000000001100000000000 +10111001011000000010000000000000 +11111011111111111111111001101101 +01111000000000010000000000000000 +00111000001000011000111001001100 +00101000001000100000000000000000 +00110100000000010000000000000100 +01011100010000010000000000110000 +00101001011001000000000000000000 +00101001011000110000000000000100 +00101001011000100000000000001000 +00101001011000010000000000001100 +01011011100001000000000001100100 +01011011100000110000000001101000 +01011011100000100000000001101100 +01011011100000010000000001110000 +11111000000000000000010001101100 +00111100001000010000000000010000 +00110100000000100000001111101000 +01011011100000000000000001011000 +01011011100000000000000001010100 +11111000000000000001000001111111 +00010100001000100000000000011111 +00110111100010110000000001100100 +01011011100000010000000001100000 +01011011100000100000000001011100 +10111001011000000000100000000000 +00110111100000100000000001010100 +11111000000000000000000011101100 +00101011100001000000000001110000 +00101011100001010000000001101100 +00101011100000100000000001101000 +00000000100000110000000000010000 +00100000100001001111111111111111 +00001000100001000000001111101000 +00111100101001010000000000010000 +01111000000000010000000000000000 +00000000100001000000000000010000 +10111000101000110001100000000000 +00111000001000010110010010110000 +11111000000000000000001011000011 +10111001011000000000100000000000 +00110101100000100000000100010000 +11111000000000000000000011011101 +00101011100000110000000001110000 +00101011100001000000000001101100 +01111000000000010000000000000000 +00000000011000100000000000010000 +00100000011000111111111111111111 +00001000011000110000001111101000 +00111100100001000000000000010000 +00111000001000010110010011000000 +00000000011000110000000000010000 +10111000100000100001000000000000 +11111000000000000000001010110101 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000001110000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000001000010000000001101000 +11111000000000000000000110010001 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111010100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000001101000 +01000100001000000000000000000010 +11111000000000000000000110000100 +10111001011000000000100000000000 +11111000000000000000000000100101 +00110111100011000000000000010100 +00110100000000011000100011110111 +01111000000000100000000000000000 +00001111100000010000000000100000 +00111000010000101000000111110000 +10111001100000000000100000000000 +00110100000000110000000000000110 +11111000000000000001000010100110 +01111000000000010000000000000000 +10111001100000000001000000000000 +00111000001000011000101001010000 +00110100000000110000000000000001 +00110100000001000000000000000000 +11111000000000000000000100101011 +10111000001000000110000000000000 +01000100001000000000000000001110 +00110111100011010000000000101000 +10111001101000000001000000000000 +11111000000000000000000100010101 +10111001101000000001000000000000 +00110100000000110000000000000110 +00110101011000010000000001110000 +11111000000000000001000010010111 +00110101011000010000000001011100 +01011001011011000000000001101000 +10111001101000000001000000000000 +00110100000000110000000000000110 +11111000000000000001000010010010 +01011001011011000000000001010100 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000101100 +11000011101000000000000000000000 +00101000001000100000000000101000 +00110100000000110000000000000001 +01000100010000110000000000001010 +00110100000000110000000000000010 +01000100010000110000000000000011 +01011100010000000000000000001001 +11100000000000000000000000000110 +00110100000000100000000000010010 +01011000001000100000000010000100 +00110100000000100000000000001110 +01011000001000100000000010001000 +11100000000000000000000000000011 +01011000001000000000000010000100 +01011000001000000000000010001000 +00101000001001000000000010000100 +00101000001001010000000000111100 +00110100000000100000000000000000 +10110100101001000010100000000000 +00100000101000110000000000000011 +01000100011000000000000000000011 +00110100000000100000000000000100 +11001000010000110001000000000000 +10110100101000100010100000000000 +00101000001001100000000001000000 +00101000001000100000000010001000 +01011000001001010000000001001100 +00110100000000110000000000000000 +10110100110000100011000000000000 +00100000110001110000000000000011 +01000100111000000000000000000011 +00110100000000110000000000000100 +11001000011001110001100000000000 +10110100110000110001100000000000 +11001000101001000010000000000000 +11001000011000100001000000000000 +01011000001000110000000001010000 +01011000001001000000000001000100 +01011000001000100000000001001000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00101000001000110000000000000000 +10111000001000000101100000000000 +00101000001001000000000000000100 +01001000000000110000000000000110 +10111000011001000000100000000000 +00110100000011010000000000000000 +00110100000011000000000000000001 +01000100001000000000000000001001 +11100000000000000000000000001110 +00010100011000100000000000011000 +00110100000000010000000010000000 +00100000010000100000000011000000 +00110100000011011111111111111111 +00110100000011001111111111111111 +01011100010000010000000000001000 +11100000000000000000000000000101 +00101001011000100000000000001000 +00110100000011011111111111111111 +00110100000011001111111111111111 +01001000001000100000000000000011 +00110100000011010000000000000000 +00110100000011000000000000000001 +10111001101000000000100000000000 +10111001100000000001000000000000 +11111000000000000000111110111110 +00101001011001000000000000001100 +00101001011000110000000000001000 +01011001011000010000000000000000 +01011001011000100000000000000100 +10111001101000000000100000000000 +10111001100000000001000000000000 +11111000000000000000111110110111 +01011001011000010000000000001000 +01011001011000100000000000001100 +01111000000001001100101000000000 +11100000000000000000000000001111 +00101001011001100000000000000100 +00101001011001010000000000000000 +00110100001000010011101110011010 +00110100110000111111111111111111 +11110100110000110011000000000000 +01011001011000110000000000000100 +10110100010001000001100000000000 +11110100010000110001000000000000 +00110100101001011111111111111111 +10110100110001010010100000000000 +10110100010000010000100000000000 +01011001011001010000000000000000 +01011001011000010000000000001000 +01011001011000110000000000001100 +00101001011000010000000000001000 +00101001011000100000000000001100 +01001000000000011111111111110000 +11100000000000000000000000001111 +00101001011001010000000000000100 +00101001011001100000000000000000 +00110101111011111100010001100101 +00110100101000100000000000000001 +11110100101000100010100000000000 +01011001011000100000000000000100 +10110101110000110001000000000000 +11110101110000100111000000000000 +10110100101001100010100000000000 +10110101110011110111000000000000 +01011001011001010000000000000000 +01011001011011100000000000001000 +01011001011000100000000000001100 +11100000000000000000000000000100 +00110100000000010011101110011010 +01111000000001001100101000000000 +01111000000000110011011000000000 +00101001011011110000000000001000 +00101001011011100000000000001100 +01001001111000011111111111101101 +01011101111000010000000000000010 +01010101110001001111111111101011 +00101001011000110000000000000000 +00101001011001000000000000000100 +10111001101000000000100000000000 +10111001100000000001000000000000 +11111000000000000000111110000110 +01011001011000010000000000000000 +01011001011000100000000000000100 +10111001111000000000100000000000 +10111001110000000001000000000000 +10111001101000000001100000000000 +10111001100000000010000000000000 +11111000000000000000111101111111 +01011001011000010000000000001000 +01011001011000100000000000001100 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00101000010001000000000000000100 +00101000001001100000000000000100 +00101000010001010000000000000000 +00101000001001110000000000000000 +11001000110001000010000000000000 +11110100100001100011000000000000 +11001000111001010010100000000000 +11001000101001100010100000000000 +01011000001001010000000000000000 +01011000001001000000000000000100 +00101000010001100000000000001000 +00101000001001010000000000001100 +00101000010000100000000000001100 +00101000001001000000000000001000 +11001000101000100001000000000000 +11110100010001010010100000000000 +11001000100001100010000000000000 +11001000100001010010000000000000 +01011000001001000000000000001000 +01011000001000100000000000001100 +11111011111111111111111110000001 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +11111011111111111111101100101111 +00110100000000100000000000000011 +01011100001000100000000000000011 +00110100000000010000000000000010 +11100000000000000000000000000010 +00110100000000010000000000000001 +01011001011000010000000000101000 +00110101011000100000000001001100 +00110101011000010000000001001000 +11111000000000000000001101010111 +00110100000000010000000000000000 +01011001011000000000000001000000 +01011001011000000000000001000100 +01011001011000000000000010001000 +01011001011000000000000010001100 +00110111100000100000000000001100 +00110100000000110000000000000000 +11111000000000000000110101111011 +01000100001000000000000000000110 +00101011100000010000000000001100 +01011001011000010000000010100000 +00110100000000010000000000000001 +01011001011000010000000010100100 +11100000000000000000000000000011 +01011001011000000000000010100000 +01011001011000000000000010100100 +00110100000000010000000000000000 +11111000000000000000001100011101 +01011001011000010000000000101100 +00110100000000010000000000000001 +01011001011000010000000001010100 +01011001011000010000000001010000 +00110100000000010000000000000000 +11111000000000000000110100110010 +01011001011000010000000000110100 +00110100000000010001111101000000 +01011001011000010000000010110100 +01111000000000010000000000000000 +00111000001000011000010000110000 +00101000001000010000000000000000 +01011001011000010000000010111000 +01011001011000010000000010111100 +00110101011000010000000000010100 +11111000000000000000001011001000 +00110100000000010000000000000000 +01011001011000000000000000011100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +10111000001000000010100000000000 +01011100100000000000000000000010 +10111000011000000010000000000000 +10111000100000000011000000000000 +01010000011001000000000000000010 +10111000011000000011000000000000 +10110100001001100000100000000000 +11100000000000000000000000001110 +00101100010001100000000000000010 +00101000010001110000000000001100 +10110100111001100011100000000000 +01000000111001100000000000000000 +00110000101001100000000000000000 +00101100010001110000000000000010 +00101100010001100000000000000110 +00110100101001010000000000000001 +00110100111001110000000000000001 +00100000111001111111111111111111 +00001100010001110000000000000010 +01011100110001110000000000000010 +00001100010000000000000000000010 +01011100101000011111111111110011 +01010000100000110000000000001011 +00101100010000010000000000000010 +10110100011000010000100000000000 +11001000001001000010000000000000 +00001100010001000000000000000010 +00101100010000010000000000000110 +11100000000000000000000000000011 +11001000100000010010000000000000 +00001100010001000000000000000010 +00101100010001000000000000000010 +01010100100000011111111111111101 +10111000011000000000100000000000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +10111000010000000000100000000000 +11111000000000000000001010011011 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +01111000000000100000000000000000 +00111000010000101001001101010000 +00110100010000110000000000110000 +11100000000000000000000000000100 +00101000010001000000000000000000 +00110100010000100000000000000100 +01011000100000010000000000011100 +01011100010000111111111111111101 +11000011101000000000000000000000 +00110111100111001111111100100100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000001010000000000000000 +10111000001000000101100000000000 +10111000010000000110000000000000 +10111000011000000111000000000000 +10111000100000000110100000000000 +00111000101001011001001101010000 +00110100000000010000000000000000 +00110100000000100000000000001100 +00101000101000110000000000000000 +00110100101001010000000000000100 +01011100011000000000000000001001 +00111100001000100000000000000010 +01111000000001010000000000000000 +00111000101001011001001101010000 +10110100101000100010100000000000 +01011000101010110000000000000000 +00110100000000100000000000001100 +01011100001000100000000000001010 +11100000000000000000000000000011 +00110100001000010000000000000001 +01011100001000101111111111110100 +01111000000000010000000000000000 +01111000000000100000000000000000 +00111000010000101000001010111100 +00111000001000010111101001101100 +11111000000000000000000101000000 +11100000000000000000000000100000 +01111000000000100000000000000000 +00110111100000010000000000011000 +00111000010000100111101010001000 +11111011111111111111111101110010 +01001000000000010000000000011011 +10111001011000000000100000000000 +00110100000000100000000000000000 +00110100000000110000000000010010 +11111000000000000000111110000101 +01000101100000000000000000000101 +10111001011000000000100000000000 +10111001100000000001000000000000 +00110100000000110000000000010010 +11111000000000000000111101000111 +00001101011000000000000000001110 +01011101110000000000000000000100 +00110100000000010000100000000000 +00001101011000010000000000001100 +00001101011011010000000000001110 +00110101011000010000000000010010 +11111000000000000000001001011000 +00101011100000010000000011010000 +00001101011000000000000000100110 +00001101011000000000000000100100 +01011001011000010000000000011100 +00101011100000010000000010111000 +00001101011000000000000000101100 +01011001011000010000000000100000 +00101101011000010000000000101010 +00001101011000010000000000101000 +11100000000000000000000000000010 +00110100000010110000000000000000 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000011011100 +11000011101000000000000000000000 +01111000000000100000000000000000 +00111000010000101001001101010000 +00110100010000110000000000110000 +11100000000000000000000000000101 +00101000010001000000000000000000 +01011100100000010000000000000010 +01011000010000000000000000000000 +00110100010000100000000000000100 +01011100010000111111111111111100 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +01011001011000100000000000010000 +10111000010000000111000000000000 +10111000100000000111100000000000 +10111000101000000110000000000000 +00101000001011010000000000001000 +01000100011000000000000000000101 +10111000101000000000100000000000 +00110100000000101111110000011000 +11111000000000000000111010100100 +10110100001011010110100000000000 +11001001110011110010000000000000 +10111000100000000001100000000000 +01001100100000000000000000000010 +10110100100011000001100000000000 +00000001100000010000000000011111 +10110100001011000000100000000000 +00010100001000010000000000000001 +10110100001001000010000000000000 +01001100100000000000000000000010 +10110100100011000010000000000000 +01001001100001000000000000000010 +11001000100011000010000000000000 +00001001100000100000000000000011 +00010100010001010000000000011111 +00000000101001010000000000011110 +10110100101000100001000000000000 +00010100010000100000000000000010 +01001000011000100000000000000110 +00010101100000100000000000011111 +00000000010000100000000000011110 +10110100010011000001000000000000 +00010100010000100000000000000010 +01001100011000100000000000001101 +10110100100000010010000000000000 +01011001011011010000000000001000 +01011001011001000000000000001100 +01001001100001000000000000001010 +11001000100011000010000000000000 +01011001011001000000000000001100 +10111001100000000000100000000000 +00110100000000100000001111101000 +11111000000000000000111010000011 +10110101101000010000100000000000 +01011001011000010000000000001000 +11100000000000000000000000000010 +01011001011000110000000000001100 +01111000000000110000000000000000 +00111000011000111000000101100000 +00101001011000010000000000001000 +00101000011000100000000000000000 +01001100010000010000000000001101 +01111000000000110000000000000000 +00111000011000111000000101010100 +00101000011000100000000000000000 +00101001011000110000000000000000 +10110100001000100000100000000000 +00101001011000100000000000000100 +01011001011000010000000000001000 +00110100010000010000000000000001 +11110100010000010001000000000000 +01011001011000010000000000000100 +10110100010000110001000000000000 +01011001011000100000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111110110100 +01011011100010110000000000100100 +01011011100011000000000000100000 +01011011100011010000000000011100 +01011011100011100000000000011000 +01011011100011110000000000010100 +01011011100100000000000000010000 +01011011100100010000000000001100 +01011011100100100000000000001000 +01011011100111010000000000000100 +10111000010000000110100000000000 +00101100001000100000000000101100 +10111000101000000101100000000000 +10111000001000000110000000000000 +10111000011000001001000000000000 +10111000100000000111100000000000 +00110100000001010000000000000000 +01000100010000000000000001010110 +00110100001011100000000000100100 +00101100001100010000000000101000 +00110100010000101111111111111111 +00001100001000100000000000101100 +00110100000000110000000000000010 +10111001110000000001000000000000 +00110100000001000000000000000000 +00110111100000010000000001001110 +11111011111111111111111100001111 +10110110001000011000100000000000 +00100010001100011111111111111111 +00001101100100010000000000101000 +10111001110000000001000000000000 +00110100000000110000000000011000 +00110100000001000000000000000000 +00110111100000010000000000101000 +11111011111111111111111100000111 +10110110001000011000100000000000 +00100010001100011111111111111111 +00110111100100000000000001000000 +00001101100100010000000000101000 +10111001110000000001000000000000 +00110100000000110000000000001110 +00110100000001000000000000000000 +10111010000000000000100000000000 +11111011111111111111111011111110 +10110110001000011000100000000000 +00101111100000110000000001001110 +00100010001100011111111111111111 +10111001110000000001000000000000 +10111001111000000010000000000000 +00001101100100010000000000101000 +10111010010000000000100000000000 +11111011111111111111111011110110 +10110110001000010000100000000000 +00001101100000010000000000101000 +00101111100000010000000001001100 +01111000000000110000000000000000 +00111000011000111000111001000000 +00001101101000010000000000001100 +00101000011000010000000000000000 +00110111100000100000000001000110 +00110100000000110000000000000110 +00001101101000010000000000010000 +10111001101000000000100000000000 +11111000000000000000111010010011 +00110101101000010000000000000110 +10111010000000000001000000000000 +00110100000000110000000000000110 +11111000000000000000111010001111 +01000101011000000000000000011111 +00101011100000010000000000111000 +01011001011000010000000000010100 +00101011100000010000000000101100 +01011001011000010000000000011000 +00110100000000010000000000000000 +11111000000000000000110001101101 +10111000001000000110100000000000 +00110101011000100000000000010000 +00110100000000110000000000000000 +00110100000000010000000000000000 +11111000000000000000110000110100 +00101011100000010000000000110000 +01000011100000100000000000101000 +00101011100000110000000000101100 +01011001011000010000000000000000 +00101011100000010000000000110100 +01111100010000100000000000000000 +00101001100001000000000000011100 +01011001011000010000000000000100 +00101011100000010000000000111000 +01011001011000000000000000001100 +00110100000001010001111101000000 +01011001011000010000000000001000 +00100001101000010000000011111111 +01100100001000010000000000000000 +10100000001000100000100000000000 +00101001011000100000000000010000 +01011001011000010000000000011100 +10111001011000000000100000000000 +11111011111111111111111101001111 +00101111100000010000000001001110 +10111001111000000010100000000000 +01010000001011110000000000000010 +10111000001000000010100000000000 +10111000101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100100 +00101011100011000000000000100000 +00101011100011010000000000011100 +00101011100011100000000000011000 +00101011100011110000000000010100 +00101011100100000000000000010000 +00101011100100010000000000001100 +00101011100100100000000000001000 +00110111100111000000000001001100 +11000011101000000000000000000000 +00110111100111001111111111000000 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +10111000011000000111000000000000 +00110111100000010000000000110000 +00110100000000110000000000000110 +10111000101000000101100000000000 +10111000100000000110100000000000 +11111000000000000000111001010011 +00110111100000010000000000110110 +00110101100000100000000000010010 +00110100000000110000000000000110 +11111000000000000000111001001111 +01111000000000010000000000000000 +00111000001000011000111001000000 +00101000001001010000000000000000 +00101101100000010000000000001100 +01000100101000000000000000001001 +00110100000000101000000100000000 +00001111100000100000000000111100 +00101101100000100000000000011000 +00001111100000010000000001000000 +00111100010000100000000000001101 +10111000010001010010100000000000 +00001111100001010000000000111110 +11100000000000000000000000000010 +00001111100000010000000000111100 +00110111100000010000000000110000 +10111001110000000001000000000000 +10111001101000000001100000000000 +00110111100001000000000000011000 +11111000000000000000010000110111 +01000101011000000000000000001010 +00101011100000100000000000100000 +01011001011000000000000000001100 +01011001011000100000000000000000 +00101011100000100000000000100100 +01011001011000100000000000000100 +00101011100000100000000000101000 +01011001011000100000000000001000 +01000011100000100000000000011000 +01011001011000100000000000011100 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000001000000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000000 +10111000001000000010000000000000 +00111001011010111001001110000000 +10111000010000000001100000000000 +10111001011000000000100000000000 +10111000100000000001000000000000 +11111000000000000000000000011001 +10111000001000000110000000000000 +10111001011000000000100000000000 +11111000000000000000000011110101 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111011100 +01011011100111010000000000000100 +01011011100000100000000000001100 +00110111100000100000000000001100 +01011011100000010000000000001000 +01011011100000110000000000010000 +01011011100001000000000000010100 +01011011100001010000000000011000 +01011011100001100000000000011100 +01011011100001110000000000100000 +01011011100010000000000000100100 +11111011111111111111111111100001 +00101011100111010000000000000100 +00110111100111000000000000100100 +11000011101000000000000000000000 +00110111100111001111111110011100 +01011011100010110000000001000100 +01011011100011000000000001000000 +01011011100011010000000000111100 +01011011100011100000000000111000 +01011011100011110000000000110100 +01011011100100000000000000110000 +01011011100100010000000000101100 +01011011100100100000000000101000 +01011011100100110000000000100100 +01011011100101000000000000100000 +01011011100101010000000000011100 +01011011100101100000000000011000 +01011011100101110000000000010100 +01011011100110000000000000010000 +01011011100110010000000000001100 +01011011100110110000000000001000 +01011011100111010000000000000100 +01111000000101100000000000000000 +10111000001000001100100000000000 +10111000010000001010000000000000 +10111000001000001001100000000000 +00110100000110000000000000100101 +00110100000010010000000001101001 +00110100000010000000000001110000 +00110100000001110000000001011000 +00110100000110110000000000101010 +00110100000010100000000000110000 +00110100000101110000000000010000 +00110111100101010000000001011000 +00111010110101100111101010010100 +11100000000000000000000010010110 +00110100000011110000000000000000 +00110100000100010000000000100000 +00110100000011010000000000001010 +01000100001110000000000000000100 +00110010011000010000000000000000 +11100000000000000000000000111100 +00110100000100010000000000110000 +00110110100101000000000000000001 +01000010100000010000000000000000 +01000100001010010000000001000000 +01010100001010010000000000001111 +01000100001001110000000000111011 +01010100001001110000000000001000 +01000100001110110000000000011010 +01010100001110110000000000000100 +01000100001000000000000010001000 +01011100001110000000000000011010 +11100000000000000000000000101111 +01011100001010100000000000011000 +11100000000000000000000000010110 +00110100000000100000000001100011 +01000100001000100000000000011100 +00110100000001000000000001100100 +01011100001001000000000000010011 +11100000000000000000000000110001 +01000100001010000000000000101101 +01010100001010000000000000000110 +00110100000000100000000001101110 +01000100001000100000000001111000 +00110100000001000000000001101111 +01011100001001000000000000001100 +11100000000000000000000000100100 +00110100000000100000000001110101 +01000100001000100000000000101000 +00110100000001000000000001111000 +01000100001001000000000000100011 +00110100000000100000000001110011 +01011100001000100000000000000101 +11100000000000000000000000010000 +00101000011011010000000000000000 +00110100011000110000000000000100 +01000101111000001111111111011101 +00110100001000011111111111010000 +00100000001000100000000011111111 +00110100000001000000000000001001 +01010100010001001111111111011010 +00001001111011110000000000001010 +10110100001011110111100000000000 +11100011111111111111111111010111 +00101000011000010000000000000000 +00110100011000110000000000000100 +00110010011000010000000000000000 +00110110011100110000000000000001 +11100000000000000000000001011111 +10111000011000000000100000000000 +00101000001000010000000000000000 +00110100011000110000000000000100 +11100000000000000000000000000100 +00110010011000100000000000000000 +00110100001000010000000000000001 +00110110011100110000000000000001 +01000000001000100000000000000000 +01011100010000001111111111111100 +11100000000000000000000001010101 +00110010011110000000000000000000 +00110110011100110000000000000001 +11100000000000000000000001010010 +00110100000000010000000000001010 +01000101101000010000000000000100 +11100000000000000000000000000100 +00110100000011010000000000010000 +11100000000000000000000000000010 +00110100000011010000000000001000 +00101000011001010000000000000000 +00110100011100100000000000000100 +10111000101000000111000000000000 +01011101111000000000000000000010 +00110100000011110000000000000001 +00000000101001100000000000011111 +01100101101000110000000000001010 +00110100000100000000000000000000 +10100000110000110001100000000000 +01000100011000000000000000000011 +11001000000001010111000000000000 +00110100000100000000000000000001 +00110100000011000000000000010000 +11100000000000000000000000010101 +10111001110000000000100000000000 +10111001101000000001000000000000 +01011011100001110000000001001100 +01011011100010000000000001010000 +01011011100010010000000001010100 +01011011100010100000000001001000 +11111000000000000000110101011010 +10110110110000010001100000000000 +01000000011000110000000000000000 +00110101100011001111111111111111 +10110110101011000101100000000000 +10111001110000000000100000000000 +00110001011000110000000000000000 +10111001101000000001000000000000 +11111000000000000000110101000010 +00101011100010100000000001001000 +00101011100010010000000001010100 +00101011100010000000000001010000 +00101011100001110000000001001100 +10111000001000000111000000000000 +01111101100001000000000000000000 +01111101110000110000000000000000 +10100000100000110001100000000000 +01011100011000001111111111101001 +01011101100101110000000000000100 +00110100000000100000000000110000 +00110011100000100000000001100111 +00110100000011000000000000001111 +01100110001000100000000000100000 +10100010000000100001000000000000 +01000100010000000000000000001011 +00110101100011001111111111111111 +10110110101011000001000000000000 +00110100000000110000000000101101 +00110000010000110000000000000000 +00110100000100000000000000000000 +11100000000000000000000000000101 +00110101100011001111111111111111 +10110110101011000001000000000000 +00110000010100010000000000000000 +11100000000000000000000000000011 +11001010111011110000100000000000 +10110100001100000000100000000000 +01001001100000011111111111111010 +01000110000000000000000000000101 +00110101100011001111111111111111 +10110110101011000000100000000000 +00110100000000100000000000101101 +00110000001000100000000000000000 +11001010111011000001100000000000 +10111010011000000000100000000000 +00110100000001000000000000001111 +11100000000000000000000000000110 +10110110101011000001000000000000 +01000000010000100000000000000000 +00110101100011000000000000000001 +00110000001000100000000000000000 +00110100001000010000000000000001 +01001100100011001111111111111011 +10110110011000111001100000000000 +10111010010000000001100000000000 +00110110100101000000000000000001 +01000010100000010000000000000000 +01011100001000001111111101101010 +11001010011110010000100000000000 +00110010011000000000000000000000 +00101011100111010000000000000100 +00101011100010110000000001000100 +00101011100011000000000001000000 +00101011100011010000000000111100 +00101011100011100000000000111000 +00101011100011110000000000110100 +00101011100100000000000000110000 +00101011100100010000000000101100 +00101011100100100000000000101000 +00101011100100110000000000100100 +00101011100101000000000000100000 +00101011100101010000000000011100 +00101011100101100000000000011000 +00101011100101110000000000010100 +00101011100110000000000000010000 +00101011100110010000000000001100 +00101011100110110000000000001000 +00110111100111000000000001100100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00110100000000010000000000001010 +01011101011000010000000000000011 +00110100000000010000000000001101 +11111011111111111111111111111001 +01111000000000100000000000000000 +00111000010000101001011101010000 +00101000010000100000000000000000 +00101000010000010000000000000000 +00100000001000010000000000000001 +01011100001000001111111111111110 +01011000010010110000000000001000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +10111000001000000101100000000000 +11100000000000000000000000000100 +10111000010000000000100000000000 +00110101011010110000000000000001 +11111011111111111111111111100100 +01000001011000100000000000000000 +01011100010000001111111111111100 +11001001011011000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +01111000000000100000000000000000 +00010100001000010000000000000010 +00111000010000101001011101001100 +00101000010000100000000000000000 +00100000001000010000000011111111 +00111100001000010000000000010000 +01011000010000010000000000101100 +00101000010000010000000000110000 +01001100001000001111111111111111 +00101000010000010000000000110000 +00100000001000011111111111111111 +11000011101000000000000000000000 +00010100001000010000000000000010 +01111000000000110000000000000000 +00111000011000111001011101001100 +00100000001000010000000011111111 +00101000011000110000000000000000 +00100000010000101111111111111111 +01111000000001001000000000000000 +00111100001000010000000000010000 +10111000010001000001000000000000 +10111000010000010001000000000000 +01011000011000100000000000101100 +00101000011000010000000000110000 +01001100001000001111111111111111 +11000011101000000000000000000000 +01000000001001000000000000000010 +01000000001000110000000000000011 +01111000000000100000000000000000 +00111100100001000000000000011000 +00111100011000110000000000010000 +00111000010000101001011101001100 +10111000100000110001100000000000 +01000000001001000000000000000101 +00101000010000100000000000000000 +10111000011001000001100000000000 +01000000001001000000000000000100 +00111100100001000000000000001000 +10111000011001000001100000000000 +01011000010000110000000000101000 +01000000001000110000000000000001 +01000000001000010000000000000000 +00111100001000010000000000001000 +10111000011000010000100000000000 +01011000010000010000000000100100 +11000011101000000000000000000000 +01111000000000100000000000000000 +00111000010000101001011101001100 +00101000010000110000000000000000 +00101000011000110000000000101000 +00110000001000110000000000000101 +00101000010000110000000000000000 +00101000011000110000000000101000 +00000000011000110000000000001000 +00110000001000110000000000000100 +00101000010000110000000000000000 +00101000011000110000000000101000 +00000000011000110000000000010000 +00110000001000110000000000000011 +00101000010000110000000000000000 +00101000011000110000000000101000 +00000000011000110000000000011000 +00110000001000110000000000000010 +00101000010000110000000000000000 +00101000011000110000000000100100 +00110000001000110000000000000001 +00101000010000100000000000000000 +00101000010000100000000000100100 +00000000010000100000000000001000 +00110000001000100000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000000 +10111000010000000110000000000000 +00111001011010111001011101001100 +01011100001000000000000000000100 +00101001011000010000000000000000 +01011000001000000000000000000000 +11100000000000000000000000011100 +00101001011000010000000000000000 +01011000001000000000000000000000 +11111000000000000000000010111000 +00101001011000010000000000000000 +00110100000000100000000011100000 +01011000001000100000000000000000 +01111000000000010000000000000000 +00111000001000011001010000000000 +01011000001011000000000000000000 +00110100000000100000100000000000 +00110100000000010000000000000000 +11111011111111111111111110101111 +00110100000000010000000000000000 +00111000000000101000000000000000 +11111011111111111111111110101100 +00110100000000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111110101001 +00110100000000010000000000010000 +00110100000000100000000000000000 +11111011111111111111111110100110 +01111101100000100000000000000000 +00110100000000010000000000000000 +11001000000000100001000000000000 +00100000010000100001001000000000 +00110100010000100000000101000000 +11111011111111111111111110100000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000000100000000000000000 +00111000010000101001010000000000 +00101000010010110000000000000000 +10111000001000000110000000000000 +00110100000000010000000000000100 +11111011111111111111111110000100 +01111101011010110000000000000000 +00001111100000010000000000010010 +00110100000000010000000000000100 +11001000000010110101100000000000 +11111011111111111111111101111111 +00100001011010110000000000100000 +00001111100000010000000000010010 +00110101011010110000000000000100 +01000101100000000000000000000100 +00110100000000010000000000010100 +11111011111111111111111101111001 +00001101100000010000000000000000 +00101111100000010000000000010010 +10100001011000010000100000000000 +11100100001010110000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000010000000001000000 +11111011111111111111111101101100 +00000000001000010000000000000100 +00100000001000010000000000011111 +00001000001000010000001100100000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000000 +00111000011000111001010000001000 +10111000010000000101100000000000 +00101000011000100000000000000000 +01011000001000100000000000000000 +01111000000000010000000000000000 +00111000001000011001010000001100 +00101000001011000000000000000000 +00110100000000010000000001000000 +11111011111111111111111101011000 +00000000001000010000000000000100 +00100000001000010000000000011111 +00001000001000010000001100100000 +10110100001011000000100000000000 +01011001011000010000000000000000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000010000000001000000 +11111011111111111111111101001001 +00111000001000100000000000000001 +00110100000000010000000001000000 +11111011111111111111111101010010 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000010000000001000000 +11111011111111111111111100111110 +00110100000000101111111111111110 +10100000001000100001000000000000 +00110100000000010000000001000000 +11111011111111111111111101000110 +00110100000000010000000000000000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000000 +00111001011010111001011101001100 +00101001011000010000000000000000 +00101000001000100000000000000100 +00111000010000100000000000010000 +01011000001000100000000000000100 +00110100000000010000000000000001 +11111000000000000000001011111000 +00101001011000010000000000000000 +00101000001000010000000000000100 +00100000001000010000000000100000 +01111100001000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00110100000000010000000001000100 +11111011111111111111111100011101 +00111000001000100000000000100000 +01000101011000000000000000000011 +00110100000000101111111111011111 +10100000001000100001000000000000 +00110100000000010000000001000100 +11111011111111111111111100100011 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000100000000000000000 +00111000010000101001010001000000 +00101000010000100000000000000000 +01111000000010110000000000000000 +00111001011010111001011101001100 +01011001011000100000000000000000 +11111011111111111111111100100010 +00110100000000010000000000000001 +11111011111111111111111111100100 +00101001011000010000000000000000 +01111000000001000000000000000000 +00111000100001001000000101110000 +00101000100000110000000000000000 +01011000001000000000000000000000 +00110100000000100000000000000011 +01011000001000100000000000001100 +01011000001000110000000000001000 +01111000000000110000000000000000 +00111000011000111000000101110100 +01011000001000100000000000000100 +00101000011000100000000000000000 +01011000001000100000000000111100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000000 +00111000001000011000111001000000 +00101000001000100000000000000000 +01111000000000010000000000000000 +00111000001000011000101010000100 +01000100010000000000000000000011 +01111000000000010000000000000000 +00111000001000011000101010001100 +00101000001010110000000000000000 +01011101011000000000000000000100 +01111000000000010000000000000000 +00111000001000010111101010101000 +11100000000000000000000000110110 +01111000000000110000000000000000 +00111000011000111000000101111000 +00101000001011000000000000000100 +00101001011000100000000000000000 +00101000011000010000000000000000 +01000100010000010000000000010001 +10111001011000000000100000000000 +01111000000001000000000011111111 +11100000000000000000000000001101 +00101000001000110000000000000000 +00111100011001100000000000011000 +00000000011001010000000000011000 +10111000110001010010100000000000 +10100000011001000011000000000000 +00000000110001100000000000001000 +00100000011000111111111100000000 +00111100011000110000000000001000 +10111000101001100010100000000000 +10111000101000110001100000000000 +01011000001000110000000000000000 +00110100001000010000000000000100 +01010101100000011111111111110100 +01111000000001000000000000000000 +00111000100001001000000101111000 +00101001011000110000000000000000 +00101000100000010000000000000000 +01000100011000010000000000000101 +01111000000000010000000000000000 +00111000001000010111101011000000 +11111011111111111111110111000101 +11100000000000000000000010101011 +01111000000000010000000000000000 +00111000001000011001010000000100 +00101000001000100000000000000000 +00110101011010110000000000000100 +01011100010000000000000000010110 +00101001011000110000000000001000 +00110100000000100001001000110100 +00000000011000110000000000001101 +00100000011000111111111111111111 +01011100011000100000000000001011 +00101001011000110000000000010000 +00110100000000100101011001111000 +00000000011000110000000000001101 +00100000011000111111111111111111 +01011100011000100000000000000110 +00101001011000110000000000011000 +00110100010000100100010001000100 +00000000011000110000000000001101 +00100000011000111111111111111111 +01000100011000100000000000000101 +01111000000000010000000000000000 +00111000001000010111101011101000 +11111011111111111111110110101101 +11100000000000000000000010010011 +00110100000000100000000000000001 +01011000001000100000000000000000 +00110111100000010000000000010100 +11111011111111111111111011010110 +01111000000001100000000000000000 +00111000110001101000000101111100 +00101000110001010000000000000000 +00101001011001110000000000001000 +00101001011001100000000000010000 +00101001011000010000000000011000 +10100000111001010011100000000000 +10100000110001010011000000000000 +10100000001001010000100000000000 +01011001011001110000000000001000 +01011001011001100000000000010000 +01011001011000010000000000011000 +01000011100010000000000000010100 +01000011100010010000000000010101 +00110101011001000000000000001000 +00111101000010000000000000001000 +00110101011000110000000000010000 +10111001000010010100000000000000 +00111101000010000000000000001101 +00110101011000100000000000011000 +10111000111010000011100000000000 +01011001011001110000000000001000 +01000011100001110000000000010110 +01000011100010000000000000010111 +00111000000010011100101011111110 +00111100111001110000000000001000 +10111000111010000011100000000000 +00111100111001110000000000001101 +00110100000010000000000000000001 +10111000110001110011000000000000 +01011001011001100000000000010000 +01000011100001100000000000011000 +01000011100001110000000000011001 +00111100110001100000000000001000 +10111000110001110011000000000000 +00111100110001100000000000001101 +10111000001001100000100000000000 +01111000000001100000000000000000 +00111000110001101000000110000000 +01011001011000010000000000011000 +00101000110001110000000000000000 +10111001011000000000100000000000 +11100000000000000000000000001011 +00101000001001100000000000000000 +00000000110010100000000000001101 +00100001010010101111111111111111 +01011101010010010000000000000110 +00100000110010100000000000000111 +01011101010010000000000000000100 +10100000110001010011000000000000 +10111000110001110011000000000000 +01011000001001100000000000000000 +00110100001000010000000000001000 +01010101100000011111111111110110 +01111000000001110000000000000000 +00111000111001111000000101111100 +01111000000001100000000000000000 +10111001011000000000100000000000 +00110100000001010000000000000000 +00110100000010100000101010101010 +00110100000010010000000000000111 +00101000111010000000000000000000 +00111000110001101000111001000000 +11100000000000000000000000010000 +00101000001001110000000000000000 +00000000111011010000000000001101 +00100001101011011111111111111111 +01011101101010100000000000001011 +00000000111011010000000000000111 +00100001101011010000000000011111 +01011101101010010000000000001000 +10100000111010000011100000000000 +01011000001001110000000000000000 +00101000110001010000000000000000 +00111100101001010000000000001101 +10111000101001110011100000000000 +01011000001001110000000000000000 +10111000001000000010100000000000 +00110100001000010000000000001000 +01010101100000011111111111110001 +01111000000000010000000000000000 +00111000001000011001011101001100 +00101000001000010000000000000000 +00110100000001100000000000000000 +01011000001000000000000000010100 +11100000000000000000000000001111 +00101001011001110000000000000000 +00101001011010010000000000000100 +00110101011010110000000000001000 +00100000111010000000111111111111 +00111101001010010000000000010100 +00000000111001110000000000001100 +01011000001010000000000000011000 +10111001001001110011100000000000 +00111100111001110000000000001000 +00100000110010010000000000111111 +00111000111001110000000001000000 +10111000111010010011100000000000 +01011000001001110000000000010100 +00110100110001100000000000000001 +01010101100010111111111111110010 +01000100101000000000000000001011 +01111000000010000000000000000000 +00111001000010001000000101111100 +00101000101001110000000000000000 +00101001000001100000000000000000 +01111000000010000000000000000000 +00111001000010001000000110000100 +10100000111001100011000000000000 +00101001000001110000000000000000 +10111000110001110011000000000000 +01011000101001100000000000000000 +01111000000001110000000000000000 +00111000111001111000000101111100 +00101000100001100000000000000000 +00101000111001010000000000000000 +01111000000010000000000000000000 +00111001000010001000000110001000 +10100000110001010011000000000000 +01011000100001100000000000000000 +00101000011001100000000000000000 +10100000110001010011000000000000 +01011000011001100000000000000000 +00101000010001100000000000000000 +10100000110001010010100000000000 +01011000010001010000000000000000 +00101000100001100000000000000000 +00101001000001010000000000000000 +10111000110001010010100000000000 +01011000100001010000000000000000 +00101000011001010000000000000000 +01111000000001000000101011001111 +10111000101001000010000000000000 +01111000000001010000000000000000 +01011000011001000000000000000000 +00111000101001011000000110001100 +00101000010001000000000000000000 +00101000101000110000000000000000 +10111000100000110001100000000000 +01011000010000110000000000000000 +00110100000000100000000010000000 +01011000001000100000000000010100 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +01111000000000110000000000000000 +00111000011000111001011101001000 +01000100010000000000000000000100 +00101000011000100000000000000000 +01011000010000010000000000000100 +11000011101000000000000000000000 +00101000011000100000000000000000 +01011000010000010000000000001000 +11000011101000000000000000000000 +01111000000000110000000000000000 +00111000011000111001011101001000 +01000100010000000000000000000100 +00101000011000100000000000000000 +01011000010000010000000000000100 +11000011101000000000000000000000 +00101000011000100000000000000000 +01011000010000010000000000001000 +11000011101000000000000000000000 +00110100000000100000000000000000 +11100000000000000000000000000011 +00110100000000000000000000000000 +00110100010000100000000000000001 +01011100010000011111111111111110 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00100000001000010000000011111111 +00001000001010110000000000001100 +01111000000000100000000000000000 +00111000010000101000101010010100 +10110100010010110101100000000000 +00101001011000010000000000000100 +00110100000000100000000000000000 +11111011111111111111111111011110 +00101001011000010000000000001000 +11111011111111111111111111101110 +00101001011000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111111011001 +00101001011000010000000000001000 +11111011111111111111111111101001 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00100000001000010000000011111111 +00001000001010110000000000001100 +01111000000000100000000000000000 +00111000010000101000101010010100 +10110100010010110101100000000000 +00101001011000010000000000000100 +00110100000000100000000000000001 +11111011111111111111111111001000 +00101001011000010000000000001000 +11111011111111111111111111011000 +00101001011000010000000000000000 +00110100000000100000000000000001 +11111011111111111111111111000011 +00101001011000010000000000001000 +11111011111111111111111111010011 +00101001011000010000000000000100 +00110100000000100000000000000000 +11111011111111111111111110111110 +00101001011000010000000000001000 +11111011111111111111111111001110 +00101001011000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111110111001 +00101001011000010000000000001000 +11111011111111111111111111001001 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00100000001000010000000011111111 +00001000001010110000000000001100 +01111000000000100000000000000000 +00111000010000101000101010010100 +10110100010010110101100000000000 +00101001011000010000000000000100 +00110100000000100000000000000000 +11111011111111111111111110101000 +00101001011000010000000000001000 +11111011111111111111111110111000 +00101001011000010000000000000000 +00110100000000100000000000000001 +11111011111111111111111110100011 +00101001011000010000000000001000 +11111011111111111111111110110011 +00101001011000010000000000000100 +00110100000000100000000000000001 +11111011111111111111111110011110 +00101001011000010000000000001000 +11111011111111111111111110101110 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00100000001000010000000011111111 +00001000001010110000000000001100 +01111000000000110000000000000000 +00111000011000111000101010010100 +00100000010011110000000011111111 +00110100000011100000000000001000 +10110100011010110101100000000000 +00101001011000010000000000000100 +00100001111000100000000010000000 +00110101110011101111111111111111 +11111011111111111111111110000110 +00101001011000010000000000001000 +00111101111011110000000000000001 +00100001110011100000000011111111 +11111011111111111111111110010100 +00101001011000010000000000000000 +00110100000000100000000000000001 +00110101011011010000000000000100 +11111011111111111111111101111110 +00101001011000010000000000001000 +00110101011011000000000000001000 +00100001111011110000000011111111 +11111011111111111111111110001100 +00101001011000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111101110111 +00101001011000010000000000001000 +11111011111111111111111110000111 +01011101110000001111111111101011 +00101001101000010000000000000000 +00110100000000100000000000000001 +11111011111111111111111101110001 +00101001100000010000000000000000 +11111011111111111111111110000001 +00101001011000010000000000000000 +00110100000000100000000000000001 +11111011111111111111111101101100 +00101001100000010000000000000000 +11111011111111111111111101111100 +01111000000000010000000000000000 +00111000001000011001011101001000 +00101000001000010000000000000000 +00101001101011100000000000000000 +00110100000000100000000000000000 +00101000001000010000000000000100 +10100000001011100111000000000000 +00101001011000010000000000000000 +11111011111111111111111101100001 +00101001100000010000000000000000 +11111011111111111111111101110001 +00101001101000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111101011100 +00101001100000010000000000000000 +11111011111111111111111101101100 +01111101110000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +00100000001000010000000011111111 +00001000001010110000000000001100 +01111000000001000000000000000000 +00111000100001001000101010010100 +10110100100010110101100000000000 +00101001011000010000000000000100 +10111000010000001000000000000000 +00110100000000100000000000000001 +00100000011100010000000011111111 +11111011111111111111111100111110 +00101001011000010000000000001000 +01111000000011110000000000000000 +00110100000011100000000000001000 +11111011111111111111111101001100 +00101001011000010000000000000000 +00110100000000100000000000000000 +00110100000011010000000000000000 +11111011111111111111111100110110 +00101001011000010000000000001000 +00111001111011111001011101001000 +11111011111111111111111101000101 +00101001011000010000000000000000 +00110100000000100000000000000001 +00111101101011010000000000000001 +11111011111111111111111100101111 +00101001011000010000000000001000 +00100001101011010000000011111111 +11111011111111111111111100111110 +00101001111000010000000000000000 +00101001011000100000000000000100 +00101000001000010000000000000100 +10100000001000100000100000000000 +01000100001000000000000000000010 +00111001101011010000000000000001 +00101001011000010000000000000000 +00110100000000100000000000000000 +00110101110011101111111111111111 +11111011111111111111111100100010 +00101001011000010000000000001000 +00110101011011000000000000001000 +11111011111111111111111100110001 +01011101110000001111111111101100 +01000110001011100000000000000100 +00101001011000010000000000000100 +00110100000000100000000000000001 +11100000000000000000000000000011 +00101001011000010000000000000100 +00110100000000100000000000000000 +11111011111111111111111100010111 +00101001100000010000000000000000 +11111011111111111111111100100111 +00101001011000010000000000000000 +00110100000000100000000000000001 +11111011111111111111111100010010 +00101001100000010000000000000000 +11111011111111111111111100100010 +00101001011000010000000000000000 +00110100000000100000000000000000 +11111011111111111111111100001101 +00101001100000010000000000000000 +11111011111111111111111100011101 +00110010000011010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +00100000001000010000000000000011 +00111100001000010000000000010000 +10111000001000100001000000000000 +01111000000000010000000000000000 +00111000001000011001011101011000 +00101000001000010000000000000000 +01011000001000100000000000000100 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000010000000000000000 +00111000001000011001011101011000 +00101000001000010000000000000000 +01111000000010110000000000000000 +00110100000001000000000000000001 +00101000001000110000000000000000 +00111001011010111001011100111100 +00000000011000100000000000011000 +00100000010000100000000000001111 +01000100010001000000000000000110 +01111000000000010000000000000000 +00111000001000010111101100010000 +11111011111111111111101111111011 +01011001011000000000000000000000 +11100000000000000000000000000110 +01011001011000100000000000000000 +00110100000000100000000000000111 +01011000001000100000000001000000 +00111000011000110000010000000000 +01011000001000110000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111010100 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +10111000010000000110100000000000 +01111000000000100000000000000000 +00111000010000101001011100111100 +00101000010000100000000000000000 +10111000001000000111100000000000 +10111000011000000110000000000000 +10111000100000000101100000000000 +00110100000000010000000000000000 +01000100010000000000000010001010 +00101101111000110000000000001100 +00111000000000011000000100000000 +11111100011000010001100000000000 +00110100000000011111111111111100 +11001000000000110001100000000000 +10100000011000010001100000000000 +00110100011000110000000000010010 +10110100011011000001000000000000 +00110100000000010000000000111011 +00010100011100010000000000000001 +01010100010000010000000000000011 +00110100000011000000000000111100 +11001001100000110110000000000000 +00110101100100000000000000000001 +00110100000000010000000000000010 +00110100000000100000000000000000 +00000010000100000000000000000001 +11111011111111111111111110111010 +00110100000011100000000000000000 +11100000000000000000000000000110 +00101101111000100000000000000000 +00110100000000010000000000000000 +00110101110011100000000000000001 +11111011111111111111111110110100 +00110101111011110000000000000010 +01010110001011101111111111111011 +10111001101000000111100000000000 +00110100000011100000000000000000 +00110110000100001111111111111111 +11100000000000000000000000000110 +00101101111000100000000000000000 +00110100000000010000000000000000 +00110101110011100000000000000001 +11111011111111111111111110101010 +00110101111011110000000000000010 +01010110000011101111111111111011 +00100001100000100000000000000001 +00111110000000010000000000000001 +01011100010000000000000000000100 +10110101101000010110100000000000 +00110100000000010000000000000000 +11100000000000000000000000000011 +10110101101000010110100000000000 +00110100000000010000000000000011 +00101101101000100000000000000000 +11111011111111111111111110011110 +01000101011000000000000000000111 +00110100000000010000000000000001 +00110100000000100001000000000000 +11111011111111111111111110011010 +00110100000000010000000000000001 +00110100000000100000000000000000 +11111011111111111111111110010111 +01111000000000010000000000000000 +00111000001000011001011101011000 +00101000001000100000000000000000 +00110100000011010000000000000000 +10111000001000000111100000000000 +00101000010000110000000000000000 +00110100000100000000001111101000 +00111000011000110000000000000001 +01011000010000110000000000000000 +00101001111000010000000000000000 +00101000001011100000000000000000 +00100001110000010000000000000010 +01011100001000000000000000001001 +00110100000000010000000000000001 +00110101101011010000000000000001 +11111000000000000000000001100110 +01011101101100001111111111111001 +01111000000000010000000000000000 +00111000001000010111101110100100 +10111001110000000001000000000000 +11111011111111111111101110010100 +01000101011000000000000000111110 +01111000000011010000000000000000 +00110100000011100000000000000000 +00111001101011011001011101011000 +00110100000011110000000001100100 +00101001101000010000000000000000 +00101000001000100000000000000000 +00100000010000100000100000000000 +01011100010000000000000000001010 +00110100000000010000000000000001 +00110101110011100000000000000001 +11111000000000000000000001010101 +01011101110011111111111111111001 +01111000000000010000000000000000 +00111000001000010111101111010100 +11111011111111111111101110000100 +00110100000011100000000000000000 +11100000000000000000000000000011 +00101000001011100000000000010100 +00100001110011100000000000000001 +01111000000000010000000000000000 +00111000001000011001011101011000 +00101000001000010000000000000000 +01111000000000100000000000000000 +00111000010000101000000110010000 +00101000001011010000000000011000 +00101000001000010000000000010100 +00101000010000010000000000000000 +00110111100000100000000000101100 +10100001101000010110100000000000 +00110111100000010000000000100100 +11111000000000000000000110011011 +01111000000000110000000000000000 +00111000011000111000000110010100 +00101000011000010000000000000000 +01010000001011010000000000001110 +01111000000000110000000000000000 +00111000011000111000000110011000 +00101011100000100000000000101100 +00101000011000010000000000000000 +01010100010000010000000000001001 +00101011100000110000000000101000 +00101011100000100000000000100100 +00110100011000011111111111111111 +11110100011000010001100000000000 +00110100010000101111111111111111 +10110100011000100001000000000000 +01011011100000100000000000100100 +01011011100000010000000000101000 +00101011100000010000000000100100 +00110001011011100000000000000000 +00111101101011010000000000000011 +01011001011000010000000000001000 +00101011100000010000000000101000 +01011001011000000000000000000100 +01011001011011010000000000010000 +01011001011000010000000000001100 +01111000000000010000000000000000 +00111000001000011001011100011100 +00101000001000100000000000000000 +00110100010000100000000000000001 +01011000001000100000000000000000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000101100 +11000011101000000000000000000000 +01111000000000100000000000000000 +00111000010000101001011101011100 +00101000010000100000000000000000 +01111000000000110000000000000000 +00111000011000111001011101001000 +01011000011000100000000000000000 +01000100001000000000000000000101 +00101000010000110000000000011000 +01111000000000011000000000000000 +10111000011000010000100000000000 +11100000000000000000000000000110 +01111000000001000000000000000000 +00111000100001001000000101001100 +00101000010000110000000000011000 +00101000100000010000000000000000 +10100000011000010000100000000000 +01011000010000010000000000011000 +11000011101000000000000000000000 +01111000000000010000000000000000 +00111000001000011001011101001000 +00101000001000010000000000000000 +00101000001000010000000000011100 +11000011101000000000000000000000 +01111000000000100000000000000000 +00111000010000101001011101001000 +00101000010000100000000000000000 +00101000010000110000000000011100 +10110100001000110000100000000000 +00101000010000110000000000011100 +11001000011000010001100000000000 +01001000000000111111111111111110 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +00110100000000100000000000000000 +10111000001000000110000000000000 +11111000000000000000000111111010 +10111000001000000101100000000000 +01001100001000000000000000000101 +01111000000000010000000000000000 +00111000001000010111110000101100 +10111001011000000001000000000000 +11100000000000000000000000000100 +00101001100000100000000000000000 +01111000000000010000000000000000 +00111000001000010111110001011000 +11111011111111111111101100011010 +10111001011000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01111000000000010000000000000000 +00111000001000011001010000010000 +01011000001000000000000000000000 +01111000000000100000000000000000 +01111000000000010000000000000000 +00111000001000011001010000100100 +00111000010000101001010000010100 +00110100000000111111111111111111 +01011000001000110000000000000000 +01011000010000110000000000000000 +01011000001000000000000000001000 +01011000010000000000000000001000 +01011000010000000000000000000100 +01011000001000000000000000000100 +01011000010000000000000000001100 +01011000001000000000000000001100 +00110100000000100000000000000000 +00110100000000010000000000000000 +11111000000000000000011010011110 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110100 +01011011100010110000000000001100 +01011011100011000000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +00110100000000010000000000000000 +11111000000000000000011011110000 +10111000001000000101100000000000 +00110100000000100000000000000000 +01011100001000000000000010000001 +11111011111111111111110010111100 +01111000000000110000000000000000 +00111000011000111001010000010100 +00101000011001010000000000001000 +01111000000000100000000000000000 +00111000010000101001010000010000 +10111000001000000010000000000000 +00101000010000100000000000000000 +01000100101010110000000000000100 +00110100000000010000000000000001 +01011100101000010000000000011101 +11100000000000000000000000010000 +00110100000000010000000000000001 +01000100100000010000000000000101 +00101000011000010000000000000100 +00110100001000010000000000000001 +01011000011000010000000000000100 +11100000000000000000000000000010 +01011000011000000000000000000100 +01111000000000110000000000000000 +00111000011000111001010000010100 +00101000011001010000000000000100 +00110100000000010000000000000100 +01001100001001010000000000010000 +00110100000000010000000000000001 +01011000011000010000000000001000 +11100000000000000000000000000010 +01000100100001010000000000000011 +01011000011000000000000000000100 +11100000000000000000000000001010 +00101000011001010000000000000100 +00110100000000010000000000000100 +00110100101001010000000000000001 +01011000011001010000000000000100 +01001100001001010000000000000101 +00110100000000010000000000000010 +01011000011000010000000000001000 +00110100010000011111111000001100 +01011000011000010000000000001100 +01111000000000110000000000000000 +00111000011000111001010000100100 +00101000011001010000000000001000 +01000100101000000000000000000100 +00110100000000010000000000000001 +01011100101000010000000000011100 +11100000000000000000000000001111 +01000100100001010000000000000101 +00101000011000010000000000000100 +00110100001000010000000000000001 +01011000011000010000000000000100 +11100000000000000000000000000010 +01011000011000000000000000000100 +01111000000000110000000000000000 +00111000011000111001010000100100 +00101000011001000000000000000100 +00110100000000010000000000000100 +01001100001001000000000000010000 +00110100000000010000000000000001 +01011000011000010000000000001000 +11100000000000000000000000000010 +01000100100000000000000000000011 +01011000011000000000000000000100 +11100000000000000000000000001010 +00101000011001000000000000000100 +00110100000000010000000000000100 +00110100100001000000000000000001 +01011000011001000000000000000100 +01001100001001000000000000000101 +00110100000000010000000000000010 +01011000011000010000000000001000 +00110100010000011111111000001100 +01011000011000010000000000001100 +00110100000000010010010100011011 +01001100001000100000000000110000 +01111000000000100000000000000000 +00111000010000101001010000010100 +00101000010001000000000000001000 +00110100000000010000000000000010 +00110100000000101111111111111111 +01011100100000010000000000110001 +01111000000000110000000000000000 +00111000011000111001010000100100 +00101000011000010000000000001000 +01011100001001000000000000101101 +00101000011000100000000000001100 +00110100000000010001111100111111 +11100000000000000000000000000010 +00110100010000101110000011000000 +01001000010000011111111111111111 +01111000000000110000000000000000 +00111000011000111001010000100100 +01011000011000100000000000001100 +01111000000000110000000000000000 +00111000011000111001010000010100 +00101000011000110000000000001100 +00110100000000010001111100111111 +11100000000000000000000000000010 +00110100011000111110000011000000 +01001000011000011111111111111111 +01111000000001000000000000000000 +00111000100001001001010000010100 +01011000100000110000000000001100 +01001100011000100000000000000011 +00110100010001001111000001100000 +11100000000000000000000000000100 +00110100000001000000000000000000 +01001100010000110000000000000010 +00110100010001000000111110100000 +10110100100000110001100000000000 +00000000011000100000000000011111 +10110100010000110001100000000000 +00010100011000100000000000000001 +01001100010000000000000000000011 +00110100010000100001111101000000 +11100000000000000000000000000100 +00110100000000010001111100111111 +01001100001000100000000000000010 +00110100010000101110000011000000 +01011001100000100000000000000000 +00110100000000100000000000000001 +11100000000000000000000000001000 +01111000000000010000000000000000 +00110100010000100000000001100100 +00111000001000011001010000010000 +01011000001000100000000000000000 +00110100000000010000000000000000 +11111000000000000000011000010010 +00110100000000100000000000000000 +10111000010000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001100 +00101011100011000000000000001000 +00110111100111000000000000001100 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000010000000101100000000000 +00110100000000100000000000000011 +00110100000011000000000000000000 +00110100000011010000001111101001 +01011100001000100000000000100010 +11100000000000000000000000000101 +01000101100011010000000000100111 +11111011111111111111101111010010 +01000100001000000000000000100101 +00110101100011000000000000000001 +10111001011000000000100000000000 +11111011111111111111111101100000 +01000100001000001111111111111010 +01001100001000000000000000000010 +11100000000000000000000000011000 +00110111100000010000000000010100 +00110100000000100000000000000000 +11111000000000000000000100101011 +01001000000000010000000000000111 +00101001011000100000000000000000 +00101011100000010000000000010100 +00110100010000111111111100111000 +01010100011000010000000000000011 +00110100010000100000000011001000 +01010000010000010000000000011101 +00110100000000100000000000000001 +10111001011000000000100000000000 +11111000000000000000000100100001 +01111000000000110000000000000000 +00101001011000100000000000000000 +00111000011000110111110011001000 +01001100001000000000000000000011 +01111000000000110000000000000000 +00111000011000110111110011000000 +01111000000000010000000000000000 +00111000001000010111110011010000 +11111011111111111111101001000010 +11100000000000000000000000010000 +10111001011000000000100000000000 +11111011111111111111111100010101 +10111000001000000110000000000000 +01001000000000010000000000000101 +00101001011000010000000000000000 +11111011111111111111100011010011 +11100000000000000000000000000010 +00110100000011001111111111111111 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110100000011000000000000000000 +11100011111111111111111111110100 +01111000000000010000000000000000 +00111000001000011001010001110100 +00101000001000010000000000000000 +00101000001000100000000000001000 +00101000001000010000000000001100 +00100000001000010000000011111111 +11000011101000000000000000000000 +01111000000000010000000000000000 +01111000000000110000000000000000 +00111000011000111000000110011100 +00111000001000011001010001110100 +00101000001000010000000000000000 +00101000011000100000000000000000 +01111000000001000000000000000000 +00111000100001001000000110100000 +01011000001000100000000000000000 +01011000001000000000000000010100 +00101000100000110000000000000000 +01011000001000000000000000011000 +01011000001000000000000000010000 +01011000001000110000000000000000 +01011000001000100000000000000000 +01011000001000000000000000011100 +11000011101000000000000000000000 +01111000000001000000000000000000 +00110100000001010000000000000010 +00111000100001001001010001110100 +01011100001001010000000000001110 +00101000100000010000000000000000 +00010100010001000000000000011111 +00100000100001000000000000000111 +10110100100000110001100000000000 +11110100100000110010000000000000 +00000000011000110000000000000011 +10110100100000100001000000000000 +00111100010000100000000000011101 +01011000001000000000000000010100 +01011000001000000000000000011000 +10111000010000110001100000000000 +01011000001000110000000000010000 +11100000000000000000000000000110 +00101000100000010000000000000000 +00100000010000100000000011111111 +01011000001000110000000000010100 +01011000001000100000000000011000 +01011000001000000000000000010000 +01111000000000010000000000000000 +00111000001000011001010001110100 +00101000001000010000000000000000 +00101000001000100000000000000000 +00111000010000100000000000000100 +01011000001000100000000000000000 +00110100000000010000000000000000 +11000011101000000000000000000000 +01111000000001010000000000000000 +00111000101001011001010001110100 +00101000101001010000000000000000 +00100000001000010000000011111111 +00000000011000110000000000000011 +01011000101000100000000000010100 +01011000101000010000000000011000 +01011000101000110000000000010000 +00110100000000010000000000000011 +01011100100000010000000000000111 +00101000101000100000000000000000 +00110100000000011111111111110011 +10100000010000010000100000000000 +00111000001000010000000000001000 +01011000101000010000000000000000 +11000011101000000000000000000000 +00110100000000010000000000000001 +01011100100000010000000000000111 +00101000101000100000000000011100 +00110100000000011111111111100111 +10100000010000010000100000000000 +00111000001000010000000000010000 +01011000101000010000000000011100 +11000011101000000000000000000000 +00110100000000010000000000000010 +01011100100000010000000000000110 +00101000101000100000000000011100 +00110100000000011111111111000111 +10100000010000010000100000000000 +00111000001000010000000000100000 +01011000101000010000000000011100 +11000011101000000000000000000000 +00110111100111001111111111100000 +01011011100010110000000000100000 +01011011100011000000000000011100 +01011011100011010000000000011000 +01011011100011100000000000010100 +01011011100011110000000000010000 +01011011100100000000000000001100 +01011011100100010000000000001000 +01011011100111010000000000000100 +10111000001000000110000000000000 +01111000000000010000000000000000 +00111000001000011000000110010000 +00101000001011110000000000000000 +01111000000010110000000000000000 +10111000010000000110100000000000 +00111001011010111001010001110100 +11111011111111111111111110011010 +10111000001000001000100000000000 +00101001011000010000000000000000 +10111000010000001000000000000000 +00101000001011100000000000000100 +10100001110011110111000000000000 +11111011111111111111111110010100 +01011100001100011111111111111001 +01011100010100001111111111111000 +01000101100000000000000000000011 +01011001100000010000000000000000 +01011001100000100000000000000100 +01000101101000000000000000000011 +00111101110000010000000000000011 +01011001101000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000100000 +00101011100011000000000000011100 +00101011100011010000000000011000 +00101011100011100000000000010100 +00101011100011110000000000010000 +00101011100100000000000000001100 +00101011100100010000000000001000 +00110111100111000000000000100000 +11000011101000000000000000000000 +01111000000000010000000000000000 +00111000001000011001010001110100 +00101000001000010000000000000000 +00101000001000010000000000000000 +00100000001000010000000000000100 +01100100001000010000000000000000 +11000011101000000000000000000000 +01111000000000100000000000000000 +00111000010000101001010001110100 +00101000010000100000000000000000 +00101000010000110000000000011100 +01000100001000000000000000000011 +00111000011000110000000000001100 +11100000000000000000000000000011 +00110100000000011111111111110011 +10100000011000010001100000000000 +01011000010000110000000000011100 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00101000001010110000000000000100 +10111000100000000110100000000000 +10111000011000000111100000000000 +01000001011000010000000000000011 +10111000010000000110000000000000 +00110101101011101111111111111111 +11111011111111111111110010010101 +00101001011000100000000000000100 +01000001011000010000000000000011 +00111100010000100000000000000001 +00100000010000100000000011111110 +11111011111111111111110011100001 +00010101100000100000000000001000 +01000001011000010000000000000011 +00100000010000100000000011111111 +11111011111111111111110011011101 +01000001011000010000000000000011 +00100001100000100000000011111111 +00110100000011000000000000000000 +11111011111111111111110011011001 +01000001011000010000000000000011 +11111011111111111111110010011100 +00101001011000100000000000000100 +01000001011000010000000000000011 +00111100010000100000000000000001 +00111000010000100000000000000001 +00100000010000100000000011111111 +11111011111111111111110011010001 +11100000000000000000000000000101 +00100000101000010000000011111111 +00110100000000110000000000000000 +11111011111111111111110100010100 +00110101100011000000000000000001 +10110101111011000001000000000000 +00101001011001010000000000000000 +01001001110011001111111111111010 +00100000101000010000000011111111 +00110100000000110000000000000001 +11111011111111111111110100001101 +01000001011000010000000000000011 +11111011111111111111110010101001 +10111001101000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111100100 +01011011100010110000000000011100 +01011011100011000000000000011000 +01011011100011010000000000010100 +01011011100011100000000000010000 +01011011100011110000000000001100 +01011011100100000000000000001000 +01011011100111010000000000000100 +00110100000011000000000000000000 +10111000010000000110100000000000 +10111000011000000111100000000000 +10111000100000000111000000000000 +00101000001010110000000000000100 +11100000000000000000000000100010 +01000001011000010000000000000011 +11111011111111111111110001011010 +00101001011000100000000000000100 +01000001011000010000000000000011 +00111100010000100000000000000001 +00100000010000100000000011111110 +11111011111111111111110010100110 +00010101101000100000000000001000 +01000001011000010000000000000011 +00100000010000100000000011111111 +11111011111111111111110010100010 +01000001011000010000000000000011 +00100001101000100000000011111111 +00110101101011010000000000000001 +11111011111111111111110010011110 +10110101111011000001000000000000 +01000001011000010000000000000011 +01000000010000100000000000000000 +11111011111111111111110010011010 +01000001011000010000000000000011 +11111011111111111111110001111101 +01000001011000010000000000000011 +11111011111111111111110001000101 +00101001011000100000000000000100 +01000001011000010000000000000011 +00111100010000100000000000000001 +00100000010000100000000011111110 +11111011111111111111110010010001 +10111000001000001000000000000000 +01000001011000010000000000000011 +11111011111111111111110001110011 +01011110000000001111111111110110 +00110101100011000000000000000001 +01001001110011001111111111011111 +10111001110000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000011100 +00101011100011000000000000011000 +00101011100011010000000000010100 +00101011100011100000000000010000 +00101011100011110000000000001100 +00101011100100000000000000001000 +00110111100111000000000000011100 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000000 +01111000000001000000000000000000 +01111000000001010000000000000000 +00111000011000111000000110100100 +00111000100001001000000110101000 +00111000101001011000000110111000 +00100000010011100000000011111111 +01111000000010110000000000000000 +00101000011000100000000000000000 +00101000100000110000000000000000 +00101000101001000000000000000000 +00111001011010111000101010110000 +10111000001000000110100000000000 +10111001011000000000100000000000 +11111000000000000000010111110000 +00110100000011001111111111111111 +01001000000000010000000000100100 +01000101110000000000000000010010 +00101001011000110000000001110000 +00110100000000100000000000000000 +10111001011000000000100000000000 +11111000000000000000011001110100 +00101001101000100000000000000000 +01111000000000011000000000000000 +00110111100000110000000000011000 +10111000010000010000100000000000 +01011011100000010000000000011000 +00110100000000100000000000000000 +10111001011000000000100000000000 +00110100000001000000000000000100 +11111000000000000000011000111111 +01111100001000010000000000000100 +11001000000000010110000000000000 +00111001100011000000000000000001 +11100000000000000000000000001111 +00110100000000100000000000000000 +10111001011000000000100000000000 +00110111100000110000000000011000 +00110100000001000000000000000100 +11111000000000000000011000001010 +00110100000000100000000000000100 +01011100001000100000000000001000 +01111000000000100000000000000000 +00111000010000101000000101001100 +00101011100011000000000000011000 +00101000010000010000000000000000 +10100001100000010000100000000000 +00000001100011000000000000011111 +01011001101000010000000000000000 +01111000000000010000000000000000 +00111000001000011000101010110000 +11111000000000000000010111111011 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00101000001001010000000000001000 +00101000001001000000000000000000 +00101000001001100000000000000100 +10110100010001010001100000000000 +10001000011001000010000000000000 +01011000001000100000000000011100 +10001000010001100001000000000000 +10110100100000100001000000000000 +00101000001001000000000000001100 +00010100010000100000000000001100 +10110100010001000010000000000000 +00101000001000100000000000010100 +01001100100000100000000000000101 +00101000001001000000000000010000 +01000100100000000000000000001000 +01001100101000110000000000001011 +11100000000000000000000000000110 +00101000001000100000000000011000 +01001100010001000000000000000110 +00101000001001000000000000010000 +01000100100000000000000000000010 +01001100011001010000000000000101 +01011000001000110000000000001000 +11100000000000000000000000000011 +01011000001000110000000000001000 +10111000100000000001000000000000 +01011000001000100000000000100000 +10111000010000000000100000000000 +11000011101000000000000000000000 +00101000001000100000000000001100 +01011000001000000000000000001000 +01011000001000100000000000100000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +01011000001000000000000000010100 +10111000010000000000100000000000 +11111000000000000000011011010011 +00101001011000110000000000001100 +00101001011000100000000000000000 +01001000001000110000000000001011 +00101001011000010000000000000100 +01001100010000010000000000000011 +00110100010000100000000000000001 +01011001011000100000000000000000 +00101001011000100000000000000000 +01011100010000010000000000010001 +00110100000000010000000000000001 +01011001011000010000000000010100 +01011001011000010000000000010000 +11100000000000000000000000001110 +00101001011000010000000000001000 +01001100001000100000000000000011 +00110100010000101111111111111111 +01011001011000100000000000000000 +00101001011000100000000000000000 +01011100010000010000000000000111 +00110100000000010000000000000001 +01011001011000010000000000010100 +01011001011000000000000000000000 +01011001011000000000000000010000 +00110100000000011111111111111111 +11100000000000000000000000000010 +00101001011000010000000000010000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +01011000001000000000000000010000 +01011000001000000000000000000000 +01011000001000000000000000010100 +11000011101000000000000000000000 +01111000000000110000000000000000 +00111000011000111001011100111000 +00101000011001000000000000000000 +01001000100000010000000000010011 +01111000000000110000000000000000 +00111000011000111001010001011000 +11001000001001000000100000000000 +01000100010000000000000000000111 +00101000011000100000000000000000 +00110100000001000000000000000001 +10111100100000010000100000000000 +00101000010000110000000000101000 +10111000001000110000100000000000 +11100000000000000000000000000111 +00101000011000100000000000000000 +00110100000001000000000000000001 +10111100100000010000100000000000 +00101000010000110000000000101000 +10100100001000000000100000000000 +10100000001000110000100000000000 +01011000010000010000000000101000 +11000011101000000000000000000000 +01111000000000110000000000000000 +00111000011000111001010001011000 +01000100010000000000000000000111 +00101000011000100000000000000000 +00110100000001000000000000000001 +10111100100000010000100000000000 +00101000010000110000000000100100 +10111000001000110000100000000000 +11100000000000000000000000000111 +00101000011000100000000000000000 +00110100000001000000000000000001 +10111100100000010000100000000000 +00101000010000110000000000100100 +10100100001000000000100000000000 +10100000001000110000100000000000 +01011000010000010000000000100100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000010110000000000000000 +10111000001000000110000000000000 +01111000000000010000000000000000 +00111001011010111001011100111000 +00111000001000011001011100110000 +00101000001000010000000000000000 +00101001011011010000000000000000 +10110100001011010110100000000000 +00101001100000010000000000000000 +10111001101000000001000000000000 +11111000000000000000000001011100 +00101001100000010000000000000100 +00101001011000110000000000000000 +10111001101000000001000000000000 +11111000000000000000000011011011 +01011001100000000000000000001100 +01011001100000000000000000001000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000000000 +11111000000000000000000010110011 +01111000000000010000000000000000 +00111000001000011001010001011000 +00101000001000010000000000000000 +00110100000000100000000000000001 +00110100000000110000000000001001 +01011000001000100000000000000100 +01011001011000110000000000001100 +01111000000000110000000000000000 +00111000011000111000000111001100 +01011001011000100000000000001000 +00101000011000100000000000000000 +01011000001000100000000001001100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +10111000001000000001000000000000 +00101000001000010000000000000000 +00101000001000110000000001001000 +00110100000000010000000000000000 +01000100011000000000000000010110 +00101000010000110000000000000100 +00101000011000110000000000111000 +01000100011000000000000000010011 +01111000000000110000000000000000 +00111000011000111001010001011000 +00101000011000110000000000000000 +00101000011001000000000000000100 +00100000100001000000000000000100 +01000100100000000000000000001101 +00101000011000110000000000000100 +00100000011000110000000000001000 +01011100011000000000000000001010 +00101000010000100000000000001100 +00110100000000110000000000001010 +00110100000000010000000000000001 +01010100010000110000000000000110 +01111000000000010000000000000000 +00111100010000100000000000000010 +00111000001000011000001011011000 +10110100001000100000100000000000 +00101000001000010000000000000000 +11000011101000000000000000000000 +01111000000001000000000000000000 +00111000100001001001010001011000 +00101000100001010000000000000000 +00110100000001000000000000000000 +01000100011000000000000000000010 +01111000000001001000000000000000 +01111000000001100000000000000000 +00111000110001101000000111010100 +00101000110000110000000000000000 +00111100001000010000000000011000 +10100000010000110001000000000000 +10111000010000010000100000000000 +10111000001001000010000000000000 +01011000101001000000000001001100 +11000011101000000000000000000000 +01111000000001000000000000000000 +00111000100001001001010001011000 +00101000100001010000000000000000 +00110100000001000000000000000000 +01000100011000000000000000000010 +01111000000001001000000000000000 +01111000000001100000000000000000 +00111000110001101000000111010100 +00101000110000110000000000000000 +00111100001000010000000000011000 +10100000010000110001000000000000 +10111000010000010000100000000000 +10111000001001000010000000000000 +01011000101001000000000001001100 +11000011101000000000000000000000 +00110100000000110000000000000101 +01011000001000110000000000101000 +00111000000000111111111111111011 +01011000001000110000000000101100 +00110100000000111111111101101010 +01011000001000110000000000011000 +00110100000000111111111111111110 +01011000001000110000000000010100 +00110100000000110000000000000001 +01011000001000110000000000100100 +00110100000000110000000011001000 +01011000001000110000000001000100 +00110100000000110010011100010000 +01011000001000110000000000111100 +00110100000000110000000001100100 +01011000001000110000000001000000 +01011000001000100000000000001100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000001100 +10111000010000000110100000000000 +00110100000011000000000000000000 +01011100011000010000000001000111 +00110100000000010000000000100010 +00110100000000110000000000000000 +11111011111111111111111111000100 +00101001011000100000000000000100 +00110100000000010000000000100101 +00110100000000110000000000000000 +11111011111111111111111111000000 +00101001011000010000000000001000 +01001100001000000000000000000100 +01011001011011010000000000000100 +01011001011011010000000000001000 +11100000000000000000000000111011 +01001101101000010000000000000101 +00101001011000100000000000000000 +01111000000000010000000001000000 +10110100010000010000100000000000 +01011001011000010000000000000000 +00101001011000110000000000000000 +01111000000001010000000000000000 +00101001011000100000000000000100 +00111000101001011000000111011000 +00101000101000010000000000000000 +10110101101000110010000000000000 +11001000100000100110000000000000 +01001000001011000000000000000110 +01111000000001010000000000000000 +00111000101001011000000111011100 +00101000101000010000000000000000 +01001001100000010000000000000010 +11100000000000000000000000000010 +10111000001000000110000000000000 +01111000000001010000000000000000 +00111000101001011000000111100000 +00101000101000010000000000000000 +01001100001001000000000000000110 +01001100001000100000000000000101 +11001000011000010001100000000000 +11001000010000010000100000000000 +01011001011000110000000000000000 +01011001011000010000000000000100 +00101001011000010000000000000100 +10111001100000000001000000000000 +01011001011011010000000000001000 +00110100001000010100000000000000 +01011001011000010000000000000100 +00110101011000010000000000010100 +11111011111111111111111011011010 +01111000000000110000000000000000 +00111000011000111001010001011000 +00101001011000100000000000010000 +10111000001000000110100000000000 +00101000011000010000000000000000 +00110100000000110000000000000000 +01011000001011010000000001000000 +00110100010000010000000000000001 +01011001011000010000000000010000 +00110100000000010000000000100110 +11111011111111111111111110001101 +00110100000000010000000000100000 +10111001101000000001000000000000 +00110100000000110000000000000000 +11111011111111111111111110001001 +10111001100000000001000000000000 +00110100000000010000000000100001 +00110100000000110000000000000001 +11111011111111111111111110000101 +10111001100000000001000000000000 +00110101011000010000000000111000 +11111011111111111111111011100101 +01111100001011000000000000000000 +10111001100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00101000001000010000000000101000 +01011001011000000000000000000100 +01011001011000000000000000000000 +01011001011000010000000000100000 +00110100000000011111111111111111 +01011001011000010000000000001000 +01011001011000000000000000010000 +00110101011000010000000000010100 +11111011111111111111111011001100 +00110101011000010000000000111000 +11111011111111111111111011110011 +00101001011000010000000000001100 +00110100000000100000000000000001 +11111011111111111111111011110100 +00110100000000010000000000100100 +00110100000000100000000000000001 +00110100000000110000000000000001 +11111011111111111111111101100100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00110100000000010000000000000101 +01011001011000010000000000011000 +00111000000000011111111111111010 +01011001011000010000000000011100 +00110100000000010000000000000001 +01011001011000010000000000010100 +00110100000000010111010100110000 +01011001011000010000000000010000 +00110100000000011111101110110100 +01011001011000010000000000001000 +00110100000000011111111111100010 +01011001011000010000000000000100 +00110100000000010000010010110000 +01011001011000010000000000110100 +00110100000000010000001111101000 +01011001011000010000000000101100 +00110100000000010000000001100100 +01011001011000010000000000110000 +01111000000000010000000000000000 +00111000001000011001011100111000 +00101000001000010000000000000000 +01011001011000110000000001100100 +01011001011000100000000001100000 +11001000011000010001100000000000 +01011001011000110000000001101100 +00110101011000010000000000000100 +01011001011000000000000001110000 +11111011111111111111111010011111 +00110101011000010000000000101000 +11111011111111111111111011000110 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +01011000001000000000000001000100 +01011000001000000000000001000000 +00110100000000011111111111111111 +01011001011000010000000001001000 +01011001011000010000000001001100 +01011001011000010000000001010000 +01011001011000010000000001010100 +00110100000000010000000000000001 +01011001011000010000000001110000 +01011001011000000000000001011000 +00110101011000010000000000000100 +01011001011000000000000001011100 +01011001011000000000000001101000 +11111011111111111111111010000111 +00110101011000010000000000101000 +11111011111111111111111010101110 +00101001011000010000000001100000 +00110100000000100000000000000001 +11111011111111111111111010101111 +00101001011000010000000001100100 +00110100000000100000000000000001 +11111011111111111111111010101100 +00110100000000010000000000000100 +00110100000000100000000000000001 +00110100000000110000000000000001 +11111011111111111111111100101011 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001001000000000001110000 +10111000001000000101100000000000 +00110100000000010000000000000001 +01000100100000000000000001111000 +00101001011000010000000001100000 +01011100011000010000000000000010 +01011001011000100000000001001000 +00101001011000010000000001100100 +01011100011000010000000000000010 +01011001011000100000000001001100 +00101001011000010000000001001000 +01001000000000010000000000001001 +00101001011000100000000001010000 +01001000000000100000000000000110 +01001100001000100000000000000101 +00101001011000110000000001000000 +01111000000000100000000001000000 +10110100011000100001000000000000 +01011001011000100000000001000000 +01011001011000010000000001010000 +00101001011000010000000001001100 +01001000000000010000000000001001 +00101001011000100000000001010100 +01001000000000100000000000000110 +01001100001000100000000000000101 +00101001011000110000000001000100 +01111000000000100000000001000000 +10110100011000100001000000000000 +01011001011000100000000001000100 +01011001011000010000000001010100 +00101001011000110000000001001000 +00110100000000010000000000000000 +01001000000000110000000001011011 +00101001011000100000000001001100 +01001000000000100000000001011001 +00101001011011000000000001000000 +00101001011000010000000000111000 +10110100011011000001100000000000 +00101001011011000000000001000100 +11001000011000100001000000000000 +11001000010011000110000000000000 +01000100001000000000000000000110 +00100001100011000011111111111111 +00100001100000010010000000000000 +01000100001000000000000000000011 +00110100000000011100000000000000 +10111001100000010110000000000000 +10111001100000000001000000000000 +00110101011000010000000000000100 +11111011111111111111111000100011 +00101001011000100000000001101100 +01111000000000110000000000000000 +00111000011000111001010001011000 +00100000010000100000000000001111 +10111000001000000110100000000000 +00111100010000100000000000010000 +00101000011000010000000000000000 +00100001101000111111111111111111 +10111000011000100001000000000000 +01011000001000100000000001000100 +00101001011000110000000001000000 +00101001011000100000000001001000 +00110100000000010000000000000101 +10110100011000100001000000000000 +00110100000000110000000000000000 +11111011111111111111111011100000 +00101001011000110000000001000100 +00101001011000100000000001001100 +00110100000000010000000000000010 +10110100011000100001000000000000 +00110100000000110000000000000000 +11111011111111111111111011011010 +00110100000000010000000000000001 +10111001100000000001000000000000 +00110100000000110000000000000000 +11111011111111111111111011010110 +00101001011000100000000001101000 +00110100000000110000000000000000 +00110100010000010000000000000001 +01011001011000010000000001101000 +00110100000000010000000000000110 +11111011111111111111111011010000 +00110100000000010000000000000000 +10111001101000000001000000000000 +00110100000000110000000000000001 +11111011111111111111111011001100 +01111000000000100000000000000000 +00110100000000011111111111111111 +00111000010000101000000111100100 +01011001011000010000000001001100 +01011001011000010000000001001000 +00101001011000110000000001000000 +00101000010000010000000000000000 +01001100001000110000000000001010 +00101001011000100000000001000100 +01001100001000100000000000001000 +01111000000001000000000000000000 +00111000100001001000000111101000 +00101000100000010000000000000000 +10110100011000010001100000000000 +10110100010000010000100000000000 +01011001011000110000000001000000 +01011001011000010000000001000100 +00101001011000010000000000111000 +01000100001000000000000000001111 +00101001011000010000000001011100 +00101001011000100000000001011000 +01001100001000100000000000000110 +00110100001000010000000000000001 +01011001011000010000000001011100 +00101001011000010000000001000000 +00110100001000011111111111111111 +11100000000000000000000000000110 +01001100010000010000000000000110 +00110100001000011111111111111111 +01011001011000010000000001011100 +00101001011000010000000001000000 +00110100001000010000000000000001 +01011001011000010000000001000000 +00110101011000010000000000101000 +10111001100000000001000000000000 +11111011111111111111110111111100 +01111100001000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +00010100010000110000000000011111 +00110111100000010000000000001100 +01001000000000100000000000001011 +00000000010001000000000000010010 +00111100011000110000000000001110 +00111100010000100000000000001110 +10111000011001000001100000000000 +01011011100000100000000000010000 +00110100000000100001111101000000 +01011011100000110000000000001100 +11111011111111111111001001000101 +00101011100000100000000000010000 +11100000000000000000000000001001 +00001000010000101100000000000000 +01011011100000100000000000010000 +00010100010000100000000000011111 +01011011100000100000000000001100 +00110100000000100001111101000000 +11111011111111111111001000111101 +00101011100000100000000000010000 +11001000000000100001000000000000 +00000000010000010000000000011111 +10110100001000100001000000000000 +00010100010000100000000000000001 +00110100000000010000000000000000 +01011001011000100000000001011000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101000001000100000000001011000 +00101000001000010000000001011100 +11111100010000010000100000000000 +11000011101000000000000000000000 +01011000001000100000000000000100 +01011000001000000000000000011100 +01011000001000110000000000001000 +01011000001000000000000000001100 +01011000001000000000000000010000 +01011000001000000000000000000000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +00110100000000100000000000000001 +01011000001000100000000000000000 +01011000001000000000000000010100 +01011000001000000000000000011100 +01011000001000000000000000001100 +01011000001000000000000000010000 +00101000001000010000000000000100 +11111011111111111111110111100111 +01111000000000010000000000000000 +00111000001000011001011100111000 +00101000001000010000000000000000 +00110100000000100000000000000001 +11111011111111111111110111100010 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111110110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000110000000000000 +10111000011000000110100000000000 +00110111100000010000000000010100 +00110100000000100000000000000000 +00110100000000110000000001000000 +11111000000000000000010011000000 +00110100000000011100000000000000 +01111000000001000000000000000000 +01011011100000010000000000100000 +00111000100001001001011100111000 +00110100000000010100000000000000 +01011011100000010000000001000100 +00101000100000010000000000000000 +01011101101000010000000000000101 +01111000000000110000000000000000 +00111000011000111000110110100100 +01011000011011000000000000000000 +11100000000000000000000000100111 +00111101101011010000000000000101 +10110101011011010101100000000000 +00101001011000010000000000000000 +01000100001000000000000000100011 +01111000000000110000000000000000 +00111000011000111000110110100100 +00101000011000010000000000000000 +00101001011000100000000000010000 +11001001100000010000100000000000 +00100000001000010011111111111111 +00010100001000110000000000001100 +01011100010000000000000000000111 +00111100011000110000000000000010 +01011001011000010000000000001100 +00110100000000010000000000000001 +01011001011000110000000000010100 +01011001011000010000000000010000 +11100000000000000000000000010101 +00101001011001000000000000001100 +00110100010000100000000000000001 +10110100001001000000100000000000 +00101001011001000000000000010100 +10110100011001000001100000000000 +00111100011000110000000000000010 +00110111100001000000000001010000 +10110100100000110001100000000000 +00101000011000111111111111000100 +01011001011000100000000000010000 +10110100001000110000100000000000 +00101001011000110000000000001000 +01011001011000010000000000001100 +01011100010000110000000000000111 +11111000000000000000001111101101 +01011001011000010000000000011000 +00110100000000010000000000000001 +01011001011000010000000000011100 +01011001011000000000000000001100 +01011001011000000000000000010000 +00110100000000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000001010000 +11000011101000000000000000000000 +01111000000000110000000000000000 +00111000011000111001010001011000 +01011100010000000000000000001010 +00110100000001000000000000000001 +00101000011000100000000000000000 +10111100100000010000100000000000 +00100000001000010000000011111111 +00101000010000110000000000100000 +00111100001000010000000000010000 +10100100001000000000100000000000 +10100000001000110000100000000000 +11100000000000000000000000001000 +00101000011000100000000000000000 +00110100000001000000000000000001 +10111100100000010000100000000000 +00101000010000110000000000100000 +00100000001000010000000011111111 +00111100001000010000000000010000 +10111000001000110000100000000000 +01011000010000010000000000100000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01111000000000110000000000000000 +10111000010000000101100000000000 +00111000011000111001010100000000 +01000100001000000000000000000111 +00110100001000011111111111111111 +00001000001000110000000001111100 +01111000000000010000000000000000 +00111000001000011001010001111000 +10110100011000010000100000000000 +00110100001000110000000100000100 +10111000011000000000100000000000 +10111001011000000001000000000000 +11111011111111111111111101011000 +01111000000000010000000000000000 +00111000001000011001010001111000 +01011000001010110000000000010100 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +01111000000011000000000000000000 +01111000000011010000000000000000 +10111000001000000111000000000000 +00110100000010110000000000000000 +00111001100011001001011100111000 +00111001101011011001010000111100 +11100000000000000000000000001010 +00101001101000010000000000000000 +10010100001010110000100000000000 +00100000001000010000000000000001 +01000100001000000000000000000101 +00111101011000100000000000000101 +10110101110000100001000000000000 +00110100010000010000000111110100 +11111011111111111111111101101001 +00110101011010110000000000000001 +00101001100000010000000000000000 +01001000001010111111111111110110 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110111100111001111111110111100 +01011011100010110000000001000100 +01011011100011000000000001000000 +01011011100011010000000000111100 +01011011100011100000000000111000 +01011011100011110000000000110100 +01011011100100000000000000110000 +01011011100100010000000000101100 +01011011100100100000000000101000 +01011011100100110000000000100100 +01011011100101000000000000100000 +01011011100101010000000000011100 +01011011100101100000000000011000 +01011011100101110000000000010100 +01011011100110000000000000010000 +01011011100110010000000000001100 +01011011100110110000000000001000 +01011011100111010000000000000100 +01111000000110110000000000000000 +01111000000010110000000000000000 +01111000000110010000000000000000 +01111000000011010000000000000000 +01111000000100010000000000000000 +01111000000100000000000000000000 +01111000000011000000000000000000 +01111000000101110000000000000000 +01111000000011110000000000000000 +00111011011110111001010001011000 +00111001011010111001010001111000 +00110100000101000000000000001001 +00111011001110011000001100000100 +00110100000110000000000000000001 +00110100000100110000000000000011 +00111001101011011001010011100000 +00110100000100100000000000001000 +00111010001100011001010100000000 +00111010000100001001010010010000 +00111001100011001001011100111000 +00111010111101111001011001101100 +00111001111011111001011100110000 +11100000000000000000000001111110 +00101000011101010000000001111100 +01111000000000010000000011111111 +00111000001000011111111111111111 +00000010101011100000000000011000 +10100010101000011010100000000000 +00101001011000010000000000000100 +00100001110011100000000001111111 +00110100001000011111111111111111 +01010100001101000000000001010101 +00111100001000010000000000000010 +10110111001000010000100000000000 +00101000001000010000000000000000 +11000000001000000000000000000000 +00101001011000010000000001000100 +01011000011000010000000001000000 +00101001011000010000000010100100 +00101001011000100000000010100000 +10110100010000010000100000000000 +00000000001000100000000000011111 +10110100010000010000100000000000 +00010100001000010000000000000001 +00110100000000100000000000000001 +01011000011000010000000001000100 +00101001100000010000000000000000 +11111011111111111111110100001101 +11111011111111111111101001110010 +00110100001000010000000000110010 +01011001011000010000000000001000 +00110100000000010000000000001010 +11100000000000000000000000010001 +00101001011101100000000000001000 +11111011111111111111101001101100 +11001010110000010000100000000000 +01001100001000000000000000111100 +00101001011000010000000000000000 +01011100001110000000000000000011 +01011001011110000000000000000100 +11100000000000000000000000111000 +01011001011100110000000000000100 +11100000000000000000000000110110 +00101001100000010000000000000000 +00110100000000100000000000000000 +11111011111111111111110011111011 +10111001101000000000100000000000 +11111011111111111111110100111100 +00110100000000010000000000000010 +01011001011000010000000000000100 +11100000000000000000000000101110 +10111001101000000000100000000000 +11111011111111111111110101001101 +11100000000000000000000000010010 +10111010000000000000100000000000 +11111011111111111111110111101100 +00110100000000010000000000000100 +11100011111111111111111111111000 +00101001011000010000000001100000 +01000100001000000000000000100101 +00101001011000010000000001100100 +01000100001000000000000000100011 +00101001011000010000000000000000 +01011100001100110000000000001001 +00110100000000010000000000000101 +11100011111111111111111111110000 +10111010001000000000100000000000 +11111011111111111111111000100000 +00110100000000010000000000000110 +11100011111111111111111111101100 +00101001011000010000000011000000 +01000100001000000000000000011001 +10111001011000000000100000000000 +11111011111111111111111101110010 +01011001011100100000000000000100 +00101001011000010000000011101000 +00110100000000100000000000000001 +11100000000000000000000000010010 +00101001011000010000000000000000 +01011100001110000000000000000100 +10111001101000000000100000000000 +11111011111111111111110100110000 +01000100001000000000000000000111 +00101001011000010000000001100000 +01000100001000000000000000000101 +00101001011000010000000000000000 +01011100001100110000000000001010 +00101001011000010000000011000000 +01011100001000000000000000001000 +00101001011000010000000000001100 +00110100000000100000000000000000 +00110100001000010000000000000001 +01011001011000010000000000001100 +01011001011101000000000000000100 +00101001011000010000000011101000 +11111011111111111111111100110000 +10111010000000000000100000000000 +10111010101000000001000000000000 +10111001110000000001100000000000 +11111011111111111111110101101001 +00101001011000010000000001100000 +01000100001000000000000000011011 +10111010001000000000100000000000 +10111010101000000001000000000000 +10111001110000000001100000000000 +11111011111111111111111000011100 +00101001011000010000000000000100 +01011100001100100000000000010101 +00101001011000010000000000000000 +00110100000101100000000000000000 +01011100001100110000000000001100 +11100000000000000000000000001000 +00001010110000010000000001111100 +10111010101000000001000000000000 +10111001110000000001100000000000 +10110101011000010000100000000000 +00110100001000010000000100000100 +11111011111111111111111000010000 +00110110110101100000000000000001 +00101001111000010000000000000000 +00110100001000011111111111111111 +01001000001101101111111111110111 +00101001100000010000000000000000 +01001001110000010000000000000101 +10111010111000000000100000000000 +10111010101000000001000000000000 +10111001110000000001100000000000 +11111011111111111111111011001011 +00101011011000110000000000000000 +01111000000000100000000000000010 +00101000011000010000000010000000 +10100000001000100000100000000000 +01000100001000001111111101111111 +00101001011000010000000000010000 +00110100001000010000000000000001 +01011001011000010000000000010000 +00110100000000010000000000000001 +11010000010000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000001000100 +00101011100011000000000001000000 +00101011100011010000000000111100 +00101011100011100000000000111000 +00101011100011110000000000110100 +00101011100100000000000000110000 +00101011100100010000000000101100 +00101011100100100000000000101000 +00101011100100110000000000100100 +00101011100101000000000000100000 +00101011100101010000000000011100 +00101011100101100000000000011000 +00101011100101110000000000010100 +00101011100110000000000000010000 +00101011100110010000000000001100 +00101011100110110000000000001000 +00110111100111000000000001000100 +11000011101000000000000000000000 +01111000000000010000000000000000 +00111000001000011001010001110100 +00101000001000100000000000000000 +01111000000000110000000000000000 +01111000000000010000000000000000 +00111000001000011001010001101100 +00111000011000111000000111101100 +01011000001000100000000000000000 +00101000011000010000000000000000 +01011000010000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111010100 +01011011100010110000000000101000 +01011011100011000000000000100100 +01011011100011010000000000100000 +01011011100011100000000000011100 +01011011100011110000000000011000 +01011011100100000000000000010100 +01011011100100010000000000010000 +01011011100100100000000000001100 +01011011100100110000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000001000000000000000 +10111000011000001001000000000000 +11111011111111111110110100100101 +01111000000000010000000000000000 +00111000001000011001011101100000 +00101000001001000000000000000000 +01111000000000010000000000000000 +00111000001000011001010001011000 +01011000001001000000000000000000 +01111000000000010000000000000000 +00101000100001010000000000000000 +00111000001000011001010001110100 +00101000001000010000000000000000 +01111000000000100000000000000000 +00111000010000101001010001101100 +00000000101001100000000000010000 +01011000010000010000000000000000 +01111000000000100000000000000000 +00111000010000101001011100111000 +00100000110001100000000000111111 +00000000101001010000000000011000 +01011000010001100000000000000000 +01111000000000100000000000000000 +00111000010000101001011100110000 +00100000101001010000000000000111 +01011000010001010000000000000000 +01111000000001010000000000000000 +00111000101001011001010001111000 +01011000101010110000000000000000 +01011000101000000000000000001100 +01011000100000000000000001000000 +01011000100000000000000001000100 +01011000100000000000000000000000 +01011000100000000000000000101000 +01011000100000000000000000100100 +01011000100000000000000000000100 +01111000000000110000000000000000 +01011000100000000000000000100000 +00110100000000100000001111101000 +00111000011000111000000110011100 +01011000100000100000000001001000 +00101000011000100000000000000000 +01011000001000000000000000011100 +01011000001000100000000000000000 +00110100000000010000000000000100 +01011101011000010000000000000100 +00110100000000010000000000000111 +01011000101000010000000000000100 +11100000000000000000000000000110 +00110100000000010000000000001001 +01011000101000010000000000000100 +00110100000000010000000000000011 +01011101011000010000000000000010 +10111010000000000011000000000000 +01111000000000010000000000000000 +10111000110000000001000000000000 +00111000001000011001010010010000 +01111000000011010000000000000000 +11111011111111111111110011001100 +00111001101011011001011100111000 +00101001101000110000000000000000 +01111000000000010000000000000000 +00111000001000011001010100000000 +10111010000000000001000000000000 +01111000000011110000000000000000 +01111000000011100000000000000000 +11111011111111111111110101000111 +00110100000011000000000000000000 +00111001111011111001011100110000 +00111001110011101001010001111000 +00110100000100110000000000000001 +11100000000000000000000000001100 +00001001100100010000000001111100 +00101001101001000000000000000000 +10111010000000000001000000000000 +10110101110100010000100000000000 +00110100100001000000000000000001 +10110100100011000001100000000000 +00110100001000010000000100000100 +10110101110100011000100000000000 +11111011111111111111110100111001 +00110101100011000000000000000001 +01011010001100110000000011111100 +00101001111000010000000000000000 +00110100001000011111111111111111 +01001000001011001111111111110011 +00110100000000010000000000000010 +01011101011000010000000000000110 +01111000000000010000000000000000 +00111000001000011001010001101100 +00101000001000010000000000000000 +00110100000000100000000000001100 +01011000001000100000000000011100 +01111000000011100000000000000000 +01111000000011010000000000000000 +00110100000011000000000000000000 +00111001110011101001011100111000 +00111001101011011001010001111000 +11100000000000000000000000001000 +00111101100000010000000000000101 +10111001100000000001000000000000 +10110101101000010000100000000000 +00110100001000010000000111110100 +00110100000000110000001000000000 +11111011111111111111111000010101 +00110101100011000000000000000001 +00101001110000100000000000000000 +01001000010011001111111111111000 +00110100000000010000000000000001 +01011101011000010000000000010111 +01111000000000010000000000000000 +00111000001000011001010001011000 +00101000001000010000000000000000 +00101000001000010000000000000100 +00100000001000010000000000000010 +01000100001000000000000000100001 +01111000000000010000000000000000 +01111000000001000000000000000000 +00111000001000011001010001111000 +00111000100001001001010010010000 +01011000001001000000000001101000 +01111000000001000000000000000000 +00111000100001001001010100000000 +01011000001001000000000001101100 +01111000000000010000000000000000 +00111000001000011001011100110000 +00101000001001000000000000000000 +01111000000000010000000000000000 +00111000001000011001010011100000 +10110100010001000001000000000000 +10111010010000000001100000000000 +11111011111111111111110000011000 +01111000000000010000000000000000 +00111000001000011001010001011000 +00101000001000010000000000000000 +01111000000000100000000000000010 +11100000000000000000000000000011 +00101000001000110000000001111100 +01011011100000110000000000101100 +00101000001000110000000010000000 +10100000011000100001100000000000 +01000100011000001111111111111100 +00110100000000100000000000000001 +01011000001000100000000001100100 +00101000001000100000000000101000 +00111000010000100000000000000001 +01011000001000100000000000101000 +11111011111111111110110010011101 +00101011100111010000000000000100 +00101011100010110000000000101000 +00101011100011000000000000100100 +00101011100011010000000000100000 +00101011100011100000000000011100 +00101011100011110000000000011000 +00101011100100000000000000010100 +00101011100100010000000000010000 +00101011100100100000000000001100 +00101011100100110000000000001000 +00110111100111000000000000101100 +11000011101000000000000000000000 +01111000000000100000000000000000 +10111000001000000001100000000000 +00111000010000101001010001111000 +01011100001000000000000000000100 +00101000010000010000000000000100 +01100100001000010000000000001000 +11000011101000000000000000000000 +00101000010001010000000000000100 +00110100000001000000000000001000 +00110100000000010000000000000000 +01011100101001000000000000000110 +00110100011000111111111111111111 +00001000011000110000000001111100 +10110100010000110001000000000000 +00101000010000010000000100111100 +01111100001000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111101000 +01011011100010110000000000011000 +01011011100011000000000000010100 +01011011100011010000000000010000 +01011011100011100000000000001100 +01011011100011110000000000001000 +01011011100111010000000000000100 +00110100000000111111111111111111 +10111000010000000111100000000000 +01011100001000110000000000010110 +00110100000000010000000000000000 +01111000000011000000000000000000 +01111000000011010000000000000000 +11111011111111111111111000110010 +00110100000010110000000000000000 +00111001100011001001011100110000 +00111001101011011001010001111000 +00110100000011100000000000000100 +11100000000000000000000000001001 +00001001011000010000000001111100 +10110101101000010000100000000000 +00101000001000010000000011111100 +01011100001011100000000000000100 +00110101011000010000000000000001 +10111001111000000001000000000000 +11111011111111111111111000100110 +00110101011010110000000000000001 +00101001100000010000000000000000 +00110100001000011111111111111111 +01001000001010111111111111110110 +11100000000000000000000000000010 +11111011111111111111111000100000 +00101011100111010000000000000100 +00101011100010110000000000011000 +00101011100011000000000000010100 +00101011100011010000000000010000 +00101011100011100000000000001100 +00101011100011110000000000001000 +00110111100111000000000000011000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +10111000010000000110100000000000 +01111000000000010000000000000000 +00111101011000100000000000000101 +00111000001000011001010001111000 +10110100001000100000100000000000 +00101000001001000000001000001100 +10111000011000000110000000000000 +01001100100000000000000000000011 +00110100100001000100000000000000 +11100000000000000000000000000100 +00110100000000010011111111111111 +01001100001001000000000000000010 +00110100100001001100000000000000 +00111100100001000000000000000001 +00110100000000010000000000000000 +00100000100000100011111111111110 +00110100000000110000000000000000 +00110100000001000001111101000000 +11111000000000000000000110110010 +00111100001000010000000000010010 +00000000010001000000000000001110 +10111000001001000010000000000000 +01011001101001000000000000000000 +01000101100000000000000000001100 +01111000000000010000000000000000 +00111000001000011001010000111100 +00101000001000100000000000000000 +00111101011000110000000000000101 +01111000000000010000000000000000 +00111000001000011001010001111000 +10110100001000110000100000000000 +00101000001000010000000111111000 +10010100010000010000100000000000 +00100000001000010000000000000001 +01011001100000010000000000000000 +00111101011010110000000000000101 +01111000000000100000000000000000 +00111000010000101001010001111000 +10110100010010110001000000000000 +00101000010000010000001000010000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01011100001000000000000000000100 +01111000000000010000000000000000 +00111000001000011001010100000000 +11100000000000000000000000000111 +00110100001000011111111111111111 +00001000001000010000000001111100 +01111000000000100000000000000000 +00111000010000101001010001111000 +10110100001000100000100000000000 +00110100001000010000000100000100 +11111011111111111111110101100000 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +01111000000011010000000000000000 +01111000000010110000000000000000 +10111000001000000110000000000000 +00111001101011011001010001111000 +00111001011010111001010000111100 +01000100010000000000000000001101 +00110100000000100000000000000001 +11111011111111111111101101001011 +00111101100000010000000000000101 +10110101101000010110100000000000 +00110101101000010000000111110100 +11111011111111111111110101010111 +00101001011000010000000000000000 +00110100000000100000000000000001 +10111100010011000110000000000000 +10111001100000010110000000000000 +01011001011011000000000000000000 +11100000000000000000000000001010 +00110100000000110000000000000001 +00101001011001000000000000000000 +10111100011000010001100000000000 +10100100011000000001100000000000 +10100000011001000001100000000000 +01011001011000110000000000000000 +00101001101000110000000011101000 +01000100001000110000000000000010 +11111011111111111111101100111000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +00101000001001000000000000010100 +10111000001000000001100000000000 +10111000010000000011000000000000 +01000100100000000000000000010101 +00101000001001010000000000010000 +00100000101001010000000000000010 +01011100101000000000000000000111 +10110100100001100010000000000000 +10111000100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110100011010110000000000110000 +10110100100001100001000000000000 +10111001011000000000100000000000 +00110100000000110000000001000000 +11111000000000000000000111010001 +10111001011000000010000000000000 +10111000100000000000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00101000001001010000000000010000 +00100000101001110000000000000100 +01011100111001001111111111101011 +00101000001001010000000000011100 +00110100000001000000000000000000 +01000100101001111111111111101011 +00110100001010110000000000110000 +00110100000001000000000001000000 +10111001011000000001100000000000 +11011000101000000000000000000000 +10111001011000000010000000000000 +11100011111111111111111111110000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +10111000001000000101100000000000 +01000100010000000000000001000111 +00101000001000100000000000001100 +01011000001000000000000010000000 +01011000001000000000000010110000 +01011000001000100000000010010000 +00110100000011000000000000000000 +10111001011000000000100000000000 +11111011111111111111111111001100 +01011001011000010000000000101000 +01000000001000100000000000111111 +01011100010000000000000000000110 +01111000000001000000000000000000 +00111000100001001000000110110000 +00101000001000110000000000000000 +00101000100000100000000000000000 +01000100011000100000000001011101 +00110100000000010000000000000000 +01000101100000000000000000110000 +00110101100000111111111111111111 +00110100011011000000000000101000 +10110101100011000000100000000000 +10110100001000010000100000000000 +10110101011000010000100000000000 +00101000001000100000000000000000 +01011100010000000000000000001111 +00110100000000010000000000000000 +01000100011000100000000000100111 +00110100011000100000000000100111 +10110100010000100001000000000000 +10110100010000100001000000000000 +10110101011000100001000000000000 +11100000000000000000000000000010 +01000100011000010000000001000100 +00101000010000010000000000000000 +00110100011000111111111111111111 +00110100010000101111111111111100 +01000100001000001111111111111100 +01011001011000110000000010110000 +00110100011011000000000000101000 +00110100011011010000000000100100 +10110101101011010110100000000000 +10110101101011010110100000000000 +10110101011011010110100000000000 +00101001101000100000000000000000 +10111001011000000000100000000000 +10110101100011000110000000000000 +11111011111111111111111110100101 +10110101100011000110000000000000 +10110101011011000001000000000000 +00101001101001000000000000000000 +00101000010000110000000000000000 +00101001011011000000000010110000 +00110100100001000000000001000000 +00110100011000111111111111111111 +01011001011000010000000000101000 +01011001101001000000000000000000 +01011000010000110000000000000000 +00110101100000110000000000100000 +10110100011000110001100000000000 +10110100011000110001100000000000 +10110101011000110001100000000000 +00101000001001000000000000001100 +00101000011000100000000000000000 +10110100010001000001000000000000 +01011001011000100000000001110100 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101000001000010000000000101000 +00101001011000110000000010110000 +00110100000001010000000000000010 +01000000001001000000000000111111 +11101100101000110010100000000000 +01100100100001000000000000000010 +10100000100001010010000000000000 +01000100100000101111111111000101 +00110100011000100000000000100000 +10110100010000100001000000000000 +10110100010000100001000000000000 +10110101011000100001000000000000 +00101000010001010000000000000000 +00110100011001000000000000100101 +00101000001000100000000000000100 +10110100100001000010000000000000 +10110100100001000010000000000000 +10110100101000100001000000000000 +10110101011001000010000000000000 +01011000100000100000000000000000 +00101000001001000000000000001100 +00110100011000010000000000100001 +10110100001000010000100000000000 +10110100001000010000100000000000 +10110101011000010000100000000000 +10110100100001010010100000000000 +00110100011011000000000000000001 +01011000001001010000000000000000 +11100011111111111111111110100011 +00110100000000010000000000000000 +01011001011000000000000010110000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00110101100000100000000000100100 +10110100010000100001000000000000 +10110100010000100001000000000000 +10110101011000100001100000000000 +00101100001001010000000000000100 +00101000011001000000000000000000 +00110101100000100000000000101000 +10110100010000100001000000000000 +10110100010000100001000000000000 +10110101011000100001000000000000 +00110100101001011111111111111111 +00110100100001000000000001000000 +01011000010001010000000000000000 +01011000011001000000000000000000 +01011001011011000000000010110000 +11100011111111111111111110111110 +00110111100111001111111111101100 +01011011100010110000000000010100 +01011011100011000000000000010000 +01011011100011010000000000001100 +01011011100011100000000000001000 +01011011100111010000000000000100 +10111000010000000110000000000000 +00110100000000100000000000000001 +10111000001000000101100000000000 +10111000011000000111000000000000 +10111000100000000110100000000000 +11111011111111111111111101110011 +10111001011000000000100000000000 +00110100000000100000000000000000 +11111011111111111111111101110000 +10111000001000000010100000000000 +01000100001000000000000000011110 +00101000101000010000000000011000 +01011100001011001111111111111010 +00101000101000010000000000011100 +01011100001011101111111111111000 +00101000101000010000000000100000 +01011100001011011111111111110110 +00101001011000010000000010110000 +01011001011001010000000000101000 +00101000101000100000000000001100 +00110100001000010000000000100000 +10110100001000010000100000000000 +10110100001000010000100000000000 +10110101011000010000100000000000 +00101000001000110000000000000000 +00110100000000010000000000000000 +10110100010000110001100000000000 +01011001011000110000000001110100 +00101000101000110000000000010100 +01011001011000000000000001111000 +00110100011000110000000000000001 +11001000011000100001000000000000 +01011001011000100000000001110000 +00101011100111010000000000000100 +00101011100010110000000000010100 +00101011100011000000000000010000 +00101011100011010000000000001100 +00101011100011100000000000001000 +00110111100111000000000000010100 +11000011101000000000000000000000 +00110100000000011111111111111110 +11100011111111111111111111111000 +01011000001000000000000000101000 +00110100000000010000000000000000 +11000011101000000000000000000000 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001001010000000000101000 +10111000001000000101100000000000 +10111000010000000110000000000000 +10111000100000000110100000000000 +00110100000000011111111111111110 +01000100101000000000000000010010 +01001100010000000000000000000010 +00101001011011000000000001111000 +00101001011000010000000001110000 +10110101100011010001000000000000 +01010100010000010000000000010011 +00101001011001000000000000010100 +01000100100000000000000000010100 +00101001011000100000000001110100 +10111000011000000000100000000000 +10111001101000000001100000000000 +10110101100000100001000000000000 +10110100100000100001000000000000 +11111000000000000000000011110010 +10111001101000000000100000000000 +01001100000000010000000000000011 +10110100001011000110000000000000 +01011001011011000000000001111000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101001011001000000000000010100 +11001000001011000110100000000000 +01011100100000001111111111101110 +00101001011000100000000001110100 +00101001011001010000000000011100 +10111001011000000000100000000000 +10110101100000100001000000000000 +10111001101000000010000000000000 +11011000101000000000000000000000 +11100011111111111111111111101110 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001001010000000000101000 +10111000001000000101100000000000 +10111000010000000110000000000000 +10111000100000000110100000000000 +00110100000000011111111111111110 +01000100101000000000000000010010 +01001100010000000000000000000010 +00101001011011000000000001111000 +00101001011000010000000001110000 +10110101100011010001000000000000 +01010100010000010000000000010011 +00101001011001000000000000010100 +01000100100000000000000000010100 +00101001011000010000000001110100 +10111000011000000001000000000000 +10111001101000000001100000000000 +10110101100000010000100000000000 +10110100100000010000100000000000 +11111000000000000000000011000110 +10111001101000000000100000000000 +01001100000000010000000000000011 +10110100001011000110000000000000 +01011001011011000000000001111000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101001011001000000000000010100 +11001000001011000110100000000000 +01011100100000001111111111101110 +00101001011000100000000001110100 +00101001011001010000000000100000 +10111001011000000000100000000000 +10110101100000100001000000000000 +10111001101000000010000000000000 +11011000101000000000000000000000 +11100011111111111111111111101110 +00110111100111001111111111110000 +01011011100010110000000000010000 +01011011100011000000000000001100 +01011011100011010000000000001000 +01011011100111010000000000000100 +00101000001001000000000000101000 +10111000001000000101100000000000 +10111000010000000110000000000000 +10111000011000000110100000000000 +00110100000000011111111111111110 +01000100100000000000000000010010 +01001100010000000000000000000010 +00101001011011000000000001111000 +00101001011000010000000001110000 +10110101100011010001000000000000 +01010100010000010000000000010011 +00101001011001000000000000010100 +01000100100000000000000000010100 +00101001011000010000000001110100 +00110100000000100000000011111111 +10111001101000000001100000000000 +10110101100000010000100000000000 +10110100100000010000100000000000 +11111000000000000000000011010011 +10111001101000000000100000000000 +01001100000000010000000000000011 +10110100001011000110000000000000 +01011001011011000000000001111000 +00101011100111010000000000000100 +00101011100010110000000000010000 +00101011100011000000000000001100 +00101011100011010000000000001000 +00110111100111000000000000010000 +11000011101000000000000000000000 +00101001011001000000000000010100 +11001000001011000110100000000000 +01011100100000001111111111101110 +00101001011000100000000001110100 +00101001011001000000000000100100 +10111001011000000000100000000000 +10110101100000100001000000000000 +10111001101000000001100000000000 +11011000100000000000000000000000 +11100011111111111111111111101110 +00100000010001011111111111111111 +00000000010001100000000000010000 +00100000100010001111111111111111 +00000000100010010000000000010000 +10001001000001010011100000000000 +10001001000001100100000000000000 +10001001001001010010100000000000 +00000000111010100000000000010000 +10001001001001100011000000000000 +10110101000001010010100000000000 +10110100101010100010100000000000 +01010000101010000000000000000011 +01111000000010000000000000000001 +10110100110010000011000000000000 +10001000010000110001000000000000 +10001000100000010010000000000000 +00000000101000010000000000010000 +00111100101001010000000000010000 +10110100110000010011000000000000 +00100000111001111111111111111111 +10110100010001000000100000000000 +10110100001001100000100000000000 +10110100101001110001000000000000 +11000011101000000000000000000000 +00110111100111001111111111111000 +01011011100010110000000000001000 +01011011100111010000000000000100 +01000100010000000000000000100010 +10111000010000010010000000000000 +00110100000000110000000000001111 +01010100100000110000000000001011 +01111000000000110000000000000000 +00111000011000111000001100101100 +00111100001000010000000000000100 +10110100011000100001000000000000 +10110100010000010000100000000000 +01000000001000010000000000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110100000010110000000000000000 +01001100001000000000000000000011 +11001000000000010000100000000000 +00110100000010110000000000000001 +01001100010000000000000000000011 +11001000000000100001000000000000 +00011001011010110000000000000001 +10010000110000000001100000000000 +00100000011000110000000000000010 +01000100011000000000000000001000 +10001100001000100000100000000000 +01000101011000000000000000000010 +11001000000000010000100000000000 +00101011100111010000000000000100 +00101011100010110000000000001000 +00110111100111000000000000001000 +11000011101000000000000000000000 +00110100000000110000000000000000 +11111000000000000000000000101010 +11100011111111111111111111111000 +10010000000000000000100000000000 +00100000001000010000000000000001 +00111100001000010000000000000001 +11010000000000010000000000000000 +10010000111000000000100000000000 +10111011101000001111000000000000 +00110100001000010000000010100000 +11000000001000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01000100010000000000000000000110 +00110100000000110000000000000000 +11111000000000000000000000011100 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +10010000000000000000100000000000 +00100000001000010000000000000001 +00111100001000010000000000000001 +11010000000000010000000000000000 +10010000111000000000100000000000 +10111011101000001111000000000000 +00110100001000010000000010100000 +11000000001000000000000000000000 +00110111100111001111111111111100 +01011011100111010000000000000100 +01000100010000000000000000000110 +00110100000000110000000000000001 +11111000000000000000000000001100 +00101011100111010000000000000100 +00110111100111000000000000000100 +11000011101000000000000000000000 +10010000000000000000100000000000 +00100000001000010000000000000001 +00111100001000010000000000000001 +11010000000000010000000000000000 +10010000111000000000100000000000 +10111011101000001111000000000000 +00110100001000010000000010100000 +11000000001000000000000000000000 +11110100001000100010000000000000 +01000100100000000000000000011000 +00110100000001000000000000000001 +01001100010000000000000000001011 +00110100000001010000000000000000 +01010100010000010000000000000011 +11001000001000100000100000000000 +10111000101001000010100000000000 +00000000100001000000000000000001 +00000000010000100000000000000001 +01011100100000001111111111111011 +01011100011000000000000000000010 +10111000101000000000100000000000 +11000011101000000000000000000000 +00111100010000100000000000000001 +00111100100001000000000000000001 +11110100001000100010100000000000 +01111100100001100000000000000000 +10100000110001010010100000000000 +01000100101000000000000000000010 +01001100010000001111111111111010 +00110100000001010000000000000000 +01000100100000001111111111110101 +00110100000001010000000000000000 +11100011111111111111111111101101 +00110100000001000000000000000001 +00110100000001010000000000000000 +11100011111111111111111111101010 +00010100001000100000000000011111 +10011000010000010000100000000000 +11001000001000100000100000000000 +11000011101000000000000000000000 +00110100000001000000000000001111 +10111000001000000011100000000000 +10111000010000000011000000000000 +01010000100000110000000000101101 +10111000010000010010000000000000 +00100000100001000000000000000011 +01011100100000000000000000101011 +10111000010000000010000000000000 +10111000001000000010100000000000 +10111000011000000011000000000000 +00110100000001110000000000001111 +00101000100010000000000000000000 +00110100110001101111111111110000 +01011000101010000000000000000000 +00101000100010000000000000000100 +01011000101010000000000000000100 +00101000100010000000000000001000 +01011000101010000000000000001000 +00101000100010000000000000001100 +00110100100001000000000000010000 +01011000101010000000000000001100 +00110100101001010000000000010000 +01010100110001111111111111110101 +00110100011000111111111111110000 +00000000011001100000000000000100 +00100000011000110000000000001111 +00110100110001100000000000000001 +00111100110001100000000000000100 +10110100001001100011100000000000 +10110100010001100011000000000000 +00110100000000100000000000000011 +01010000010000110000000000010001 +00110100000000100000000000000000 +00110100000010000000000000000011 +10110100110000100010000000000000 +00101000100001010000000000000000 +10110100111000100010000000000000 +00110100010000100000000000000100 +01011000100001010000000000000000 +11001000011000100010000000000000 +01010100100010001111111111111010 +00110100011000111111111111111100 +00000000011000100000000000000010 +00100000011000110000000000000011 +00110100010000100000000000000001 +00111100010000100000000000000010 +10110100111000100011100000000000 +10110100110000100011000000000000 +01000100011000000000000000001000 +00110100000000100000000000000000 +10110100110000100010000000000000 +01000000100001010000000000000000 +10110100111000100010000000000000 +00110100010000100000000000000001 +00110000100001010000000000000000 +01011100010000111111111111111011 +11000011101000000000000000000000 +00100000001001010000000000000011 +10111000001000000010000000000000 +01000100101000000000000000001011 +01000100011000000000000000101100 +00110100011000111111111111111111 +00100000010001100000000011111111 +11100000000000000000000000000011 +01000100011000000000000000101000 +00110100011000111111111111111111 +00110000100001100000000000000000 +00110100100001000000000000000001 +00100000100001010000000000000011 +01011100101000001111111111111011 +00110100000001010000000000000011 +01010000101000110000000000011010 +00100000010001010000000011111111 +00111100101001100000000000001000 +00110100000010100000000000001111 +10111000110001010010100000000000 +00111100101001100000000000010000 +10111000100000000100000000000000 +10111000110001010011000000000000 +10111000011000000011100000000000 +10111000100000000010100000000000 +00110100000010010000000000001111 +01010100011010100000000000010111 +00110100000001000000000000000000 +00110100000001110000000000000011 +10110101000001000010100000000000 +00110100100001000000000000000100 +01011000101001100000000000000000 +11001000011001000010100000000000 +01010100101001111111111111111100 +00110100011000111111111111111100 +00000000011001000000000000000010 +00100000011000110000000000000011 +00110100100001000000000000000001 +00111100100001000000000000000010 +10110101000001000100000000000000 +10111001000000000010000000000000 +01000100011000000000000000000111 +00100000010000100000000011111111 +00110100000001010000000000000000 +10110100100001010011000000000000 +00110000110000100000000000000000 +00110100101001010000000000000001 +01011100011001011111111111111101 +11000011101000000000000000000000 +01011000101001100000000000000000 +01011000101001100000000000000100 +01011000101001100000000000001000 +01011000101001100000000000001100 +00110100111001111111111111110000 +00110100101001010000000000010000 +01010100111010011111111111111010 +00110100011000111111111111110000 +00000000011010000000000000000100 +00100000011000110000000000001111 +00110101000010000000000000000001 +00111101000010000000000000000100 +10110100100010000100000000000000 +00110100000001000000000000000011 +01010100011001001111111111011100 +10111001000000000010000000000000 +11100011111111111111111111101000 +01010111010100100010000001000011 +01101111011100100110010100111010 +00100000011100110111010001100001 +01110010011101000110100101101110 +01100111001000000111010101110000 +00101110001011100010111000001010 +00000000000000000000000000000000 +01010101011011100110000101100010 +01101100011001010010000001110100 +01101111001000000110010001100101 +01110100011001010111001001101101 +01101001011011100110010100100000 +01001101010000010100001100100000 +01100001011001000110010001110010 +01100101011100110111001100001010 +00000000000000000000000000000000 +01001100011011110110001101100001 +01101100001000000100110101000001 +01000011001000000110000101100100 +01100100011100100110010101110011 +01110011001110100010000000100101 +00110000001100100111100000111010 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000001110100010010100110000 +00110010011110000011101000100101 +00110000001100100111100000111010 +00100101001100000011001001111000 +00001010000000000000000000000000 +01001110011001010111011100100000 +01101101011000010111100000100000 +01110010011101010110111000100000 +01110100011010010110110101100101 +00100000011001100110111101110010 +00100000011000010010000001110100 +01100001011100110110101100100000 +00100101011100110010110000100000 +01101111011011000110010000100000 +00100101011011000110010000101100 +00100000011011100110010101110111 +00100000001001010110010000001010 +00000000000000000000000000000000 +01110100011000010111001101101011 +00100000001001010111001100101100 +00100000011100100111010101101110 +00100000011001100110111101110010 +00100000001001010110010000100000 +01101101011100110000101000000000 +01110011011100000110110001101100 +00101101011000100110100000000000 +01110011011010000110010101101100 +01101100001010110110011101110101 +01101001000000000000000000000000 +01110000011101000111000000000000 +01110101011100000111010001101001 +01101101011001010000000000000000 +01100011011010000110010101100011 +01101011001011010110110001101001 +01101110011010110000000000000000 +01101001011001000110110001100101 +00000000000000000000000000000000 +01100100011010010110000101100111 +00101101011001100111001101101101 +00101101001100010010110100100101 +01110011001110100010000000100101 +00110000001110010110010000101110 +00100101001100000011001101100100 +00111010001000000000000000000000 +01000101010011100101010001000101 +01010010001000000010010101110011 +00101100001000000111000001100001 +01100011011010110110010101110100 +00100000011011000110010101101110 +00100000001001010110100100001010 +00000000000000000000000000000000 +00100101011100110011101000100000 +01110010011001010110010101101110 +01110100011001010111001000100000 +01101001011011100010000000100101 +01101001001000000110110101110011 +00001010000000000000000000000000 +01001100010001010100000101010110 +01000101001000000010010101110011 +00100000001010000110111001100101 +01111000011101000011101000100000 +00100101001100110110100100101001 +00001010000010100000000000000000 +01010010010001010100001101010110 +00100000001001010011000000110010 +01100100001000000110001001111001 +01110100011001010111001100100000 +01100001011101000010000000100101 +00111001011001000010111000100101 +00110000001110010110010000101110 +00100101001100000011001101100100 +00100000001010000111010001111001 +01110000011001010010000000100101 +01111000001011000010000000100101 +01110011001010010000101000000000 +01100110011100110110110100111010 +00100000010101010110111001101011 +01101110011011110111011101101110 +00100000011100110111010001100001 +01110100011001010010000001100110 +01101111011100100010000001110000 +01101111011100100111010000100000 +00100101011100110000101000000000 +01010111011100100110111101101110 +01100111001000000110010001101111 +01101101011000010110100101101110 +00100000001001010110100100111010 +00100000011001000110100101110011 +01100011011000010111001001100100 +00001010000000000000000000000000 +01000001011011000111010001100101 +01110010011011100110000101110100 +01100101001000000110110101100001 +01110011011101000110010101110010 +00111010001000000110010001101001 +01110011011000110110000101110010 +01100100000010100000000000000000 +01001100011011110110111101110000 +01101001011011100110011100100000 +01100110011100100110000101101101 +01100101001110100010000001100100 +01101001011100110110001101100001 +01110010011001000000101000000000 +01100110011100110110110100100000 +01100110011011110111001000100000 +00100101011100110011101000100000 +01000101011100100111001001101111 +01110010001000000010010101101001 +00100000011010010110111000100000 +00100101011100110000101000000000 +01110000011100000111001101101001 +00000000000000000000000000000000 +00100101011100110010110100100101 +01101001001011010010010101110011 +00111010001000000000000000000000 +00100101011100110011101000100000 +01100101011100100111001001101111 +01110010001000000111000001100001 +01110010011100110110100101101110 +01100111001000000010001000100101 +01110011001000100000101000000000 +01100100011010010110000101100111 +00101101011000110110111101101110 +01100110011010010110011100000000 +01100100011010010110000101100111 +00101101011001010111100001110100 +01100101011011100111001101101001 +01101111011011100000000000000000 +01100100011010010110000101100111 +00101101011000100110110101100011 +00000000000000000000000000000000 +01100100011010010110000101100111 +00101101011100110110010101110010 +01110110011011110000000000000000 +01100100011010010110000101100111 +00101101011001100111001001100001 +01101101011001010111001100000000 +01100100011010010110000101100111 +00101101011101000110100101101101 +01100101000000000000000000000000 +01100100011010010110000101100111 +00101101011001100111001101101101 +00000000000000000000000000000000 +01101110011001010111011100100000 +01110100011010010110110101100101 +01101111011101010111010000100000 +01100110011011110111001000100000 +00100101011100110011101000100000 +00100101011010010000101000000000 +01110100011010010110110101100101 +01101111011101010111010000100000 +01100101011110000111000001101001 +01110010011001010110010000111010 +00100000001001010111001100001010 +00000000000000000000000000000000 +01010010010001010101000101010101 +01000101010100110101010000000000 +01010011010110010100111001000011 +01011111010100110100010101001110 +01000100000000000000000000000000 +01000001010011100100111001011111 +01010010010001010100001101000101 +01001001010100000101010000000000 +01000001010011100100111001011111 +01010011010001010100111001000100 +00000000000000000000000000000000 +01000110010000010101010101001100 +01010100000000000000000000000000 +01010001010101010100000101001100 +00000000000000000000000000000000 +01110011011110010110111001100011 +00000000000000000000000000000000 +01100100011001010110110001100001 +01111001010111110111001001100101 +01110001000000000000000000000000 +01110000011001000110010101101100 +01100001011110010101111101110010 +01100101011100010000000000000000 +01110000011001000110010101101100 +01100001011110010101111101110010 +01100101011100110111000000000000 +01100100011001010110110001100001 +01111001010111110111001001100101 +01110011011100000000000000000000 +01110000011001000110010101101100 +01100001011110010101111101110010 +01100101011100110111000001011111 +01100110011011110110110001101100 +01101111011101110101111101110101 +01110000000000000000000000000000 +01100001011011100110111001101111 +01110101011011100110001101100101 +00000000000000000000000000000000 +01110011011010010110011101101110 +01100001011011000110100101101110 +01100111000000000000000000000000 +01101101011000010110111001100001 +01100111011001010110110101100101 +01101110011101000000000000000000 +01010000010100000101001101101001 +00100000011001100110111101110010 +00100000010101110101001001010000 +01000011001011100010000001000011 +01101111011011010110110101101001 +01110100001000000010010101110011 +00101100001000000110001001110101 +01101001011011000111010000100000 +01101111011011100010000001000100 +01100101011000110010000000110001 +00111000001000000011001000110000 +00110001001101110000101000000000 +01110000011100000111001101101001 +00101101011101100011001000110000 +00110001001101100010111000110001 +00110010001011010011100000111001 +00101101011001110110001101100010 +00110101001110010011001100110100 +01100101000000000000000000000000 +01010000010101000101000000100000 +01110011011101000110000101110010 +01110100000010100000000000000000 +01010000010101000101000000100000 +01110011011101000110111101110000 +00001010000000000000000000000000 +01001100011011110110001101101011 +01101001011011100110011100100000 +01010000010011000100110000000000 +00001010010011000110111101100011 +01101011001000000111010001101001 +01101101011001010110111101110101 +01110100001011100000000000000000 +00101110000000000000000000000000 +01110111011100100011000100000000 +00100000011010010110111001110110 +01100001011011000110100101100100 +00000000000000000000000000000000 +00100101011100110101010001001001 +01001101010001010011101000100000 +00101000001001010110110001101001 +00100000001011010010000000110000 +01111000001001010110110001111000 +00101001001000000010010101101100 +01101001001011100010010100110000 +00110110011011000110100100100101 +01110011000010100000000000000000 +00100101011100110010010101110011 +00100101001100000011001001111000 +00101101001001010011000000110010 +01111000001011010010010100110000 +00110010011110000010110100100101 +00110000001100100111100000101101 +00100101001100000011001001111000 +00101101001001010011000000110010 +01111000001011010010010100110000 +00110010011110000010110100100101 +00110000001100100111100000101101 +00100101001100000011001001111000 +00101101001001010011000000110010 +01111000000010100000000000000000 +00100101011100110010010101110011 +00100101011100110010000000101000 +01110011011010010111101001100101 +00100000001001010110100100101001 +00001010000000000000000000000000 +00100101011100110010010101110011 +00000000000000000000000000000000 +00100101001100000011001001111000 +00000000000000000000000000000000 +00100101011100110101011001000101 +01010010010100110100100101001111 +01001110001110100010000001110101 +01101110011100110111010101110000 +01110000011011110111001001110100 +01100101011001000010000000101000 +00100101011010010010100100001010 +00000000000000000000000000000000 +00100101011100110101011001000101 +01010010010100110100100101001111 +01001110001110100010000000100101 +01101001001000000010100001110100 +01111001011100000110010100100000 +00100101011010010010110000100000 +01101100011001010110111000100000 +00100101011010010010110000100000 +01100100011011110110110101100001 +01101001011011100010000000100101 +01101001001010010000101000000000 +00100101011100110100011001001100 +01000001010001110101001100111010 +00100000001100000111100000100101 +00110000001101000111100000100000 +00101000011000110110111101110010 +01110010011001010110001101110100 +01101001011011110110111000100000 +00110000011110000010010100110000 +00111000011110000011101000100101 +00110000001110000111100000100000 +00100101001100000011100001110101 +00101001000010100000000000000000 +01010000010011110101001001010100 +00111010001000000000000000000000 +00100101011100110101001001000101 +01010011010101000011101000100000 +01110011011001010111000100100000 +00100101011010010010110000100000 +01100011011101000111001001101100 +00100000001001010110100100101100 +00100000011011000110111101100111 +00101101011010010110111001110100 +01100101011100100111011001100001 +01101100001000000010010101101001 +00001010000000000000000000000000 +00100101011100110100110101000101 +01010011010100110100000101000111 +01000101001110100010000000101000 +01000101001010010010000001010011 +01011001010011100100001100001010 +00000000000000000000000000000000 +00100101011100110010010101110011 +00100101011011000111010100101110 +00100101001100000011100101101001 +00001010000000000000000000000000 +01001101010100110100011100101101 +01010011010110010100111001000011 +00111010001000000000000000000000 +00100101011100110100110101000101 +01010011010100110100000101000111 +01000101001110100010000000101000 +01000101001010010010000001000100 +01000101010011000100000101011001 +01011111010100100100010101010001 +00001010000000000000000000000000 +01001101010100110100011100101101 +01000100010001010100110001000001 +01011001010111110101001001000101 +01010001001110100010000000000000 +00100101011100110100110101000101 +01010011010100110100000101000111 +01000101001110100010000000101000 +01000111001010010010000001000110 +01001111010011000100110001001111 +01010111010111110101010101010000 +00001010000000000000000000000000 +01001101010100110100011100101101 +01000110010011110100110001001100 +01001111010101110101111101010101 +01010000001110100010000000000000 +00100101011100110100110101000101 +01010011010100110100000101000111 +01000101001110100010000000101000 +01000111001010010010000001000100 +01000101010011000100000101011001 +01011111010100100100010101010011 +01010000000010100000000000000000 +01001101010100110100011100101101 +01000100010001010100110001000001 +01011001010111110101001001000101 +01010011010100000011101000100000 +00000000000000000000000000000000 +00100101011100110100110101000101 +01010011010100110100000101000111 +01000101001110100010000000101000 +01000111001010010010000001000001 +01001110010011100100111101010101 +01001110010000110100010100001010 +00000000000000000000000000000000 +01001101010100110100011100101101 +01000001010011100100111001001111 +01010101010011100100001101000101 +00111010001000000111001101110100 +01100001011011010111000000100000 +00000000000000000000000000000000 +00100101011100110010010101110011 +00100101001100000011001001111000 +00101101001001010011000000110010 +01111000001011010010010100110000 +00110100011110000000101000000000 +01001101010100110100011100101101 +01000001010011100100111001001111 +01010101010011100100001101000101 +00111010001000000110011101110010 +01100001011011100110010001101101 +01100001011100110111010001100101 +01110010001011010111000101110101 +01100001011011000110100101110100 +01111001001000000000000000000000 +00100101011100110100110101010011 +01000111001011010100000101001110 +01001110010011110101010101001110 +01000011010001010011101000100000 +01100111011100100110000101101110 +01100100011011010110000101110011 +01110100011001010111001000101101 +01110000011100100110100101101111 +00100000001001010110100100100000 +00100101011010010000101000000000 +00100101011100110010010101110011 +00100101001100000011001001111000 +00101101001001010011000000110010 +01111000001011010010010100110000 +00110010011110000010110100100101 +00110000001100100111100000101101 +00100101001100000011001001111000 +00101101001001010011000000110010 +01111000001011010010010100110000 +00110010011110000010110100100101 +00110000001100100111100000001010 +00000000000000000000000000000000 +01001101010100110100011100101101 +01000001010011100100111001001111 +01010101010011100100001101000101 +00111010001000000110011101110010 +01100001011011100110010001101101 +01100001011100110111010001100101 +01110010001011010110100101100100 +00100000000000000000000000000000 +00100101011100110100110101000101 +01010011010100110100000101000111 +01000101001110100010000000101000 +01000111001010010010000001010011 +01001001010001110100111001000001 +01001100010010010100111001000111 +00001010000000000000000000000000 +01001101010100110100011100101101 +01010011010010010100011101001110 +01000001010011000100100101001110 +01000111001110100010000001110100 +01100001011100100110011101100101 +01110100001011010111000001101111 +01110010011101000010000000000000 +00100101011100110101010001001100 +01010110001110100010000001110100 +01101111011011110010000001110011 +01101000011011110111001001110100 +00100000001010000010010101101001 +00100000001011010010000000100101 +01101001001000000011110100100000 +00100101011010010010100100001010 +00000000000000000000000000000000 +00100101011100110101010001001100 +01010110001110100010000001110100 +01111001011100000110010100100000 +00100101001100000011010001111000 +00100000011011000110010101101110 +00100000001001010110100100100000 +01101111011101010110100100100000 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000001110100010010100110000 +00110010011110000010000001110011 +01110101011000100010000000100101 +00110000001100100111100000111010 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000000010100000000000000000 +00100101011100110101010001001100 +01010110001110100010000001110100 +01101111011011110010000001110011 +01101000011011110111001001110100 +00100000001010000110010101111000 +01110000011001010110001101110100 +01100101011001000010000000100101 +01101001001011000010000001110100 +01101111011101000110000101101100 +00100000001001010110100100101001 +00001010000000000000000000000000 +01010100010011000101011000111010 +00100000000000000000000000000000 +01110100011011000111011000101101 +01100011011011110110111001110100 +01100101011011100111010000000000 +01000100010101010100110101010000 +00111010001000000000000000000000 +01110000011000010111100101101100 +01101111011000010110010000000000 +00100101011100110101011001001100 +01000001010011100010000000100101 +01101001000010100000000000000000 +00100101011100110100010101010100 +01001000001110100010000000100101 +00110000001101000111100000100000 +00101000001001010011000000110010 +01111000001110100010010100110000 +00110010011110000011101000100101 +00110000001100100111100000111010 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000001110100010010100110000 +00110010011110000010000000101101 +00111110001000000010010100110000 +00110010011110000011101000100101 +00110000001100100111100000111010 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000001110100010010100110000 +00110010011110000011101000100101 +00110000001100100111100000101001 +00001010000000000000000000000000 +00100101011100110100100101010000 +00111010001000000010010101101001 +00100000001010000010010101101001 +00101110001001010110100100101110 +00100101011010010010111000100101 +01101001001000000010110100111110 +00100000001001010110100100101110 +00100101011010010010111000100101 +01101001001011100010010101101001 +00101001001000000110110001100101 +01101110001000000010010101101001 +00001010000000000000000000000000 +00100101011100110101010101000100 +01010000001110100010000000101000 +00100101011010010010000000101101 +00111110001000000010010101101001 +00101001001000000110110001100101 +01101110001000000010010101101001 +00001010000000000000000000000000 +00100101011100110011101000100000 +00100101011011000110100100001010 +00000000000000000000000000000000 +01010111011000010111001001101110 +01101001011011100110011100111010 +00100000001001010111001100111010 +00100000011000110110000101101110 +00100000011011100110111101110100 +00100000011000010110010001101010 +01110101011100110111010000100000 +01100110011100100110010101110001 +01011111011100000111000001100010 +00100000001001010110110001101001 +00001010000000000000000000000000 +00100101011100110011101000100000 +00100101001110010110110001110101 +00101110001001010011000000111001 +01101100011010010000101000000000 +00100101011100110011101000100000 +01110011011011100111010000111101 +00100101011001000010110000100000 +01110011011001010110001100111101 +00100101011011000110010000101100 +00100000011011100111001101100101 +01100011001111010010010101101100 +01100100000010100000000000000000 +00100101001100000011100101100100 +00100000001001010011000000111001 +01100100001000000010010100110000 +00110011011001000010000000000000 +01110011011001010110111001100100 +00111010001000000000000000000000 +01110010011001010110001101110110 +00111010001000000000000000000000 +00100101001100000011100101100100 +00100000001001010011000000111001 +01100100001000000010010100110000 +00110011011001000000000000000000 +00100000001000000010000000100101 +00111001011001000010111000100101 +00110011011001000000101000000000 +01101001011011100110100101110100 +01101001011000010110110001101001 +01111010011010010110111001100111 +00000000000000000000000000000000 +01100110011000010111010101101100 +01110100011110010000000000000000 +01100100011010010111001101100001 +01100010011011000110010101100100 +00000000000000000000000000000000 +01101100011010010111001101110100 +01100101011011100110100101101110 +01100111000000000000000000000000 +01110000011100100110010100101101 +01101101011000010111001101110100 +01100101011100100000000000000000 +01110000011000010111001101110011 +01101001011101100110010100000000 +01110101011011100110001101100001 +01101100011010010110001001110010 +01100001011101000110010101100100 +00000000000000000000000000000000 +01110011011011000110000101110110 +01100101000000000000000000000000 +01110101011011100110001101100001 +01101100011010010110001001110010 +01100001011101000110010101100100 +00101111011101110111001000101101 +01110000011100100110010101110011 +01100101011011100111010000000000 +01101101011000010111001101110100 +01100101011100100010111101110111 +01110010001011010110110100101101 +01101100011011110110001101101011 +00000000000000000000000000000000 +01110101011011100110001101100001 +01101100011010010110001001110010 +01100001011101000110010101100100 +00101111011101110111001000101101 +01110011001011010110110001101111 +01100011011010110000000000000000 +01110101011011100110001101100001 +01101100011010010110001001110010 +01100001011101000110010101100100 +00101111011101110111001000101101 +01101100011011110110001101101011 +01100101011001000000000000000000 +01110111011100100010110101100011 +01100001011011000110100101100010 +01110010011000010111010001101001 +01101111011011100000000000000000 +01110111011100100010110101100011 +01100001011011000110100101100010 +01110010011000010111010001100101 +01100100000000000000000000000000 +01110111011100100010110101110010 +01100101011100110111000000101101 +01100011011000010110110001101001 +01100010001011010111001001100101 +01110001000000000000000000000000 +01110111011100100010110101101100 +01101001011011100110101100101101 +01101111011011100000000000000000 +01100001011000100111001101101111 +01101100011101010111010001100101 +00101101011000110110000101101100 +01101001011000100111001001100001 +01110100011010010110111101101110 +00000000000000000000000000000000 +01101000011011110110111101101011 +00111010001000000010010101110011 +00001010000000000000000000000000 +01010100001100100010000001101111 +01110010001000000101010000110011 +00100000011010010110111001100011 +01101111011100100111001001100101 +01100011011101000010110000100000 +01100100011010010111001101100011 +01100001011100100110010001101001 +01101110011001110010000001110100 +01110101011100000110110001100101 +00001010000000000000000000000000 +01010100001100110010000001101111 +01110010001000000101010000110110 +00100000011010010110111001100011 +01101111011100100111001001100101 +01100011011101000010110000100000 +01100100011010010111001101100011 +01100001011100100110010001101001 +01101110011001110010000001110100 +01110101011100000110110001100101 +00001010000000000000000000000000 +01001000011000010110111001100100 +01110011011010000110000101101011 +01100101001000000110011001100001 +01101001011011000111010101110010 +01100101001110100010000001101110 +01101111011101110010000001101110 +01101111011011100010110101110111 +01110010001000000010010101110011 +00001010000000000000000000000000 +01010010011001010111010001110010 +01111001001000000110111101101110 +00100000011101000110100101101101 +01100101011011110111010101110100 +00001010000000000000000000000000 +00100101011100110011101000100000 +01110011011101010110001001110011 +01110100011000010111010001100101 +00100000001001010110100100001010 +00000000000000000000000000000000 +01010100011110000011110100111110 +00111110011100110110001101100001 +01101100011001010110010001010000 +01101001011000110110111101110011 +01100101011000110110111101101110 +01100100011100110010111001101101 +01110011011000100010000000111101 +00100000001100000111100000100101 +01111000000010100000000000000000 +01010100011110000011110100111110 +00111110011100110110001101100001 +01101100011001010110010001010000 +01101001011000110110111101110011 +01100101011000110110111101101110 +01100100011100110010111001101100 +01110011011000100010000000111101 +00100000001100000111100000100101 +01111000000010100000000000000000 +01010010011110000010000001100110 +01101001011110000110010101100100 +00100000011001000110010101101100 +01100001011110010010000000111101 +00100000001001010110010000001010 +00000000000000000000000000000000 +01010010011110000011110100111110 +00111110011100110110001101100001 +01101100011001010110010001010000 +01101001011000110110111101110011 +01100101011000110110111101101110 +01100100011100110010111001101101 +01110011011000100010000000111101 +00100000001100000111100000100101 +01111000000010100000000000000000 +01010010011110000011110100111110 +00111110011100110110001101100001 +01101100011001010110010001010000 +01101001011000110110111101110011 +01100101011000110110111101101110 +01100100011100110010111001101100 +01110011011000100010000000111101 +00100000001100000111100000100101 +01111000000010100000000000000000 +00100011001000110010001100100000 +01110100001101000010111001110000 +01101000011000010111001101100101 +00100000011010010111001100100000 +01100001011011000111001001100101 +01100001011001000111100100100000 +01100011011011110111001001110010 +01100101011000110111010001100101 +01100100001000000110011001101111 +01110010001000000110001001101001 +01110100011100110110110001101001 +01100100011001010000101000000000 +01110100001100010011101000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +01110100001101000011101000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000011000100110100101110100 +01110011011011000110100101100100 +01100101001110100010000000100101 +01100100000010100000000000000000 +00100000001000000010000000100000 +00100000001000000111001101100101 +01100011001011100010000000100000 +00100000001000000010000000100000 +00100000011011100111001100101110 +01110000011010000110000100100000 +00100000001000000010000000100000 +00100000001000000111001101100101 +01100011001011100010000000100000 +00100000001000000010000000100000 +00100000011011100111001100101110 +01110000011010000110000100001010 +00000000000000000000000000000000 +01000101010100100101001001001111 +01010010001110100010000001001110 +01100101011101110010000001100011 +01101100011000010111001101110011 +00100000001001010110100100001010 +00000000000000000000000000000000 +01000010010101010100011100111010 +00100000010101000111001001111001 +01101001011011100110011100100000 +01110100011011110010000001110011 +01100101011011100110010000100000 +01101001011011100111011001100001 +01101100011010010110010000100000 +01110111011100100101111101101101 +01110011011001110010000001101101 +01101111011001000110010100111101 +00100101011110000010000001101001 +01100100001111010010010101111000 +00000000000000000000000000000000 +01101000011000010110111001100100 +01101100011001010010000001010011 +01101001011001110110111001100001 +01101100011010010110111001100111 +00100000011011010111001101100111 +00101100001000000110011001100001 +01101001011011000110010101100100 +00101100001000000101010001101000 +01101001011100110010000001101001 +01110011001000000110111001101111 +01110100001000000110111101110010 +01100111011000010110111001101001 +01111010011000010111010001101001 +01101111011011100010000001100101 +01111000011101000110010101101110 +01110011011010010110111101101110 +00100000010101000100110001010110 +00100000001111010010000000110000 +01111000001001010111100000001010 +00000000000000000000000000000000 +01101000011000010110111001100100 +01101100011001010010000001010011 +01101001011001110110111001100001 +01101100011010010110111001100111 +00100000011011010111001101100111 +00101100001000000110011001100001 +01101001011011000110010101100100 +00101100001000000110111001101111 +01110100001000000100001101000101 +01010010010011100010011101110011 +00100000010011110101010101001001 +00100000001111010010000000110000 +01111000001001010111100000001010 +00000000000000000000000000000000 +01101000011000010110111001100100 +01101100011001010010000001010011 +01101001011001110110111001100001 +01101100011010010110111001100111 +00100000011011010111001101100111 +00101100001000000110011001100001 +01101001011011000110010101100100 +00101100001000000110111001101111 +01110100001000000101011101101000 +01101001011101000110010100100000 +01010010011000010110001001100010 +01101001011101000010000001101101 +01100001011001110110100101100011 +00100000011011100111010101101101 +01100010011001010111001000100000 +00111101001000000011000001111000 +00100101011110000000101000000000 +01101000011000010110111001100100 +01101100011001010010000001010011 +01101001011001110110111001100001 +01101100011010010110111001100111 +00100000011011010111001101100111 +00101100001000000110011001100001 +01101001011011000110010101100100 +00101100001000000110111001101111 +01110100001000000111001101110101 +01110000011100000110111101110010 +01110100011001010110010000100000 +01110110011001010111001001110011 +01101001011011110110111000100000 +01101110011101010110110101100010 +01100101011100100010000000111101 +00100000001100000111100000100101 +01111000000010100000000000000000 +00100101011100110010000000111101 +00100000001001010110110001100100 +00111010001001010011000000111001 +01101100011001000011101000100101 +00110000001100110110110001100100 +00001010000000000000000000000000 +01010101011011100110100101101110 +01101001011101000110100101100001 +01101100011010010111101001100101 +01100100000000000000000000000000 +01000101010100100101001001001111 +01010010001110100010000000100101 +01110011001110100010000001010100 +01101001011011010110010101110011 +01110100011000010110110101110000 +01110011010010010110111001100011 +01101111011100100111001001100101 +01100011011101000011101000100000 +00100101011001000010000000100101 +01100100001000000010010101100100 +00100000001001010110010000001010 +00000000000000000000000000000000 +01110011011001010111001001110110 +01101111001110100111010000110001 +00000000000000000000000000000000 +01110011011001010111001001110110 +01101111001110100111010000110010 +00000000000000000000000000000000 +01110011011001010111001001110110 +01101111001110100111010000110011 +00000000000000000000000000000000 +01110011011001010111001001110110 +01101111001110100111010000110100 +00000000000000000000000000000000 +01110011011001010111001001110110 +01101111001110100111010000110101 +00000000000000000000000000000000 +01110011011001010111001001110110 +01101111001110100111010000110110 +00000000000000000000000000000000 +00101101001111100110110101100100 +01100101011011000110000101111001 +00000000000000000000000000000000 +01000101010100100101001001001111 +01010010001110100010000000100101 +01110011001110100010000001010100 +01101001011011010110010101110011 +01110100011000010110110101110000 +01110011010010010110111001100011 +01101111011100100111001001100101 +01100011011101000011101000100000 +00100101011001000010000000100101 +01100100001000000000101000000000 +00100000001010000111011101100001 +01101001011101000010000001100110 +01101111011100100010000001101000 +01110111001010010000000000000000 +01101111011001100110011001110011 +01100101011101000101111101101000 +01110111001110100010000000100101 +01101100011010010010111000100101 +00110000001110010110110001101001 +00100000001010000010101100100101 +01101100011010010010100100001010 +00000000000000000000000000000000 +01010000010011000100110000100000 +01001111011101010111010001001111 +01100110010011000110111101100011 +01101011001011000010000001110011 +01101000011011110111010101101100 +01100100001000000111001001100101 +01110011011101000110000101110010 +01110100001000000111001101111001 +01101110011000110000101000000000 +01110011011001010111001001110110 +01101111001110100110001001110101 +01110011011110010000101000000000 +01110111011100100101111101110011 +01100101011100100111011001101111 +00100000011100110111010001100001 +01110100011001010011101000100000 +00100101011100110010010101110011 +00001010000000000000000000000000 +01101111011011000110010001110011 +01100101011101000111000000100000 +00100101011010010010110000100000 +01101111011001100110011001110011 +01100101011101000010000000100101 +01101001001110100010010100110000 +00110100011010010000101000000000 +01100001011001000110101001110101 +01110011011101000010000001110000 +01101000011000010111001101100101 +00100000001001010110100100001010 +00000000000000000000000000000000 +01010011010110010100111001000011 +01011111010011100101001101000101 +01000011000000000000000000000000 +01010011010110010100111001000011 +01011111010100110100010101000011 +00000000000000000000000000000000 +01010011010110010100111001000011 +01011111010100000100100001000001 +01010011010001010000000000000000 +01010100010100100100000101000011 +01001011010111110101000001001000 +01000001010100110100010100000000 +01010111010000010100100101010100 +01011111010011110100011001000110 +01010011010001010101010001011111 +01010011010101000100000101000010 +01001100010001010000000000000000 +01100011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000111001101100101 +01101110011001000010000001110011 +01111001011011100110001100001010 +00000000000000000000000000000000 +01100011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000111001101100101 +01101110011001000010000001100001 +01101110011011100110111101110101 +01101110011000110110010100001010 +00000000000000000000000000000000 +01100011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000111001101100101 +01101110011001000010000001110010 +01100101011100010111010101100101 +01110011011101000000101000000000 +01001110011001010111011100100000 +01100110011011110111001001100101 +01101001011001110110111000100000 +01001101011000010111001101110100 +01100101011100100010000000100101 +01101001001000000110000101100100 +01100100011001010110010000001010 +00000000000000000000000000000000 +00100101011100110011101000100000 +01100011011000010110111000100111 +01110100001000000110100101101110 +01101001011101000010000001100101 +01111000011101000110010101101110 +01110011011010010110111101101110 +00001010000000000000000000000000 +01100011011011000110111101100011 +01101011001000000110001101101100 +01100001011100110111001100100000 +00111101001000000010010101100100 +00001010000000000000000000000000 +01100011011011000110111101100011 +01101011001000000110000101100011 +01100011011101010111001001100001 +01100011011110010010000000111101 +00100000001001010110010000001010 +00000000000000000000000000000000 +01001001011001110110111001101111 +01110010011001010110010000100000 +01100110011100100110000101101101 +01100101001000000010010101101001 +00001010000000000000000000000000 +01110000011100000101111101110011 +01101100011000010111011001100101 +00100000001110100010000001000100 +01100101011011000110000101111001 +00100000010100100110010101110011 +01110000001000000110010001101111 +01100101011100110110111000100111 +01110100001000000110110101100001 +01110100011000110110100000100000 +01000100011001010110110001100001 +01111001001000000101001001100101 +01110001001000000010100001100110 +00100000001001010111100000101001 +00001010000000000000000000000000 +01110000011100000101111101110000 +01100011011011000110111101100011 +01101011001000000011101000100000 +01010000010001000110010101101100 +01100001011110010010000001010010 +01100101011100110111000000100000 +01100100011011110110010101110011 +01101110001001110111010000100000 +01101101011000010111010001100011 +01101000001000000101000001000100 +01100101011011000110000101111001 +00100000010100100110010101110001 +00001010000000000000000000000000 +00100101011100110011101000100000 +01010000010001000110010101101100 +01100001011110010010000001010010 +01100101011100110111000000100000 +01000110001011010111010101110000 +00100000011001000110111101100101 +01110011011011100010011101110100 +00100000011011010110000101110100 +01100011011010000010000001010000 +01000100011001010110110001100001 +01111001001000000101001001100101 +01110001000010100000000000000000 +01000101010100100101001001001111 +01010010001110100010000000100101 +01110011001110100010000001000110 +01101111011011000110110001101111 +01110111001000000111010101110000 +00100000011011010110010101110011 +01110011011000010110011101100101 +00100000011010010111001100100000 +01101110011011110111010000100000 +01100110011100100110111101101101 +00100000011000110111010101110010 +01110010011001010110111001110100 +00100000011100000110000101110010 +01100101011011100111010000001010 +00000000000000000000000000000000 +01000101010100100101001001001111 +01010010001110100010000000100101 +01110011001110100010000001010011 +01101100011000010111011001100101 +00100000011101110110000101110011 +00100000011011100110111101110100 +00100000011101110110000101101001 +01110100011010010110111001100111 +00100000011000010010000001100110 +01101111011011000110110001101111 +01110111001000000111010101110000 +00100000011011010110010101110011 +01110011011000010110011101100101 +00001010000000000000000000000000 +01000101010100100101001001001111 +01010010001110100010000000100101 +01110011001110100010000001010011 +01100101011100010111010101100101 +01101110011000110110010101001001 +01000100001000000010010101100100 +00100000011001000110111101100101 +01110011011011100010011101110100 +00100000011011010110000101110100 +01100011011010000010000001101100 +01100001011100110111010000100000 +01010011011110010110111001100011 +00100000011011010110010101110011 +01110011011000010110011101100101 +00100000001001010110010000001010 +00000000000000000000000000000000 +00100101011100110010100000100101 +01100100001010010010000001001101 +01100101011100110111001101100001 +01100111011001010010000001100011 +01100001011011100010011101110100 +00100000011000100110010100100000 +01110011011001010110111001110100 +00001010000000000000000000000000 +01010011010001010100111001010100 +00100000001001010011000000110010 +01100100001000000110001001111001 +01110100011001010111001100100000 +01100001011101000010000000100101 +01100100001011100010010100110000 +00111001011001000010111000100101 +00110000001100110110010000100000 +00101000001001010111001100101001 +00001010000000000000000000000000 +00100101011100110011101000100101 +01101001001110100010000001000101 +01110010011100100110111101110010 +00100000001100010000101000000000 +00100101011100110011101000100101 +01101001001110100010000001000101 +01110010011100100110111101110010 +00100000001100100000101000000000 +01110000011100100110010100101101 +00000000000000000000000000000000 +01000010011001010111001101110100 +00100000011001100110111101110010 +01100101011010010110011101101110 +00100000011011010110000101110011 +01110100011001010111001000100000 +01101001011100110010000000100101 +01101001001011110010010101101001 +00001010000000000000000000000000 +00100101011100110011101000100000 +01100101011100100111001001101111 +01110010000010100000000000000000 +00100101011100110011101000100000 +01110000011000010111001101110011 +01101001011101100110010100001010 +00000000000000000000000000000000 +00100101011100110011101000100000 +00100101011100110110110101100001 +01110011011101000110010101110010 +00001010000000000000000000000000 +01001110011001010111011100100000 +01010101010101000100001100100000 +01101111011001100110011001110011 +01100101011101000011101000100000 +00100101011010010000101000000000 +00100101011100110011101000100000 +01110011011011000110000101110110 +01100101000010100000000000000000 +00101101000000000000000000000000 +00100101011100110010010101100100 +00101110001001010011000000111001 +01100100000000000000000000000000 +01010100011100100110100101101101 +00100000011101000110111101101111 +00101101011011000110111101101110 +01100111001000000110110101110000 +01100100001110100010000000100101 +01101001000010100000000000000000 +01000001011001100111010001100101 +01110010001000000110000101110110 +01100111001010000010010101101001 +00101001001011000010000001101101 +01100101011000010110111001010000 +01100001011101000110100001000100 +01100101011011000110000101111001 +00111010001000000010010101101001 +00001010000000000000000000000000 +01100101011100100111001001101111 +01110010001000000110100101101110 +00100000011101000101111101101111 +01110000011100110010110100111110 +01110011011001010111001001110110 +01101111010111110110100101101110 +01101001011101000000000000000000 +01001001011011100110100101110100 +01101001011000010110110001101001 +01111010011001010110010000111010 +00100000011011110110001001110011 +01011111011001000111001001101001 +01100110011101000010000000100101 +01101100011011000110100100001010 +00000000000000000000000000000000 +01001111011001100110011001110011 +01100101011101000010000001100110 +01110010011011110110110100100000 +01101101011000010111001101110100 +01100101011100100011101000100000 +00100000001000000010000000100000 +00100101011100110000101000000000 +01010100001100010011101000100000 +00100101011100110000101000000000 +01010100001100100011101000100000 +00100101011100110000101000000000 +01001111011000100111001101100101 +01110010011101100110010101100100 +00100000011001000111001001101001 +01100110011101000011101000100000 +00100101001110010110100100001010 +00000000000000000000000000000000 +01100100011010010111001101100011 +01100001011100100110010000100000 +01010100001100110010111101010100 +00110100001110100010000001110111 +01100101001000000110110101101001 +01110011011100110010000001010100 +00110001001011110101010000110010 +00001010000000000000000000000000 +01010100001100110011101000100000 +00100101011100110000101000000000 +01010100001101000011101000100000 +00100101011100110000101000000000 +01001101011000010111001101110100 +01100101011100100010000001110100 +01101111001000000111001101101100 +01100001011101100110010100111010 +00100000001001010111001100001010 +00000000000000000000000000000000 +01010011011011000110000101110110 +01100101001000000111010001101111 +00100000011011010110000101110011 +01110100011001010111001000111010 +00100000001001010111001100001010 +00000000000000000000000000000000 +01101101011001010110000101101110 +01010000011000010111010001101000 +01000100011001010110110001100001 +01111001001110100010000000100101 +01110011000010100000000000000000 +01010100001101010011101000100000 +00100101011100110000101000000000 +01010100001101100011101000100000 +00100101011100110000101000000000 +01010011011011000110000101110110 +01100101001000000100111101101110 +01101100011110010010110000100000 +01100011011011000110111101100011 +01101011001000000110001101101100 +01100001011100110111001100100000 +01110011011001010111010000100000 +01110100011011110010000000100101 +01100100000010100000000000000000 +00100101001100100011000001110101 +00000000000000000000000000000000 +00100101011101010000000000000000 +00100101001100010011000101110101 +00100101001100000011100101110101 +00000000000000000000000000000000 +00100101011101010010010100110000 +00111001011101010000000000000000 +01101100011011100110101100111010 +00100101011001000010000001110010 +01111000001110100010010101100100 +00100000011101000111100000111010 +00100101011001000010000000000000 +01101100011011110110001101101011 +00111010001001010110010000100000 +00000000000000000000000000000000 +01110000011101000111000000111010 +00100101011100110010000000000000 +01110011011101100011101000100101 +01100100001000000000000000000000 +01110011011100110011101000100111 +00100101011100110010011100100000 +00000000000000000000000000000000 +01100001011101010111100000100101 +01100100001110100010010101111000 +00100000000000000000000000000000 +01110011011001010110001100111010 +00100101011001000010000001101110 +01110011011001010110001100111010 +00100101011001000010000000000000 +01101101011101010011101000100101 +01110011001000000000000000000000 +01100100011011010111001100111010 +00100101011100110010000000000000 +01100100011101000111100001101101 +00111010001001010110010000100000 +01100100011100100111100001101101 +00111010001001010110010000100000 +00000000000000000000000000000000 +01100100011101000111100001110011 +00111010001001010110010000100000 +01100100011100100111100001110011 +00111010001001010110010000100000 +00000000000000000000000000000000 +01100001011100110111100101101101 +00111010001001010110010000100000 +00000000000000000000000000000000 +01100011011100100111010001110100 +00111010001001010111001100100000 +00000000000000000000000000000000 +01100011011010110110111100111010 +00100101011001000010000000000000 +01110011011001010111010001110000 +00111010001001010110010000100000 +00000000000000000000000000000000 +01110101011000110110111001110100 +00111010001001010110010000100000 +00000000000000000000000000000000 +01101000011001000011101000100101 +01100100001000000110110101100100 +00111010001001010110010000100000 +01100001011001000011101000100101 +01100100001000000000000000000000 +01110000011000110110001000000000 +01110100011001010110110101110000 +00111010001000000010010101100100 +00101110001001010011000000110100 +01100100001000000100001100000000 +00001010000010100101000001010100 +01010000001000000111001101110100 +01100001011101000111010101110011 +00111010001000000000000000000000 +00100101011100110000000000000000 +00001010000010100101001101111001 +01101110011000110010000001101001 +01101110011001100110111100100000 +01101110011011110111010000100000 +01110110011000010110110001101001 +01100100000010100000000000000000 +00001010000010100101001101111001 +01101110011000110110100001110010 +01101111011011100110100101111010 +01100001011101000110100101101111 +01101110001000000111001101110100 +01100001011101000111010101110011 +00111010000010100000000000000000 +01010111010100100010000001010000 +01010100010100000010000001000011 +01101111011100100110010100100000 +01010011011110010110111001100011 +00100000010011010110111101101110 +01101001011101000110111101110010 +00100000001001010111001100000000 +00001010010001010111001101100011 +00100000001111010010000001100101 +01111000011010010111010000000000 +00001010000010100101010001000001 +01001001001000000101010001101001 +01101101011001010011101000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000000000000000000000000000 +00001010000010100100110001101001 +01101110011010110010000001110011 +01110100011000010111010001110101 +01110011001110100000000000000000 +00001010001001010111001100111010 +00100000000000000000000000000000 +01110111011100100111010100110001 +00000000000000000000000000000000 +01001100011010010110111001101011 +00100000011101010111000000100000 +00100000001000000000000000000000 +01001100011010010110111001101011 +00100000011001000110111101110111 +01101110001000000000000000000000 +00101000010100100101100000111010 +00100000001001010110010000101100 +00100000010101000101100000111010 +00100000001001010110010000101001 +00000000000000000000000000000000 +00001010010011010110111101100100 +01100101001110100010000000000000 +01010111010100100010000001001111 +01100110011001100000000000000000 +00001010010000110110110001101111 +01100011011010110010000001101111 +01100110011001100111001101100101 +01110100001110100010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000000000 +00100101001100100110100100101110 +00100101001100000011100101101001 +00100000011100110000000000000000 +00100101011010010010111000100101 +00110000001110010110100100100000 +01110011000000000000000000000000 +00100101001110010110100100100000 +01101110011100110000000000000000 +00001010010011110110111001100101 +00101101011101110110000101111001 +00100000011001000110010101101100 +01100001011110010010000001100001 +01110110011001010111001001100001 +01100111011001010110010000111010 +00100000001000000010000000100000 +00100000001000000010000000000000 +00001010010011110110001001110011 +01100101011100100111011001100101 +01100100001000000110010001110010 +01101001011001100111010000111010 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000000000 +01010111010100100010000001001101 +01100001011100110111010001100101 +01110010001000000010000000000000 +01010111010100100010000001010011 +01101100011000010111011001100101 +00100000001000000010000000000000 +01010111010100100010000001010101 +01101110011010110110111001101111 +01110111011011100010000000000000 +01001100011011110110001101101011 +01100101011001000010000000000000 +01001110011011110100110001101111 +01100011011010110010000000000000 +01000011011000010110110001101001 +01100010011100100110000101110100 +01100101011001000000000000000000 +01010101011011100110001101100001 +01101100011010010110001001110010 +01100001011101000110010101100100 +00000000000000000000000000000000 +01010011011001010111001001110110 +01101111001000000111001101110100 +01100001011101000110010100111010 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000000000 +01010000011010000110000101110011 +01100101001000000111010001110010 +01100001011000110110101101101001 +01101110011001110011101000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000000000 +01001111010011100000101000000000 +01001111010001100100011000001010 +00000000000000000000000000000000 +01000001011101010111100000100000 +01100011011011000110111101100011 +01101011001000000010010101100100 +00100000011100110111010001100001 +01110100011101010111001100111010 +00100000001000000010000000100000 +00100000001000000010000000100000 +00000000000000000000000000000000 +01100101011011100110000101100010 +01101100011001010110010000000000 +00101100001000000110110001101111 +01100011011010110110010101100100 +00000000000000000000000000000000 +00001010010101000110100101101101 +01101001011011100110011100100000 +01110000011000010111001001100001 +01101101011001010111010001100101 +01110010011100110011101000001010 +00000000000000000000000000000000 +01010010011011110111010101101110 +01100100001011010111010001110010 +01101001011100000010000001110100 +01101001011011010110010100100000 +00101000011011010111010100101001 +00111010001000000000000000000000 +00100101011100110010000001110000 +01110011000010100000000000000000 +01001101011000010111001101110100 +01100101011100100010110101110011 +01101100011000010111011001100101 +00100000011001000110010101101100 +01100001011110010011101000100000 +00100000001000000000000000000000 +01001101011000010111001101110100 +01100101011100100010000001010000 +01001000010110010010000001100100 +01100101011011000110000101111001 +01110011001110100010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000000000000000000000000000 +01010100010110000011101000100000 +00100101001110010110010000100000 +01110000011100110010110000100000 +01010010010110000011101000100000 +00100101001110010110010000100000 +01110000011100110000101000000000 +01010011011011000110000101110110 +01100101001000000101000001001000 +01011001001000000110010001100101 +01101100011000010111100101110011 +00111010001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000000000000000000000000000 +01010100011011110111010001100001 +01101100001000000110110001101001 +01101110011010110010000001100001 +01110011011110010110110101101101 +01100101011101000111001001111001 +00111010000000000000000000000000 +00100101001100100011000101100100 +00100000011100000111001100001010 +00000000000000000000000000000000 +01000011011000010110001001101100 +01100101001000000111001001110100 +01110100001000000110010001100101 +01101100011000010111100100111010 +00100000001000000010000000100000 +00100000001000000000000000000000 +01000011011011000110111101100011 +01101011001000000110111101100110 +01100110011100110110010101110100 +00111010000000000000000000000000 +00100101001100100011100101100100 +00100000011100000111001100001010 +00000000000000000000000000000000 +01010000011010000110000101110011 +01100101001000000111001101100101 +01110100011100000110111101101001 +01101110011101000011101000000000 +00100101001100100011011101100100 +00100000011100000111001100001010 +00000000000000000000000000000000 +01010011011010110110010101110111 +00111010001000000010000000100000 +00100000001000000000000000000000 +00100101001100110011001001100100 +00100000011100000111001100001010 +00000000000000000000000000000000 +01010101011100000110010001100001 +01110100011001010010000001100011 +01101111011101010110111001110100 +01100101011100100011101000000000 +00100101001100100011011101100100 +00001010000000000000000000000000 +01110101011011100110101101101110 +01101111011101110110111000000000 +01110011011101000110000101110100 +01110011000000000000000000000000 +00011011010110110011000100100101 +01100011000000000000000000000000 +01000011011011110110110101101101 +01100001011011100110010000100000 +00100010001001010111001100100010 +00111010001000000110010101110010 +01110010011011110111001000100000 +00100101011001000000101000000000 +01010101011011100111001001100101 +01100011011011110110011101101110 +01101001011110100110010101100100 +00100000011000110110111101101101 +01101101011000010110111001100100 +00100000001000100010010101110011 +00100010001011100000101000000000 +01110111011100100110001100100011 +00100000000000000000000000000000 +00100101011000110000000000000000 +01000101011011010111000001110100 +01111001001000000110100101101110 +01101001011101000010000001110011 +01100011011100100110100101110000 +01110100001011100010111000101110 +00001010000000000000000000000000 +01100101011110000110010101100011 +01110101011101000110100101101110 +01100111001110100010000000100101 +01110011000010100000000000000000 +00101101001011010010000001100010 +01110101011010010110110001110100 +00101101011010010110111000100000 +01110011011000110111001001101001 +01110000011101000010000000101101 +00101101000010100000000000000000 +00101000011001010110110101110000 +01110100011110010010100100001010 +00000000000000000000000000000000 +01010111010100100010000001000011 +01101111011100100110010100100000 +01100010011101010110100101101100 +01100100001110100010000000100101 +01110011001001010111001100001010 +00000000000000000000000000000000 +00100000001010000111010101101110 +01110011011101010111000001110000 +01101111011100100111010001100101 +01100100001000000110010001100101 +01110110011001010110110001101111 +01110000011001010111001000100000 +01100010011101010110100101101100 +01100100001010010000000000000000 +01000010011101010110100101101100 +01110100001110100010000000100101 +01110011001000000010010101110011 +00100000011000100111100100100000 +00100101011100110000101000000000 +01000010011101010110100101101100 +01110100001000000110011001101111 +01110010001000000010010101100100 +00100000011010110100001000100000 +01010010010000010100110100101100 +00100000011100110111010001100001 +01100011011010110010000001101001 +01110011001000000010010101100100 +00100000011000100111100101110100 +01100101011100110000101000000000 +01010111010000010101001001001110 +01001001010011100100011100111010 +00100000011010000110000101110010 +01100100011101110110000101110010 +01100101001000000111001101100001 +01111001011100110010000000100101 +01101001011010110100001000100000 +00111100001111010010000001010010 +01000001010011010010000000111100 +00100000001001010110100101101011 +01000010000010100000000000000000 +01110110011001010111001000000000 +00100101011100110011101100100000 +00100101011100110010000000100101 +01110011000010100000000000000000 +01010101011011100110101101101110 +01101111011101110110111000100000 +01110011011101010110001001100011 +01101111011011010110110101100001 +01101110011001000010000000100010 +00100101011100110010001000001010 +00000000000000000000000000000000 +01110011011101000110000101110010 +01110100000000000000000000000000 +01110011011101000110111101110000 +00000000000000000000000000000000 +01100101001100100110010100000000 +01100100011001010110110001100001 +01111001000000000000000000000000 +01100111011011010000000000000000 +01100001011000100111001101100011 +01100001011011000000000000000000 +01101101011011110110010001100101 +00000000000000000000000000000000 +01110011011101000110111101110000 +01110000011001010110010000000000 +01110010011101010110111001101110 +01101001011011100110011100000000 +01110000001100100111000000000000 +01000001011101100110000101101001 +01101100011000010110001001101100 +01100101001000000110001101101111 +01101101011011010110000101101110 +01100100011100110011101000001010 +00000000000000000000000000000000 +00100000001000000010010101110011 +00001010000000000000000000000000 +01101000011001010110110001110000 +00000000000000000000000000000000 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000001110100010010100110000 +00110010011110000011101000100101 +00110000001100100111100000111010 +00100101001100000011001001111000 +00111010001001010011000000110010 +01111000000000000000000000000000 +01100111011001010111010000000000 +01100111011001010111010001110000 +00000000000000000000000000000000 +01110011011001010111010000000000 +01110011011001010111010001110000 +00000000000000000000000000000000 +01001101010000010100001100101101 +01100001011001000110010001110010 +01100101011100110111001100111010 +00100000001001010111001100001010 +00000000000000000000000000000000 +01101101011000010110001100000000 +01110010011001010111001101100101 +01110100000000000000000000000000 +01101101011000010111100000000000 +01110000011100100110100101101110 +01110100010111110111010001100001 +01110011011010110101111101110100 +01101001011011010110010101011111 +01110100011010000111001001100101 +01110011011010000110111101101100 +01100100001000000010010101100100 +00001010000000000000000000000000 +00100000011010010111010001100101 +01110010011000010111010001101001 +01101111011011100111001100100000 +00100000001000000010000000100000 +01110011011001010110001101101111 +01101110011001000111001100101110 +01101101011010010110001101110010 +01101111011100110010000000100000 +00100000001000000110110101100001 +01111000010111110110110101110011 +00100000011011100110000101101101 +01100101000010100000000000000000 +00100000001000000010010100111001 +01101100011010010010000000100000 +00100000001001010011100101101100 +01101001001011100010010100110000 +00110110011011000110100100100000 +00100101001110010110110001100100 +00100000001001010111001100001010 +00000000000000000000000000000000 +01110000011100110000000000000000 +00100101011101010000101000000000 +01010101011100110110000101100111 +01100101001110100010000001110010 +01100101011001100111001001100101 +01110011011010000010000000111100 +01110011011001010110001101101111 +01101110011001000111001100111110 +00001010000000000000000000000000 +01110010011001010110011001110010 +01100101011100110110100000000000 +01110011011101000110000101110100 +01101001011100110111010001101001 +01100011011100110010000001101110 +01101111011101110010000001101111 +01100110011001100000101000000000 +01100010011101000111001100000000 +01101111011001100110011000000000 +01110011011101000110000101110100 +00000000000000000000000000000000 +01010111011100100110111101101110 +01100111001000000111000001100001 +01110010011000010110110101100101 +01110100011001010111001000001010 +00000000000000000000000000000000 +01100101011100100110000101110011 +01100101000000000000000000000000 +01000011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000110010101110010 +01100001011100110110010100100000 +01000100010000100000101000000000 +01100001011001000110010000000000 +01010011010001100101000000100000 +01000100010000100010000001101001 +01110011001000000110011001110101 +01101100011011000000101000000000 +01001001001100100100001100100000 +01100101011100100111001001101111 +01110010000010100000000000000000 +01010011010001100101000000100000 +01100100011000010111010001100001 +01100010011000010111001101100101 +00100000011001010111001001110010 +01101111011100100010000000101000 +00100101011001000010100100001010 +00000000000000000000000000000000 +00100101011001000010000001010011 +01000110010100000111001100100000 +01101001011011100010000001000100 +01000010000010100000000000000000 +01110011011010000110111101110111 +00000000000000000000000000000000 +01010011010001100101000000100000 +01100100011000010111010001100001 +01100010011000010111001101100101 +00100000011001010110110101110000 +01110100011110010000101000000000 +00100101011001000011101000100000 +01010000010011100011101000000000 +00100000011001000101010001111000 +00111010001000000010010100111000 +01100100001000000110010001010010 +01111000001110100010000000100101 +00111000011001000010000001100001 +01101100011100000110100001100001 +00111010001000000010010100111000 +01100100000010100000000000000000 +01101101011000010111010001100011 +01101000000000000000000000000000 +01001110011011110010000001010011 +01000110010100000010111000001010 +00000000000000000000000000000000 +01010011010001100101000000100000 +01110010011001010110000101100100 +00100000011001010111001001110010 +01101111011100100000101000000000 +01000011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000110110101100001 +01110100011000110110100000100000 +01110100011011110010000001000100 +01000010000010100000000000000000 +01010011010001100101000000100000 +01101101011000010111010001100011 +01101000011001010110010000101100 +00100000011001000101010001111000 +00111101001001010110010000100000 +01100100010100100111100000111101 +00100101011001000010000001100001 +01101100011100000110100001100001 +00111101001001010110010000001010 +00000000000000000000000000000000 +01100101011011100110000100000000 +01110011011001100111000000000000 +01101001011011100110100101110100 +00000000000000000000000000000000 +01100011011011000000000000000000 +01110011011100000111001100000000 +01100111011100000111001100000000 +00100101011001000010000000100101 +01100100000010100000000000000000 +01110011011001000110000101100011 +00000000000000000000000000000000 +01100111011001000110000101100011 +00000000000000000000000000000000 +01100011011010000110010101100011 +01101011011101100110001101101111 +00000000000000000000000000000000 +01110000011011000110110000000000 +01100110011011110111001001100011 +01100101000000000000000000000000 +01000110011011110111010101101110 +01100100001000000111000001101000 +01100001011100110110010100100000 +01110100011100100110000101101110 +01110011011010010111010001101001 +01101111011011100010000001101001 +01101110001000000100010101000101 +01010000010100100100111101001101 +00111010001000000010010101100100 +01110000011100110000101000000000 +01001101011001010110000101110011 +01110101011100100110100101101110 +01100111001000000111010000110010 +00101111011101000011010000100000 +01110000011010000110000101110011 +01100101001000000111010001110010 +01100001011011100111001101101001 +01110100011010010110111101101110 +00101110001011100010111000001010 +00000000000000000000000000000000 +01100011011000010110110001101001 +01100010011100100110000101110100 +01101001011011110110111000000000 +01110011011001010111010001110011 +01100101011000110000000000000000 +01110011011001010111010001101110 +01110011011001010110001100000000 +01110010011000010111011100000000 +00100101011100110010000000101011 +00100101011001000010000001101110 +01100001011011100110111101110011 +01100101011000110110111101101110 +01100100011100110010111000001010 +00000000000000000000000000000000 +01110100011010010110110101100101 +00000000000000000000000000000000 +01100111011101010110100100000000 +01100110011100110000000000000000 +01100110011100110110010100000000 +01110011011001000110001000000000 +01001111010011100000000000000000 +01001111010001100100011000000000 +01100101011011100110000101100010 +01101100011001010000000000000000 +01100100011010010111001101100001 +01100010011011000110010100000000 +01110000011010000110000101110011 +01100101001000000111010001110010 +01100001011000110110101101101001 +01101110011001110010000000100101 +01110011000010100000000000000000 +01110000011101000111001001100001 +01100011011010110000000000000000 +01010000010100000101001101001001 +00100000011101100110010101110010 +01100010011011110111001101101001 +01110100011110010011101000100000 +00100101001100000011100001101100 +01111000000010100000000000000000 +01110110011001010111001001100010 +01101111011100110110010100000000 +01000011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000110010101110010 +01100001011100110110010100100000 +01101001011011100110100101110100 +00100000011100110110001101110010 +01101001011100000111010000001010 +00000000000000000000000000000000 +01000011011011110111010101101100 +01100100001000000110111001101111 +01110100001000000110000101100100 +01100100001000000111010001101000 +01100101001000000110001101101111 +01101101011011010110000101101110 +01100100000010100000000000000000 +01001111010010110010111000001010 +00000000000000000000000000000000 +01100010011011110110111101110100 +00000000000000000000000000000000 +00100101011100110010110000100000 +00100101011100110010000000100101 +01100100001011000010000000100101 +01100100001011000010000000100101 +00110000001100100110010000111010 +00100101001100000011001001100100 +00111010001001010011000000110010 +01100100000000000000000000000000 +00100101011100110010000000100101 +00110010011001000010000000100101 +00110000001100100110010000111010 +00100101001100000011001001100100 +00111010001001010011000000110010 +01100100000000000000000000000000 +00100101001101000110010000101101 +00100101001100000011001001100100 +00101101001001010011000000110010 +01100100001011010010010100110000 +00110010011001000011101000100101 +00110000001100100110010000111010 +00100101001100000011001001100100 +00000000000000000000000000000000 +00011011010110110011000000100101 +01100100001110110011001100100101 +01100100011011010000000000000000 +00011011010110110110110100000000 +00011011010110110010010101100100 +00111011001001010110010001100110 +00000000000000000000000000000000 +00011011010110110011001001001010 +00011011010110110011000100111011 +00110001010010000000000000000000 +01010011011101010110111000000000 +01001101011011110110111000000000 +01010100011101010110010100000000 +01010111011001010110010000000000 +01010100011010000111010100000000 +01000110011100100110100100000000 +01010011011000010111010000000000 +01001010011000010110111000000000 +01000110011001010110001000000000 +01001101011000010111001000000000 +01000001011100000111001000000000 +01001101011000010111100100000000 +01001010011101010110111000000000 +01001010011101010110110000000000 +01000001011101010110011100000000 +01010011011001010111000000000000 +01001111011000110111010000000000 +01001110011011110111011000000000 +01000100011001010110001100000000 +01001100011011110110111101110000 +01110011001000000111000001100101 +01110010001000000110101001101001 +01100110011001100111100100111010 +00100000001001010110100100001010 +00000000000000000000000000000000 +00100101011100110011101000100000 +01101110011011110010000001110011 +01101111011000110110101101100101 +01110100001000000111001101101100 +01101111011101000111001100100000 +01101100011001010110011001110100 +00001010000000000000000000000000 +01110111011100100011000000000000 +01101110011001010111010000101101 +01100010011010000000000000000000 +00110000001100010011001000110011 +00110100001101010011011000110111 +00111000001110010110000101100010 +01100011011001000110010101100110 +00000000000000000000000000000000 +01101110011011110010000001110000 +01100110011010010110110001110100 +01100101011100100010000001110010 +01110101011011000110010100101101 +01110011011001010111010000100001 +00001010000000000000000000000000 +01110000011001100110100101101100 +01110100011001010111001000111010 +00100000011101110111001001101111 +01101110011001110010000001101101 +01100001011001110110100101100011 +00100000011011100111010101101101 +01100010011001010111001000100000 +00101000011001110110111101110100 +00100000001100000111100000100101 +01111000001010010000101000000000 +01110000011001100110100101101100 +01110100011001010111001000111010 +00100000011101110111001001101111 +01101110011001110010000001110010 +01110101011011000110010100101101 +01110011011001010111010000101100 +00100000011000110110000101101110 +00100111011101000010000001100001 +01110000011100000110110001111001 +00001010000000000000000000000000 +01000101011100100111001001101111 +01110010001110100010000001001101 +01101001011011100110100101100011 +00100000010010000100010001001100 +00100000011101100110010101110010 +01110011011010010110111101101110 +00100000001001010110010000100000 +01101110011011110111010000100000 +01110011011101010111000001110000 +01101111011100100111010001100101 +01100100001000000110001001111001 +00100000011100110111011100001010 +00000000000000000000000000000000 +01010111011000010111001001101110 +01101001011011100110011100111010 +00100000010011010110100101101110 +01101001011000110010000001110010 +01100101011000110110010101101001 +01110110011001010110010000100000 +01100101011100100111001001101111 +01101110011001010110111101110101 +01110011001000000110011001110010 +01100001011011010110010100001010 +00000000000000000000000000000000 +01010111011000010111001001101110 +01101001011011100110011100111010 +00100000010011010110100101101110 +01101001011000110010000001010010 +01111000001000000110011001101001 +01100110011011110010000001100110 +01110101011011000110110000101100 +00100000011001010111100001110000 +01100101011000110111010000100000 +01110111011100100110111101101110 +01100111001000000110011001110010 +01100001011011010110010101110011 +00001010000000000000000000000000 +01010111011000010111001001101110 +01101001011011100110011100111010 +00100000011101000111100000100000 +01101110011011110111010000100000 +01110100011001010111001001101101 +01101001011011100110000101110100 +01100101011001000010000001101001 +01101110011001100110100101101110 +01101001011101000110010100100000 +01101101011000110111001000111101 +00110000011110000010010101111000 +00001010000000000000000000000000 +01010111011000010111001001101110 +01101001011011100110011100111010 +00100000011101000111100000100000 +01110100011010010110110101100101 +01110011011101000110000101101101 +01110000001000000110111001100101 +01110110011001010111001000100000 +01100010011001010110001101100001 +01101101011001010010000001100001 +01110110011000010110100101101100 +01100001011000100110110001100101 +00001010000000000000000000000000 +01100100011001010111011000100000 +00100000001100000111100000100101 +00110000001110000110110001111000 +00100000010000000010000000100101 +00110000001101100110110001111000 +00101100001000000010010101110011 +00001010000000000000000000000000 +01100110011100000110011101100001 +00101101011000010111001001100101 +01100001000000000000000000000000 +01000101011100100111001001101111 +01110010001000000010010101100100 +00100000011101110110100001101001 +01101100011001010010000001110010 +01100101011000010110010001101001 +01101110011001110010000001110100 +00110010001101000111000000100000 +01100110011100100110111101101101 +00100000011100110111010001101111 +01110010011000010110011101100101 +00001010000000000000000000000000 +01110100001100100011010001110000 +00100000011100100110010101100001 +01100100001000000110011001110010 +01101111011011010010000001110011 +01110100011011110111001001100001 +01100111011001010011101000100000 +00100101011001000010000001110000 +01110011000010100000000000000000 +01010111011000010110100101110100 +01101001011011100110011100100000 +01100110011011110111001000100000 +01101100011010010110111001101011 +00101110001011100010111000001010 +00000000000000000000000000000000 +01001100011011110110001101101011 +01101001011011100110011100100000 +01010000010011000100110000101110 +00101110001011100000101000000000 +01000011011000010110110001101001 +01100010011100100110000101110100 +01101001011011100110011100100000 +01010010010110000010000001110100 +01101001011011010110010101110011 +01110100011000010110110101110000 +01100101011100100010111000101110 +00101110000010100000000000000000 +01000110011000010110100101101100 +01100101011001000000000000000000 +01010011011101010110001101100011 +01100101011100110111001100000000 +01010111011100100110111101110100 +01100101001000000110111001100101 +01110111001000000111010000110010 +00110100011100000010000001110110 +01100001011011000111010101100101 +00111010001000000010010101100100 +00100000011100000111001100100000 +00101000001001010111001100101001 +00001010000000000000000000000000 +00100000010001010100111001001111 +01010011010100000100001100000000 +00100101011100110010010101110011 +00111010000000000000000000000000 +01001001010011100101011001000001 +01001100010010010100010000000000 +00100101011001000010111000100101 +00110000001101000110010000000000 +01110100011001010110110101110000 +00000000000000000000000000000000 +01110100011001010110110101110000 +01100101011100100110000101110100 +01110101011100100110010100000000 +01110011011001100111000000111010 +00100000011000110110111101110010 +01110010011101010111000001110100 +01100101011001000010000001100011 +01101000011001010110001101101011 +01110011011101010110110100001010 +00000000000000000000000000000000 +01110011011001000110001001100110 +01110011001110100010000001100110 +01101111011101010110111001100100 +00100000011000010111010000100000 +00100101011010010010000001101001 +01101110001000000100011001101100 +01100001011100110110100000001010 +00000000000000000000000000000000 +01110011011001000110001001100110 +01110011001110100010000001100110 +01101111011101010110111001100100 +00100000011000010111010000100000 +00100101011010010010000001101001 +01101110001000000101011100110001 +00001010000000000000000000000000 +01110011011001000110001001100110 +01110011001110100010000001100110 +01101111011101010110111001100100 +00100000011000010111010000100000 +00100101011010010010000001101001 +01101110001000000100100100110010 +01000011001010000011000001111000 +00100101001100100101100000101001 +00001010000000000000000000000000 +01100110011010010110110001100101 +00100000001100000111100000100101 +00110000001110000111100000100000 +01000000001000000010010100110100 +01101001001011000010000001101110 +01100001011011010110010100100000 +00100101011100110000101000000000 +00100101011100110011101000100000 +01010011010001000100001000100000 +01100101011100100111001001101111 +01110010000010100000000000000000 +00100101011100110011101000100000 +01010011010001000100001000100000 +01100110011010010110110001100101 +00100000011010010111001100100000 +01100101011011010111000001110100 +01111001000010100000000000000000 +00100101011100110011101000100000 +01010101011100110110100101101110 +01100111001000000101011100110001 +00100000011100110110010101110010 +01101001011000010110110000100000 +01101110011101010110110101100010 +01100101011100100000101000000000 +00100101011100110011101000100000 +01100110011000010110100101101100 +01110101011100100110010100001010 +00000000000000000000000000000000 +00100101011100110011101000100000 +01010011010001000100001000100000 +01100101011100100111001001101111 +01110010001011000010000001100011 +01100001011011100010011101110100 +00100000011100110110000101110110 +01100101000010100000000000000000 +01000001011001000110010001101001 +01101110011001110010000001101110 +01100101011101110010000001010011 +01000110010100000010000001100101 +01101110011101000111001001111001 +00001010000000000000000000000000 +01010101011100000110010001100001 +01110100011001010010000001100101 +01111000011010010111001101110100 +01101001011011100110011100100000 +01010011010001100101000000100000 +01100101011011100111010001110010 +01111001000010100000000000000000 +00101101001011010010000001110101 +01110011011001010111001000101101 +01100100011001010110011001101001 +01101110011001010110010000100000 +01110011011000110111001001101001 +01110000011101000010000000101101 +00101101000010100000000000000000 +01000101011100100110000101110011 +01101001011011100110011100100000 +01000110011011000110000101110011 +01101000001010000011000001111000 +00100101011110000010100100101110 +00101110001011100000101000000000 +01000101011100100110000101110011 +01101001011011100110011100100000 +01000101010001010101000001010010 +01001111010011010010000000100101 +01100100001000000010100000110000 +01111000001001010111100000101001 +00101110001011100010111000001010 +00000000000000000000000000000000 +01000101011100100110000101110011 +01101001011011100110011100100000 +00110001001011010101011100100000 +01000101010001010101000001010010 +01001111010011010010000000101000 +00110000011110000010010101111000 +00101001001011100010111000101110 +00001010000000000000000000000000 +01100110011010010110110001100101 +01101110011000010110110101100101 +00111010001000000010010101110011 +00111011001000000110011001101001 +01110010011100110111010000111010 +00100000001001010111100000111011 +00100000011011000110000101110011 +01110100001110100010000000100101 +01111000000010100000000000000000 +01000110011011110111001001101101 +01100001011101000111010001101001 +01101110011001110010000001010011 +01000100010000100100011001010011 +00100000011010010110111000100000 +01000110011011000110000101110011 +01101000001010000011000001111000 +00100101011110000010100100101110 +00101110001011100000101000000000 +01001001001100100100001100100000 +01000101010001010101000001010010 +01001111010011010010000001101110 +01101111011101000010000001100110 +01101111011101010110111001100100 +00001010000000000000000000000000 +01000110011011110111001001101101 +01100001011101000111010001101001 +01101110011001110010000001010011 +01000100010000100100011001010011 +00100000011010010110111000100000 +01001001001100100100001100100000 +01000101010001010101000001010010 +01001111010011010010000000100101 +01100100001000000010100000110000 +01111000001001010111100000101001 +00101110001011100010111000001010 +00000000000000000000000000000000 +00110001001011010101011101101001 +01110010011001010010000001000101 +01000101010100000101001001001111 +01001101001000000110111001101111 +01110100001000000110011001101111 +01110101011011100110010000001010 +00000000000000000000000000000000 +01000110011011110111001001101101 +01100001011101000111010001101001 +01101110011001110010000001010011 +01000100010000100100011001010011 +00100000011010010110111000100000 +00110001001011010101011100100000 +01000101010001010101000001010010 +01001111010011010010000000101000 +00110000011110000010010101111000 +00101001001011100010111000101110 +00001010000000000000000000000000 +01100101011001010111000001110010 +01101111011011010000000000000000 +01101111011001100110011001110011 +01100101011101000010000000100101 +00110100011010010010000000101000 +00110000011110000010010100110000 +00110011011110000010100100111010 +00100000001001010011001101101001 +00100000001010000011000001111000 +00100101001100000011001001111000 +00101001000010100000000000000000 +01110111011100100110100101110100 +01100101001010000011000001111000 +00100101011110000010110000100000 +00100101011010010010100100111010 +00100000011100100110010101110011 +01110101011011000111010000100000 +00111101001000000010010101101001 +00001010000000000000000000000000 +01110010011001010110000101100100 +00101000001100000111100000100101 +01111000001011000010000000100101 +01101001001010010011101000100000 +01110010011001010111001101110101 +01101100011101000010000000111101 +00100000001001010110100100001010 +00000000000000000000000000000000 +01100100011001010111011001101001 +01100011011001010010000000100101 +01101001001110100010000000100101 +00110000001110000111100000100101 +00110000001110000111100000001010 +00000000000000000000000000000000 +01110100011001010110110101110000 +00111010001000000010010101100100 +00101110001001010011000000110100 +01100100000010100000000000000000 +01110111001100010000000000000000 +01110111001100010111001000000000 +01110111001100010111011100000000 +00111100010101010110111001101011 +01101110011011110111011101101110 +00111110000000000000000000000000 +01110011011011110110011001110100 +01110000011011000110110000111010 +00100000011010010111001001110001 +01110011001000000010010101100100 +00100000011100110110010101110001 +00100000001001010111001100100000 +01101101011011110110010001100101 +00100000001001010110010000100000 +01100001011011000110100101100111 +01101110011011010110010101101110 +01110100010111110111001101110100 +01100001011101000110010100100000 +00100101011001000010000001001000 +01001100001001010110010000100000 +01001101010011000010010101100100 +00100000010010000101100100111101 +00100101011001000010000001001101 +01011001001111010010010101100100 +00100000010001000110010101101100 +01000011011011100111010000111101 +00100101011001000000101000000000 +01110011011101000110000101110010 +01110100001011010110010101111000 +01110100000000000000000000000000 +01110111011000010110100101110100 +00101101011001010111100001110100 +00000000000000000000000000000000 +01110011011101000110000101110010 +01110100001011010110100001100101 +01101100011100000110010101110010 +00000000000000000000000000000000 +01110111011000010110100101110100 +00101101011010000110010101101100 +01110000011001010111001000000000 +01110011011101000110000101110010 +01110100001011010110110101100001 +01101001011011100000000000000000 +01110111011000010110100101110100 +00101101011011010110000101101001 +01101110000000000000000000000000 +01110010011001010110000101100100 +01111001000000000000000000000000 +01100011011011000110010101100001 +01110010001011010110010001100001 +01100011011100110000000000000000 +01110111011000010110100101110100 +00101101011000110110110001100101 +01100001011100100010110101100100 +01100001011000110111001100000000 +10111010110111000000111111111110 +00111011100110101100101000000000 +00000000000000100000000100000000 +00000000000000100000001000000000 +00000000000000100000001100000000 +00000000000000100000010000000000 +00000000000000100000010100000000 +00000000000000100000011000000000 +00000000000000100000011100000000 +00000000000011110100001001000000 +01000001110001100100111001101101 +01111111111111111111111111111111 +00000000000010000000000000110000 +11000100011001010011011000000000 +11111111111100001011110111000000 +00000000000001111101000000000000 +00111011100110101100100111111111 +00000000000000010000000001000011 +00000000000000010000000001000100 +00000000000000010101000110000000 +00000000010111101110000000000000 +00000001000000000000000000000001 +00010001001000100011001101000100 +11100000000000000001111111111111 +00000000001001000110000000000000 +00000001010101010100000000000000 +00000010010001101000000000000000 +00010011010101111000000000000000 +00001111111111111111111111111111 +00000101100101101000001011110000 +00001110111001101011001001111111 +00000001001100010010110100000010 +00000001001100010010110100001010 +01000110011010010110110001100101 +01000100011000010111010001100001 +01110011011001100111000000101101 +01010011010001000100001000101101 +01101101011000010110001100101101 +01100011011000010110110001101001 +01110111011100100010110101101001 +00000000001111010000000100110111 +10000000000000000000000000011111 +00000000100110001001010110110110 +11000100000000000000000000000001 +00000000000000011000011010100000 +00000000111111111111111111111111 +11111111111111011011011000010000 +00000000000000100100100111110000 +00000101111101011110000100000000 +00001011111010111100001000000000 +11111010000010100001111100000000 +00000001001100010010110100000011 +00000001000110110001100100000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000101110111111000 +00000000000000000101111000000100 +00000000000000000101111000010100 +00000000000000000101111000100000 +00000000000000000101111000101100 +00000000000000000101111000111000 +00000000000000000101111001000100 +00000000000000000000101010100000 +00000000000000000000101100010000 +00000000000000000000111000101000 +00000000000000000000111000101000 +00000000000000000000111000101000 +00000000000000000000111000101000 +00000000000000000000111000101000 +00000000000000000000111000101000 +00000000000000000000101110001100 +00000000000000000000101111111100 +00000000000000000000111000101000 +00000000000000000000110010010000 +00000000000000000000110111111100 +01110111011100100111000001100011 +01011111011101000110100101101101 +01100101010111110110000101100100 +01101010011101010111001101110100 +01011111011011110110011001100110 +01110011011001010111010000000000 +01110111011100100101111101110011 +00110001000000000000000000000000 +01110111011100100111000001100011 +01011111011101000110100101101101 +01100101010111110110000101100100 +01101010011101010111001101110100 +00000000000000000000000000000000 +01110111011100100111000001100011 +01011111011101000110100101101101 +01100101010111110111001101100101 +01110100000000000000000000000000 +01110111011100100111000001100011 +01011111011101000110100101101101 +01100101010111110110011101100101 +01110100000000000000000000000000 +01110111011100100111000001100011 +01011111011011100110010101110100 +01011111011100110110010101101110 +01100100000000000000000000000000 +00000001000110110001100100000000 +00000000000000000000000110000000 +11000010000000000000000000001110 +01110000011101000111000001100100 +01011111011011100110010101110100 +01101001011001100101111101100011 +01110010011001010110000101110100 +01100101010111110111001101101111 +01100011011010110110010101110100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000100101100001000 +00000000000000000100101100101000 +00000000000000000100101100110100 +00000000000000000100101101000100 +00000000000000000100101101100100 +00000000000000000100101101110100 +00000000000000000100101111011100 +00000000000000000100101110010100 +00000000000000000100101010011100 +00000000000000000100101011100000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000010000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000100000000100000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000110000000100000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000001000000001000000001 +00000001000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000001010000001000000001 +00000001000000010000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000001100000001100000010 +00000001000000010000000100000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000001110000001100000010 +00000001000000010000000100000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000010000000010000000010 +00000010000000010000000100000001 +00000001000000000000000000000000 +00000000000000000000000000000000 +00000000000010010000010000000011 +00000010000000010000000100000001 +00000001000000010000000000000000 +00000000000000000000000000000000 +00000000000010100000010100000011 +00000010000000100000000100000001 +00000001000000010000000100000000 +00000000000000000000000000000000 +00000000000010110000010100000011 +00000010000000100000000100000001 +00000001000000010000000100000001 +00000000000000000000000000000000 +00000000000011000000011000000100 +00000011000000100000001000000001 +00000001000000010000000100000001 +00000001000000000000000000000000 +00000000000011010000011000000100 +00000011000000100000001000000001 +00000001000000010000000100000001 +00000001000000010000000000000000 +00000000000011100000011100000100 +00000011000000100000001000000010 +00000001000000010000000100000001 +00000001000000010000000100000000 +00000000000011110000011100000101 +00000011000000110000001000000010 +00000001000000010000000100000001 +00000001000000010000000100000001 +00000000000000000000000000000000 +00000000000000000000100101010101 +01001101010000110011111010111100 +00000000000000000000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000101111010111100 +00000000001011000000000100000000 +00000000000000010000000000000000 +00000000000000000101111011000100 +00000000001011000000000100000000 +00000001011111110000000000000000 +00000000000000000101111011010000 +00000000001101100000000100000001 +00000101011111110000000000000000 +00000000000000000101111011011100 +00000000001101100000000100000001 +00000101011111110000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000101111100000000 +00000000001011000000000000000000 +00000010000000010000000000000000 +00000000000000000101111011101000 +00000000001101100000000000000000 +00000011000000100000000000000000 +00000000000000000101111011110100 +00000000001101100000000000000001 +00000101011111110000000000000000 +00000000000000000101111100001100 +00000000010000000000000000000000 +00000101000000000000000000000000 +00000000000000000101111100011000 +11111111111111110000000000000000 +00000101011111110000000000000000 +00000000000000000101111100100100 +11111111111111110000000000000000 +00000100011111110000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001000100100100000 +00000000000000001000101000111100 +00000000000000001000101000100000 +00000000000000001000111001010000 +00000000000000001000111011010000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001000100101100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000101111110110100 +00000000000000000101111110110100 +00000000000000000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001000010100001000 +00000000000000001000111101010000 +00000000000000000000000000000000 +00000000000000001000111110010000 +00000000000000001000111110111000 +00000000000000001000111111101000 +00000000000000001001000000010000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001001000000110000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000001000100101111000 +00000000000000001000100111100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000001111011100 +00000000000000000000010000010100 +00000000000000000000010010100100 +00000000000000000000010010101100 +00000000000000000000010100000100 +00000000000000000000010100110000 +00000000000000000000010110001000 +00000000000000000000010110101100 +00000000000000000000011001110000 +00000000000000000000011001111000 +00000000000000000000011010000000 +00000000000000000000011011100100 +00000000000000000000011100000000 +00000000000000000000010011010000 +00000000000000000000000000000000 +00000000000000000001001001111100 +00000000000000000001000111110100 +00000000000000000001000110011000 +00000000000000000001000101000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000001000100011000 +00000000000000000001011011101100 +00000000000000000001011011001100 +00000000000000000001010011000100 +00000000000000000001001100010000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000001000000000 +00000000000000000000000000000000 +00000000000000001001000101010000 +00000000000000001000101101101000 +00000000000000001000110001100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000100 +00000000000000000000000000001000 +00000000000000000000000000001111 +00000000000000000000000100000000 +00000000000000000000001000000000 +00000000000000000000000100101100 +00000100011000110110001010100000 +00000000000000000111111110110000 +00000000000000001001010000110100 +00000000000000000000000000000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000011101100000000 +00000000000000000011101111100100 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +01000100001100110010001000010001 +00000000000000000000000000000000 +00000100000000000000000000000000 +00010011100000000100011011100010 +00000001000000000000000000000000 +10010000000000001100111111101010 +00000001000000000000000000000000 +00010000100000010101011111110011 +00000001000000000000000000000000 +00001011111000001111111111111111 +00000001000000000000000000000000 +10001000111000001111111111111111 +00000001000000000000000000000000 +00001000111000011111111111111111 +00000001000000000000000000000000 +00011011000000000010000011100000 +00000001000000000000000000000000 +10011000000000001100000011101011 +00000001000000000000000000000000 +01101011001000010011000011100000 +00000001000000000000000000000000 +01101001011000010000110111100000 +00000001000000000000000000000000 +00010000101000111000100100000000 +00000100000000000000000000000000 +01101011000000110010000011110000 +00000001000000000000000000000000 +10111011000011011000000000000001 +00000100000000000000000000000000 +00110011111000110001111011110001 +00000001000000000000000000000000 +00110001110000110101111111111001 +00000001000000000000000000000000 +00101011000000110000000011100001 +00000001000000000000000000000000 +01000011110000110000000011100001 +00000001000000000000000000000000 +01111001010000010001010000000000 +00000100000000000000000000000000 +11001011001001010000000001100000 +00000000000000000000000000000000 +11010011001001010000001001100000 +00000000000000000000000000000000 +01010000111010101000000100000001 +00000100000000000000000000000000 +10000001110010001000000000000001 +00000100000000000000000000000000 +10000000001011111100000100000000 +00000100000000000000000000000000 +01011011000010010000000010000000 +00000001000000000000000000000000 +01011001000010010010000010000000 +00000001000000000000000000000000 +11000000011010101100000100000000 +00000100000000000000000000000000 +01100011000010010111101011111101 +00000001000000000000000000000000 +11111000100010101000000100000001 +00000100000000000000000000000000 +11110100100010101000000100000001 +00000100000000000000000000000000 +00000000000000000000000000000000 +00001000000000000000000000000000 +01010011010001000100001000101101 +00000000000001010000000100000001 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000001101111111 +01000110011010010110110001100101 +01000100011000010111010001100001 +00101110001000000010000000100000 +00000000000000000000000000000001 +00000000000000000000000000000000 +00101110001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000000000 +00000000000000000000000000000000 +00000000000000000000000000000110 +00000000000000000000000000000000 +00000000000000000000000101000000 +00000000000000000000000000000000 +00000000000000000000001000111111 +01000110011010010110110001100101 +01000100011000010111010001100001 +01110111011100100010110101101001 +00000000000000000000000000000001 +00000000000000000000000000000000 +01110111011100100010110101101001 +01101110011010010111010000100000 +00100000001000000010000000100000 +00100000001000000010000000100000 +00100000001000000010000000000001 +00000000000000000000000000000000 +00000000000000000000000000000110 +00000000000000000000000000000000 +00000000000000000000001001000000 +00000000000000000000000000000000 +00000000000000000000001010111111 +01000110011010010110110001100101 +01000100011000010111010001100001 +01100011011000010110110001101001 +00000000000000000000000000000001 +00000000000000000000000000000000 +01100011011000010110110001101001 +01100010011100100110000101110100 +01101001011011110110111000100000 +00100000001000000010000000100000 +00100000001000000010000000000001 +00000000000000000000000000000000 +00000000000000000000000000000110 +00000000000000000000000000000000 +00000000000000000000001011000000 +00000000000000000000000000000000 +00000000000000000000001011000101 +01000110011010010110110001100101 +01000100011000010111010001100001 +01101101011000010110001100101101 +00000000000000000000000000000001 +00000000000000000000000000000000 +01101101011000010110001100101101 +01100001011001000110010001110010 +01100101011100110111001100100000 +00100000001000000010000000100000 +00100000001000000010000000000001 +00000000000000000000000000000000 +00000000000000000000000000000110 +00000000000000000000000000000000 +00000000000000000000001100000000 +00000000000000000000000000000000 +00000000000000000000001101111111 +01000110011010010110110001100101 +01000100011000010111010001100001 +01110011011001100111000000101101 +00000000000000000000000000000001 +00000000000000000000000000000000 +01110011011001100111000000101101 +01100100011000010111010001100001 +01100010011000010111001101100101 +00100000001000000010000000100000 +00100000001000000010000000000001 +11111111111111111111111111111111 +01011011000100010101011110100111 +00000000000000000000000000000011 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +01110111011100100111000001100011 +00101101011101100011010000101110 +00110010000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +01000100011001010110001100100000 +00110001001110000010000000110010 +00110000001100010011011100000000 +00000000000000000000000000000000 +00110000001110010011101000110011 +00111001001110100011001100110111 +00000000000000000000000000000000 +00000000000000000000000000000000 +01000111011100100111101001100101 +01100111011011110111001001111010 +00100000010001000110000101101110 +01101001011011000111010101101011 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8_sim.mif b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8_sim.mif new file mode 100644 index 000000000..1680114ee --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8_sim.mif @@ -0,0 +1,32775 @@ +DEPTH = 32768; +WIDTH = 32; +ADDRESS_RADIX = HEX; +DATA_RADIX = HEX; +CONTENT +BEGIN +0 : 98000000; +1 : D0000000; +2 : D0200000; +3 : 78010000; +4 : 38210000; +5 : D0E10000; +6 : F800003A; +7 : 34000000; +8 : 00000000; +9 : 00000000; +a : 00000000; +b : 00000000; +c : 00000000; +d : 00000000; +e : 00000000; +f : 00000000; +10 : 00000000; +11 : 00000000; +12 : 00000000; +13 : 00000000; +14 : 00000000; +15 : 00000000; +16 : 00000000; +17 : 00000000; +18 : 00000000; +19 : 00000000; +1a : 00000000; +1b : 00000000; +1c : 00000000; +1d : 00000000; +1e : 00000000; +1f : 00000000; +20 : 57525043; +21 : 2D2D2D2D; +22 : 01234567; +23 : 89ABCDEF; +24 : 00009478; +25 : 00000000; +26 : 00008508; +27 : 00008DA8; +28 : 00000000; +29 : 02140000; +2a : 00000000; +2b : 00000000; +2c : 00000000; +2d : 00000000; +2e : 00000000; +2f : 00008434; +30 : 5B9D0000; +31 : F800001E; +32 : 34010002; +33 : F800123E; +34 : E000002E; +35 : 34000000; +36 : 34000000; +37 : 34000000; +38 : 00000000; +39 : 00000000; +3a : 00000000; +3b : 00000000; +3c : 00000000; +3d : 00000000; +3e : 00000000; +3f : 00000000; +40 : 98000000; +41 : 781C0001; +42 : 3B9CFFFC; +43 : 78010000; +44 : 38218E40; +45 : 34020000; +46 : 78030000; +47 : 38639764; +48 : C8611800; +49 : F8001663; +4a : 34010000; +4b : 34020000; +4c : 34030000; +4d : F8000038; +4e : E0000000; +4f : 379CFFC4; +50 : 5B810004; +51 : 5B820008; +52 : 5B83000C; +53 : 5B840010; +54 : 5B850014; +55 : 5B860018; +56 : 5B87001C; +57 : 5B880020; +58 : 5B890024; +59 : 5B8A0028; +5a : 5B9E0034; +5b : 5B9F0038; +5c : 2B81003C; +5d : 5B810030; +5e : BB800800; +5f : 3421003C; +60 : 5B81002C; +61 : C3A00000; +62 : 2B810004; +63 : 2B820008; +64 : 2B83000C; +65 : 2B840010; +66 : 2B850014; +67 : 2B860018; +68 : 2B87001C; +69 : 2B880020; +6a : 2B890024; +6b : 2B8A0028; +6c : 2B9D0030; +6d : 2B9E0034; +6e : 2B9F0038; +6f : 2B9C002C; +70 : 34000000; +71 : C3C00000; +72 : 90001000; +73 : 3401FFFE; +74 : A0410800; +75 : D0010000; +76 : 90201000; +77 : 3401FFFE; +78 : A0410800; +79 : D0210000; +7a : C3A00000; +7b : 90001000; +7c : 3401FFFE; +7d : A0410800; +7e : D0010000; +7f : 90201000; +80 : 38420001; +81 : D0220000; +82 : 38210001; +83 : D0010000; +84 : C3A00000; +85 : 379CFFF4; +86 : 5B9D0004; +87 : 78010000; +88 : 78030000; +89 : 38219758; +8a : 78020002; +8b : 38638128; +8c : 58220000; +8d : 28620000; +8e : 78010000; +8f : 78030000; +90 : 38219440; +91 : 3863812C; +92 : 58220000; +93 : 28620000; +94 : 78010000; +95 : 78030000; +96 : 38219760; +97 : 38638130; +98 : 58220000; +99 : 28620000; +9a : 78010000; +9b : 78030000; +9c : 38219474; +9d : 38638134; +9e : 58220000; +9f : 28620000; +a0 : 78010000; +a1 : 78030000; +a2 : 3821975C; +a3 : 38638138; +a4 : 58220000; +a5 : 28620000; +a6 : 78010000; +a7 : 78030000; +a8 : 3821972C; +a9 : 3863813C; +aa : 58220000; +ab : 28620000; +ac : 78010000; +ad : 78030000; +ae : 38638140; +af : 38219718; +b0 : 58220000; +b1 : 28620000; +b2 : 78010000; +b3 : 38219754; +b4 : 58220000; +b5 : 34010001; +b6 : F8000C5D; +b7 : 3401FFDE; +b8 : 33810008; +b9 : 3401FFAD; +ba : 33810009; +bb : 3402FFEF; +bc : 3401FFBE; +bd : 3381000A; +be : 3382000B; +bf : 3381000D; +c0 : 3402FFBA; +c1 : 37810008; +c2 : 3382000C; +c3 : F8000989; +c4 : 34020001; +c5 : 34010001; +c6 : F80008DE; +c7 : F8000B8C; +c8 : F8000D6D; +c9 : F800126B; +ca : 34010001; +cb : F8000DE9; +cc : 78010000; +cd : 38218434; +ce : 34020002; +cf : 5822000C; +d0 : E0000000; +d1 : 379CFFE4; +d2 : 5B8B0008; +d3 : 5B9D0004; +d4 : 5B84000C; +d5 : 5B850010; +d6 : B8805800; +d7 : 5B860014; +d8 : 78040000; +d9 : 5B870018; +da : 5B88001C; +db : 38845DCC; +dc : 34050000; +dd : 44200003; +de : 282403D4; +df : 2825001C; +e0 : 78060000; +e1 : 38C68E44; +e2 : 28C10000; +e3 : 3C420002; +e4 : B8A12800; +e5 : 80A22800; +e6 : 20A5000F; +e7 : 5465000C; +e8 : 78050000; +e9 : 38A581F8; +ea : B4A22800; +eb : 78060000; +ec : 28A20000; +ed : B8C00800; +ee : 38215DD4; +ef : F800076E; +f0 : B9600800; +f1 : 37820010; +f2 : F8000757; +f3 : 2B9D0004; +f4 : 2B8B0008; +f5 : 379C001C; +f6 : C3A00000; +f7 : 379CFFFC; +f8 : 5B9D0004; +f9 : 34030001; +fa : 34010003; +fb : 34020000; +fc : F8001243; +fd : 34010000; +fe : 34020001; +ff : F8001369; +100 : F8000C4A; +101 : 34010000; +102 : 2B9D0004; +103 : 379C0004; +104 : C3A00000; +105 : 379CFFF4; +106 : 5B8B000C; +107 : 5B8C0008; +108 : 5B9D0004; +109 : 34010000; +10a : B8406000; +10b : F80012E0; +10c : 45800005; +10d : 64220000; +10e : C8021000; +10f : 38420001; +110 : E0000013; +111 : 780B0000; +112 : 396B8E48; +113 : 5C2C0004; +114 : 59600000; +115 : 3402FFFF; +116 : E000000D; +117 : 296C0000; +118 : 34020001; +119 : 5D80000A; +11a : 78020000; +11b : 38428430; +11c : 34010003; +11d : F8000CD5; +11e : 34020002; +11f : 49810004; +120 : 34010001; +121 : 59610000; +122 : 34020001; +123 : B8400800; +124 : 2B9D0004; +125 : 2B8B000C; +126 : 2B8C0008; +127 : 379C000C; +128 : C3A00000; +129 : 34010000; +12a : C3A00000; +12b : 379CFFFC; +12c : 5B9D0004; +12d : 34010000; +12e : 34020001; +12f : F8001339; +130 : 34010000; +131 : 2B9D0004; +132 : 379C0004; +133 : C3A00000; +134 : 379CFFFC; +135 : 5B9D0004; +136 : 28210358; +137 : 28210010; +138 : 2823000C; +139 : 44430004; +13a : 5822000C; +13b : B8400800; +13c : F8000D78; +13d : 34010000; +13e : 2B9D0004; +13f : 379C0004; +140 : C3A00000; +141 : 379CFFFC; +142 : 5B9D0004; +143 : F8000D6A; +144 : 34020001; +145 : 5C200003; +146 : F8001312; +147 : 7C220000; +148 : B8400800; +149 : 2B9D0004; +14a : 379C0004; +14b : C3A00000; +14c : 379CFFF8; +14d : 5B8B0008; +14e : 5B9D0004; +14f : B8202800; +150 : B8220800; +151 : B8402000; +152 : B8605800; +153 : 44200005; +154 : 34010001; +155 : B8A01000; +156 : B8801800; +157 : F8000CEF; +158 : 45600005; +159 : 1562001F; +15a : 34010002; +15b : B9601800; +15c : F8000CEA; +15d : 34010000; +15e : 2B9D0004; +15f : 2B8B0008; +160 : 379C0008; +161 : C3A00000; +162 : 379CFFFC; +163 : 5B9D0004; +164 : B8201000; +165 : 3401FFFF; +166 : F8001296; +167 : 34010000; +168 : 2B9D0004; +169 : 379C0004; +16a : C3A00000; +16b : 379CFF24; +16c : 5B8B0014; +16d : 5B8C0010; +16e : 5B8D000C; +16f : 5B8E0008; +170 : 5B9D0004; +171 : B8406000; +172 : 282203D0; +173 : B8807000; +174 : 37810018; +175 : B8605800; +176 : B8A06800; +177 : F800051D; +178 : 45C00005; +179 : 78010000; +17a : 38218AAC; +17b : 28210000; +17c : 59C10000; +17d : 45A00003; +17e : 2B8100CC; +17f : 59A10000; +180 : 2B82006C; +181 : 3401FFFD; +182 : 44400013; +183 : 45800007; +184 : 2B820060; +185 : 2B810058; +186 : B4410800; +187 : 2B8200A0; +188 : B4220800; +189 : 59810000; +18a : 2B820068; +18b : 3401FFFD; +18c : 44400009; +18d : 34010000; +18e : 45600007; +18f : 2B830064; +190 : 2B82005C; +191 : B4621000; +192 : 2B8300A4; +193 : B4431000; +194 : 59620000; +195 : 2B9D0004; +196 : 2B8B0014; +197 : 2B8C0010; +198 : 2B8D000C; +199 : 2B8E0008; +19a : 379C00DC; +19b : C3A00000; +19c : 34010000; +19d : C3A00000; +19e : 34010000; +19f : C3A00000; +1a0 : 379CFFEC; +1a1 : 5B8B000C; +1a2 : 5B8C0008; +1a3 : 5B9D0004; +1a4 : 34040000; +1a5 : B8406000; +1a6 : B8605800; +1a7 : 37820010; +1a8 : 37830014; +1a9 : 34050000; +1aa : 5B800014; +1ab : 5B800010; +1ac : FBFFFFBF; +1ad : 34010001; +1ae : 5D810003; +1af : 2B810010; +1b0 : E0000002; +1b1 : 2B810014; +1b2 : 59610000; +1b3 : 34010001; +1b4 : 2B9D0004; +1b5 : 2B8B000C; +1b6 : 2B8C0008; +1b7 : 379C0014; +1b8 : C3A00000; +1b9 : 379CFFFC; +1ba : 5B9D0004; +1bb : F8000856; +1bc : 34010000; +1bd : 2B9D0004; +1be : 379C0004; +1bf : C3A00000; +1c0 : 379CFFFC; +1c1 : 5B9D0004; +1c2 : F800085A; +1c3 : 34010000; +1c4 : 2B9D0004; +1c5 : 379C0004; +1c6 : C3A00000; +1c7 : 78010000; +1c8 : 38218E4C; +1c9 : 28210000; +1ca : C3A00000; +1cb : 379CFFF0; +1cc : 5B8B0010; +1cd : 5B8C000C; +1ce : 5B8D0008; +1cf : 5B9D0004; +1d0 : 28450008; +1d1 : 2C44000C; +1d2 : 284D0000; +1d3 : 3CA50010; +1d4 : B8206000; +1d5 : 284B0004; +1d6 : B8A40800; +1d7 : 340203E8; +1d8 : F800142E; +1d9 : 15A20018; +1da : B8203000; +1db : 78070000; +1dc : 204200C0; +1dd : 34010080; +1de : 38E7754C; +1df : 5C410003; +1e0 : 78070000; +1e1 : 38E75FB8; +1e2 : 78040000; +1e3 : B8800800; +1e4 : B9801000; +1e5 : B9601800; +1e6 : B9602000; +1e7 : B9602800; +1e8 : 38215FC4; +1e9 : F8000674; +1ea : 2B9D0004; +1eb : 2B8B0010; +1ec : 2B8C000C; +1ed : 2B8D0008; +1ee : 379C0010; +1ef : C3A00000; +1f0 : 379CFFE8; +1f1 : 5B9D0018; +1f2 : B8205000; +1f3 : 40610005; +1f4 : 40640000; +1f5 : 40650001; +1f6 : 40660002; +1f7 : 40670003; +1f8 : 40680004; +1f9 : 5B810004; +1fa : 40610006; +1fb : B8404800; +1fc : B9401000; +1fd : 5B810008; +1fe : 40610007; +1ff : 5B81000C; +200 : 40610008; +201 : 5B810010; +202 : 40610009; +203 : B9201800; +204 : 5B810014; +205 : 78010000; +206 : 38215FE8; +207 : F8000656; +208 : 2B9D0018; +209 : 379C0018; +20a : C3A00000; +20b : 379CFFD0; +20c : 5B8B0030; +20d : 5B8C002C; +20e : 5B8D0028; +20f : 5B8E0024; +210 : 5B8F0020; +211 : 5B90001C; +212 : 5B910018; +213 : 5B920014; +214 : 5B930010; +215 : 5B94000C; +216 : 5B950008; +217 : 5B9D0004; +218 : B8603000; +219 : B8209800; +21a : B8409000; +21b : 78010000; +21c : B880A800; +21d : 38216020; +21e : BA601000; +21f : BA401800; +220 : B8C02000; +221 : B8A0A000; +222 : 78110000; +223 : F800063A; +224 : 78100000; +225 : 780F0000; +226 : 780E0000; +227 : 780D0000; +228 : B8205800; +229 : 340C0000; +22a : 3A316034; +22b : 3A10603C; +22c : 39EF70EC; +22d : 39CE7ABC; +22e : 39AD7374; +22f : E0000017; +230 : 5CC00006; +231 : BA200800; +232 : BA601000; +233 : BA401800; +234 : F8000629; +235 : B5615800; +236 : B6AC1000; +237 : 40420000; +238 : BA000800; +239 : 358C0001; +23a : F8000623; +23b : 21820003; +23c : B42B5800; +23d : B9E03000; +23e : 5C400005; +23f : 2181000F; +240 : B9C03000; +241 : 44220002; +242 : B9A03000; +243 : B8C00800; +244 : F8000619; +245 : B5615800; +246 : 2186000F; +247 : 4A8CFFE9; +248 : 44C00005; +249 : 78010000; +24a : 38217ABC; +24b : F8000612; +24c : B42B5800; +24d : B9600800; +24e : 2B9D0004; +24f : 2B8B0030; +250 : 2B8C002C; +251 : 2B8D0028; +252 : 2B8E0024; +253 : 2B8F0020; +254 : 2B90001C; +255 : 2B910018; +256 : 2B920014; +257 : 2B930010; +258 : 2B94000C; +259 : 2B950008; +25a : 379C0030; +25b : C3A00000; +25c : 379CFFB8; +25d : 5B8B0048; +25e : 5B8C0044; +25f : 5B8D0040; +260 : 5B8E003C; +261 : 5B8F0038; +262 : 5B900034; +263 : 5B910030; +264 : 5B92002C; +265 : 5B930028; +266 : 5B940024; +267 : 5B950020; +268 : 5B96001C; +269 : 5B970018; +26a : 5B980014; +26b : 5B9D0010; +26c : B8608000; +26d : 40430001; +26e : B8206000; +26f : 34010002; +270 : 2063000F; +271 : B8406800; +272 : 404E0000; +273 : 44610006; +274 : 78010000; +275 : B9801000; +276 : 38216044; +277 : F80005E6; +278 : E0000150; +279 : 40450002; +27a : 40460003; +27b : 21CE000F; +27c : 3CA50008; +27d : 78010000; +27e : B8C52800; +27f : 41A60004; +280 : 34030002; +281 : B9C02000; +282 : 344B0022; +283 : 38216064; +284 : B9801000; +285 : F80005D8; +286 : 41A30006; +287 : 41A40007; +288 : 29A5000C; +289 : 3C630008; +28a : 78010000; +28b : B8831800; +28c : 29A40008; +28d : B8A03000; +28e : B9801000; +28f : 38216090; +290 : F80005CD; +291 : 78020000; +292 : B9800800; +293 : 384260C0; +294 : 35A30014; +295 : FBFFFF5B; +296 : 41A3001E; +297 : 41A4001F; +298 : 41A50021; +299 : 3C630008; +29a : 78010000; +29b : B8831800; +29c : 41A40020; +29d : 382160C8; +29e : B9801000; +29f : F80005BE; +2a0 : 3401000C; +2a1 : 55C100E9; +2a2 : 78010000; +2a3 : 3DCE0002; +2a4 : 38218218; +2a5 : B42E0800; +2a6 : 28210000; +2a7 : C0200000; +2a8 : 78010000; +2a9 : B9801000; +2aa : 382160F4; +2ab : F80005B2; +2ac : 41620002; +2ad : 41610003; +2ae : 41640004; +2af : 3C420018; +2b0 : 3C210010; +2b1 : 3C840008; +2b2 : B8220800; +2b3 : B8812000; +2b4 : 41620006; +2b5 : 41610007; +2b6 : 41650008; +2b7 : 3C420018; +2b8 : 3C210010; +2b9 : 3CA50008; +2ba : B8220800; +2bb : B8A12800; +2bc : 78030000; +2bd : 78010000; +2be : 41670005; +2bf : 41660009; +2c0 : 3821610C; +2c1 : B9801000; +2c2 : 3863611C; +2c3 : E000001C; +2c4 : 78010000; +2c5 : B9801000; +2c6 : 38216128; +2c7 : F8000596; +2c8 : 41620002; +2c9 : 41610003; +2ca : 41640004; +2cb : 3C420018; +2cc : 3C210010; +2cd : 3C840008; +2ce : B8220800; +2cf : B8812000; +2d0 : 41620006; +2d1 : 41610007; +2d2 : 41650008; +2d3 : 3C420018; +2d4 : 3C210010; +2d5 : 3CA50008; +2d6 : B8220800; +2d7 : 41670005; +2d8 : 41660009; +2d9 : B8A12800; +2da : 78030000; +2db : 78010000; +2dc : 3821610C; +2dd : B9801000; +2de : 38636144; +2df : B8E42000; +2e0 : B8C52800; +2e1 : F800057C; +2e2 : E00000A6; +2e3 : 78010000; +2e4 : B9801000; +2e5 : 38216154; +2e6 : F8000577; +2e7 : 41620002; +2e8 : 41610003; +2e9 : 41640004; +2ea : 3C420018; +2eb : 3C210010; +2ec : 3C840008; +2ed : B8220800; +2ee : B8812000; +2ef : 41620006; +2f0 : 41610007; +2f1 : 41650008; +2f2 : 3C420018; +2f3 : 3C210010; +2f4 : 3CA50008; +2f5 : B8220800; +2f6 : B8A12800; +2f7 : 78030000; +2f8 : 78010000; +2f9 : 41670005; +2fa : 41660009; +2fb : 3821610C; +2fc : B9801000; +2fd : 38636170; +2fe : E3FFFFE1; +2ff : 78010000; +300 : B9801000; +301 : 38216180; +302 : F800055B; +303 : 41620002; +304 : 41610003; +305 : 41640004; +306 : 3C420018; +307 : 3C210010; +308 : 3C840008; +309 : B8220800; +30a : B8812000; +30b : 41620006; +30c : 41610007; +30d : 41650008; +30e : 3C420018; +30f : 3C210010; +310 : 41670005; +311 : 41660009; +312 : 3CA50008; +313 : B8220800; +314 : 780E0000; +315 : 39CE619C; +316 : B8A12800; +317 : 78010000; +318 : B9801000; +319 : B9C01800; +31a : B8E42000; +31b : B8C52800; +31c : 3821610C; +31d : F8000540; +31e : 3563000A; +31f : B9800800; +320 : B9C01000; +321 : FBFFFECF; +322 : 340B0036; +323 : E0000098; +324 : 78010000; +325 : B9801000; +326 : 382161B0; +327 : F8000536; +328 : 41620002; +329 : 41610003; +32a : 41640004; +32b : 3C420018; +32c : 3C210010; +32d : 3C840008; +32e : B8220800; +32f : B8812000; +330 : 41620006; +331 : 41610007; +332 : 41650008; +333 : 3C420018; +334 : 3C210010; +335 : 41670005; +336 : 41660009; +337 : 3CA50008; +338 : B8220800; +339 : B8A12800; +33a : 78030000; +33b : 78010000; +33c : B8E42000; +33d : B8C52800; +33e : B9801000; +33f : 386361CC; +340 : 3821610C; +341 : F800051C; +342 : 4162000E; +343 : 4161000F; +344 : 41640010; +345 : 3C420018; +346 : 3C210010; +347 : 3C840008; +348 : B8220800; +349 : B8812000; +34a : 41620012; +34b : 41610013; +34c : 41650014; +34d : 3C420018; +34e : 3C210010; +34f : 3CA50008; +350 : B8220800; +351 : B8A12800; +352 : 41620016; +353 : 41610017; +354 : 41660018; +355 : 3C420018; +356 : 3C210010; +357 : 41690011; +358 : 41680015; +359 : 41670019; +35a : 3CC60008; +35b : B8220800; +35c : B8C13000; +35d : 78030000; +35e : 78010000; +35f : B9242000; +360 : B9052800; +361 : B8E63000; +362 : B9801000; +363 : 386361F8; +364 : 382161E4; +365 : F80004F8; +366 : 4163000D; +367 : 4164001A; +368 : 78010000; +369 : B9801000; +36a : 3821621C; +36b : F80004F2; +36c : 41610020; +36d : 4164001B; +36e : 4165001C; +36f : 4166001D; +370 : 4167001E; +371 : 4168001F; +372 : 5B810004; +373 : 41610021; +374 : 78030000; +375 : B9801000; +376 : 5B810008; +377 : 41610022; +378 : 38636274; +379 : 340B0040; +37a : 5B81000C; +37b : 78010000; +37c : 38216244; +37d : F80004E0; +37e : E000003D; +37f : 78010000; +380 : B9801000; +381 : 38216294; +382 : F80004DB; +383 : 78020000; +384 : B9800800; +385 : 384262B0; +386 : B9601800; +387 : FBFFFE69; +388 : 340B002C; +389 : E0000032; +38a : 340B0022; +38b : E0000030; +38c : 55F70009; +38d : 78010000; +38e : B9801000; +38f : BA001800; +390 : B9602000; +391 : B9E02800; +392 : 382162CC; +393 : F80004CA; +394 : E0000034; +395 : B5AB7000; +396 : 41D60002; +397 : 41C10003; +398 : 41C30000; +399 : 3ED60008; +39a : 41C40001; +39b : B836B000; +39c : 41C10008; +39d : 41C50004; +39e : 41C60005; +39f : 41C70006; +3a0 : 41C80007; +3a1 : 5B810004; +3a2 : 41C10009; +3a3 : 3C630008; +3a4 : 36D10004; +3a5 : 5B810008; +3a6 : B8831800; +3a7 : BAA00800; +3a8 : B9801000; +3a9 : BA202000; +3aa : F80004B3; +3ab : 4DF10007; +3ac : BA400800; +3ad : B9801000; +3ae : BA201800; +3af : B9E02000; +3b0 : F80004AD; +3b1 : E0000008; +3b2 : B9800800; +3b3 : BA801000; +3b4 : BA601800; +3b5 : 35C4000A; +3b6 : 36C5FFFA; +3b7 : FBFFFE54; +3b8 : BA207800; +3b9 : B56F5800; +3ba : E000000B; +3bb : 78150000; +3bc : 78140000; +3bd : 78130000; +3be : 78120000; +3bf : 34180002; +3c0 : 34170009; +3c1 : 3AB562F0; +3c2 : 3A94635C; +3c3 : 3A736364; +3c4 : 3A526330; +3c5 : 4D700003; +3c6 : CA0B7800; +3c7 : 49F8FFC5; +3c8 : 78020000; +3c9 : 78030000; +3ca : B9800800; +3cb : 38426370; +3cc : 38636378; +3cd : B9A02000; +3ce : BA002800; +3cf : FBFFFE3C; +3d0 : 2B9D0010; +3d1 : 2B8B0048; +3d2 : 2B8C0044; +3d3 : 2B8D0040; +3d4 : 2B8E003C; +3d5 : 2B8F0038; +3d6 : 2B900034; +3d7 : 2B910030; +3d8 : 2B92002C; +3d9 : 2B930028; +3da : 2B940024; +3db : 2B950020; +3dc : 2B96001C; +3dd : 2B970018; +3de : 2B980014; +3df : 379C0048; +3e0 : C3A00000; +3e1 : 379CFFF0; +3e2 : 5B8B000C; +3e3 : 5B8C0008; +3e4 : 5B9D0004; +3e5 : B8206000; +3e6 : B8405800; +3e7 : 44800005; +3e8 : B8801000; +3e9 : 5B830010; +3ea : FBFFFDE1; +3eb : 2B830010; +3ec : B9800800; +3ed : B9601000; +3ee : FBFFFE6E; +3ef : 34010000; +3f0 : 2B9D0004; +3f1 : 2B8B000C; +3f2 : 2B8C0008; +3f3 : 379C0010; +3f4 : C3A00000; +3f5 : 379CFFE8; +3f6 : 5B8B0018; +3f7 : 5B8C0014; +3f8 : 5B8D0010; +3f9 : 5B8E000C; +3fa : 5B8F0008; +3fb : 5B9D0004; +3fc : 282D0000; +3fd : B8207800; +3fe : 282E0004; +3ff : B8406000; +400 : 340B0000; +401 : 34010000; +402 : 34040000; +403 : 544D0006; +404 : B9A00800; +405 : F800122E; +406 : 882C1000; +407 : B9602000; +408 : C9A26800; +409 : 34030000; +40a : 34020001; +40b : E000000B; +40c : 3D850001; +40d : 3D6B0001; +40e : F5856000; +40f : 3C630001; +410 : B58B5800; +411 : B8A06000; +412 : 3C450001; +413 : F4451000; +414 : B4431800; +415 : B8A01000; +416 : 1565001F; +417 : C8AC3000; +418 : F4C53000; +419 : C8AB2800; +41a : C8A62800; +41b : 00A5001F; +41c : 34060001; +41d : 55AB0004; +41e : 5DAB0002; +41f : 55CC0002; +420 : 34060000; +421 : A0A63000; +422 : 5CC0FFEA; +423 : 556D000D; +424 : 5D6D0002; +425 : 558E000B; +426 : C9CC2800; +427 : F4AE7000; +428 : C9AB6800; +429 : C9AE6800; +42a : B8A07000; +42b : B4822800; +42c : F4852000; +42d : B4230800; +42e : B4810800; +42f : B8A02000; +430 : 3C65001F; +431 : 00420001; +432 : 00630001; +433 : B8A21000; +434 : B8622800; +435 : 44A00006; +436 : 3D65001F; +437 : 018C0001; +438 : 016B0001; +439 : B8AC6000; +43a : E3FFFFE9; +43b : 59E10000; +43c : B9C00800; +43d : 59E40004; +43e : 2B9D0004; +43f : 2B8B0018; +440 : 2B8C0014; +441 : 2B8D0010; +442 : 2B8E000C; +443 : 2B8F0008; +444 : 379C0018; +445 : C3A00000; +446 : 379CFFF8; +447 : 5B8B0008; +448 : 5B9D0004; +449 : B8405800; +44a : F80008DB; +44b : B42B0800; +44c : 2B9D0004; +44d : 2B8B0008; +44e : 379C0008; +44f : C3A00000; +450 : 379CFFF8; +451 : 5B8B0008; +452 : 5B9D0004; +453 : 78040000; +454 : B8405800; +455 : 78050000; +456 : 34020006; +457 : 34030001; +458 : 38846428; +459 : 38A5824C; +45a : B9603000; +45b : FBFFFC76; +45c : 45600005; +45d : 1562001F; +45e : 34010002; +45f : B9601800; +460 : F80009E6; +461 : 34010000; +462 : 2B9D0004; +463 : 2B8B0008; +464 : 379C0008; +465 : C3A00000; +466 : 379CFFF4; +467 : 5B8B000C; +468 : 5B8C0008; +469 : 5B9D0004; +46a : B8206000; +46b : B8405800; +46c : B8603000; +46d : 44600008; +46e : 78040000; +46f : 78050000; +470 : 34020006; +471 : 34030001; +472 : 38846434; +473 : 38A5826C; +474 : FBFFFC5D; +475 : B9800800; +476 : B9601000; +477 : FBFFFFD9; +478 : 2B9D0004; +479 : 2B8B000C; +47a : 2B8C0008; +47b : 379C000C; +47c : C3A00000; +47d : 379CFFF0; +47e : 5B8B0010; +47f : 5B8C000C; +480 : 5B8D0008; +481 : 5B9D0004; +482 : B8206800; +483 : 44400015; +484 : 28410008; +485 : 2C4B000C; +486 : 284C0004; +487 : 3C210010; +488 : 34040003; +489 : B82B5800; +48a : 28410000; +48b : B9601800; +48c : B9801000; +48d : F80009D7; +48e : 78040000; +48f : 78050000; +490 : B9A00800; +491 : 34020006; +492 : 34030001; +493 : 38846460; +494 : 38A58280; +495 : B9803000; +496 : B9603800; +497 : FBFFFC3A; +498 : 34010000; +499 : 2B9D0004; +49a : 2B8B0010; +49b : 2B8C000C; +49c : 2B8D0008; +49d : 379C0010; +49e : C3A00000; +49f : 379CFFE8; +4a0 : 5B8B000C; +4a1 : 5B8C0008; +4a2 : 5B9D0004; +4a3 : B8405800; +4a4 : B8206000; +4a5 : 37820018; +4a6 : 37810010; +4a7 : F80009DD; +4a8 : 2B870018; +4a9 : 2B810010; +4aa : 2B860014; +4ab : 00E20010; +4ac : 59610000; +4ad : 59620008; +4ae : 3CE10010; +4af : 78020000; +4b0 : 38428E44; +4b1 : 5961000C; +4b2 : 28410000; +4b3 : 59660004; +4b4 : 20210001; +4b5 : 5C200009; +4b6 : 78040000; +4b7 : 78050000; +4b8 : B9800800; +4b9 : 34020006; +4ba : 34030002; +4bb : 38846460; +4bc : 38A58290; +4bd : FBFFFC14; +4be : 34010000; +4bf : 2B9D0004; +4c0 : 2B8B000C; +4c1 : 2B8C0008; +4c2 : 379C0018; +4c3 : C3A00000; +4c4 : 379CFFB0; +4c5 : 5B8B001C; +4c6 : 5B8C0018; +4c7 : 5B8D0014; +4c8 : 5B8E0010; +4c9 : 5B8F000C; +4ca : 5B900008; +4cb : 5B9D0004; +4cc : 0884000C; +4cd : B8205800; +4ce : 342D0110; +4cf : 78010000; +4d0 : 38218444; +4d1 : B4240800; +4d2 : B8407800; +4d3 : 40220007; +4d4 : 78050000; +4d5 : 378C0040; +4d6 : 08420006; +4d7 : 38A582B0; +4d8 : 29700068; +4d9 : 340188F7; +4da : B4451000; +4db : B8607000; +4dc : 0F81004C; +4dd : 34030006; +4de : B9800800; +4df : F8001194; +4e0 : B9801000; +4e1 : BA000800; +4e2 : B9E01800; +4e3 : B9C02000; +4e4 : 37850020; +4e5 : F800032F; +4e6 : B8206000; +4e7 : 45A0001F; +4e8 : 2B810028; +4e9 : 2B820024; +4ea : 2B830020; +4eb : 1425001F; +4ec : 00240010; +4ed : 3CA50010; +4ee : 3C210010; +4ef : B8852800; +4f0 : 2B84003C; +4f1 : 59630110; +4f2 : 59620114; +4f3 : 59650118; +4f4 : 5961011C; +4f5 : 5C800004; +4f6 : 78048F00; +4f7 : B8641800; +4f8 : 59630110; +4f9 : 3CA90010; +4fa : 00280010; +4fb : 29670114; +4fc : 78040000; +4fd : 78050000; +4fe : B9600800; +4ff : 34020005; +500 : 34030002; +501 : 38846470; +502 : 38A582A0; +503 : B9803000; +504 : B9284000; +505 : FBFFFBCC; +506 : 78010000; +507 : 38218E4C; +508 : 28220000; +509 : 34010004; +50a : 5C41000D; +50b : 2964011C; +50c : 29650118; +50d : 29620114; +50e : 00830010; +50f : 2084FFFF; +510 : 088403E8; +511 : 3CA50010; +512 : 78010000; +513 : 00840010; +514 : 38216490; +515 : B8A31800; +516 : F8000347; +517 : 4C0C0010; +518 : 78010000; +519 : 38218E44; +51a : 28220000; +51b : 2961001C; +51c : B8410800; +51d : 00210014; +51e : 34020001; +51f : 2021000F; +520 : 50410007; +521 : 78010000; +522 : 382164A0; +523 : B9E01000; +524 : B9C01800; +525 : B9A02000; +526 : FBFFFEBB; +527 : B9800800; +528 : 2B9D0004; +529 : 2B8B001C; +52a : 2B8C0018; +52b : 2B8D0014; +52c : 2B8E0010; +52d : 2B8F000C; +52e : 2B900008; +52f : 379C0050; +530 : C3A00000; +531 : 379CFF90; +532 : 5B8B001C; +533 : 5B8C0018; +534 : 5B8D0014; +535 : 5B8E0010; +536 : 5B8F000C; +537 : 5B900008; +538 : 5B9D0004; +539 : B8206000; +53a : 28210068; +53b : B8602800; +53c : B8407000; +53d : B8805800; +53e : 37820040; +53f : B8A02000; +540 : B9C01800; +541 : 37850020; +542 : F800025F; +543 : B8206800; +544 : 4C010065; +545 : 45600021; +546 : 2B81002C; +547 : 2B8F0024; +548 : 2B900020; +549 : 3C210010; +54a : 340203E8; +54b : 59700000; +54c : 596F0004; +54d : F80010B9; +54e : 2B850028; +54f : B8202000; +550 : 1422001F; +551 : 14A1001F; +552 : 00A30010; +553 : 3CA50010; +554 : 3C210010; +555 : B4852800; +556 : B8610800; +557 : F4852000; +558 : B4410800; +559 : B4810800; +55a : 59610008; +55b : 2B81003C; +55c : 5965000C; +55d : 5C200009; +55e : 78010000; +55f : 38218E4C; +560 : 28220000; +561 : 34010004; +562 : 44410004; +563 : 78018F00; +564 : BA018000; +565 : 59700000; +566 : 78010000; +567 : 38218E44; +568 : 2982001C; +569 : 28210000; +56a : B8220800; +56b : 00210014; +56c : 34020001; +56d : 2021000F; +56e : 50410007; +56f : 78010000; +570 : 382164A8; +571 : B9C01000; +572 : B9A01800; +573 : B9602000; +574 : FBFFFE6D; +575 : 78010000; +576 : 38218E4C; +577 : 28220000; +578 : 34010004; +579 : 5C410030; +57a : 29640000; +57b : 29630004; +57c : 29620008; +57d : 2961000C; +57e : 5B840064; +57f : 5B830068; +580 : 5B82006C; +581 : 5B810070; +582 : F800046C; +583 : 3C210010; +584 : 340203E8; +585 : 5B800058; +586 : 5B800054; +587 : F800107F; +588 : 1422001F; +589 : 378B0064; +58a : 5B810060; +58b : 5B82005C; +58c : B9600800; +58d : 37820054; +58e : F80000EC; +58f : 2B840070; +590 : 2B85006C; +591 : 2B820068; +592 : 00830010; +593 : 2084FFFF; +594 : 088403E8; +595 : 3CA50010; +596 : 78010000; +597 : 00840010; +598 : B8A31800; +599 : 382164B0; +59a : F80002C3; +59b : B9600800; +59c : 35820110; +59d : F80000DD; +59e : 2B830070; +59f : 2B84006C; +5a0 : 78010000; +5a1 : 00620010; +5a2 : 2063FFFF; +5a3 : 086303E8; +5a4 : 3C840010; +5a5 : 382164C0; +5a6 : 00630010; +5a7 : B8821000; +5a8 : F80002B5; +5a9 : B9A00800; +5aa : 2B9D0004; +5ab : 2B8B001C; +5ac : 2B8C0018; +5ad : 2B8D0014; +5ae : 2B8E0010; +5af : 2B8F000C; +5b0 : 2B900008; +5b1 : 379C0070; +5b2 : C3A00000; +5b3 : 379CFFFC; +5b4 : 5B9D0004; +5b5 : 28210068; +5b6 : F8000191; +5b7 : 34010000; +5b8 : 2B9D0004; +5b9 : 379C0004; +5ba : C3A00000; +5bb : 379CFFD4; +5bc : 5B8B0010; +5bd : 5B8C000C; +5be : 5B8D0008; +5bf : 5B9D0004; +5c0 : B8205800; +5c1 : 28210068; +5c2 : 44200002; +5c3 : F8000184; +5c4 : B9600800; +5c5 : F8000025; +5c6 : 378C0014; +5c7 : 340188F7; +5c8 : 78020000; +5c9 : 0F810020; +5ca : 384281F0; +5cb : B9800800; +5cc : 34030006; +5cd : F80010A6; +5ce : 78010000; +5cf : B9801000; +5d0 : 38218A50; +5d1 : 34030001; +5d2 : 34040000; +5d3 : F800012B; +5d4 : B8206000; +5d5 : 4420000E; +5d6 : 378D0028; +5d7 : B9A01000; +5d8 : F8000115; +5d9 : B9A01000; +5da : 34030006; +5db : 35610070; +5dc : F8001097; +5dd : 3561005C; +5de : 596C0068; +5df : B9A01000; +5e0 : 34030006; +5e1 : F8001092; +5e2 : 596C0054; +5e3 : 34010000; +5e4 : 2B9D0004; +5e5 : 2B8B0010; +5e6 : 2B8C000C; +5e7 : 2B8D0008; +5e8 : 379C002C; +5e9 : C3A00000; +5ea : 28220028; +5eb : 34030001; +5ec : 4443000A; +5ed : 34030002; +5ee : 44430003; +5ef : 5C400009; +5f0 : E0000006; +5f1 : 34020012; +5f2 : 58220084; +5f3 : 3402000E; +5f4 : 58220088; +5f5 : E0000003; +5f6 : 58200084; +5f7 : 58200088; +5f8 : 28240084; +5f9 : 2825003C; +5fa : 34020000; +5fb : B4A42800; +5fc : 20A30003; +5fd : 44600003; +5fe : 34020004; +5ff : C8431000; +600 : B4A22800; +601 : 28260040; +602 : 28220088; +603 : 5825004C; +604 : 34030000; +605 : B4C23000; +606 : 20C70003; +607 : 44E00003; +608 : 34030004; +609 : C8671800; +60a : B4C31800; +60b : C8A42000; +60c : C8621000; +60d : 58230050; +60e : 58240044; +60f : 58220048; +610 : C3A00000; +611 : 379CFFE8; +612 : 5B8B0018; +613 : 5B8C0014; +614 : 5B8D0010; +615 : 5B8E000C; +616 : 5B8F0008; +617 : 5B9D0004; +618 : 28230000; +619 : B8205800; +61a : 28240004; +61b : 48030006; +61c : B8640800; +61d : 340D0000; +61e : 340C0001; +61f : 44200009; +620 : E000000E; +621 : 14620018; +622 : 34010080; +623 : 204200C0; +624 : 340DFFFF; +625 : 340CFFFF; +626 : 5C410008; +627 : E0000005; +628 : 29620008; +629 : 340DFFFF; +62a : 340CFFFF; +62b : 48220003; +62c : 340D0000; +62d : 340C0001; +62e : B9A00800; +62f : B9801000; +630 : F8000FBE; +631 : 2964000C; +632 : 29630008; +633 : 59610000; +634 : 59620004; +635 : B9A00800; +636 : B9801000; +637 : F8000FB7; +638 : 59610008; +639 : 5962000C; +63a : 7804CA00; +63b : E000000F; +63c : 29660004; +63d : 29650000; +63e : 34213B9A; +63f : 34C3FFFF; +640 : F4C33000; +641 : 59630004; +642 : B4441800; +643 : F4431000; +644 : 34A5FFFF; +645 : B4C52800; +646 : B4410800; +647 : 59650000; +648 : 59610008; +649 : 5963000C; +64a : 29610008; +64b : 2962000C; +64c : 4801FFF0; +64d : E000000F; +64e : 29650004; +64f : 29660000; +650 : 35EFC465; +651 : 34A20001; +652 : F4A22800; +653 : 59620004; +654 : B5C31000; +655 : F5C27000; +656 : B4A62800; +657 : B5CF7000; +658 : 59650000; +659 : 596E0008; +65a : 5962000C; +65b : E0000004; +65c : 34013B9A; +65d : 7804CA00; +65e : 78033600; +65f : 296F0008; +660 : 296E000C; +661 : 49E1FFED; +662 : 5DE10002; +663 : 55C4FFEB; +664 : 29630000; +665 : 29640004; +666 : B9A00800; +667 : B9801000; +668 : F8000F86; +669 : 59610000; +66a : 59620004; +66b : B9E00800; +66c : B9C01000; +66d : B9A01800; +66e : B9802000; +66f : F8000F7F; +670 : 59610008; +671 : 5962000C; +672 : 2B9D0004; +673 : 2B8B0018; +674 : 2B8C0014; +675 : 2B8D0010; +676 : 2B8E000C; +677 : 2B8F0008; +678 : 379C0018; +679 : C3A00000; +67a : 379CFFFC; +67b : 5B9D0004; +67c : 28440004; +67d : 28260004; +67e : 28450000; +67f : 28270000; +680 : C8C42000; +681 : F4863000; +682 : C8E52800; +683 : C8A62800; +684 : 58250000; +685 : 58240004; +686 : 28460008; +687 : 2825000C; +688 : 2842000C; +689 : 28240008; +68a : C8A21000; +68b : F4452800; +68c : C8862000; +68d : C8852000; +68e : 58240008; +68f : 5822000C; +690 : FBFFFF81; +691 : 2B9D0004; +692 : 379C0004; +693 : C3A00000; +694 : 379CFFF4; +695 : 5B8B0008; +696 : 5B9D0004; +697 : B8205800; +698 : FBFFFB2F; +699 : 34020003; +69a : 5C220003; +69b : 34010002; +69c : E0000002; +69d : 34010001; +69e : 59610028; +69f : 3562004C; +6a0 : 35610048; +6a1 : F8000357; +6a2 : 34010000; +6a3 : 59600040; +6a4 : 59600044; +6a5 : 59600088; +6a6 : 5960008C; +6a7 : 3782000C; +6a8 : 34030000; +6a9 : F8000D7B; +6aa : 44200006; +6ab : 2B81000C; +6ac : 596100A0; +6ad : 34010001; +6ae : 596100A4; +6af : E0000003; +6b0 : 596000A0; +6b1 : 596000A4; +6b2 : 34010000; +6b3 : F800031D; +6b4 : 5961002C; +6b5 : 34010001; +6b6 : 59610054; +6b7 : 59610050; +6b8 : 34010000; +6b9 : F8000D32; +6ba : 59610034; +6bb : 34011F40; +6bc : 596100B4; +6bd : 78010000; +6be : 38218430; +6bf : 28210000; +6c0 : 596100B8; +6c1 : 596100BC; +6c2 : 35610014; +6c3 : F80002C8; +6c4 : 34010000; +6c5 : 5960001C; +6c6 : 2B9D0004; +6c7 : 2B8B0008; +6c8 : 379C000C; +6c9 : C3A00000; +6ca : B8202800; +6cb : 5C800002; +6cc : B8602000; +6cd : B8803000; +6ce : 50640002; +6cf : B8603000; +6d0 : B4260800; +6d1 : E000000E; +6d2 : 2C460002; +6d3 : 2847000C; +6d4 : B4E63800; +6d5 : 40E60000; +6d6 : 30A60000; +6d7 : 2C470002; +6d8 : 2C460006; +6d9 : 34A50001; +6da : 34E70001; +6db : 20E7FFFF; +6dc : 0C470002; +6dd : 5CC70002; +6de : 0C400002; +6df : 5CA1FFF3; +6e0 : 5083000B; +6e1 : 2C410002; +6e2 : B4610800; +6e3 : C8242000; +6e4 : 0C440002; +6e5 : 2C410006; +6e6 : E0000003; +6e7 : C8812000; +6e8 : 0C440002; +6e9 : 2C440002; +6ea : 5481FFFD; +6eb : B8600800; +6ec : C3A00000; +6ed : 379CFFFC; +6ee : 5B9D0004; +6ef : B8400800; +6f0 : F800029B; +6f1 : 34010000; +6f2 : 2B9D0004; +6f3 : 379C0004; +6f4 : C3A00000; +6f5 : 78020000; +6f6 : 38429350; +6f7 : 34430030; +6f8 : E0000004; +6f9 : 28440000; +6fa : 34420004; +6fb : 5881001C; +6fc : 5C43FFFD; +6fd : C3A00000; +6fe : 379CFF24; +6ff : 5B8B0014; +700 : 5B8C0010; +701 : 5B8D000C; +702 : 5B8E0008; +703 : 5B9D0004; +704 : 78050000; +705 : B8205800; +706 : B8406000; +707 : B8607000; +708 : B8806800; +709 : 38A59350; +70a : 34010000; +70b : 3402000C; +70c : 28A30000; +70d : 34A50004; +70e : 5C600009; +70f : 3C220002; +710 : 78050000; +711 : 38A59350; +712 : B4A22800; +713 : 58AB0000; +714 : 3402000C; +715 : 5C22000A; +716 : E0000003; +717 : 34210001; +718 : 5C22FFF4; +719 : 78010000; +71a : 78020000; +71b : 384282BC; +71c : 38217A6C; +71d : F8000140; +71e : E0000020; +71f : 78020000; +720 : 37810018; +721 : 38427A88; +722 : FBFFFF72; +723 : 4801001B; +724 : B9600800; +725 : 34020000; +726 : 34030012; +727 : F8000F85; +728 : 45800005; +729 : B9600800; +72a : B9801000; +72b : 34030012; +72c : F8000F47; +72d : 0D60000E; +72e : 5DC00004; +72f : 34010800; +730 : 0D61000C; +731 : 0D6D000E; +732 : 35610012; +733 : F8000258; +734 : 2B8100D0; +735 : 0D600026; +736 : 0D600024; +737 : 5961001C; +738 : 2B8100B8; +739 : 0D60002C; +73a : 59610020; +73b : 2D61002A; +73c : 0D610028; +73d : E0000002; +73e : 340B0000; +73f : B9600800; +740 : 2B9D0004; +741 : 2B8B0014; +742 : 2B8C0010; +743 : 2B8D000C; +744 : 2B8E0008; +745 : 379C00DC; +746 : C3A00000; +747 : 78020000; +748 : 38429350; +749 : 34430030; +74a : E0000005; +74b : 28440000; +74c : 5C810002; +74d : 58400000; +74e : 34420004; +74f : 5C43FFFC; +750 : 34010000; +751 : C3A00000; +752 : 379CFFE8; +753 : 5B8B0018; +754 : 5B8C0014; +755 : 5B8D0010; +756 : 5B8E000C; +757 : 5B8F0008; +758 : 5B9D0004; +759 : B8205800; +75a : 59620010; +75b : B8407000; +75c : B8807800; +75d : B8A06000; +75e : 282D0008; +75f : 44600005; +760 : B8A00800; +761 : 3402FC18; +762 : F8000EA4; +763 : B42D6800; +764 : C9CF2000; +765 : B8801800; +766 : 4C800002; +767 : B48C1800; +768 : 0181001F; +769 : B42C0800; +76a : 14210001; +76b : B4242000; +76c : 4C800002; +76d : B48C2000; +76e : 49840002; +76f : C88C2000; +770 : 09820003; +771 : 1445001F; +772 : 00A5001E; +773 : B4A21000; +774 : 14420002; +775 : 48620006; +776 : 1582001F; +777 : 0042001E; +778 : B44C1000; +779 : 14420002; +77a : 4C62000D; +77b : B4812000; +77c : 596D0008; +77d : 5964000C; +77e : 4984000A; +77f : C88C2000; +780 : 5964000C; +781 : B9800800; +782 : 340203E8; +783 : F8000E83; +784 : B5A10800; +785 : 59610008; +786 : E0000002; +787 : 5963000C; +788 : 78030000; +789 : 38638160; +78a : 29610008; +78b : 28620000; +78c : 4C41000D; +78d : 78030000; +78e : 38638154; +78f : 28620000; +790 : 29630000; +791 : B4220800; +792 : 29620004; +793 : 59610008; +794 : 34410001; +795 : F4411000; +796 : 59610004; +797 : B4431000; +798 : 59620000; +799 : 2B9D0004; +79a : 2B8B0018; +79b : 2B8C0014; +79c : 2B8D0010; +79d : 2B8E000C; +79e : 2B8F0008; +79f : 379C0018; +7a0 : C3A00000; +7a1 : 379CFFB4; +7a2 : 5B8B0024; +7a3 : 5B8C0020; +7a4 : 5B8D001C; +7a5 : 5B8E0018; +7a6 : 5B8F0014; +7a7 : 5B900010; +7a8 : 5B91000C; +7a9 : 5B920008; +7aa : 5B9D0004; +7ab : B8406800; +7ac : 2C22002C; +7ad : B8A05800; +7ae : B8206000; +7af : B8609000; +7b0 : B8807800; +7b1 : 34050000; +7b2 : 44400056; +7b3 : 342E0024; +7b4 : 2C310028; +7b5 : 3442FFFF; +7b6 : 0C22002C; +7b7 : 34030002; +7b8 : B9C01000; +7b9 : 34040000; +7ba : 3781004E; +7bb : FBFFFF0F; +7bc : B6218800; +7bd : 2231FFFF; +7be : 0D910028; +7bf : B9C01000; +7c0 : 34030018; +7c1 : 34040000; +7c2 : 37810028; +7c3 : FBFFFF07; +7c4 : B6218800; +7c5 : 2231FFFF; +7c6 : 37900040; +7c7 : 0D910028; +7c8 : B9C01000; +7c9 : 3403000E; +7ca : 34040000; +7cb : BA000800; +7cc : FBFFFEFE; +7cd : B6218800; +7ce : 2F83004E; +7cf : 2231FFFF; +7d0 : B9C01000; +7d1 : B9E02000; +7d2 : 0D910028; +7d3 : BA400800; +7d4 : FBFFFEF6; +7d5 : B6210800; +7d6 : 0D810028; +7d7 : 2F81004C; +7d8 : 78030000; +7d9 : 38638E40; +7da : 0DA1000C; +7db : 28610000; +7dc : 37820046; +7dd : 34030006; +7de : 0DA10010; +7df : B9A00800; +7e0 : F8000E93; +7e1 : 35A10006; +7e2 : BA001000; +7e3 : 34030006; +7e4 : F8000E8F; +7e5 : 4560001F; +7e6 : 2B810038; +7e7 : 59610014; +7e8 : 2B81002C; +7e9 : 59610018; +7ea : 34010000; +7eb : F8000C6D; +7ec : B8206800; +7ed : 35620010; +7ee : 34030000; +7ef : 34010000; +7f0 : F8000C34; +7f1 : 2B810030; +7f2 : 43820028; +7f3 : 2B83002C; +7f4 : 59610000; +7f5 : 2B810034; +7f6 : 7C420000; +7f7 : 2984001C; +7f8 : 59610004; +7f9 : 2B810038; +7fa : 5960000C; +7fb : 34051F40; +7fc : 59610008; +7fd : 21A100FF; +7fe : 64210000; +7ff : A0220800; +800 : 29620010; +801 : 5961001C; +802 : B9600800; +803 : FBFFFF4F; +804 : 2F81004E; +805 : B9E02800; +806 : 502F0002; +807 : B8202800; +808 : B8A00800; +809 : 2B9D0004; +80a : 2B8B0024; +80b : 2B8C0020; +80c : 2B8D001C; +80d : 2B8E0018; +80e : 2B8F0014; +80f : 2B900010; +810 : 2B91000C; +811 : 2B920008; +812 : 379C004C; +813 : C3A00000; +814 : 379CFFC0; +815 : 5B8B0014; +816 : 5B8C0010; +817 : 5B8D000C; +818 : 5B8E0008; +819 : 5B9D0004; +81a : B8206000; +81b : B8607000; +81c : 37810030; +81d : 34030006; +81e : B8A05800; +81f : B8806800; +820 : F8000E53; +821 : 37810036; +822 : 35820012; +823 : 34030006; +824 : F8000E4F; +825 : 78010000; +826 : 38218E40; +827 : 28250000; +828 : 2D81000C; +829 : 44A00009; +82a : 34028100; +82b : 0F82003C; +82c : 2D820018; +82d : 0F810040; +82e : 3C42000D; +82f : B8452800; +830 : 0F85003E; +831 : E0000002; +832 : 0F81003C; +833 : 37810030; +834 : B9C01000; +835 : B9A01800; +836 : 37840018; +837 : F8000437; +838 : 4560000A; +839 : 2B820020; +83a : 5960000C; +83b : 59620000; +83c : 2B820024; +83d : 59620004; +83e : 2B820028; +83f : 59620008; +840 : 43820018; +841 : 5962001C; +842 : 2B9D0004; +843 : 2B8B0014; +844 : 2B8C0010; +845 : 2B8D000C; +846 : 2B8E0008; +847 : 379C0040; +848 : C3A00000; +849 : 379CFFF4; +84a : 5B8B000C; +84b : 5B8C0008; +84c : 5B9D0004; +84d : 780B0000; +84e : B8202000; +84f : 396B9380; +850 : B8401800; +851 : B9600800; +852 : B8801000; +853 : F8000019; +854 : B8206000; +855 : B9600800; +856 : F80000F5; +857 : B9800800; +858 : 2B9D0004; +859 : 2B8B000C; +85a : 2B8C0008; +85b : 379C000C; +85c : C3A00000; +85d : 379CFFDC; +85e : 5B9D0004; +85f : 5B82000C; +860 : 3782000C; +861 : 5B810008; +862 : 5B830010; +863 : 5B840014; +864 : 5B850018; +865 : 5B86001C; +866 : 5B870020; +867 : 5B880024; +868 : FBFFFFE1; +869 : 2B9D0004; +86a : 379C0024; +86b : C3A00000; +86c : 379CFF9C; +86d : 5B8B0044; +86e : 5B8C0040; +86f : 5B8D003C; +870 : 5B8E0038; +871 : 5B8F0034; +872 : 5B900030; +873 : 5B91002C; +874 : 5B920028; +875 : 5B930024; +876 : 5B940020; +877 : 5B95001C; +878 : 5B960018; +879 : 5B970014; +87a : 5B980010; +87b : 5B99000C; +87c : 5B9B0008; +87d : 5B9D0004; +87e : 78160000; +87f : B820C800; +880 : B840A000; +881 : B8209800; +882 : 34180025; +883 : 34090069; +884 : 34080070; +885 : 34070058; +886 : 341B002A; +887 : 340A0030; +888 : 34170010; +889 : 37950058; +88a : 3AD67A94; +88b : E0000096; +88c : 340F0000; +88d : 34110020; +88e : 340D000A; +88f : 44380004; +890 : 32610000; +891 : E000003C; +892 : 34110030; +893 : 36940001; +894 : 42810000; +895 : 44290040; +896 : 5429000F; +897 : 4427003B; +898 : 54270008; +899 : 443B001A; +89a : 543B0004; +89b : 44200088; +89c : 5C38001A; +89d : E000002F; +89e : 5C2A0018; +89f : E0000016; +8a0 : 34020063; +8a1 : 4422001C; +8a2 : 34040064; +8a3 : 5C240013; +8a4 : E0000031; +8a5 : 4428002D; +8a6 : 54280006; +8a7 : 3402006E; +8a8 : 44220078; +8a9 : 3404006F; +8aa : 5C24000C; +8ab : E0000024; +8ac : 34020075; +8ad : 44220028; +8ae : 34040078; +8af : 44240023; +8b0 : 34020073; +8b1 : 5C220005; +8b2 : E0000010; +8b3 : 286D0000; +8b4 : 34630004; +8b5 : 45E0FFDD; +8b6 : 3421FFD0; +8b7 : 202200FF; +8b8 : 34040009; +8b9 : 5444FFDA; +8ba : 09EF000A; +8bb : B42F7800; +8bc : E3FFFFD7; +8bd : 28610000; +8be : 34630004; +8bf : 32610000; +8c0 : 36730001; +8c1 : E000005F; +8c2 : B8600800; +8c3 : 28210000; +8c4 : 34630004; +8c5 : E0000004; +8c6 : 32620000; +8c7 : 34210001; +8c8 : 36730001; +8c9 : 40220000; +8ca : 5C40FFFC; +8cb : E0000055; +8cc : 32780000; +8cd : 36730001; +8ce : E0000052; +8cf : 3401000A; +8d0 : 45A10004; +8d1 : E0000004; +8d2 : 340D0010; +8d3 : E0000002; +8d4 : 340D0008; +8d5 : 28650000; +8d6 : 34720004; +8d7 : B8A07000; +8d8 : 5DE00002; +8d9 : 340F0001; +8da : 00A6001F; +8db : 65A3000A; +8dc : 34100000; +8dd : A0C31800; +8de : 44600003; +8df : C8057000; +8e0 : 34100001; +8e1 : 340C0010; +8e2 : E0000015; +8e3 : B9C00800; +8e4 : B9A01000; +8e5 : 5B87004C; +8e6 : 5B880050; +8e7 : 5B890054; +8e8 : 5B8A0048; +8e9 : F8000D5A; +8ea : B6C11800; +8eb : 40630000; +8ec : 358CFFFF; +8ed : B6AC5800; +8ee : B9C00800; +8ef : 31630000; +8f0 : B9A01000; +8f1 : F8000D42; +8f2 : 2B8A0048; +8f3 : 2B890054; +8f4 : 2B880050; +8f5 : 2B87004C; +8f6 : B8207000; +8f7 : 7D840000; +8f8 : 7DC30000; +8f9 : A0831800; +8fa : 5C60FFE9; +8fb : 5D970004; +8fc : 34020030; +8fd : 33820067; +8fe : 340C000F; +8ff : 66220020; +900 : A2021000; +901 : 4440000B; +902 : 358CFFFF; +903 : B6AC1000; +904 : 3403002D; +905 : 30430000; +906 : 34100000; +907 : E0000005; +908 : 358CFFFF; +909 : B6AC1000; +90a : 30510000; +90b : E0000003; +90c : CAEF0800; +90d : B4300800; +90e : 4981FFFA; +90f : 46000005; +910 : 358CFFFF; +911 : B6AC0800; +912 : 3402002D; +913 : 30220000; +914 : CAEC1800; +915 : BA600800; +916 : 3404000F; +917 : E0000006; +918 : B6AC1000; +919 : 40420000; +91a : 358C0001; +91b : 30220000; +91c : 34210001; +91d : 4C8CFFFB; +91e : B6639800; +91f : BA401800; +920 : 36940001; +921 : 42810000; +922 : 5C20FF6A; +923 : CA790800; +924 : 32600000; +925 : 2B9D0004; +926 : 2B8B0044; +927 : 2B8C0040; +928 : 2B8D003C; +929 : 2B8E0038; +92a : 2B8F0034; +92b : 2B900030; +92c : 2B91002C; +92d : 2B920028; +92e : 2B930024; +92f : 2B940020; +930 : 2B95001C; +931 : 2B960018; +932 : 2B970014; +933 : 2B980010; +934 : 2B99000C; +935 : 2B9B0008; +936 : 379C0064; +937 : C3A00000; +938 : 379CFFF8; +939 : 5B8B0008; +93a : 5B9D0004; +93b : B8205800; +93c : 3401000A; +93d : 5D610003; +93e : 3401000D; +93f : FBFFFFF9; +940 : 78020000; +941 : 38429750; +942 : 28420000; +943 : 28410000; +944 : 20210001; +945 : 5C20FFFE; +946 : 584B0008; +947 : 2B9D0004; +948 : 2B8B0008; +949 : 379C0008; +94a : C3A00000; +94b : 379CFFF4; +94c : 5B8B000C; +94d : 5B8C0008; +94e : 5B9D0004; +94f : B8206000; +950 : B8205800; +951 : E0000004; +952 : B8400800; +953 : 356B0001; +954 : FBFFFFE4; +955 : 41620000; +956 : 5C40FFFC; +957 : C96C0800; +958 : 2B9D0004; +959 : 2B8B000C; +95a : 2B8C0008; +95b : 379C000C; +95c : C3A00000; +95d : 78020000; +95e : 14210002; +95f : 3842974C; +960 : 28420000; +961 : 202100FF; +962 : 3C210010; +963 : 5841002C; +964 : 28410030; +965 : 4C20FFFF; +966 : 28410030; +967 : 2021FFFF; +968 : C3A00000; +969 : 14210002; +96a : 78030000; +96b : 3863974C; +96c : 202100FF; +96d : 28630000; +96e : 2042FFFF; +96f : 78048000; +970 : 3C210010; +971 : B8441000; +972 : B8411000; +973 : 5862002C; +974 : 28610030; +975 : 4C20FFFF; +976 : C3A00000; +977 : 40240002; +978 : 40230003; +979 : 78020000; +97a : 3C840018; +97b : 3C630010; +97c : 3842974C; +97d : B8831800; +97e : 40240005; +97f : 28420000; +980 : B8641800; +981 : 40240004; +982 : 3C840008; +983 : B8641800; +984 : 58430028; +985 : 40230001; +986 : 40210000; +987 : 3C210008; +988 : B8610800; +989 : 58410024; +98a : C3A00000; +98b : 78020000; +98c : 3842974C; +98d : 28430000; +98e : 28630028; +98f : 30230005; +990 : 28430000; +991 : 28630028; +992 : 00630008; +993 : 30230004; +994 : 28430000; +995 : 28630028; +996 : 00630010; +997 : 30230003; +998 : 28430000; +999 : 28630028; +99a : 00630018; +99b : 30230002; +99c : 28430000; +99d : 28630024; +99e : 30230001; +99f : 28420000; +9a0 : 28420024; +9a1 : 00420008; +9a2 : 30220000; +9a3 : C3A00000; +9a4 : 379CFFF4; +9a5 : 5B8B000C; +9a6 : 5B8C0008; +9a7 : 5B9D0004; +9a8 : 780B0000; +9a9 : B8406000; +9aa : 396B974C; +9ab : 5C200004; +9ac : 29610000; +9ad : 58200000; +9ae : E000001C; +9af : 29610000; +9b0 : 58200000; +9b1 : F80000B8; +9b2 : 29610000; +9b3 : 340200E0; +9b4 : 58220000; +9b5 : 78010000; +9b6 : 38219400; +9b7 : 582C0000; +9b8 : 34020800; +9b9 : 34010000; +9ba : FBFFFFAF; +9bb : 34010000; +9bc : 38028000; +9bd : FBFFFFAC; +9be : 34010000; +9bf : 34020000; +9c0 : FBFFFFA9; +9c1 : 34010010; +9c2 : 34020000; +9c3 : FBFFFFA6; +9c4 : 7D820000; +9c5 : 34010000; +9c6 : C8021000; +9c7 : 20421200; +9c8 : 34420140; +9c9 : FBFFFFA0; +9ca : 34010000; +9cb : 2B9D0004; +9cc : 2B8B000C; +9cd : 2B8C0008; +9ce : 379C000C; +9cf : C3A00000; +9d0 : 379CFFF0; +9d1 : 5B8B000C; +9d2 : 5B8C0008; +9d3 : 5B9D0004; +9d4 : 78020000; +9d5 : 38429400; +9d6 : 284B0000; +9d7 : B8206000; +9d8 : 34010004; +9d9 : FBFFFF84; +9da : 7D6B0000; +9db : 0F810012; +9dc : 34010004; +9dd : C80B5800; +9de : FBFFFF7F; +9df : 216B0020; +9e0 : 0F810012; +9e1 : 356B0004; +9e2 : 45800004; +9e3 : 34010014; +9e4 : FBFFFF79; +9e5 : 0D810000; +9e6 : 2F810012; +9e7 : A1610800; +9e8 : E42B0800; +9e9 : 2B9D0004; +9ea : 2B8B000C; +9eb : 2B8C0008; +9ec : 379C0010; +9ed : C3A00000; +9ee : 379CFFFC; +9ef : 5B9D0004; +9f0 : 34010040; +9f1 : FBFFFF6C; +9f2 : 00210004; +9f3 : 2021001F; +9f4 : 08210320; +9f5 : 2B9D0004; +9f6 : 379C0004; +9f7 : C3A00000; +9f8 : 379CFFF4; +9f9 : 5B8B000C; +9fa : 5B8C0008; +9fb : 5B9D0004; +9fc : 78030000; +9fd : 38639408; +9fe : B8405800; +9ff : 28620000; +a00 : 58220000; +a01 : 78010000; +a02 : 3821940C; +a03 : 282C0000; +a04 : 34010040; +a05 : FBFFFF58; +a06 : 00210004; +a07 : 2021001F; +a08 : 08210320; +a09 : B42C0800; +a0a : 59610000; +a0b : 34010000; +a0c : 2B9D0004; +a0d : 2B8B000C; +a0e : 2B8C0008; +a0f : 379C000C; +a10 : C3A00000; +a11 : 379CFFFC; +a12 : 5B9D0004; +a13 : 34010040; +a14 : FBFFFF49; +a15 : 38220001; +a16 : 34010040; +a17 : FBFFFF52; +a18 : 34010000; +a19 : 2B9D0004; +a1a : 379C0004; +a1b : C3A00000; +a1c : 379CFFFC; +a1d : 5B9D0004; +a1e : 34010040; +a1f : FBFFFF3E; +a20 : 3402FFFE; +a21 : A0221000; +a22 : 34010040; +a23 : FBFFFF46; +a24 : 34010000; +a25 : 2B9D0004; +a26 : 379C0004; +a27 : C3A00000; +a28 : 379CFFF8; +a29 : 5B8B0008; +a2a : 5B9D0004; +a2b : 780B0000; +a2c : 396B974C; +a2d : 29610000; +a2e : 28220004; +a2f : 38420010; +a30 : 58220004; +a31 : 34010001; +a32 : F80002F8; +a33 : 29610000; +a34 : 28210004; +a35 : 20210020; +a36 : 7C210000; +a37 : 2B9D0004; +a38 : 2B8B0008; +a39 : 379C0008; +a3a : C3A00000; +a3b : 379CFFF8; +a3c : 5B8B0008; +a3d : 5B9D0004; +a3e : B8205800; +a3f : 34010044; +a40 : FBFFFF1D; +a41 : 38220020; +a42 : 45600003; +a43 : 3402FFDF; +a44 : A0221000; +a45 : 34010044; +a46 : FBFFFF23; +a47 : 34010000; +a48 : 2B9D0004; +a49 : 2B8B0008; +a4a : 379C0008; +a4b : C3A00000; +a4c : 379CFFF8; +a4d : 5B8B0008; +a4e : 5B9D0004; +a4f : 78020000; +a50 : 38429440; +a51 : 28420000; +a52 : 780B0000; +a53 : 396B974C; +a54 : 59620000; +a55 : FBFFFF22; +a56 : 34010001; +a57 : FBFFFFE4; +a58 : 29610000; +a59 : 78040000; +a5a : 38848170; +a5b : 28830000; +a5c : 58200000; +a5d : 34020003; +a5e : 5822000C; +a5f : 58230008; +a60 : 78030000; +a61 : 38638174; +a62 : 58220004; +a63 : 28620000; +a64 : 5822003C; +a65 : 2B9D0004; +a66 : 2B8B0008; +a67 : 379C0008; +a68 : C3A00000; +a69 : 379CFFE8; +a6a : 5B8B0010; +a6b : 5B8C000C; +a6c : 5B8D0008; +a6d : 5B9D0004; +a6e : 78010000; +a6f : 38218E40; +a70 : 28220000; +a71 : 78010000; +a72 : 38218A84; +a73 : 44400003; +a74 : 78010000; +a75 : 38218A8C; +a76 : 282B0000; +a77 : 5D600004; +a78 : 78010000; +a79 : 38217AA8; +a7a : E0000036; +a7b : 78030000; +a7c : 38638178; +a7d : 282C0004; +a7e : 29620000; +a7f : 28610000; +a80 : 44410011; +a81 : B9600800; +a82 : 780400FF; +a83 : E000000D; +a84 : 28230000; +a85 : 3C660018; +a86 : 00650018; +a87 : B8C52800; +a88 : A0643000; +a89 : 00C60008; +a8a : 2063FF00; +a8b : 3C630008; +a8c : B8A62800; +a8d : B8A31800; +a8e : 58230000; +a8f : 34210004; +a90 : 5581FFF4; +a91 : 78040000; +a92 : 38848178; +a93 : 29630000; +a94 : 28810000; +a95 : 44610005; +a96 : 78010000; +a97 : 38217AC0; +a98 : FBFFFDC5; +a99 : E00000AB; +a9a : 78010000; +a9b : 38219404; +a9c : 28220000; +a9d : 356B0004; +a9e : 5C400016; +a9f : 29630008; +aa0 : 34021234; +aa1 : 0063000D; +aa2 : 2063FFFF; +aa3 : 5C62000B; +aa4 : 29630010; +aa5 : 34025678; +aa6 : 0063000D; +aa7 : 2063FFFF; +aa8 : 5C620006; +aa9 : 29630018; +aaa : 34424444; +aab : 0063000D; +aac : 2063FFFF; +aad : 44620005; +aae : 78010000; +aaf : 38217AE8; +ab0 : FBFFFDAD; +ab1 : E0000093; +ab2 : 34020001; +ab3 : 58220000; +ab4 : 37810014; +ab5 : FBFFFED6; +ab6 : 78060000; +ab7 : 38C6817C; +ab8 : 28C50000; +ab9 : 29670008; +aba : 29660010; +abb : 29610018; +abc : A0E53800; +abd : A0C53000; +abe : A0250800; +abf : 59670008; +ac0 : 59660010; +ac1 : 59610018; +ac2 : 43880014; +ac3 : 43890015; +ac4 : 35640008; +ac5 : 3D080008; +ac6 : 35630010; +ac7 : B9094000; +ac8 : 3D08000D; +ac9 : 35620018; +aca : B8E83800; +acb : 59670008; +acc : 43870016; +acd : 43880017; +ace : 3809CAFE; +acf : 3CE70008; +ad0 : B8E83800; +ad1 : 3CE7000D; +ad2 : 34080001; +ad3 : B8C73000; +ad4 : 59660010; +ad5 : 43860018; +ad6 : 43870019; +ad7 : 3CC60008; +ad8 : B8C73000; +ad9 : 3CC6000D; +ada : B8260800; +adb : 78060000; +adc : 38C68180; +add : 59610018; +ade : 28C70000; +adf : B9600800; +ae0 : E000000B; +ae1 : 28260000; +ae2 : 00CA000D; +ae3 : 214AFFFF; +ae4 : 5D490006; +ae5 : 20CA0007; +ae6 : 5D480004; +ae7 : A0C53000; +ae8 : B8C73000; +ae9 : 58260000; +aea : 34210008; +aeb : 5581FFF6; +aec : 78070000; +aed : 38E7817C; +aee : 78060000; +aef : B9600800; +af0 : 34050000; +af1 : 340A0AAA; +af2 : 34090007; +af3 : 28E80000; +af4 : 38C68E40; +af5 : E0000010; +af6 : 28270000; +af7 : 00ED000D; +af8 : 21ADFFFF; +af9 : 5DAA000B; +afa : 00ED0007; +afb : 21AD001F; +afc : 5DA90008; +afd : A0E83800; +afe : 58270000; +aff : 28C50000; +b00 : 3CA5000D; +b01 : B8A73800; +b02 : 58270000; +b03 : B8202800; +b04 : 34210008; +b05 : 5581FFF1; +b06 : 78010000; +b07 : 3821974C; +b08 : 28210000; +b09 : 34060000; +b0a : 58200014; +b0b : E000000F; +b0c : 29670000; +b0d : 29690004; +b0e : 356B0008; +b0f : 20E80FFF; +b10 : 3D290014; +b11 : 00E7000C; +b12 : 58280018; +b13 : B9273800; +b14 : 3CE70008; +b15 : 20C9003F; +b16 : 38E70040; +b17 : B8E93800; +b18 : 58270014; +b19 : 34C60001; +b1a : 558BFFF2; +b1b : 44A0000B; +b1c : 78080000; +b1d : 3908817C; +b1e : 28A70000; +b1f : 29060000; +b20 : 78080000; +b21 : 39088184; +b22 : A0E63000; +b23 : 29070000; +b24 : B8C73000; +b25 : 58A60000; +b26 : 78070000; +b27 : 38E7817C; +b28 : 28860000; +b29 : 28E50000; +b2a : 78080000; +b2b : 39088188; +b2c : A0C53000; +b2d : 58860000; +b2e : 28660000; +b2f : A0C53000; +b30 : 58660000; +b31 : 28460000; +b32 : A0C52800; +b33 : 58450000; +b34 : 28860000; +b35 : 29050000; +b36 : B8C52800; +b37 : 58850000; +b38 : 28650000; +b39 : 78040ACF; +b3a : B8A42000; +b3b : 78050000; +b3c : 58640000; +b3d : 38A5818C; +b3e : 28440000; +b3f : 28A30000; +b40 : B8831800; +b41 : 58430000; +b42 : 34020080; +b43 : 58220014; +b44 : 2B9D0004; +b45 : 2B8B0010; +b46 : 2B8C000C; +b47 : 2B8D0008; +b48 : 379C0018; +b49 : C3A00000; +b4a : 78030000; +b4b : 38639748; +b4c : 44400004; +b4d : 28620000; +b4e : 58410004; +b4f : C3A00000; +b50 : 28620000; +b51 : 58410008; +b52 : C3A00000; +b53 : 78030000; +b54 : 38639748; +b55 : 44400004; +b56 : 28620000; +b57 : 58410004; +b58 : C3A00000; +b59 : 28620000; +b5a : 58410008; +b5b : C3A00000; +b5c : 34020000; +b5d : E0000003; +b5e : 34000000; +b5f : 34420001; +b60 : 5C41FFFE; +b61 : C3A00000; +b62 : 379CFFF8; +b63 : 5B8B0008; +b64 : 5B9D0004; +b65 : 202100FF; +b66 : 082B000C; +b67 : 78020000; +b68 : 38428A94; +b69 : B44B5800; +b6a : 29610004; +b6b : 34020000; +b6c : FBFFFFDE; +b6d : 29610008; +b6e : FBFFFFEE; +b6f : 29610000; +b70 : 34020000; +b71 : FBFFFFD9; +b72 : 29610008; +b73 : FBFFFFE9; +b74 : 2B9D0004; +b75 : 2B8B0008; +b76 : 379C0008; +b77 : C3A00000; +b78 : 379CFFF8; +b79 : 5B8B0008; +b7a : 5B9D0004; +b7b : 202100FF; +b7c : 082B000C; +b7d : 78020000; +b7e : 38428A94; +b7f : B44B5800; +b80 : 29610004; +b81 : 34020001; +b82 : FBFFFFC8; +b83 : 29610008; +b84 : FBFFFFD8; +b85 : 29610000; +b86 : 34020001; +b87 : FBFFFFC3; +b88 : 29610008; +b89 : FBFFFFD3; +b8a : 29610004; +b8b : 34020000; +b8c : FBFFFFBE; +b8d : 29610008; +b8e : FBFFFFCE; +b8f : 29610000; +b90 : 34020000; +b91 : FBFFFFB9; +b92 : 29610008; +b93 : FBFFFFC9; +b94 : 2B9D0004; +b95 : 2B8B0008; +b96 : 379C0008; +b97 : C3A00000; +b98 : 379CFFF8; +b99 : 5B8B0008; +b9a : 5B9D0004; +b9b : 202100FF; +b9c : 082B000C; +b9d : 78020000; +b9e : 38428A94; +b9f : B44B5800; +ba0 : 29610004; +ba1 : 34020000; +ba2 : FBFFFFA8; +ba3 : 29610008; +ba4 : FBFFFFB8; +ba5 : 29610000; +ba6 : 34020001; +ba7 : FBFFFFA3; +ba8 : 29610008; +ba9 : FBFFFFB3; +baa : 29610004; +bab : 34020001; +bac : FBFFFF9E; +bad : 29610008; +bae : FBFFFFAE; +baf : 2B9D0004; +bb0 : 2B8B0008; +bb1 : 379C0008; +bb2 : C3A00000; +bb3 : 379CFFE8; +bb4 : 5B8B0018; +bb5 : 5B8C0014; +bb6 : 5B8D0010; +bb7 : 5B8E000C; +bb8 : 5B8F0008; +bb9 : 5B9D0004; +bba : 202100FF; +bbb : 082B000C; +bbc : 78030000; +bbd : 38638A94; +bbe : 204F00FF; +bbf : 340E0008; +bc0 : B46B5800; +bc1 : 29610004; +bc2 : 21E20080; +bc3 : 35CEFFFF; +bc4 : FBFFFF86; +bc5 : 29610008; +bc6 : 3DEF0001; +bc7 : 21CE00FF; +bc8 : FBFFFF94; +bc9 : 29610000; +bca : 34020001; +bcb : 356D0004; +bcc : FBFFFF7E; +bcd : 29610008; +bce : 356C0008; +bcf : 21EF00FF; +bd0 : FBFFFF8C; +bd1 : 29610000; +bd2 : 34020000; +bd3 : FBFFFF77; +bd4 : 29610008; +bd5 : FBFFFF87; +bd6 : 5DC0FFEB; +bd7 : 29A10000; +bd8 : 34020001; +bd9 : FBFFFF71; +bda : 29810000; +bdb : FBFFFF81; +bdc : 29610000; +bdd : 34020001; +bde : FBFFFF6C; +bdf : 29810000; +be0 : FBFFFF7C; +be1 : 78010000; +be2 : 38219748; +be3 : 28210000; +be4 : 29AE0000; +be5 : 34020000; +be6 : 28210004; +be7 : A02E7000; +be8 : 29610000; +be9 : FBFFFF61; +bea : 29810000; +beb : FBFFFF71; +bec : 29A10000; +bed : 34020000; +bee : FBFFFF5C; +bef : 29810000; +bf0 : FBFFFF6C; +bf1 : 7DC10000; +bf2 : 2B9D0004; +bf3 : 2B8B0018; +bf4 : 2B8C0014; +bf5 : 2B8D0010; +bf6 : 2B8E000C; +bf7 : 2B8F0008; +bf8 : 379C0018; +bf9 : C3A00000; +bfa : 379CFFE0; +bfb : 5B8B0020; +bfc : 5B8C001C; +bfd : 5B8D0018; +bfe : 5B8E0014; +bff : 5B8F0010; +c00 : 5B90000C; +c01 : 5B910008; +c02 : 5B9D0004; +c03 : 202100FF; +c04 : 082B000C; +c05 : 78040000; +c06 : 38848A94; +c07 : B48B5800; +c08 : 29610004; +c09 : B8408000; +c0a : 34020001; +c0b : 207100FF; +c0c : FBFFFF3E; +c0d : 29610008; +c0e : 780F0000; +c0f : 340E0008; +c10 : FBFFFF4C; +c11 : 29610000; +c12 : 34020000; +c13 : 340D0000; +c14 : FBFFFF36; +c15 : 29610008; +c16 : 39EF9748; +c17 : FBFFFF45; +c18 : 29610000; +c19 : 34020001; +c1a : 3DAD0001; +c1b : FBFFFF2F; +c1c : 29610008; +c1d : 21AD00FF; +c1e : FBFFFF3E; +c1f : 29E10000; +c20 : 29620004; +c21 : 28210004; +c22 : A0220800; +c23 : 44200002; +c24 : 39AD0001; +c25 : 29610000; +c26 : 34020000; +c27 : 35CEFFFF; +c28 : FBFFFF22; +c29 : 29610008; +c2a : 356C0008; +c2b : FBFFFF31; +c2c : 5DC0FFEC; +c2d : 462E0004; +c2e : 29610004; +c2f : 34020001; +c30 : E0000003; +c31 : 29610004; +c32 : 34020000; +c33 : FBFFFF17; +c34 : 29810000; +c35 : FBFFFF27; +c36 : 29610000; +c37 : 34020001; +c38 : FBFFFF12; +c39 : 29810000; +c3a : FBFFFF22; +c3b : 29610000; +c3c : 34020000; +c3d : FBFFFF0D; +c3e : 29810000; +c3f : FBFFFF1D; +c40 : 320D0000; +c41 : 2B9D0004; +c42 : 2B8B0020; +c43 : 2B8C001C; +c44 : 2B8D0018; +c45 : 2B8E0014; +c46 : 2B8F0010; +c47 : 2B90000C; +c48 : 2B910008; +c49 : 379C0020; +c4a : C3A00000; +c4b : 20210003; +c4c : 3C210010; +c4d : B8221000; +c4e : 78010000; +c4f : 38219758; +c50 : 28210000; +c51 : 58220004; +c52 : C3A00000; +c53 : 379CFFF8; +c54 : 5B8B0008; +c55 : 5B9D0004; +c56 : 78010000; +c57 : 38219758; +c58 : 28210000; +c59 : 780B0000; +c5a : 34040001; +c5b : 28230000; +c5c : 396B973C; +c5d : 00620018; +c5e : 2042000F; +c5f : 44440006; +c60 : 78010000; +c61 : 38217B10; +c62 : FBFFFBFB; +c63 : 59600000; +c64 : E0000006; +c65 : 59620000; +c66 : 34020007; +c67 : 58220040; +c68 : 38630400; +c69 : 58230000; +c6a : 2B9D0004; +c6b : 2B8B0008; +c6c : 379C0008; +c6d : C3A00000; +c6e : 379CFFD4; +c6f : 5B8B0020; +c70 : 5B8C001C; +c71 : 5B8D0018; +c72 : 5B8E0014; +c73 : 5B8F0010; +c74 : 5B90000C; +c75 : 5B910008; +c76 : 5B9D0004; +c77 : B8406800; +c78 : 78020000; +c79 : 3842973C; +c7a : 28420000; +c7b : B8207800; +c7c : B8606000; +c7d : B8805800; +c7e : 34010000; +c7f : 4440008A; +c80 : 2DE3000C; +c81 : 38018100; +c82 : FC611800; +c83 : 3401FFFC; +c84 : C8031800; +c85 : A0611800; +c86 : 34630012; +c87 : B46C1000; +c88 : 3401003B; +c89 : 14710001; +c8a : 54410003; +c8b : 340C003C; +c8c : C9836000; +c8d : 35900001; +c8e : 34010002; +c8f : 34020000; +c90 : 02100001; +c91 : FBFFFFBA; +c92 : 340E0000; +c93 : E0000006; +c94 : 2DE20000; +c95 : 34010000; +c96 : 35CE0001; +c97 : FBFFFFB4; +c98 : 35EF0002; +c99 : 562EFFFB; +c9a : B9A07800; +c9b : 340E0000; +c9c : 3610FFFF; +c9d : E0000006; +c9e : 2DE20000; +c9f : 34010000; +ca0 : 35CE0001; +ca1 : FBFFFFAA; +ca2 : 35EF0002; +ca3 : 560EFFFB; +ca4 : 21820001; +ca5 : 3E010001; +ca6 : 5C400004; +ca7 : B5A16800; +ca8 : 34010000; +ca9 : E0000003; +caa : B5A16800; +cab : 34010003; +cac : 2DA20000; +cad : FBFFFF9E; +cae : 45600007; +caf : 34010001; +cb0 : 34021000; +cb1 : FBFFFF9A; +cb2 : 34010001; +cb3 : 34020000; +cb4 : FBFFFF97; +cb5 : 78010000; +cb6 : 38219758; +cb7 : 28220000; +cb8 : 340D0000; +cb9 : B8207800; +cba : 28430000; +cbb : 341003E8; +cbc : 38630001; +cbd : 58430000; +cbe : 29E10000; +cbf : 282E0000; +cc0 : 21C10002; +cc1 : 5C200009; +cc2 : 34010001; +cc3 : 35AD0001; +cc4 : F8000066; +cc5 : 5DB0FFF9; +cc6 : 78010000; +cc7 : 38217BA4; +cc8 : B9C01000; +cc9 : FBFFFB94; +cca : 4560003E; +ccb : 780D0000; +ccc : 340E0000; +ccd : 39AD9758; +cce : 340F0064; +ccf : 29A10000; +cd0 : 28220000; +cd1 : 20420800; +cd2 : 5C40000A; +cd3 : 34010001; +cd4 : 35CE0001; +cd5 : F8000055; +cd6 : 5DCFFFF9; +cd7 : 78010000; +cd8 : 38217BD4; +cd9 : FBFFFB84; +cda : 340E0000; +cdb : E0000003; +cdc : 282E0014; +cdd : 21CE0001; +cde : 78010000; +cdf : 38219758; +ce0 : 28210000; +ce1 : 78020000; +ce2 : 38428190; +ce3 : 282D0018; +ce4 : 28210014; +ce5 : 28410000; +ce6 : 3782002C; +ce7 : A1A16800; +ce8 : 37810024; +ce9 : F800019B; +cea : 78030000; +ceb : 38638194; +cec : 28610000; +ced : 502D000E; +cee : 78030000; +cef : 38638198; +cf0 : 2B82002C; +cf1 : 28610000; +cf2 : 54410009; +cf3 : 2B830028; +cf4 : 2B820024; +cf5 : 3461FFFF; +cf6 : F4611800; +cf7 : 3442FFFF; +cf8 : B4621000; +cf9 : 5B820024; +cfa : 5B810028; +cfb : 2B810024; +cfc : 316E0000; +cfd : 3DAD0003; +cfe : 59610008; +cff : 2B810028; +d00 : 59600004; +d01 : 596D0010; +d02 : 5961000C; +d03 : 78010000; +d04 : 3821971C; +d05 : 28220000; +d06 : 34420001; +d07 : 58220000; +d08 : B9800800; +d09 : 2B9D0004; +d0a : 2B8B0020; +d0b : 2B8C001C; +d0c : 2B8D0018; +d0d : 2B8E0014; +d0e : 2B8F0010; +d0f : 2B90000C; +d10 : 2B910008; +d11 : 379C002C; +d12 : C3A00000; +d13 : 78020000; +d14 : 3842975C; +d15 : 28420000; +d16 : 78030000; +d17 : 38639748; +d18 : 58620000; +d19 : 44200005; +d1a : 28430018; +d1b : 78018000; +d1c : B8610800; +d1d : E0000006; +d1e : 78040000; +d1f : 3884814C; +d20 : 28430018; +d21 : 28810000; +d22 : A0610800; +d23 : 58410018; +d24 : C3A00000; +d25 : 78010000; +d26 : 38219748; +d27 : 28210000; +d28 : 2821001C; +d29 : C3A00000; +d2a : 78020000; +d2b : 38429748; +d2c : 28420000; +d2d : 2843001C; +d2e : B4230800; +d2f : 2843001C; +d30 : C8611800; +d31 : 4803FFFE; +d32 : C3A00000; +d33 : 379CFFF4; +d34 : 5B8B000C; +d35 : 5B8C0008; +d36 : 5B9D0004; +d37 : 34020000; +d38 : B8206000; +d39 : F80001FA; +d3a : B8205800; +d3b : 4C200005; +d3c : 78010000; +d3d : 38217C2C; +d3e : B9601000; +d3f : E0000004; +d40 : 29820000; +d41 : 78010000; +d42 : 38217C58; +d43 : FBFFFB1A; +d44 : B9600800; +d45 : 2B9D0004; +d46 : 2B8B000C; +d47 : 2B8C0008; +d48 : 379C000C; +d49 : C3A00000; +d4a : 379CFFFC; +d4b : 5B9D0004; +d4c : 78010000; +d4d : 38219410; +d4e : 58200000; +d4f : 78020000; +d50 : 78010000; +d51 : 38219424; +d52 : 38429414; +d53 : 3403FFFF; +d54 : 58230000; +d55 : 58430000; +d56 : 58200008; +d57 : 58400008; +d58 : 58400004; +d59 : 58200004; +d5a : 5840000C; +d5b : 5820000C; +d5c : 34020000; +d5d : 34010000; +d5e : F800069E; +d5f : 2B9D0004; +d60 : 379C0004; +d61 : C3A00000; +d62 : 379CFFF4; +d63 : 5B8B000C; +d64 : 5B8C0008; +d65 : 5B9D0004; +d66 : B8206000; +d67 : 34010000; +d68 : F80006F0; +d69 : B8205800; +d6a : 34020000; +d6b : 5C200081; +d6c : FBFFFCBC; +d6d : 78030000; +d6e : 38639414; +d6f : 28650008; +d70 : 78020000; +d71 : 38429410; +d72 : B8202000; +d73 : 28420000; +d74 : 44AB0004; +d75 : 34010001; +d76 : 5CA1001D; +d77 : E0000010; +d78 : 34010001; +d79 : 44810005; +d7a : 28610004; +d7b : 34210001; +d7c : 58610004; +d7d : E0000002; +d7e : 58600004; +d7f : 78030000; +d80 : 38639414; +d81 : 28650004; +d82 : 34010004; +d83 : 4C250010; +d84 : 34010001; +d85 : 58610008; +d86 : E0000002; +d87 : 44850003; +d88 : 58600004; +d89 : E000000A; +d8a : 28650004; +d8b : 34010004; +d8c : 34A50001; +d8d : 58650004; +d8e : 4C250005; +d8f : 34010002; +d90 : 58610008; +d91 : 3441FE0C; +d92 : 5861000C; +d93 : 78030000; +d94 : 38639424; +d95 : 28650008; +d96 : 44A00004; +d97 : 34010001; +d98 : 5CA1001C; +d99 : E000000F; +d9a : 44850005; +d9b : 28610004; +d9c : 34210001; +d9d : 58610004; +d9e : E0000002; +d9f : 58600004; +da0 : 78030000; +da1 : 38639424; +da2 : 28640004; +da3 : 34010004; +da4 : 4C240010; +da5 : 34010001; +da6 : 58610008; +da7 : E0000002; +da8 : 44800003; +da9 : 58600004; +daa : E000000A; +dab : 28640004; +dac : 34010004; +dad : 34840001; +dae : 58640004; +daf : 4C240005; +db0 : 34010002; +db1 : 58610008; +db2 : 3441FE0C; +db3 : 5861000C; +db4 : 3401251B; +db5 : 4C220030; +db6 : 78020000; +db7 : 38429414; +db8 : 28440008; +db9 : 34010002; +dba : 3402FFFF; +dbb : 5C810031; +dbc : 78030000; +dbd : 38639424; +dbe : 28610008; +dbf : 5C24002D; +dc0 : 2862000C; +dc1 : 34011F3F; +dc2 : E0000002; +dc3 : 3442E0C0; +dc4 : 4841FFFF; +dc5 : 78030000; +dc6 : 38639424; +dc7 : 5862000C; +dc8 : 78030000; +dc9 : 38639414; +dca : 2863000C; +dcb : 34011F3F; +dcc : E0000002; +dcd : 3463E0C0; +dce : 4861FFFF; +dcf : 78040000; +dd0 : 38849414; +dd1 : 5883000C; +dd2 : 4C620003; +dd3 : 3444F060; +dd4 : E0000004; +dd5 : 34040000; +dd6 : 4C430002; +dd7 : 34440FA0; +dd8 : B4831800; +dd9 : 0062001F; +dda : B4431800; +ddb : 14620001; +ddc : 4C400003; +ddd : 34421F40; +dde : E0000004; +ddf : 34011F3F; +de0 : 4C220002; +de1 : 3442E0C0; +de2 : 59820000; +de3 : 34020001; +de4 : E0000008; +de5 : 78010000; +de6 : 34420064; +de7 : 38219410; +de8 : 58220000; +de9 : 34010000; +dea : F8000612; +deb : 34020000; +dec : B8400800; +ded : 2B9D0004; +dee : 2B8B000C; +def : 2B8C0008; +df0 : 379C000C; +df1 : C3A00000; +df2 : 379CFFEC; +df3 : 5B8B0010; +df4 : 5B8C000C; +df5 : 5B8D0008; +df6 : 5B9D0004; +df7 : B8405800; +df8 : 34020003; +df9 : 340C0000; +dfa : 340D03E9; +dfb : 5C220022; +dfc : E0000005; +dfd : 458D0027; +dfe : FBFFFBD2; +dff : 44200025; +e00 : 358C0001; +e01 : B9600800; +e02 : FBFFFF60; +e03 : 4420FFFA; +e04 : 4C200002; +e05 : E0000018; +e06 : 37810014; +e07 : 34020000; +e08 : F800012B; +e09 : 48010007; +e0a : 29620000; +e0b : 2B810014; +e0c : 3443FF38; +e0d : 54610003; +e0e : 344200C8; +e0f : 5041001D; +e10 : 34020001; +e11 : B9600800; +e12 : F8000121; +e13 : 78030000; +e14 : 29620000; +e15 : 38637CC8; +e16 : 4C200003; +e17 : 78030000; +e18 : 38637CC0; +e19 : 78010000; +e1a : 38217CD0; +e1b : FBFFFA42; +e1c : E0000010; +e1d : B9600800; +e1e : FBFFFF15; +e1f : B8206000; +e20 : 48010005; +e21 : 29610000; +e22 : FBFFF8D3; +e23 : E0000002; +e24 : 340CFFFF; +e25 : B9800800; +e26 : 2B9D0004; +e27 : 2B8B0010; +e28 : 2B8C000C; +e29 : 2B8D0008; +e2a : 379C0014; +e2b : C3A00000; +e2c : 340C0000; +e2d : E3FFFFF4; +e2e : 78010000; +e2f : 38219474; +e30 : 28210000; +e31 : 28220008; +e32 : 2821000C; +e33 : 202100FF; +e34 : C3A00000; +e35 : 78010000; +e36 : 78030000; +e37 : 3863819C; +e38 : 38219474; +e39 : 28210000; +e3a : 28620000; +e3b : 78040000; +e3c : 388481A0; +e3d : 58220000; +e3e : 58200014; +e3f : 28830000; +e40 : 58200018; +e41 : 58200010; +e42 : 58230000; +e43 : 58220000; +e44 : 5820001C; +e45 : C3A00000; +e46 : 78040000; +e47 : 34050002; +e48 : 38849474; +e49 : 5C25000E; +e4a : 28810000; +e4b : 1444001F; +e4c : 20840007; +e4d : B4831800; +e4e : F4832000; +e4f : 00630003; +e50 : B4821000; +e51 : 3C42001D; +e52 : 58200014; +e53 : 58200018; +e54 : B8431800; +e55 : 58230010; +e56 : E0000006; +e57 : 28810000; +e58 : 204200FF; +e59 : 58230014; +e5a : 58220018; +e5b : 58200010; +e5c : 78010000; +e5d : 38219474; +e5e : 28210000; +e5f : 28220000; +e60 : 38420004; +e61 : 58220000; +e62 : 34010000; +e63 : C3A00000; +e64 : 78050000; +e65 : 38A59474; +e66 : 28A50000; +e67 : 202100FF; +e68 : 00630003; +e69 : 58A20014; +e6a : 58A10018; +e6b : 58A30010; +e6c : 34010003; +e6d : 5C810007; +e6e : 28A20000; +e6f : 3401FFF3; +e70 : A0410800; +e71 : 38210008; +e72 : 58A10000; +e73 : C3A00000; +e74 : 34010001; +e75 : 5C810007; +e76 : 28A2001C; +e77 : 3401FFE7; +e78 : A0410800; +e79 : 38210010; +e7a : 58A1001C; +e7b : C3A00000; +e7c : 34010002; +e7d : 5C810006; +e7e : 28A2001C; +e7f : 3401FFC7; +e80 : A0410800; +e81 : 38210020; +e82 : 58A1001C; +e83 : C3A00000; +e84 : 379CFFE0; +e85 : 5B8B0020; +e86 : 5B8C001C; +e87 : 5B8D0018; +e88 : 5B8E0014; +e89 : 5B8F0010; +e8a : 5B90000C; +e8b : 5B910008; +e8c : 5B9D0004; +e8d : B8206000; +e8e : 78010000; +e8f : 38218190; +e90 : 282F0000; +e91 : 780B0000; +e92 : B8406800; +e93 : 396B9474; +e94 : FBFFFF9A; +e95 : B8208800; +e96 : 29610000; +e97 : B8408000; +e98 : 282E0004; +e99 : A1CF7000; +e9a : FBFFFF94; +e9b : 5C31FFF9; +e9c : 5C50FFF8; +e9d : 45800003; +e9e : 59810000; +e9f : 59820004; +ea0 : 45A00003; +ea1 : 3DC10003; +ea2 : 59A10000; +ea3 : 2B9D0004; +ea4 : 2B8B0020; +ea5 : 2B8C001C; +ea6 : 2B8D0018; +ea7 : 2B8E0014; +ea8 : 2B8F0010; +ea9 : 2B90000C; +eaa : 2B910008; +eab : 379C0020; +eac : C3A00000; +ead : 78010000; +eae : 38219474; +eaf : 28210000; +eb0 : 28210000; +eb1 : 20210004; +eb2 : 64210000; +eb3 : C3A00000; +eb4 : 78020000; +eb5 : 38429474; +eb6 : 28420000; +eb7 : 2843001C; +eb8 : 44200003; +eb9 : 3863000C; +eba : E0000003; +ebb : 3401FFF3; +ebc : A0611800; +ebd : 5843001C; +ebe : 34010000; +ebf : C3A00000; +ec0 : 379CFFE8; +ec1 : 5B8B0018; +ec2 : 5B8C0014; +ec3 : 5B8D0010; +ec4 : 5B8E000C; +ec5 : 5B8F0008; +ec6 : 5B9D0004; +ec7 : 282B0004; +ec8 : B8806800; +ec9 : B8607800; +eca : 41610003; +ecb : B8406000; +ecc : 35AEFFFF; +ecd : FBFFFC95; +ece : 29620004; +ecf : 41610003; +ed0 : 3C420001; +ed1 : 204200FE; +ed2 : FBFFFCE1; +ed3 : 15820008; +ed4 : 41610003; +ed5 : 204200FF; +ed6 : FBFFFCDD; +ed7 : 41610003; +ed8 : 218200FF; +ed9 : 340C0000; +eda : FBFFFCD9; +edb : 41610003; +edc : FBFFFC9C; +edd : 29620004; +ede : 41610003; +edf : 3C420001; +ee0 : 38420001; +ee1 : 204200FF; +ee2 : FBFFFCD1; +ee3 : E0000005; +ee4 : 20A100FF; +ee5 : 34030000; +ee6 : FBFFFD14; +ee7 : 358C0001; +ee8 : B5EC1000; +ee9 : 29650000; +eea : 49CCFFFA; +eeb : 20A100FF; +eec : 34030001; +eed : FBFFFD0D; +eee : 41610003; +eef : FBFFFCA9; +ef0 : B9A00800; +ef1 : 2B9D0004; +ef2 : 2B8B0018; +ef3 : 2B8C0014; +ef4 : 2B8D0010; +ef5 : 2B8E000C; +ef6 : 2B8F0008; +ef7 : 379C0018; +ef8 : C3A00000; +ef9 : 379CFFE4; +efa : 5B8B001C; +efb : 5B8C0018; +efc : 5B8D0014; +efd : 5B8E0010; +efe : 5B8F000C; +eff : 5B900008; +f00 : 5B9D0004; +f01 : 340C0000; +f02 : B8406800; +f03 : B8607800; +f04 : B8807000; +f05 : 282B0004; +f06 : E0000022; +f07 : 41610003; +f08 : FBFFFC5A; +f09 : 29620004; +f0a : 41610003; +f0b : 3C420001; +f0c : 204200FE; +f0d : FBFFFCA6; +f0e : 15A20008; +f0f : 41610003; +f10 : 204200FF; +f11 : FBFFFCA2; +f12 : 41610003; +f13 : 21A200FF; +f14 : 35AD0001; +f15 : FBFFFC9E; +f16 : B5EC1000; +f17 : 41610003; +f18 : 40420000; +f19 : FBFFFC9A; +f1a : 41610003; +f1b : FBFFFC7D; +f1c : 41610003; +f1d : FBFFFC45; +f1e : 29620004; +f1f : 41610003; +f20 : 3C420001; +f21 : 204200FE; +f22 : FBFFFC91; +f23 : B8208000; +f24 : 41610003; +f25 : FBFFFC73; +f26 : 5E00FFF6; +f27 : 358C0001; +f28 : 49CCFFDF; +f29 : B9C00800; +f2a : 2B9D0004; +f2b : 2B8B001C; +f2c : 2B8C0018; +f2d : 2B8D0014; +f2e : 2B8E0010; +f2f : 2B8F000C; +f30 : 2B900008; +f31 : 379C001C; +f32 : C3A00000; +f33 : 379CFFE8; +f34 : 5B8B0014; +f35 : 5B8C0010; +f36 : 5B8D000C; +f37 : 5B8E0008; +f38 : 5B9D0004; +f39 : 78030000; +f3a : 78040000; +f3b : 78050000; +f3c : 386381A4; +f3d : 388481A8; +f3e : 38A581B8; +f3f : 204E00FF; +f40 : 780B0000; +f41 : 28620000; +f42 : 28830000; +f43 : 28A40000; +f44 : 396B8AB0; +f45 : B8206800; +f46 : B9600800; +f47 : F80005F0; +f48 : 340CFFFF; +f49 : 48010024; +f4a : 45C00012; +f4b : 29630070; +f4c : 34020000; +f4d : B9600800; +f4e : F8000674; +f4f : 29A20000; +f50 : 78018000; +f51 : 37830018; +f52 : B8410800; +f53 : 5B810018; +f54 : 34020000; +f55 : B9600800; +f56 : 34040004; +f57 : F800063F; +f58 : 7C210004; +f59 : C8016000; +f5a : 398C0001; +f5b : E000000F; +f5c : 34020000; +f5d : B9600800; +f5e : 37830018; +f5f : 34040004; +f60 : F800060A; +f61 : 34020004; +f62 : 5C220008; +f63 : 78020000; +f64 : 3842814C; +f65 : 2B8C0018; +f66 : 28410000; +f67 : A1810800; +f68 : 018C001F; +f69 : 59A10000; +f6a : 78010000; +f6b : 38218AB0; +f6c : F80005FB; +f6d : B9800800; +f6e : 2B9D0004; +f6f : 2B8B0014; +f70 : 2B8C0010; +f71 : 2B8D000C; +f72 : 2B8E0008; +f73 : 379C0018; +f74 : C3A00000; +f75 : 28250008; +f76 : 28240000; +f77 : 28260004; +f78 : B4451800; +f79 : 88642000; +f7a : 5822001C; +f7b : 88461000; +f7c : B4821000; +f7d : 2824000C; +f7e : 1442000C; +f7f : B4442000; +f80 : 28220014; +f81 : 4C820005; +f82 : 28240010; +f83 : 44800008; +f84 : 4CA3000B; +f85 : E0000006; +f86 : 28220018; +f87 : 4C440006; +f88 : 28240010; +f89 : 44800002; +f8a : 4C650005; +f8b : 58230008; +f8c : E0000003; +f8d : 58230008; +f8e : B8801000; +f8f : 58220020; +f90 : B8400800; +f91 : C3A00000; +f92 : 2822000C; +f93 : 58200008; +f94 : 58220020; +f95 : C3A00000; +f96 : 379CFFF8; +f97 : 5B8B0008; +f98 : 5B9D0004; +f99 : B8205800; +f9a : 58200014; +f9b : B8400800; +f9c : F80006D3; +f9d : 2963000C; +f9e : 29620000; +f9f : 4823000B; +fa0 : 29610004; +fa1 : 4C410003; +fa2 : 34420001; +fa3 : 59620000; +fa4 : 29620000; +fa5 : 5C410011; +fa6 : 34010001; +fa7 : 59610014; +fa8 : 59610010; +fa9 : E000000E; +faa : 29610008; +fab : 4C220003; +fac : 3442FFFF; +fad : 59620000; +fae : 29620000; +faf : 5C410007; +fb0 : 34010001; +fb1 : 59610014; +fb2 : 59600000; +fb3 : 59600010; +fb4 : 3401FFFF; +fb5 : E0000002; +fb6 : 29610010; +fb7 : 2B9D0004; +fb8 : 2B8B0008; +fb9 : 379C0008; +fba : C3A00000; +fbb : 58200010; +fbc : 58200000; +fbd : 58200014; +fbe : C3A00000; +fbf : 78030000; +fc0 : 38639738; +fc1 : 28640000; +fc2 : 48810013; +fc3 : 78030000; +fc4 : 38639458; +fc5 : C8240800; +fc6 : 44400007; +fc7 : 28620000; +fc8 : 34040001; +fc9 : BC810800; +fca : 28430028; +fcb : B8230800; +fcc : E0000007; +fcd : 28620000; +fce : 34040001; +fcf : BC810800; +fd0 : 28430028; +fd1 : A4200800; +fd2 : A0230800; +fd3 : 58410028; +fd4 : C3A00000; +fd5 : 78030000; +fd6 : 38639458; +fd7 : 44400007; +fd8 : 28620000; +fd9 : 34040001; +fda : BC810800; +fdb : 28430024; +fdc : B8230800; +fdd : E0000007; +fde : 28620000; +fdf : 34040001; +fe0 : BC810800; +fe1 : 28430024; +fe2 : A4200800; +fe3 : A0230800; +fe4 : 58410024; +fe5 : C3A00000; +fe6 : 379CFFF0; +fe7 : 5B8B0010; +fe8 : 5B8C000C; +fe9 : 5B8D0008; +fea : 5B9D0004; +feb : 780B0000; +fec : B8206000; +fed : 78010000; +fee : 396B9738; +fef : 38219730; +ff0 : 28210000; +ff1 : 296D0000; +ff2 : B42D6800; +ff3 : 29810000; +ff4 : B9A01000; +ff5 : F800005C; +ff6 : 29810004; +ff7 : 29630000; +ff8 : B9A01000; +ff9 : F80000DB; +ffa : 5980000C; +ffb : 59800008; +ffc : 2B9D0004; +ffd : 2B8B0010; +ffe : 2B8C000C; +fff : 2B8D0008; +1000 : 379C0010; +1001 : C3A00000; +1002 : 379CFFF8; +1003 : 5B8B0008; +1004 : 5B9D0004; +1005 : B8205800; +1006 : 28210000; +1007 : F80000B3; +1008 : 78010000; +1009 : 38219458; +100a : 28210000; +100b : 34020001; +100c : 34030009; +100d : 58220004; +100e : 5963000C; +100f : 78030000; +1010 : 386381CC; +1011 : 59620008; +1012 : 28620000; +1013 : 5822004C; +1014 : 2B9D0004; +1015 : 2B8B0008; +1016 : 379C0008; +1017 : C3A00000; +1018 : B8201000; +1019 : 28210000; +101a : 28230048; +101b : 34010000; +101c : 44600016; +101d : 28430004; +101e : 28630038; +101f : 44600013; +1020 : 78030000; +1021 : 38639458; +1022 : 28630000; +1023 : 28640004; +1024 : 20840004; +1025 : 4480000D; +1026 : 28630004; +1027 : 20630008; +1028 : 5C60000A; +1029 : 2842000C; +102a : 3403000A; +102b : 34010001; +102c : 54430006; +102d : 78010000; +102e : 3C420002; +102f : 382182D8; +1030 : B4220800; +1031 : 28210000; +1032 : C3A00000; +1033 : 78040000; +1034 : 38849458; +1035 : 28850000; +1036 : 34040000; +1037 : 44600002; +1038 : 78048000; +1039 : 78060000; +103a : 38C681D4; +103b : 28C30000; +103c : 3C210018; +103d : A0431000; +103e : B8410800; +103f : B8242000; +1040 : 58A4004C; +1041 : C3A00000; +1042 : 78040000; +1043 : 38849458; +1044 : 28850000; +1045 : 34040000; +1046 : 44600002; +1047 : 78048000; +1048 : 78060000; +1049 : 38C681D4; +104a : 28C30000; +104b : 3C210018; +104c : A0431000; +104d : B8410800; +104e : B8242000; +104f : 58A4004C; +1050 : C3A00000; +1051 : 34030005; +1052 : 58230028; +1053 : 3803FFFB; +1054 : 5823002C; +1055 : 3403FF6A; +1056 : 58230018; +1057 : 3403FFFE; +1058 : 58230014; +1059 : 34030001; +105a : 58230024; +105b : 340300C8; +105c : 58230044; +105d : 34032710; +105e : 5823003C; +105f : 34030064; +1060 : 58230040; +1061 : 5822000C; +1062 : C3A00000; +1063 : 379CFFF0; +1064 : 5B8B0010; +1065 : 5B8C000C; +1066 : 5B8D0008; +1067 : 5B9D0004; +1068 : B8205800; +1069 : 2821000C; +106a : B8406800; +106b : 340C0000; +106c : 5C610047; +106d : 34010022; +106e : 34030000; +106f : FBFFFFC4; +1070 : 29620004; +1071 : 34010025; +1072 : 34030000; +1073 : FBFFFFC0; +1074 : 29610008; +1075 : 4C200004; +1076 : 596D0004; +1077 : 596D0008; +1078 : E000003B; +1079 : 4DA10005; +107a : 29620000; +107b : 78010040; +107c : B4410800; +107d : 59610000; +107e : 29630000; +107f : 78050000; +1080 : 29620004; +1081 : 38A581D8; +1082 : 28A10000; +1083 : B5A32000; +1084 : C8826000; +1085 : 482C0006; +1086 : 78050000; +1087 : 38A581DC; +1088 : 28A10000; +1089 : 49810002; +108a : E0000002; +108b : B8206000; +108c : 78050000; +108d : 38A581E0; +108e : 28A10000; +108f : 4C240006; +1090 : 4C220005; +1091 : C8611800; +1092 : C8410800; +1093 : 59630000; +1094 : 59610004; +1095 : 29610004; +1096 : B9801000; +1097 : 596D0008; +1098 : 34214000; +1099 : 59610004; +109a : 35610014; +109b : FBFFFEDA; +109c : 78030000; +109d : 38639458; +109e : 29620010; +109f : B8206800; +10a0 : 28610000; +10a1 : 34030000; +10a2 : 582D0040; +10a3 : 34410001; +10a4 : 59610010; +10a5 : 34010026; +10a6 : FBFFFF8D; +10a7 : 34010020; +10a8 : B9A01000; +10a9 : 34030000; +10aa : FBFFFF89; +10ab : B9801000; +10ac : 34010021; +10ad : 34030001; +10ae : FBFFFF85; +10af : B9801000; +10b0 : 35610038; +10b1 : FBFFFEE5; +10b2 : 7C2C0000; +10b3 : B9800800; +10b4 : 2B9D0004; +10b5 : 2B8B0010; +10b6 : 2B8C000C; +10b7 : 2B8D0008; +10b8 : 379C0010; +10b9 : C3A00000; +10ba : 379CFFF8; +10bb : 5B8B0008; +10bc : 5B9D0004; +10bd : B8205800; +10be : 28210028; +10bf : 59600004; +10c0 : 59600000; +10c1 : 59610020; +10c2 : 3401FFFF; +10c3 : 59610008; +10c4 : 59600010; +10c5 : 35610014; +10c6 : FBFFFECC; +10c7 : 35610038; +10c8 : FBFFFEF3; +10c9 : 2961000C; +10ca : 34020001; +10cb : FBFFFEF4; +10cc : 34010024; +10cd : 34020001; +10ce : 34030001; +10cf : FBFFFF64; +10d0 : 2B9D0004; +10d1 : 2B8B0008; +10d2 : 379C0008; +10d3 : C3A00000; +10d4 : 379CFFF8; +10d5 : 5B8B0008; +10d6 : 5B9D0004; +10d7 : B8205800; +10d8 : 34010005; +10d9 : 59610018; +10da : 3801FFFA; +10db : 5961001C; +10dc : 34010001; +10dd : 59610014; +10de : 34017530; +10df : 59610010; +10e0 : 3401FBB4; +10e1 : 59610008; +10e2 : 3401FFE2; +10e3 : 59610004; +10e4 : 340104B0; +10e5 : 59610034; +10e6 : 340103E8; +10e7 : 5961002C; +10e8 : 34010064; +10e9 : 59610030; +10ea : 78010000; +10eb : 38219738; +10ec : 28210000; +10ed : 59630064; +10ee : 59620060; +10ef : C8611800; +10f0 : 5963006C; +10f1 : 35610004; +10f2 : 59600070; +10f3 : FBFFFE9F; +10f4 : 35610028; +10f5 : FBFFFEC6; +10f6 : 2B9D0004; +10f7 : 2B8B0008; +10f8 : 379C0008; +10f9 : C3A00000; +10fa : 379CFFF8; +10fb : 5B8B0008; +10fc : 5B9D0004; +10fd : B8205800; +10fe : 58200044; +10ff : 58200040; +1100 : 3401FFFF; +1101 : 59610048; +1102 : 5961004C; +1103 : 59610050; +1104 : 59610054; +1105 : 34010001; +1106 : 59610070; +1107 : 59600058; +1108 : 35610004; +1109 : 5960005C; +110a : 59600068; +110b : FBFFFE87; +110c : 35610028; +110d : FBFFFEAE; +110e : 29610060; +110f : 34020001; +1110 : FBFFFEAF; +1111 : 29610064; +1112 : 34020001; +1113 : FBFFFEAC; +1114 : 34010004; +1115 : 34020001; +1116 : 34030001; +1117 : FBFFFF2B; +1118 : 2B9D0004; +1119 : 2B8B0008; +111a : 379C0008; +111b : C3A00000; +111c : 379CFFF0; +111d : 5B8B0010; +111e : 5B8C000C; +111f : 5B8D0008; +1120 : 5B9D0004; +1121 : 28240070; +1122 : B8205800; +1123 : 34010001; +1124 : 44800078; +1125 : 29610060; +1126 : 5C610002; +1127 : 59620048; +1128 : 29610064; +1129 : 5C610002; +112a : 5962004C; +112b : 29610048; +112c : 48010009; +112d : 29620050; +112e : 48020006; +112f : 4C220005; +1130 : 29630040; +1131 : 78020040; +1132 : B4621000; +1133 : 59620040; +1134 : 59610050; +1135 : 2961004C; +1136 : 48010009; +1137 : 29620054; +1138 : 48020006; +1139 : 4C220005; +113a : 29630044; +113b : 78020040; +113c : B4621000; +113d : 59620044; +113e : 59610054; +113f : 29630048; +1140 : 34010000; +1141 : 4803005B; +1142 : 2962004C; +1143 : 48020059; +1144 : 296C0040; +1145 : 29610038; +1146 : B46C1800; +1147 : 296C0044; +1148 : C8621000; +1149 : C84C6000; +114a : 44200006; +114b : 218C3FFF; +114c : 21812000; +114d : 44200003; +114e : 3401C000; +114f : B9816000; +1150 : B9801000; +1151 : 35610004; +1152 : FBFFFE23; +1153 : 2962006C; +1154 : 78030000; +1155 : 38639458; +1156 : 2042000F; +1157 : B8206800; +1158 : 3C420010; +1159 : 28610000; +115a : 21A3FFFF; +115b : B8621000; +115c : 58220044; +115d : 29630040; +115e : 29620048; +115f : 34010005; +1160 : B4621000; +1161 : 34030000; +1162 : FBFFFEE0; +1163 : 29630044; +1164 : 2962004C; +1165 : 34010002; +1166 : B4621000; +1167 : 34030000; +1168 : FBFFFEDA; +1169 : 34010001; +116a : B9801000; +116b : 34030000; +116c : FBFFFED6; +116d : 29620068; +116e : 34030000; +116f : 34410001; +1170 : 59610068; +1171 : 34010006; +1172 : FBFFFED0; +1173 : 34010000; +1174 : B9A01000; +1175 : 34030001; +1176 : FBFFFECC; +1177 : 78020000; +1178 : 3401FFFF; +1179 : 384281E4; +117a : 5961004C; +117b : 59610048; +117c : 29630040; +117d : 28410000; +117e : 4C23000A; +117f : 29620044; +1180 : 4C220008; +1181 : 78040000; +1182 : 388481E8; +1183 : 28810000; +1184 : B4611800; +1185 : B4410800; +1186 : 59630040; +1187 : 59610044; +1188 : 29610038; +1189 : 4420000F; +118a : 2961005C; +118b : 29620058; +118c : 4C220006; +118d : 34210001; +118e : 5961005C; +118f : 29610040; +1190 : 3421FFFF; +1191 : E0000006; +1192 : 4C410006; +1193 : 3421FFFF; +1194 : 5961005C; +1195 : 29610040; +1196 : 34210001; +1197 : 59610040; +1198 : 35610028; +1199 : B9801000; +119a : FBFFFDFC; +119b : 7C210000; +119c : 2B9D0004; +119d : 2B8B0010; +119e : 2B8C000C; +119f : 2B8D0008; +11a0 : 379C0010; +11a1 : C3A00000; +11a2 : 379CFFF0; +11a3 : 5B8B0008; +11a4 : 5B9D0004; +11a5 : B8205800; +11a6 : 1443001F; +11a7 : 3781000C; +11a8 : 4802000B; +11a9 : 00440012; +11aa : 3C63000E; +11ab : 3C42000E; +11ac : B8641800; +11ad : 5B820010; +11ae : 34021F40; +11af : 5B83000C; +11b0 : FBFFF245; +11b1 : 2B820010; +11b2 : E0000009; +11b3 : 0842C000; +11b4 : 5B820010; +11b5 : 1442001F; +11b6 : 5B82000C; +11b7 : 34021F40; +11b8 : FBFFF23D; +11b9 : 2B820010; +11ba : C8021000; +11bb : 0041001F; +11bc : B4221000; +11bd : 14420001; +11be : 34010000; +11bf : 59620058; +11c0 : 2B9D0004; +11c1 : 2B8B0008; +11c2 : 379C0010; +11c3 : C3A00000; +11c4 : 28220058; +11c5 : 2821005C; +11c6 : FC410800; +11c7 : C3A00000; +11c8 : 58220004; +11c9 : 5820001C; +11ca : 58230008; +11cb : 5820000C; +11cc : 58200010; +11cd : 58200000; +11ce : C3A00000; +11cf : 379CFFFC; +11d0 : 5B9D0004; +11d1 : 34020001; +11d2 : 58220000; +11d3 : 58200014; +11d4 : 5820001C; +11d5 : 5820000C; +11d6 : 58200010; +11d7 : 28210004; +11d8 : FBFFFDE7; +11d9 : 78010000; +11da : 38219738; +11db : 28210000; +11dc : 34020001; +11dd : FBFFFDE2; +11de : 2B9D0004; +11df : 379C0004; +11e0 : C3A00000; +11e1 : 379CFFB0; +11e2 : 5B8B0010; +11e3 : 5B8C000C; +11e4 : 5B8D0008; +11e5 : 5B9D0004; +11e6 : B8205800; +11e7 : B8406000; +11e8 : B8606800; +11e9 : 37810014; +11ea : 34020000; +11eb : 34030040; +11ec : F80004C0; +11ed : 3401C000; +11ee : 78040000; +11ef : 5B810020; +11f0 : 38849738; +11f1 : 34014000; +11f2 : 5B810044; +11f3 : 28810000; +11f4 : 5DA10005; +11f5 : 78030000; +11f6 : 38638DA4; +11f7 : 586C0000; +11f8 : E0000027; +11f9 : 3DAD0005; +11fa : B56D5800; +11fb : 29610000; +11fc : 44200023; +11fd : 78030000; +11fe : 38638DA4; +11ff : 28610000; +1200 : 29620010; +1201 : C9810800; +1202 : 20213FFF; +1203 : 1423000C; +1204 : 5C400007; +1205 : 3C630002; +1206 : 5961000C; +1207 : 34010001; +1208 : 59630014; +1209 : 59610010; +120a : E0000015; +120b : 2964000C; +120c : 34420001; +120d : B4240800; +120e : 29640014; +120f : B4641800; +1210 : 3C630002; +1211 : 37840050; +1212 : B4831800; +1213 : 2863FFC4; +1214 : 59620010; +1215 : B4230800; +1216 : 29630008; +1217 : 5961000C; +1218 : 5C430007; +1219 : F80003ED; +121a : 59610018; +121b : 34010001; +121c : 5961001C; +121d : 5960000C; +121e : 59600010; +121f : 34010000; +1220 : 2B9D0004; +1221 : 2B8B0010; +1222 : 2B8C000C; +1223 : 2B8D0008; +1224 : 379C0050; +1225 : C3A00000; +1226 : 78030000; +1227 : 38639458; +1228 : 5C40000A; +1229 : 34040001; +122a : 28620000; +122b : BC810800; +122c : 202100FF; +122d : 28430020; +122e : 3C210010; +122f : A4200800; +1230 : A0230800; +1231 : E0000008; +1232 : 28620000; +1233 : 34040001; +1234 : BC810800; +1235 : 28430020; +1236 : 202100FF; +1237 : 3C210010; +1238 : B8230800; +1239 : 58410020; +123a : C3A00000; +123b : 379CFFF8; +123c : 5B8B0008; +123d : 5B9D0004; +123e : 78030000; +123f : B8405800; +1240 : 38639500; +1241 : 44200007; +1242 : 3421FFFF; +1243 : 0823007C; +1244 : 78010000; +1245 : 38219478; +1246 : B4610800; +1247 : 34230104; +1248 : B8600800; +1249 : B9601000; +124a : FBFFFF58; +124b : 78010000; +124c : 38219478; +124d : 582B0014; +124e : 2B9D0004; +124f : 2B8B0008; +1250 : 379C0008; +1251 : C3A00000; +1252 : 379CFFEC; +1253 : 5B8B0014; +1254 : 5B8C0010; +1255 : 5B8D000C; +1256 : 5B8E0008; +1257 : 5B9D0004; +1258 : 780C0000; +1259 : 780D0000; +125a : B8207000; +125b : 340B0000; +125c : 398C9738; +125d : 39AD943C; +125e : E000000A; +125f : 29A10000; +1260 : 942B0800; +1261 : 20210001; +1262 : 44200005; +1263 : 3D620005; +1264 : B5C21000; +1265 : 344101F4; +1266 : FBFFFF69; +1267 : 356B0001; +1268 : 29810000; +1269 : 482BFFF6; +126a : 2B9D0004; +126b : 2B8B0014; +126c : 2B8C0010; +126d : 2B8D000C; +126e : 2B8E0008; +126f : 379C0014; +1270 : C3A00000; +1271 : 379CFFBC; +1272 : 5B8B0044; +1273 : 5B8C0040; +1274 : 5B8D003C; +1275 : 5B8E0038; +1276 : 5B8F0034; +1277 : 5B900030; +1278 : 5B91002C; +1279 : 5B920028; +127a : 5B930024; +127b : 5B940020; +127c : 5B95001C; +127d : 5B960018; +127e : 5B970014; +127f : 5B980010; +1280 : 5B99000C; +1281 : 5B9B0008; +1282 : 5B9D0004; +1283 : 781B0000; +1284 : 780B0000; +1285 : 78190000; +1286 : 780D0000; +1287 : 78110000; +1288 : 78100000; +1289 : 780C0000; +128a : 78170000; +128b : 780F0000; +128c : 3B7B9458; +128d : 396B9478; +128e : 34140009; +128f : 3B398304; +1290 : 34180001; +1291 : 34130003; +1292 : 39AD94E0; +1293 : 34120008; +1294 : 3A319500; +1295 : 3A109490; +1296 : 398C9738; +1297 : 3AF7966C; +1298 : 39EF9730; +1299 : E000007E; +129a : 2875007C; +129b : 780100FF; +129c : 3821FFFF; +129d : 02AE0018; +129e : A2A1A800; +129f : 29610004; +12a0 : 21CE007F; +12a1 : 3421FFFF; +12a2 : 54340055; +12a3 : 3C210002; +12a4 : B7210800; +12a5 : 28210000; +12a6 : C0200000; +12a7 : 29610044; +12a8 : 58610040; +12a9 : 296100A4; +12aa : 296200A0; +12ab : B4410800; +12ac : 0022001F; +12ad : B4410800; +12ae : 14210001; +12af : 34020001; +12b0 : 58610044; +12b1 : 29810000; +12b2 : FBFFFD0D; +12b3 : FBFFFA72; +12b4 : 34210032; +12b5 : 59610008; +12b6 : 3401000A; +12b7 : E0000011; +12b8 : 29760008; +12b9 : FBFFFA6C; +12ba : CAC10800; +12bb : 4C20003C; +12bc : 29610000; +12bd : 5C380003; +12be : 59780004; +12bf : E0000038; +12c0 : 59730004; +12c1 : E0000036; +12c2 : 29810000; +12c3 : 34020000; +12c4 : FBFFFCFB; +12c5 : B9A00800; +12c6 : FBFFFD3C; +12c7 : 34010002; +12c8 : 59610004; +12c9 : E000002E; +12ca : B9A00800; +12cb : FBFFFD4D; +12cc : E0000012; +12cd : BA000800; +12ce : FBFFFDEC; +12cf : 34010004; +12d0 : E3FFFFF8; +12d1 : 29610060; +12d2 : 44200025; +12d3 : 29610064; +12d4 : 44200023; +12d5 : 29610000; +12d6 : 5C330009; +12d7 : 34010005; +12d8 : E3FFFFF0; +12d9 : BA200800; +12da : FBFFFE20; +12db : 34010006; +12dc : E3FFFFEC; +12dd : 296100C0; +12de : 44200019; +12df : B9600800; +12e0 : FBFFFF72; +12e1 : 59720004; +12e2 : 296100E8; +12e3 : 34020001; +12e4 : E0000012; +12e5 : 29610000; +12e6 : 5C380004; +12e7 : B9A00800; +12e8 : FBFFFD30; +12e9 : 44200007; +12ea : 29610060; +12eb : 44200005; +12ec : 29610000; +12ed : 5C33000A; +12ee : 296100C0; +12ef : 5C200008; +12f0 : 2961000C; +12f1 : 34020000; +12f2 : 34210001; +12f3 : 5961000C; +12f4 : 59740004; +12f5 : 296100E8; +12f6 : FBFFFF30; +12f7 : BA000800; +12f8 : BAA01000; +12f9 : B9C01800; +12fa : FBFFFD69; +12fb : 29610060; +12fc : 4420001B; +12fd : BA200800; +12fe : BAA01000; +12ff : B9C01800; +1300 : FBFFFE1C; +1301 : 29610004; +1302 : 5C320015; +1303 : 29610000; +1304 : 34160000; +1305 : 5C33000C; +1306 : E0000008; +1307 : 0AC1007C; +1308 : BAA01000; +1309 : B9C01800; +130a : B5610800; +130b : 34210104; +130c : FBFFFE10; +130d : 36D60001; +130e : 29E10000; +130f : 3421FFFF; +1310 : 4836FFF7; +1311 : 29810000; +1312 : 49C10005; +1313 : BAE00800; +1314 : BAA01000; +1315 : B9C01800; +1316 : FBFFFECB; +1317 : 2B630000; +1318 : 78020002; +1319 : 28610080; +131a : A0220800; +131b : 4420FF7F; +131c : 29610010; +131d : 34210001; +131e : 59610010; +131f : 34010001; +1320 : D0410000; +1321 : 2B9D0004; +1322 : 2B8B0044; +1323 : 2B8C0040; +1324 : 2B8D003C; +1325 : 2B8E0038; +1326 : 2B8F0034; +1327 : 2B900030; +1328 : 2B91002C; +1329 : 2B920028; +132a : 2B930024; +132b : 2B940020; +132c : 2B95001C; +132d : 2B960018; +132e : 2B970014; +132f : 2B980010; +1330 : 2B99000C; +1331 : 2B9B0008; +1332 : 379C0044; +1333 : C3A00000; +1334 : 78010000; +1335 : 38219474; +1336 : 28220000; +1337 : 78030000; +1338 : 78010000; +1339 : 3821946C; +133a : 386381EC; +133b : 58220000; +133c : 28610000; +133d : 58410000; +133e : C3A00000; +133f : 379CFFD4; +1340 : 5B8B0028; +1341 : 5B8C0024; +1342 : 5B8D0020; +1343 : 5B8E001C; +1344 : 5B8F0018; +1345 : 5B900014; +1346 : 5B910010; +1347 : 5B92000C; +1348 : 5B930008; +1349 : 5B9D0004; +134a : B8205800; +134b : B8408000; +134c : B8609000; +134d : FBFFED25; +134e : 78010000; +134f : 38219760; +1350 : 28240000; +1351 : 78010000; +1352 : 38219458; +1353 : 58240000; +1354 : 78010000; +1355 : 28850000; +1356 : 38219474; +1357 : 28210000; +1358 : 78020000; +1359 : 3842946C; +135a : 00A60010; +135b : 58410000; +135c : 78020000; +135d : 38429738; +135e : 20C6003F; +135f : 00A50018; +1360 : 58460000; +1361 : 78020000; +1362 : 38429730; +1363 : 20A50007; +1364 : 58450000; +1365 : 78050000; +1366 : 38A59478; +1367 : 58AB0000; +1368 : 58A0000C; +1369 : 58800040; +136a : 58800044; +136b : 58800000; +136c : 58800028; +136d : 58800024; +136e : 58800004; +136f : 78030000; +1370 : 58800020; +1371 : 340203E8; +1372 : 3863819C; +1373 : 58820048; +1374 : 28620000; +1375 : 5820001C; +1376 : 58220000; +1377 : 34010004; +1378 : 5D610004; +1379 : 34010007; +137a : 58A10004; +137b : E0000006; +137c : 34010009; +137d : 58A10004; +137e : 34010003; +137f : 5D610002; +1380 : BA003000; +1381 : 78010000; +1382 : B8C01000; +1383 : 38219490; +1384 : 780D0000; +1385 : FBFFFCCC; +1386 : 39AD9738; +1387 : 29A30000; +1388 : 78010000; +1389 : 38219500; +138a : BA001000; +138b : 780F0000; +138c : 780E0000; +138d : FBFFFD47; +138e : 340C0000; +138f : 39EF9730; +1390 : 39CE9478; +1391 : 34130001; +1392 : E000000C; +1393 : 0991007C; +1394 : 29A40000; +1395 : BA001000; +1396 : B5D10800; +1397 : 34840001; +1398 : B48C1800; +1399 : 34210104; +139a : B5D18800; +139b : FBFFFD39; +139c : 358C0001; +139d : 5A3300FC; +139e : 29E10000; +139f : 3421FFFF; +13a0 : 482CFFF3; +13a1 : 34010002; +13a2 : 5D610006; +13a3 : 78010000; +13a4 : 3821946C; +13a5 : 28210000; +13a6 : 3402000C; +13a7 : 5822001C; +13a8 : 780E0000; +13a9 : 780D0000; +13aa : 340C0000; +13ab : 39CE9738; +13ac : 39AD9478; +13ad : E0000008; +13ae : 3D810005; +13af : B9801000; +13b0 : B5A10800; +13b1 : 342101F4; +13b2 : 34030200; +13b3 : FBFFFE15; +13b4 : 358C0001; +13b5 : 29C20000; +13b6 : 484CFFF8; +13b7 : 34010001; +13b8 : 5D610017; +13b9 : 78010000; +13ba : 38219458; +13bb : 28210000; +13bc : 28210004; +13bd : 20210002; +13be : 44200021; +13bf : 78010000; +13c0 : 78040000; +13c1 : 38219478; +13c2 : 38849490; +13c3 : 58240068; +13c4 : 78040000; +13c5 : 38849500; +13c6 : 5824006C; +13c7 : 78010000; +13c8 : 38219730; +13c9 : 28240000; +13ca : 78010000; +13cb : 382194E0; +13cc : B4441000; +13cd : BA401800; +13ce : FBFFFC18; +13cf : 78010000; +13d0 : 38219458; +13d1 : 28210000; +13d2 : 78020002; +13d3 : E0000003; +13d4 : 2823007C; +13d5 : 5B83002C; +13d6 : 28230080; +13d7 : A0621800; +13d8 : 4460FFFC; +13d9 : 34020001; +13da : 58220064; +13db : 28220028; +13dc : 38420001; +13dd : 58220028; +13de : FBFFEC9D; +13df : 2B9D0004; +13e0 : 2B8B0028; +13e1 : 2B8C0024; +13e2 : 2B8D0020; +13e3 : 2B8E001C; +13e4 : 2B8F0018; +13e5 : 2B900014; +13e6 : 2B910010; +13e7 : 2B92000C; +13e8 : 2B930008; +13e9 : 379C002C; +13ea : C3A00000; +13eb : 78020000; +13ec : B8201800; +13ed : 38429478; +13ee : 5C200004; +13ef : 28410004; +13f0 : 64210008; +13f1 : C3A00000; +13f2 : 28450004; +13f3 : 34040008; +13f4 : 34010000; +13f5 : 5CA40006; +13f6 : 3463FFFF; +13f7 : 0863007C; +13f8 : B4431000; +13f9 : 2841013C; +13fa : 7C210000; +13fb : C3A00000; +13fc : 379CFFE8; +13fd : 5B8B0018; +13fe : 5B8C0014; +13ff : 5B8D0010; +1400 : 5B8E000C; +1401 : 5B8F0008; +1402 : 5B9D0004; +1403 : 3403FFFF; +1404 : B8407800; +1405 : 5C230016; +1406 : 34010000; +1407 : 780C0000; +1408 : 780D0000; +1409 : FBFFFE32; +140a : 340B0000; +140b : 398C9730; +140c : 39AD9478; +140d : 340E0004; +140e : E0000009; +140f : 0961007C; +1410 : B5A10800; +1411 : 282100FC; +1412 : 5C2E0004; +1413 : 35610001; +1414 : B9E01000; +1415 : FBFFFE26; +1416 : 356B0001; +1417 : 29810000; +1418 : 3421FFFF; +1419 : 482BFFF6; +141a : E0000002; +141b : FBFFFE20; +141c : 2B9D0004; +141d : 2B8B0018; +141e : 2B8C0014; +141f : 2B8D0010; +1420 : 2B8E000C; +1421 : 2B8F0008; +1422 : 379C0018; +1423 : C3A00000; +1424 : 379CFFF0; +1425 : 5B8B0010; +1426 : 5B8C000C; +1427 : 5B8D0008; +1428 : 5B9D0004; +1429 : B8205800; +142a : B8406800; +142b : 78010000; +142c : 3D620005; +142d : 38219478; +142e : B4220800; +142f : 2824020C; +1430 : B8606000; +1431 : 4C800003; +1432 : 34844000; +1433 : E0000004; +1434 : 34013FFF; +1435 : 4C240002; +1436 : 3484C000; +1437 : 3C840001; +1438 : 34010000; +1439 : 20823FFE; +143a : 34030000; +143b : 34041F40; +143c : F80001B2; +143d : 3C210012; +143e : 0044000E; +143f : B8242000; +1440 : 59A40000; +1441 : 4580000C; +1442 : 78010000; +1443 : 3821943C; +1444 : 28220000; +1445 : 3D630005; +1446 : 78010000; +1447 : 38219478; +1448 : B4230800; +1449 : 282101F8; +144a : 94410800; +144b : 20210001; +144c : 59810000; +144d : 3D6B0005; +144e : 78020000; +144f : 38429478; +1450 : B44B1000; +1451 : 28410210; +1452 : 2B9D0004; +1453 : 2B8B0010; +1454 : 2B8C000C; +1455 : 2B8D0008; +1456 : 379C0010; +1457 : C3A00000; +1458 : 379CFFFC; +1459 : 5B9D0004; +145a : 5C200004; +145b : 78010000; +145c : 38219500; +145d : E0000007; +145e : 3421FFFF; +145f : 0821007C; +1460 : 78020000; +1461 : 38429478; +1462 : B4220800; +1463 : 34210104; +1464 : FBFFFD60; +1465 : 2B9D0004; +1466 : 379C0004; +1467 : C3A00000; +1468 : 379CFFF0; +1469 : 5B8B0010; +146a : 5B8C000C; +146b : 5B8D0008; +146c : 5B9D0004; +146d : 780D0000; +146e : 780B0000; +146f : B8206000; +1470 : 39AD9478; +1471 : 396B943C; +1472 : 4440000D; +1473 : 34020001; +1474 : FBFFFB4B; +1475 : 3D810005; +1476 : B5A16800; +1477 : 35A101F4; +1478 : FBFFFD57; +1479 : 29610000; +147a : 34020001; +147b : BC4C6000; +147c : B9816000; +147d : 596C0000; +147e : E000000A; +147f : 34030001; +1480 : 29640000; +1481 : BC611800; +1482 : A4601800; +1483 : A0641800; +1484 : 59630000; +1485 : 29A300E8; +1486 : 44230002; +1487 : FBFFFB38; +1488 : 2B9D0004; +1489 : 2B8B0010; +148a : 2B8C000C; +148b : 2B8D0008; +148c : 379C0010; +148d : C3A00000; +148e : 379CFFF8; +148f : 5B8B0008; +1490 : 5B9D0004; +1491 : 28240014; +1492 : B8201800; +1493 : B8403000; +1494 : 44800015; +1495 : 28250010; +1496 : 20A50002; +1497 : 5CA00007; +1498 : B4862000; +1499 : B8800800; +149a : 2B9D0004; +149b : 2B8B0008; +149c : 379C0008; +149d : C3A00000; +149e : 346B0030; +149f : B4861000; +14a0 : B9600800; +14a1 : 34030040; +14a2 : F80001D1; +14a3 : B9602000; +14a4 : B8800800; +14a5 : 2B9D0004; +14a6 : 2B8B0008; +14a7 : 379C0008; +14a8 : C3A00000; +14a9 : 28250010; +14aa : 20A70004; +14ab : 5CE4FFEB; +14ac : 2825001C; +14ad : 34040000; +14ae : 44A7FFEB; +14af : 342B0030; +14b0 : 34040040; +14b1 : B9601800; +14b2 : D8A00000; +14b3 : B9602000; +14b4 : E3FFFFF0; +14b5 : 379CFFF0; +14b6 : 5B8B0010; +14b7 : 5B8C000C; +14b8 : 5B8D0008; +14b9 : 5B9D0004; +14ba : B8205800; +14bb : 44400047; +14bc : 2822000C; +14bd : 58200080; +14be : 582000B0; +14bf : 58220090; +14c0 : 340C0000; +14c1 : B9600800; +14c2 : FBFFFFCC; +14c3 : 59610028; +14c4 : 4022003F; +14c5 : 5C400006; +14c6 : 78040000; +14c7 : 388481B0; +14c8 : 28230000; +14c9 : 28820000; +14ca : 4462005D; +14cb : 34010000; +14cc : 45800030; +14cd : 3583FFFF; +14ce : 346C0028; +14cf : B58C0800; +14d0 : B4210800; +14d1 : B5610800; +14d2 : 28220000; +14d3 : 5C40000F; +14d4 : 34010000; +14d5 : 44620027; +14d6 : 34620027; +14d7 : B4421000; +14d8 : B4421000; +14d9 : B5621000; +14da : E0000002; +14db : 44610044; +14dc : 28410000; +14dd : 3463FFFF; +14de : 3442FFFC; +14df : 4420FFFC; +14e0 : 596300B0; +14e1 : 346C0028; +14e2 : 346D0024; +14e3 : B5AD6800; +14e4 : B5AD6800; +14e5 : B56D6800; +14e6 : 29A20000; +14e7 : B9600800; +14e8 : B58C6000; +14e9 : FBFFFFA5; +14ea : B58C6000; +14eb : B56C1000; +14ec : 29A40000; +14ed : 28430000; +14ee : 296C00B0; +14ef : 34840040; +14f0 : 3463FFFF; +14f1 : 59610028; +14f2 : 59A40000; +14f3 : 58430000; +14f4 : 35830020; +14f5 : B4631800; +14f6 : B4631800; +14f7 : B5631800; +14f8 : 2824000C; +14f9 : 28620000; +14fa : B4441000; +14fb : 59620074; +14fc : 2B9D0004; +14fd : 2B8B0010; +14fe : 2B8C000C; +14ff : 2B8D0008; +1500 : 379C0010; +1501 : C3A00000; +1502 : 28210028; +1503 : 296300B0; +1504 : 34050002; +1505 : 4024003F; +1506 : ECA32800; +1507 : 64840002; +1508 : A0852000; +1509 : 4482FFC5; +150a : 34620020; +150b : B4421000; +150c : B4421000; +150d : B5621000; +150e : 28450000; +150f : 34640025; +1510 : 28220004; +1511 : B4842000; +1512 : B4842000; +1513 : B4A21000; +1514 : B5642000; +1515 : 58820000; +1516 : 2824000C; +1517 : 34610021; +1518 : B4210800; +1519 : B4210800; +151a : B5610800; +151b : B4852800; +151c : 346C0001; +151d : 58250000; +151e : E3FFFFA3; +151f : 34010000; +1520 : 596000B0; +1521 : 2B9D0004; +1522 : 2B8B0010; +1523 : 2B8C000C; +1524 : 2B8D0008; +1525 : 379C0010; +1526 : C3A00000; +1527 : 35820024; +1528 : B4421000; +1529 : B4421000; +152a : B5621800; +152b : 2C250004; +152c : 28640000; +152d : 35820028; +152e : B4421000; +152f : B4421000; +1530 : B5621000; +1531 : 34A5FFFF; +1532 : 34840040; +1533 : 58450000; +1534 : 58640000; +1535 : 596C00B0; +1536 : E3FFFFBE; +1537 : 379CFFEC; +1538 : 5B8B0014; +1539 : 5B8C0010; +153a : 5B8D000C; +153b : 5B8E0008; +153c : 5B9D0004; +153d : B8406000; +153e : 34020001; +153f : B8205800; +1540 : B8607000; +1541 : B8806800; +1542 : FBFFFF73; +1543 : B9600800; +1544 : 34020000; +1545 : FBFFFF70; +1546 : B8202800; +1547 : 4420001E; +1548 : 28A10018; +1549 : 5C2CFFFA; +154a : 28A1001C; +154b : 5C2EFFF8; +154c : 28A10020; +154d : 5C2DFFF6; +154e : 296100B0; +154f : 59650028; +1550 : 28A2000C; +1551 : 34210020; +1552 : B4210800; +1553 : B4210800; +1554 : B5610800; +1555 : 28230000; +1556 : 34010000; +1557 : B4431800; +1558 : 59630074; +1559 : 28A30014; +155a : 59600078; +155b : 34630001; +155c : C8621000; +155d : 59620070; +155e : 2B9D0004; +155f : 2B8B0014; +1560 : 2B8C0010; +1561 : 2B8D000C; +1562 : 2B8E0008; +1563 : 379C0014; +1564 : C3A00000; +1565 : 3401FFFE; +1566 : E3FFFFF8; +1567 : 58200028; +1568 : 34010000; +1569 : C3A00000; +156a : 379CFFF0; +156b : 5B8B0010; +156c : 5B8C000C; +156d : 5B8D0008; +156e : 5B9D0004; +156f : 28250028; +1570 : B8205800; +1571 : B8406000; +1572 : B8806800; +1573 : 3401FFFE; +1574 : 44A00012; +1575 : 4C400002; +1576 : 296C0078; +1577 : 29610070; +1578 : B58D1000; +1579 : 54410013; +157a : 29640014; +157b : 44800014; +157c : 29620074; +157d : B8600800; +157e : B9A01800; +157f : B5821000; +1580 : B4821000; +1581 : F80000F2; +1582 : B9A00800; +1583 : 4C010003; +1584 : B42C6000; +1585 : 596C0078; +1586 : 2B9D0004; +1587 : 2B8B0010; +1588 : 2B8C000C; +1589 : 2B8D0008; +158a : 379C0010; +158b : C3A00000; +158c : 29640014; +158d : C82C6800; +158e : 5C80FFEE; +158f : 29620074; +1590 : 2965001C; +1591 : B9600800; +1592 : B5821000; +1593 : B9A02000; +1594 : D8A00000; +1595 : E3FFFFEE; +1596 : 379CFFF0; +1597 : 5B8B0010; +1598 : 5B8C000C; +1599 : 5B8D0008; +159a : 5B9D0004; +159b : 28250028; +159c : B8205800; +159d : B8406000; +159e : B8806800; +159f : 3401FFFE; +15a0 : 44A00012; +15a1 : 4C400002; +15a2 : 296C0078; +15a3 : 29610070; +15a4 : B58D1000; +15a5 : 54410013; +15a6 : 29640014; +15a7 : 44800014; +15a8 : 29610074; +15a9 : B8601000; +15aa : B9A01800; +15ab : B5810800; +15ac : B4810800; +15ad : F80000C6; +15ae : B9A00800; +15af : 4C010003; +15b0 : B42C6000; +15b1 : 596C0078; +15b2 : 2B9D0004; +15b3 : 2B8B0010; +15b4 : 2B8C000C; +15b5 : 2B8D0008; +15b6 : 379C0010; +15b7 : C3A00000; +15b8 : 29640014; +15b9 : C82C6800; +15ba : 5C80FFEE; +15bb : 29620074; +15bc : 29650020; +15bd : B9600800; +15be : B5821000; +15bf : B9A02000; +15c0 : D8A00000; +15c1 : E3FFFFEE; +15c2 : 379CFFF0; +15c3 : 5B8B0010; +15c4 : 5B8C000C; +15c5 : 5B8D0008; +15c6 : 5B9D0004; +15c7 : 28240028; +15c8 : B8205800; +15c9 : B8406000; +15ca : B8606800; +15cb : 3401FFFE; +15cc : 44800012; +15cd : 4C400002; +15ce : 296C0078; +15cf : 29610070; +15d0 : B58D1000; +15d1 : 54410013; +15d2 : 29640014; +15d3 : 44800014; +15d4 : 29610074; +15d5 : 340200FF; +15d6 : B9A01800; +15d7 : B5810800; +15d8 : B4810800; +15d9 : F80000D3; +15da : B9A00800; +15db : 4C010003; +15dc : B42C6000; +15dd : 596C0078; +15de : 2B9D0004; +15df : 2B8B0010; +15e0 : 2B8C000C; +15e1 : 2B8D0008; +15e2 : 379C0010; +15e3 : C3A00000; +15e4 : 29640014; +15e5 : C82C6800; +15e6 : 5C80FFEE; +15e7 : 29620074; +15e8 : 29640024; +15e9 : B9600800; +15ea : B5821000; +15eb : B9A01800; +15ec : D8800000; +15ed : E3FFFFEE; +15ee : 2045FFFF; +15ef : 00460010; +15f0 : 2088FFFF; +15f1 : 00890010; +15f2 : 89053800; +15f3 : 89064000; +15f4 : 89252800; +15f5 : 00EA0010; +15f6 : 89263000; +15f7 : B5052800; +15f8 : B4AA2800; +15f9 : 50A80003; +15fa : 78080001; +15fb : B4C83000; +15fc : 88431000; +15fd : 88812000; +15fe : 00A10010; +15ff : 3CA50010; +1600 : B4C13000; +1601 : 20E7FFFF; +1602 : B4440800; +1603 : B4260800; +1604 : B4A71000; +1605 : C3A00000; +1606 : 379CFFF8; +1607 : 5B8B0008; +1608 : 5B9D0004; +1609 : 44400022; +160a : B8412000; +160b : 3403000F; +160c : 5483000B; +160d : 78030000; +160e : 3863832C; +160f : 3C210004; +1610 : B4621000; +1611 : B4410800; +1612 : 40210000; +1613 : 2B9D0004; +1614 : 2B8B0008; +1615 : 379C0008; +1616 : C3A00000; +1617 : 340B0000; +1618 : 4C200003; +1619 : C8010800; +161a : 340B0001; +161b : 4C400003; +161c : C8021000; +161d : 196B0001; +161e : 90C01800; +161f : 20630002; +1620 : 44600008; +1621 : 8C220800; +1622 : 45600002; +1623 : C8010800; +1624 : 2B9D0004; +1625 : 2B8B0008; +1626 : 379C0008; +1627 : C3A00000; +1628 : 34030000; +1629 : F800002A; +162a : E3FFFFF8; +162b : 90000800; +162c : 20210001; +162d : 3C210001; +162e : D0010000; +162f : 90E00800; +1630 : BBA0F000; +1631 : 342100A0; +1632 : C0200000; +1633 : 379CFFFC; +1634 : 5B9D0004; +1635 : 44400006; +1636 : 34030000; +1637 : F800001C; +1638 : 2B9D0004; +1639 : 379C0004; +163a : C3A00000; +163b : 90000800; +163c : 20210001; +163d : 3C210001; +163e : D0010000; +163f : 90E00800; +1640 : BBA0F000; +1641 : 342100A0; +1642 : C0200000; +1643 : 379CFFFC; +1644 : 5B9D0004; +1645 : 44400006; +1646 : 34030001; +1647 : F800000C; +1648 : 2B9D0004; +1649 : 379C0004; +164a : C3A00000; +164b : 90000800; +164c : 20210001; +164d : 3C210001; +164e : D0010000; +164f : 90E00800; +1650 : BBA0F000; +1651 : 342100A0; +1652 : C0200000; +1653 : F4222000; +1654 : 44800018; +1655 : 34040001; +1656 : 4C40000B; +1657 : 34050000; +1658 : 54410003; +1659 : C8220800; +165a : B8A42800; +165b : 00840001; +165c : 00420001; +165d : 5C80FFFB; +165e : 5C600002; +165f : B8A00800; +1660 : C3A00000; +1661 : 3C420001; +1662 : 3C840001; +1663 : F4222800; +1664 : 7C860000; +1665 : A0C52800; +1666 : 44A00002; +1667 : 4C40FFFA; +1668 : 34050000; +1669 : 4480FFF5; +166a : 34050000; +166b : E3FFFFED; +166c : 34040001; +166d : 34050000; +166e : E3FFFFEA; +166f : 1422001F; +1670 : 98410800; +1671 : C8220800; +1672 : C3A00000; +1673 : 3404000F; +1674 : B8203800; +1675 : B8403000; +1676 : 5083002D; +1677 : B8412000; +1678 : 20840003; +1679 : 5C80002B; +167a : B8402000; +167b : B8202800; +167c : B8603000; +167d : 3407000F; +167e : 28880000; +167f : 34C6FFF0; +1680 : 58A80000; +1681 : 28880004; +1682 : 58A80004; +1683 : 28880008; +1684 : 58A80008; +1685 : 2888000C; +1686 : 34840010; +1687 : 58A8000C; +1688 : 34A50010; +1689 : 54C7FFF5; +168a : 3463FFF0; +168b : 00660004; +168c : 2063000F; +168d : 34C60001; +168e : 3CC60004; +168f : B4263800; +1690 : B4463000; +1691 : 34020003; +1692 : 50430011; +1693 : 34020000; +1694 : 34080003; +1695 : B4C22000; +1696 : 28850000; +1697 : B4E22000; +1698 : 34420004; +1699 : 58850000; +169a : C8622000; +169b : 5488FFFA; +169c : 3463FFFC; +169d : 00620002; +169e : 20630003; +169f : 34420001; +16a0 : 3C420002; +16a1 : B4E23800; +16a2 : B4C23000; +16a3 : 44600008; +16a4 : 34020000; +16a5 : B4C22000; +16a6 : 40850000; +16a7 : B4E22000; +16a8 : 34420001; +16a9 : 30850000; +16aa : 5C43FFFB; +16ab : C3A00000; +16ac : 20250003; +16ad : B8202000; +16ae : 44A0000B; +16af : 4460002C; +16b0 : 3463FFFF; +16b1 : 204600FF; +16b2 : E0000003; +16b3 : 44600028; +16b4 : 3463FFFF; +16b5 : 30860000; +16b6 : 34840001; +16b7 : 20850003; +16b8 : 5CA0FFFB; +16b9 : 34050003; +16ba : 50A3001A; +16bb : 204500FF; +16bc : 3CA60008; +16bd : 340A000F; +16be : B8C52800; +16bf : 3CA60010; +16c0 : B8804000; +16c1 : B8C53000; +16c2 : B8603800; +16c3 : B8802800; +16c4 : 3409000F; +16c5 : 546A0017; +16c6 : 34040000; +16c7 : 34070003; +16c8 : B5042800; +16c9 : 34840004; +16ca : 58A60000; +16cb : C8642800; +16cc : 54A7FFFC; +16cd : 3463FFFC; +16ce : 00640002; +16cf : 20630003; +16d0 : 34840001; +16d1 : 3C840002; +16d2 : B5044000; +16d3 : B9002000; +16d4 : 44600007; +16d5 : 204200FF; +16d6 : 34050000; +16d7 : B4853000; +16d8 : 30C20000; +16d9 : 34A50001; +16da : 5C65FFFD; +16db : C3A00000; +16dc : 58A60000; +16dd : 58A60004; +16de : 58A60008; +16df : 58A6000C; +16e0 : 34E7FFF0; +16e1 : 34A50010; +16e2 : 54E9FFFA; +16e3 : 3463FFF0; +16e4 : 00680004; +16e5 : 2063000F; +16e6 : 35080001; +16e7 : 3D080004; +16e8 : B4884000; +16e9 : 34040003; +16ea : 5464FFDC; +16eb : B9002000; +16ec : E3FFFFE8; +16ed : 57522043; +16ee : 6F72653A; +16ef : 20737461; +16f0 : 7274696E; +16f1 : 67207570; +16f2 : 2E2E2E0A; +16f3 : 00000000; +16f4 : 556E6162; +16f5 : 6C652074; +16f6 : 6F206465; +16f7 : 7465726D; +16f8 : 696E6520; +16f9 : 4D414320; +16fa : 61646472; +16fb : 6573730A; +16fc : 00000000; +16fd : 4C6F6361; +16fe : 6C204D41; +16ff : 43206164; +1700 : 64726573; +1701 : 733A2025; +1702 : 3032783A; +1703 : 25303278; +1704 : 3A253032; +1705 : 783A2530; +1706 : 32783A25; +1707 : 3032783A; +1708 : 25303278; +1709 : 0A000000; +170a : 4E657720; +170b : 6D617820; +170c : 72756E20; +170d : 74696D65; +170e : 20666F72; +170f : 20612074; +1710 : 61736B20; +1711 : 25732C20; +1712 : 6F6C6420; +1713 : 256C642C; +1714 : 206E6577; +1715 : 2025640A; +1716 : 00000000; +1717 : 7461736B; +1718 : 2025732C; +1719 : 2072756E; +171a : 20666F72; +171b : 20256420; +171c : 6D730A00; +171d : 73706C6C; +171e : 2D626800; +171f : 7368656C; +1720 : 6C2B6775; +1721 : 69000000; +1722 : 70747000; +1723 : 75707469; +1724 : 6D650000; +1725 : 63686563; +1726 : 6B2D6C69; +1727 : 6E6B0000; +1728 : 69646C65; +1729 : 00000000; +172a : 64696167; +172b : 2D66736D; +172c : 2D312D25; +172d : 733A2025; +172e : 3039642E; +172f : 25303364; +1730 : 3A200000; +1731 : 454E5445; +1732 : 52202573; +1733 : 2C207061; +1734 : 636B6574; +1735 : 206C656E; +1736 : 2025690A; +1737 : 00000000; +1738 : 25733A20; +1739 : 7265656E; +173a : 74657220; +173b : 696E2025; +173c : 69206D73; +173d : 0A000000; +173e : 4C454156; +173f : 45202573; +1740 : 20286E65; +1741 : 78743A20; +1742 : 25336929; +1743 : 0A0A0000; +1744 : 52454356; +1745 : 20253032; +1746 : 64206279; +1747 : 74657320; +1748 : 61742025; +1749 : 39642E25; +174a : 3039642E; +174b : 25303364; +174c : 20287479; +174d : 70652025; +174e : 782C2025; +174f : 73290A00; +1750 : 66736D3A; +1751 : 20556E6B; +1752 : 6E6F776E; +1753 : 20737461; +1754 : 74652066; +1755 : 6F722070; +1756 : 6F727420; +1757 : 25730A00; +1758 : 57726F6E; +1759 : 6720646F; +175a : 6D61696E; +175b : 2025693A; +175c : 20646973; +175d : 63617264; +175e : 0A000000; +175f : 416C7465; +1760 : 726E6174; +1761 : 65206D61; +1762 : 73746572; +1763 : 3A206469; +1764 : 73636172; +1765 : 640A0000; +1766 : 4C6F6F70; +1767 : 696E6720; +1768 : 6672616D; +1769 : 653A2064; +176a : 69736361; +176b : 72640A00; +176c : 66736D20; +176d : 666F7220; +176e : 25733A20; +176f : 4572726F; +1770 : 72202569; +1771 : 20696E20; +1772 : 25730A00; +1773 : 70707369; +1774 : 00000000; +1775 : 25732D25; +1776 : 692D2573; +1777 : 3A200000; +1778 : 25733A20; +1779 : 6572726F; +177a : 72207061; +177b : 7273696E; +177c : 67202225; +177d : 73220A00; +177e : 64696167; +177f : 2D636F6E; +1780 : 66696700; +1781 : 64696167; +1782 : 2D657874; +1783 : 656E7369; +1784 : 6F6E0000; +1785 : 64696167; +1786 : 2D626D63; +1787 : 00000000; +1788 : 64696167; +1789 : 2D736572; +178a : 766F0000; +178b : 64696167; +178c : 2D667261; +178d : 6D657300; +178e : 64696167; +178f : 2D74696D; +1790 : 65000000; +1791 : 64696167; +1792 : 2D66736D; +1793 : 00000000; +1794 : 6E657720; +1795 : 74696D65; +1796 : 6F757420; +1797 : 666F7220; +1798 : 25733A20; +1799 : 25690A00; +179a : 74696D65; +179b : 6F757420; +179c : 65787069; +179d : 7265643A; +179e : 2025730A; +179f : 00000000; +17a0 : 52455155; +17a1 : 45535400; +17a2 : 53594E43; +17a3 : 5F53454E; +17a4 : 44000000; +17a5 : 414E4E5F; +17a6 : 52454345; +17a7 : 49505400; +17a8 : 414E4E5F; +17a9 : 53454E44; +17aa : 00000000; +17ab : 4641554C; +17ac : 54000000; +17ad : 5155414C; +17ae : 00000000; +17af : 73796E63; +17b0 : 00000000; +17b1 : 64656C61; +17b2 : 795F7265; +17b3 : 71000000; +17b4 : 7064656C; +17b5 : 61795F72; +17b6 : 65710000; +17b7 : 7064656C; +17b8 : 61795F72; +17b9 : 65737000; +17ba : 64656C61; +17bb : 795F7265; +17bc : 73700000; +17bd : 7064656C; +17be : 61795F72; +17bf : 6573705F; +17c0 : 666F6C6C; +17c1 : 6F775F75; +17c2 : 70000000; +17c3 : 616E6E6F; +17c4 : 756E6365; +17c5 : 00000000; +17c6 : 7369676E; +17c7 : 616C696E; +17c8 : 67000000; +17c9 : 6D616E61; +17ca : 67656D65; +17cb : 6E740000; +17cc : 50505369; +17cd : 20666F72; +17ce : 20575250; +17cf : 432E2043; +17d0 : 6F6D6D69; +17d1 : 74202573; +17d2 : 2C206275; +17d3 : 696C7420; +17d4 : 6F6E2044; +17d5 : 65632031; +17d6 : 38203230; +17d7 : 31370A00; +17d8 : 70707369; +17d9 : 2D763230; +17da : 31362E31; +17db : 322D3839; +17dc : 2D676362; +17dd : 35393334; +17de : 65000000; +17df : 50545020; +17e0 : 73746172; +17e1 : 740A0000; +17e2 : 50545020; +17e3 : 73746F70; +17e4 : 0A000000; +17e5 : 4C6F636B; +17e6 : 696E6720; +17e7 : 504C4C00; +17e8 : 0A4C6F63; +17e9 : 6B207469; +17ea : 6D656F75; +17eb : 742E0000; +17ec : 2E000000; +17ed : 77723100; +17ee : 20696E76; +17ef : 616C6964; +17f0 : 00000000; +17f1 : 25735449; +17f2 : 4D453A20; +17f3 : 28256C69; +17f4 : 202D2030; +17f5 : 78256C78; +17f6 : 2920256C; +17f7 : 692E2530; +17f8 : 366C6925; +17f9 : 730A0000; +17fa : 25732573; +17fb : 25303278; +17fc : 2D253032; +17fd : 782D2530; +17fe : 32782D25; +17ff : 3032782D; +1800 : 25303278; +1801 : 2D253032; +1802 : 782D2530; +1803 : 32782D25; +1804 : 3032782D; +1805 : 25303278; +1806 : 2D253032; +1807 : 780A0000; +1808 : 25732573; +1809 : 25732028; +180a : 73697A65; +180b : 20256929; +180c : 0A000000; +180d : 25732573; +180e : 00000000; +180f : 25303278; +1810 : 00000000; +1811 : 25735645; +1812 : 5253494F; +1813 : 4E3A2075; +1814 : 6E737570; +1815 : 706F7274; +1816 : 65642028; +1817 : 2569290A; +1818 : 00000000; +1819 : 25735645; +181a : 5253494F; +181b : 4E3A2025; +181c : 69202874; +181d : 79706520; +181e : 25692C20; +181f : 6C656E20; +1820 : 25692C20; +1821 : 646F6D61; +1822 : 696E2025; +1823 : 69290A00; +1824 : 2573464C; +1825 : 4147533A; +1826 : 20307825; +1827 : 30347820; +1828 : 28636F72; +1829 : 72656374; +182a : 696F6E20; +182b : 30782530; +182c : 38783A25; +182d : 30387820; +182e : 25303875; +182f : 290A0000; +1830 : 504F5254; +1831 : 3A200000; +1832 : 25735245; +1833 : 53543A20; +1834 : 73657120; +1835 : 25692C20; +1836 : 6374726C; +1837 : 2025692C; +1838 : 206C6F67; +1839 : 2D696E74; +183a : 65727661; +183b : 6C202569; +183c : 0A000000; +183d : 25734D45; +183e : 53534147; +183f : 453A2028; +1840 : 45292053; +1841 : 594E430A; +1842 : 00000000; +1843 : 25732573; +1844 : 256C752E; +1845 : 25303969; +1846 : 0A000000; +1847 : 4D53472D; +1848 : 53594E43; +1849 : 3A200000; +184a : 25734D45; +184b : 53534147; +184c : 453A2028; +184d : 45292044; +184e : 454C4159; +184f : 5F524551; +1850 : 0A000000; +1851 : 4D53472D; +1852 : 44454C41; +1853 : 595F5245; +1854 : 513A2000; +1855 : 25734D45; +1856 : 53534147; +1857 : 453A2028; +1858 : 47292046; +1859 : 4F4C4C4F; +185a : 575F5550; +185b : 0A000000; +185c : 4D53472D; +185d : 464F4C4C; +185e : 4F575F55; +185f : 503A2000; +1860 : 25734D45; +1861 : 53534147; +1862 : 453A2028; +1863 : 47292044; +1864 : 454C4159; +1865 : 5F524553; +1866 : 500A0000; +1867 : 4D53472D; +1868 : 44454C41; +1869 : 595F5245; +186a : 53503A20; +186b : 00000000; +186c : 25734D45; +186d : 53534147; +186e : 453A2028; +186f : 47292041; +1870 : 4E4E4F55; +1871 : 4E43450A; +1872 : 00000000; +1873 : 4D53472D; +1874 : 414E4E4F; +1875 : 554E4345; +1876 : 3A207374; +1877 : 616D7020; +1878 : 00000000; +1879 : 25732573; +187a : 25303278; +187b : 2D253032; +187c : 782D2530; +187d : 34780A00; +187e : 4D53472D; +187f : 414E4E4F; +1880 : 554E4345; +1881 : 3A206772; +1882 : 616E646D; +1883 : 61737465; +1884 : 722D7175; +1885 : 616C6974; +1886 : 79200000; +1887 : 25734D53; +1888 : 472D414E; +1889 : 4E4F554E; +188a : 43453A20; +188b : 6772616E; +188c : 646D6173; +188d : 7465722D; +188e : 7072696F; +188f : 20256920; +1890 : 25690A00; +1891 : 25732573; +1892 : 25303278; +1893 : 2D253032; +1894 : 782D2530; +1895 : 32782D25; +1896 : 3032782D; +1897 : 25303278; +1898 : 2D253032; +1899 : 782D2530; +189a : 32782D25; +189b : 3032780A; +189c : 00000000; +189d : 4D53472D; +189e : 414E4E4F; +189f : 554E4345; +18a0 : 3A206772; +18a1 : 616E646D; +18a2 : 61737465; +18a3 : 722D6964; +18a4 : 20000000; +18a5 : 25734D45; +18a6 : 53534147; +18a7 : 453A2028; +18a8 : 47292053; +18a9 : 49474E41; +18aa : 4C494E47; +18ab : 0A000000; +18ac : 4D53472D; +18ad : 5349474E; +18ae : 414C494E; +18af : 473A2074; +18b0 : 61726765; +18b1 : 742D706F; +18b2 : 72742000; +18b3 : 2573544C; +18b4 : 563A2074; +18b5 : 6F6F2073; +18b6 : 686F7274; +18b7 : 20282569; +18b8 : 202D2025; +18b9 : 69203D20; +18ba : 2569290A; +18bb : 00000000; +18bc : 2573544C; +18bd : 563A2074; +18be : 79706520; +18bf : 25303478; +18c0 : 206C656E; +18c1 : 20256920; +18c2 : 6F756920; +18c3 : 25303278; +18c4 : 3A253032; +18c5 : 783A2530; +18c6 : 32782073; +18c7 : 75622025; +18c8 : 3032783A; +18c9 : 25303278; +18ca : 3A253032; +18cb : 780A0000; +18cc : 2573544C; +18cd : 563A2074; +18ce : 6F6F2073; +18cf : 686F7274; +18d0 : 20286578; +18d1 : 70656374; +18d2 : 65642025; +18d3 : 692C2074; +18d4 : 6F74616C; +18d5 : 20256929; +18d6 : 0A000000; +18d7 : 544C563A; +18d8 : 20000000; +18d9 : 746C762D; +18da : 636F6E74; +18db : 656E7400; +18dc : 44554D50; +18dd : 3A200000; +18de : 7061796C; +18df : 6F616400; +18e0 : 2573564C; +18e1 : 414E2025; +18e2 : 690A0000; +18e3 : 25734554; +18e4 : 483A2025; +18e5 : 30347820; +18e6 : 28253032; +18e7 : 783A2530; +18e8 : 32783A25; +18e9 : 3032783A; +18ea : 25303278; +18eb : 3A253032; +18ec : 783A2530; +18ed : 3278202D; +18ee : 3E202530; +18ef : 32783A25; +18f0 : 3032783A; +18f1 : 25303278; +18f2 : 3A253032; +18f3 : 783A2530; +18f4 : 32783A25; +18f5 : 30327829; +18f6 : 0A000000; +18f7 : 25734950; +18f8 : 3A202569; +18f9 : 20282569; +18fa : 2E25692E; +18fb : 25692E25; +18fc : 69202D3E; +18fd : 2025692E; +18fe : 25692E25; +18ff : 692E2569; +1900 : 29206C65; +1901 : 6E202569; +1902 : 0A000000; +1903 : 25735544; +1904 : 503A2028; +1905 : 2569202D; +1906 : 3E202569; +1907 : 29206C65; +1908 : 6E202569; +1909 : 0A000000; +190a : 25733A20; +190b : 256C690A; +190c : 00000000; +190d : 5761726E; +190e : 696E673A; +190f : 2025733A; +1910 : 2063616E; +1911 : 206E6F74; +1912 : 2061646A; +1913 : 75737420; +1914 : 66726571; +1915 : 5F707062; +1916 : 20256C69; +1917 : 0A000000; +1918 : 25733A20; +1919 : 25396C75; +191a : 2E253039; +191b : 6C690A00; +191c : 25733A20; +191d : 736E743D; +191e : 25642C20; +191f : 7365633D; +1920 : 256C642C; +1921 : 206E7365; +1922 : 633D256C; +1923 : 640A0000; +1924 : 25303964; +1925 : 20253039; +1926 : 64202530; +1927 : 33642000; +1928 : 73656E64; +1929 : 3A200000; +192a : 72656376; +192b : 3A200000; +192c : 25303964; +192d : 20253039; +192e : 64202530; +192f : 33640000; +1930 : 20202025; +1931 : 39642E25; +1932 : 33640A00; +1933 : 696E6974; +1934 : 69616C69; +1935 : 7A696E67; +1936 : 00000000; +1937 : 6661756C; +1938 : 74790000; +1939 : 64697361; +193a : 626C6564; +193b : 00000000; +193c : 6C697374; +193d : 656E696E; +193e : 67000000; +193f : 7072652D; +1940 : 6D617374; +1941 : 65720000; +1942 : 70617373; +1943 : 69766500; +1944 : 756E6361; +1945 : 6C696272; +1946 : 61746564; +1947 : 00000000; +1948 : 736C6176; +1949 : 65000000; +194a : 756E6361; +194b : 6C696272; +194c : 61746564; +194d : 2F77722D; +194e : 70726573; +194f : 656E7400; +1950 : 6D617374; +1951 : 65722F77; +1952 : 722D6D2D; +1953 : 6C6F636B; +1954 : 00000000; +1955 : 756E6361; +1956 : 6C696272; +1957 : 61746564; +1958 : 2F77722D; +1959 : 732D6C6F; +195a : 636B0000; +195b : 756E6361; +195c : 6C696272; +195d : 61746564; +195e : 2F77722D; +195f : 6C6F636B; +1960 : 65640000; +1961 : 77722D63; +1962 : 616C6962; +1963 : 72617469; +1964 : 6F6E0000; +1965 : 77722D63; +1966 : 616C6962; +1967 : 72617465; +1968 : 64000000; +1969 : 77722D72; +196a : 6573702D; +196b : 63616C69; +196c : 622D7265; +196d : 71000000; +196e : 77722D6C; +196f : 696E6B2D; +1970 : 6F6E0000; +1971 : 6162736F; +1972 : 6C757465; +1973 : 2D63616C; +1974 : 69627261; +1975 : 74696F6E; +1976 : 00000000; +1977 : 686F6F6B; +1978 : 3A202573; +1979 : 0A000000; +197a : 5432206F; +197b : 72205433; +197c : 20696E63; +197d : 6F727265; +197e : 63742C20; +197f : 64697363; +1980 : 61726469; +1981 : 6E672074; +1982 : 75706C65; +1983 : 0A000000; +1984 : 5433206F; +1985 : 72205436; +1986 : 20696E63; +1987 : 6F727265; +1988 : 63742C20; +1989 : 64697363; +198a : 61726469; +198b : 6E672074; +198c : 75706C65; +198d : 0A000000; +198e : 48616E64; +198f : 7368616B; +1990 : 65206661; +1991 : 696C7572; +1992 : 653A206E; +1993 : 6F77206E; +1994 : 6F6E2D77; +1995 : 72202573; +1996 : 0A000000; +1997 : 52657472; +1998 : 79206F6E; +1999 : 2074696D; +199a : 656F7574; +199b : 0A000000; +199c : 25733A20; +199d : 73756273; +199e : 74617465; +199f : 2025690A; +19a0 : 00000000; +19a1 : 54783D3E; +19a2 : 3E736361; +19a3 : 6C656450; +19a4 : 69636F73; +19a5 : 65636F6E; +19a6 : 64732E6D; +19a7 : 7362203D; +19a8 : 20307825; +19a9 : 780A0000; +19aa : 54783D3E; +19ab : 3E736361; +19ac : 6C656450; +19ad : 69636F73; +19ae : 65636F6E; +19af : 64732E6C; +19b0 : 7362203D; +19b1 : 20307825; +19b2 : 780A0000; +19b3 : 52782066; +19b4 : 69786564; +19b5 : 2064656C; +19b6 : 6179203D; +19b7 : 2025640A; +19b8 : 00000000; +19b9 : 52783D3E; +19ba : 3E736361; +19bb : 6C656450; +19bc : 69636F73; +19bd : 65636F6E; +19be : 64732E6D; +19bf : 7362203D; +19c0 : 20307825; +19c1 : 780A0000; +19c2 : 52783D3E; +19c3 : 3E736361; +19c4 : 6C656450; +19c5 : 69636F73; +19c6 : 65636F6E; +19c7 : 64732E6C; +19c8 : 7362203D; +19c9 : 20307825; +19ca : 780A0000; +19cb : 23232320; +19cc : 74342E70; +19cd : 68617365; +19ce : 20697320; +19cf : 616C7265; +19d0 : 61647920; +19d1 : 636F7272; +19d2 : 65637465; +19d3 : 6420666F; +19d4 : 72206269; +19d5 : 74736C69; +19d6 : 64650A00; +19d7 : 74313A20; +19d8 : 20202020; +19d9 : 20202020; +19da : 20202020; +19db : 20202020; +19dc : 20202020; +19dd : 74343A20; +19de : 20202020; +19df : 20202020; +19e0 : 20202020; +19e1 : 20202020; +19e2 : 20626974; +19e3 : 736C6964; +19e4 : 653A2025; +19e5 : 640A0000; +19e6 : 20202020; +19e7 : 20207365; +19e8 : 632E2020; +19e9 : 20202020; +19ea : 206E732E; +19eb : 70686120; +19ec : 20202020; +19ed : 20207365; +19ee : 632E2020; +19ef : 20202020; +19f0 : 206E732E; +19f1 : 7068610A; +19f2 : 00000000; +19f3 : 4552524F; +19f4 : 523A204E; +19f5 : 65772063; +19f6 : 6C617373; +19f7 : 2025690A; +19f8 : 00000000; +19f9 : 4255473A; +19fa : 20547279; +19fb : 696E6720; +19fc : 746F2073; +19fd : 656E6420; +19fe : 696E7661; +19ff : 6C696420; +1a00 : 77725F6D; +1a01 : 7367206D; +1a02 : 6F64653D; +1a03 : 25782069; +1a04 : 643D2578; +1a05 : 00000000; +1a06 : 68616E64; +1a07 : 6C652053; +1a08 : 69676E61; +1a09 : 6C696E67; +1a0a : 206D7367; +1a0b : 2C206661; +1a0c : 696C6564; +1a0d : 2C205468; +1a0e : 69732069; +1a0f : 73206E6F; +1a10 : 74206F72; +1a11 : 67616E69; +1a12 : 7A617469; +1a13 : 6F6E2065; +1a14 : 7874656E; +1a15 : 73696F6E; +1a16 : 20544C56; +1a17 : 203D2030; +1a18 : 7825780A; +1a19 : 00000000; +1a1a : 68616E64; +1a1b : 6C652053; +1a1c : 69676E61; +1a1d : 6C696E67; +1a1e : 206D7367; +1a1f : 2C206661; +1a20 : 696C6564; +1a21 : 2C206E6F; +1a22 : 74204345; +1a23 : 524E2773; +1a24 : 204F5549; +1a25 : 203D2030; +1a26 : 7825780A; +1a27 : 00000000; +1a28 : 68616E64; +1a29 : 6C652053; +1a2a : 69676E61; +1a2b : 6C696E67; +1a2c : 206D7367; +1a2d : 2C206661; +1a2e : 696C6564; +1a2f : 2C206E6F; +1a30 : 74205768; +1a31 : 69746520; +1a32 : 52616262; +1a33 : 6974206D; +1a34 : 61676963; +1a35 : 206E756D; +1a36 : 62657220; +1a37 : 3D203078; +1a38 : 25780A00; +1a39 : 68616E64; +1a3a : 6C652053; +1a3b : 69676E61; +1a3c : 6C696E67; +1a3d : 206D7367; +1a3e : 2C206661; +1a3f : 696C6564; +1a40 : 2C206E6F; +1a41 : 74207375; +1a42 : 70706F72; +1a43 : 74656420; +1a44 : 76657273; +1a45 : 696F6E20; +1a46 : 6E756D62; +1a47 : 6572203D; +1a48 : 20307825; +1a49 : 780A0000; +1a4a : 2573203D; +1a4b : 20256C64; +1a4c : 3A253039; +1a4d : 6C643A25; +1a4e : 30336C64; +1a4f : 0A000000; +1a50 : 556E696E; +1a51 : 69746961; +1a52 : 6C697A65; +1a53 : 64000000; +1a54 : 4552524F; +1a55 : 523A2025; +1a56 : 733A2054; +1a57 : 696D6573; +1a58 : 74616D70; +1a59 : 73496E63; +1a5a : 6F727265; +1a5b : 63743A20; +1a5c : 25642025; +1a5d : 64202564; +1a5e : 2025640A; +1a5f : 00000000; +1a60 : 73657276; +1a61 : 6F3A7431; +1a62 : 00000000; +1a63 : 73657276; +1a64 : 6F3A7432; +1a65 : 00000000; +1a66 : 73657276; +1a67 : 6F3A7433; +1a68 : 00000000; +1a69 : 73657276; +1a6a : 6F3A7434; +1a6b : 00000000; +1a6c : 73657276; +1a6d : 6F3A7435; +1a6e : 00000000; +1a6f : 73657276; +1a70 : 6F3A7436; +1a71 : 00000000; +1a72 : 2D3E6D64; +1a73 : 656C6179; +1a74 : 00000000; +1a75 : 4552524F; +1a76 : 523A2025; +1a77 : 733A2054; +1a78 : 696D6573; +1a79 : 74616D70; +1a7a : 73496E63; +1a7b : 6F727265; +1a7c : 63743A20; +1a7d : 25642025; +1a7e : 64200A00; +1a7f : 20287761; +1a80 : 69742066; +1a81 : 6F722068; +1a82 : 77290000; +1a83 : 6F666673; +1a84 : 65745F68; +1a85 : 773A2025; +1a86 : 6C692E25; +1a87 : 30396C69; +1a88 : 20282B25; +1a89 : 6C69290A; +1a8a : 00000000; +1a8b : 504C4C20; +1a8c : 4F75744F; +1a8d : 664C6F63; +1a8e : 6B2C2073; +1a8f : 686F756C; +1a90 : 64207265; +1a91 : 73746172; +1a92 : 74207379; +1a93 : 6E630A00; +1a94 : 73657276; +1a95 : 6F3A6275; +1a96 : 73790A00; +1a97 : 77725F73; +1a98 : 6572766F; +1a99 : 20737461; +1a9a : 74653A20; +1a9b : 25732573; +1a9c : 0A000000; +1a9d : 6F6C6473; +1a9e : 65747020; +1a9f : 25692C20; +1aa0 : 6F666673; +1aa1 : 65742025; +1aa2 : 693A2530; +1aa3 : 34690A00; +1aa4 : 61646A75; +1aa5 : 73742070; +1aa6 : 68617365; +1aa7 : 2025690A; +1aa8 : 00000000; +1aa9 : 53594E43; +1aaa : 5F4E5345; +1aab : 43000000; +1aac : 53594E43; +1aad : 5F534543; +1aae : 00000000; +1aaf : 53594E43; +1ab0 : 5F504841; +1ab1 : 53450000; +1ab2 : 54524143; +1ab3 : 4B5F5048; +1ab4 : 41534500; +1ab5 : 57414954; +1ab6 : 5F4F4646; +1ab7 : 5345545F; +1ab8 : 53544142; +1ab9 : 4C450000; +1aba : 636F756C; +1abb : 64206E6F; +1abc : 74207365; +1abd : 6E642073; +1abe : 796E630A; +1abf : 00000000; +1ac0 : 636F756C; +1ac1 : 64206E6F; +1ac2 : 74207365; +1ac3 : 6E642061; +1ac4 : 6E6E6F75; +1ac5 : 6E63650A; +1ac6 : 00000000; +1ac7 : 636F756C; +1ac8 : 64206E6F; +1ac9 : 74207365; +1aca : 6E642072; +1acb : 65717565; +1acc : 73740A00; +1acd : 4E657720; +1ace : 666F7265; +1acf : 69676E20; +1ad0 : 4D617374; +1ad1 : 65722025; +1ad2 : 69206164; +1ad3 : 6465640A; +1ad4 : 00000000; +1ad5 : 25733A20; +1ad6 : 63616E27; +1ad7 : 7420696E; +1ad8 : 69742065; +1ad9 : 7874656E; +1ada : 73696F6E; +1adb : 0A000000; +1adc : 636C6F63; +1add : 6B20636C; +1ade : 61737320; +1adf : 3D202564; +1ae0 : 0A000000; +1ae1 : 636C6F63; +1ae2 : 6B206163; +1ae3 : 63757261; +1ae4 : 6379203D; +1ae5 : 2025640A; +1ae6 : 00000000; +1ae7 : 49676E6F; +1ae8 : 72656420; +1ae9 : 6672616D; +1aea : 65202569; +1aeb : 0A000000; +1aec : 70705F73; +1aed : 6C617665; +1aee : 203A2044; +1aef : 656C6179; +1af0 : 20526573; +1af1 : 7020646F; +1af2 : 65736E27; +1af3 : 74206D61; +1af4 : 74636820; +1af5 : 44656C61; +1af6 : 79205265; +1af7 : 71202866; +1af8 : 20257829; +1af9 : 0A000000; +1afa : 70705F70; +1afb : 636C6F63; +1afc : 6B203A20; +1afd : 5044656C; +1afe : 61792052; +1aff : 65737020; +1b00 : 646F6573; +1b01 : 6E277420; +1b02 : 6D617463; +1b03 : 68205044; +1b04 : 656C6179; +1b05 : 20526571; +1b06 : 0A000000; +1b07 : 25733A20; +1b08 : 5044656C; +1b09 : 61792052; +1b0a : 65737020; +1b0b : 462D7570; +1b0c : 20646F65; +1b0d : 736E2774; +1b0e : 206D6174; +1b0f : 63682050; +1b10 : 44656C61; +1b11 : 79205265; +1b12 : 710A0000; +1b13 : 4552524F; +1b14 : 523A2025; +1b15 : 733A2046; +1b16 : 6F6C6C6F; +1b17 : 77207570; +1b18 : 206D6573; +1b19 : 73616765; +1b1a : 20697320; +1b1b : 6E6F7420; +1b1c : 66726F6D; +1b1d : 20637572; +1b1e : 72656E74; +1b1f : 20706172; +1b20 : 656E740A; +1b21 : 00000000; +1b22 : 4552524F; +1b23 : 523A2025; +1b24 : 733A2053; +1b25 : 6C617665; +1b26 : 20776173; +1b27 : 206E6F74; +1b28 : 20776169; +1b29 : 74696E67; +1b2a : 20612066; +1b2b : 6F6C6C6F; +1b2c : 77207570; +1b2d : 206D6573; +1b2e : 73616765; +1b2f : 0A000000; +1b30 : 4552524F; +1b31 : 523A2025; +1b32 : 733A2053; +1b33 : 65717565; +1b34 : 6E636549; +1b35 : 44202564; +1b36 : 20646F65; +1b37 : 736E2774; +1b38 : 206D6174; +1b39 : 6368206C; +1b3a : 61737420; +1b3b : 53796E63; +1b3c : 206D6573; +1b3d : 73616765; +1b3e : 2025640A; +1b3f : 00000000; +1b40 : 25732825; +1b41 : 6429204D; +1b42 : 65737361; +1b43 : 67652063; +1b44 : 616E2774; +1b45 : 20626520; +1b46 : 73656E74; +1b47 : 0A000000; +1b48 : 53454E54; +1b49 : 20253032; +1b4a : 64206279; +1b4b : 74657320; +1b4c : 61742025; +1b4d : 642E2530; +1b4e : 39642E25; +1b4f : 30336420; +1b50 : 28257329; +1b51 : 0A000000; +1b52 : 25733A25; +1b53 : 693A2045; +1b54 : 72726F72; +1b55 : 20310A00; +1b56 : 25733A25; +1b57 : 693A2045; +1b58 : 72726F72; +1b59 : 20320A00; +1b5a : 7072652D; +1b5b : 00000000; +1b5c : 42657374; +1b5d : 20666F72; +1b5e : 6569676E; +1b5f : 206D6173; +1b60 : 74657220; +1b61 : 69732025; +1b62 : 692F2569; +1b63 : 0A000000; +1b64 : 25733A20; +1b65 : 6572726F; +1b66 : 720A0000; +1b67 : 25733A20; +1b68 : 70617373; +1b69 : 6976650A; +1b6a : 00000000; +1b6b : 25733A20; +1b6c : 25736D61; +1b6d : 73746572; +1b6e : 0A000000; +1b6f : 4E657720; +1b70 : 55544320; +1b71 : 6F666673; +1b72 : 65743A20; +1b73 : 25690A00; +1b74 : 25733A20; +1b75 : 736C6176; +1b76 : 650A0000; +1b77 : 2D000000; +1b78 : 25732564; +1b79 : 2E253039; +1b7a : 64000000; +1b7b : 5472696D; +1b7c : 20746F6F; +1b7d : 2D6C6F6E; +1b7e : 67206D70; +1b7f : 643A2025; +1b80 : 690A0000; +1b81 : 41667465; +1b82 : 72206176; +1b83 : 67282569; +1b84 : 292C206D; +1b85 : 65616E50; +1b86 : 61746844; +1b87 : 656C6179; +1b88 : 3A202569; +1b89 : 0A000000; +1b8a : 6572726F; +1b8b : 7220696E; +1b8c : 20745F6F; +1b8d : 70732D3E; +1b8e : 73657276; +1b8f : 6F5F696E; +1b90 : 69740000; +1b91 : 496E6974; +1b92 : 69616C69; +1b93 : 7A65643A; +1b94 : 206F6273; +1b95 : 5F647269; +1b96 : 66742025; +1b97 : 6C6C690A; +1b98 : 00000000; +1b99 : 4F666673; +1b9a : 65742066; +1b9b : 726F6D20; +1b9c : 6D617374; +1b9d : 65723A20; +1b9e : 20202020; +1b9f : 25730A00; +1ba0 : 54313A20; +1ba1 : 25730A00; +1ba2 : 54323A20; +1ba3 : 25730A00; +1ba4 : 4F627365; +1ba5 : 72766564; +1ba6 : 20647269; +1ba7 : 66743A20; +1ba8 : 2539690A; +1ba9 : 00000000; +1baa : 64697363; +1bab : 61726420; +1bac : 54332F54; +1bad : 343A2077; +1bae : 65206D69; +1baf : 73732054; +1bb0 : 312F5432; +1bb1 : 0A000000; +1bb2 : 54333A20; +1bb3 : 25730A00; +1bb4 : 54343A20; +1bb5 : 25730A00; +1bb6 : 4D617374; +1bb7 : 65722074; +1bb8 : 6F20736C; +1bb9 : 6176653A; +1bba : 2025730A; +1bbb : 00000000; +1bbc : 536C6176; +1bbd : 6520746F; +1bbe : 206D6173; +1bbf : 7465723A; +1bc0 : 2025730A; +1bc1 : 00000000; +1bc2 : 6D65616E; +1bc3 : 50617468; +1bc4 : 44656C61; +1bc5 : 793A2025; +1bc6 : 730A0000; +1bc7 : 54353A20; +1bc8 : 25730A00; +1bc9 : 54363A20; +1bca : 25730A00; +1bcb : 536C6176; +1bcc : 65204F6E; +1bcd : 6C792C20; +1bce : 636C6F63; +1bcf : 6B20636C; +1bd0 : 61737320; +1bd1 : 73657420; +1bd2 : 746F2025; +1bd3 : 640A0000; +1bd4 : 25323075; +1bd5 : 00000000; +1bd6 : 25750000; +1bd7 : 25313175; +1bd8 : 25303975; +1bd9 : 00000000; +1bda : 25752530; +1bdb : 39750000; +1bdc : 6C6E6B3A; +1bdd : 25642072; +1bde : 783A2564; +1bdf : 2074783A; +1be0 : 25642000; +1be1 : 6C6F636B; +1be2 : 3A256420; +1be3 : 00000000; +1be4 : 7074703A; +1be5 : 25732000; +1be6 : 73763A25; +1be7 : 64200000; +1be8 : 73733A27; +1be9 : 25732720; +1bea : 00000000; +1beb : 61757825; +1bec : 643A2578; +1bed : 20000000; +1bee : 7365633A; +1bef : 2564206E; +1bf0 : 7365633A; +1bf1 : 25642000; +1bf2 : 6D753A25; +1bf3 : 73200000; +1bf4 : 646D733A; +1bf5 : 25732000; +1bf6 : 6474786D; +1bf7 : 3A256420; +1bf8 : 6472786D; +1bf9 : 3A256420; +1bfa : 00000000; +1bfb : 64747873; +1bfc : 3A256420; +1bfd : 64727873; +1bfe : 3A256420; +1bff : 00000000; +1c00 : 6173796D; +1c01 : 3A256420; +1c02 : 00000000; +1c03 : 63727474; +1c04 : 3A257320; +1c05 : 00000000; +1c06 : 636B6F3A; +1c07 : 25642000; +1c08 : 73657470; +1c09 : 3A256420; +1c0a : 00000000; +1c0b : 75636E74; +1c0c : 3A256420; +1c0d : 00000000; +1c0e : 68643A25; +1c0f : 64206D64; +1c10 : 3A256420; +1c11 : 61643A25; +1c12 : 64200000; +1c13 : 70636200; +1c14 : 74656D70; +1c15 : 3A202564; +1c16 : 2E253034; +1c17 : 64204300; +1c18 : 0A0A5054; +1c19 : 50207374; +1c1a : 61747573; +1c1b : 3A200000; +1c1c : 25730000; +1c1d : 0A0A5379; +1c1e : 6E632069; +1c1f : 6E666F20; +1c20 : 6E6F7420; +1c21 : 76616C69; +1c22 : 640A0000; +1c23 : 0A0A5379; +1c24 : 6E636872; +1c25 : 6F6E697A; +1c26 : 6174696F; +1c27 : 6E207374; +1c28 : 61747573; +1c29 : 3A0A0000; +1c2a : 57522050; +1c2b : 54502043; +1c2c : 6F726520; +1c2d : 53796E63; +1c2e : 204D6F6E; +1c2f : 69746F72; +1c30 : 20257300; +1c31 : 0A457363; +1c32 : 203D2065; +1c33 : 78697400; +1c34 : 0A0A5441; +1c35 : 49205469; +1c36 : 6D653A20; +1c37 : 20202020; +1c38 : 20202020; +1c39 : 20202020; +1c3a : 20202020; +1c3b : 20000000; +1c3c : 0A0A4C69; +1c3d : 6E6B2073; +1c3e : 74617475; +1c3f : 733A0000; +1c40 : 0A25733A; +1c41 : 20000000; +1c42 : 77727531; +1c43 : 00000000; +1c44 : 4C696E6B; +1c45 : 20757020; +1c46 : 20200000; +1c47 : 4C696E6B; +1c48 : 20646F77; +1c49 : 6E200000; +1c4a : 2852583A; +1c4b : 2025642C; +1c4c : 2054583A; +1c4d : 20256429; +1c4e : 00000000; +1c4f : 0A4D6F64; +1c50 : 653A2000; +1c51 : 5752204F; +1c52 : 66660000; +1c53 : 0A436C6F; +1c54 : 636B206F; +1c55 : 66667365; +1c56 : 743A2020; +1c57 : 20202020; +1c58 : 20202020; +1c59 : 20202020; +1c5a : 20202000; +1c5b : 2532692E; +1c5c : 25303969; +1c5d : 20730000; +1c5e : 25692E25; +1c5f : 30396920; +1c60 : 73000000; +1c61 : 25396920; +1c62 : 6E730000; +1c63 : 0A4F6E65; +1c64 : 2D776179; +1c65 : 2064656C; +1c66 : 61792061; +1c67 : 76657261; +1c68 : 6765643A; +1c69 : 20202020; +1c6a : 20202000; +1c6b : 0A4F6273; +1c6c : 65727665; +1c6d : 64206472; +1c6e : 6966743A; +1c6f : 20202020; +1c70 : 20202020; +1c71 : 20202020; +1c72 : 20202000; +1c73 : 5752204D; +1c74 : 61737465; +1c75 : 72202000; +1c76 : 57522053; +1c77 : 6C617665; +1c78 : 20202000; +1c79 : 57522055; +1c7a : 6E6B6E6F; +1c7b : 776E2000; +1c7c : 4C6F636B; +1c7d : 65642000; +1c7e : 4E6F4C6F; +1c7f : 636B2000; +1c80 : 43616C69; +1c81 : 62726174; +1c82 : 65640000; +1c83 : 556E6361; +1c84 : 6C696272; +1c85 : 61746564; +1c86 : 00000000; +1c87 : 53657276; +1c88 : 6F207374; +1c89 : 6174653A; +1c8a : 20202020; +1c8b : 20202020; +1c8c : 20202020; +1c8d : 20202000; +1c8e : 50686173; +1c8f : 65207472; +1c90 : 61636B69; +1c91 : 6E673A20; +1c92 : 20202020; +1c93 : 20202020; +1c94 : 20202000; +1c95 : 4F4E0A00; +1c96 : 4F46460A; +1c97 : 00000000; +1c98 : 41757820; +1c99 : 636C6F63; +1c9a : 6B202564; +1c9b : 20737461; +1c9c : 7475733A; +1c9d : 20202020; +1c9e : 20202020; +1c9f : 00000000; +1ca0 : 656E6162; +1ca1 : 6C656400; +1ca2 : 2C206C6F; +1ca3 : 636B6564; +1ca4 : 00000000; +1ca5 : 0A54696D; +1ca6 : 696E6720; +1ca7 : 70617261; +1ca8 : 6D657465; +1ca9 : 72733A0A; +1caa : 00000000; +1cab : 526F756E; +1cac : 642D7472; +1cad : 69702074; +1cae : 696D6520; +1caf : 286D7529; +1cb0 : 3A200000; +1cb1 : 25732070; +1cb2 : 730A0000; +1cb3 : 4D617374; +1cb4 : 65722D73; +1cb5 : 6C617665; +1cb6 : 2064656C; +1cb7 : 61793A20; +1cb8 : 20200000; +1cb9 : 4D617374; +1cba : 65722050; +1cbb : 48592064; +1cbc : 656C6179; +1cbd : 733A2020; +1cbe : 20202020; +1cbf : 20202020; +1cc0 : 20000000; +1cc1 : 54583A20; +1cc2 : 25396420; +1cc3 : 70732C20; +1cc4 : 52583A20; +1cc5 : 25396420; +1cc6 : 70730A00; +1cc7 : 536C6176; +1cc8 : 65205048; +1cc9 : 59206465; +1cca : 6C617973; +1ccb : 3A202020; +1ccc : 20202020; +1ccd : 20202020; +1cce : 20000000; +1ccf : 546F7461; +1cd0 : 6C206C69; +1cd1 : 6E6B2061; +1cd2 : 73796D6D; +1cd3 : 65747279; +1cd4 : 3A000000; +1cd5 : 25323164; +1cd6 : 2070730A; +1cd7 : 00000000; +1cd8 : 4361626C; +1cd9 : 65207274; +1cda : 74206465; +1cdb : 6C61793A; +1cdc : 20202020; +1cdd : 20200000; +1cde : 436C6F63; +1cdf : 6B206F66; +1ce0 : 66736574; +1ce1 : 3A000000; +1ce2 : 25323964; +1ce3 : 2070730A; +1ce4 : 00000000; +1ce5 : 50686173; +1ce6 : 65207365; +1ce7 : 74706F69; +1ce8 : 6E743A00; +1ce9 : 25323764; +1cea : 2070730A; +1ceb : 00000000; +1cec : 536B6577; +1ced : 3A202020; +1cee : 20200000; +1cef : 25333264; +1cf0 : 2070730A; +1cf1 : 00000000; +1cf2 : 55706461; +1cf3 : 74652063; +1cf4 : 6F756E74; +1cf5 : 65723A00; +1cf6 : 25323764; +1cf7 : 0A000000; +1cf8 : 756E6B6E; +1cf9 : 6F776E00; +1cfa : 73746174; +1cfb : 73000000; +1cfc : 1B5B3125; +1cfd : 63000000; +1cfe : 436F6D6D; +1cff : 616E6420; +1d00 : 22257322; +1d01 : 3A206572; +1d02 : 726F7220; +1d03 : 25640A00; +1d04 : 556E7265; +1d05 : 636F676E; +1d06 : 697A6564; +1d07 : 20636F6D; +1d08 : 6D616E64; +1d09 : 20222573; +1d0a : 222E0A00; +1d0b : 77726323; +1d0c : 20000000; +1d0d : 25630000; +1d0e : 456D7074; +1d0f : 7920696E; +1d10 : 69742073; +1d11 : 63726970; +1d12 : 742E2E2E; +1d13 : 0A000000; +1d14 : 65786563; +1d15 : 7574696E; +1d16 : 673A2025; +1d17 : 730A0000; +1d18 : 2D2D2062; +1d19 : 75696C74; +1d1a : 2D696E20; +1d1b : 73637269; +1d1c : 7074202D; +1d1d : 2D0A0000; +1d1e : 28656D70; +1d1f : 7479290A; +1d20 : 00000000; +1d21 : 57522043; +1d22 : 6F726520; +1d23 : 6275696C; +1d24 : 643A2025; +1d25 : 7325730A; +1d26 : 00000000; +1d27 : 2028756E; +1d28 : 73757070; +1d29 : 6F727465; +1d2a : 64206465; +1d2b : 76656C6F; +1d2c : 70657220; +1d2d : 6275696C; +1d2e : 64290000; +1d2f : 4275696C; +1d30 : 743A2025; +1d31 : 73202573; +1d32 : 20627920; +1d33 : 25730A00; +1d34 : 4275696C; +1d35 : 7420666F; +1d36 : 72202564; +1d37 : 206B4220; +1d38 : 52414D2C; +1d39 : 20737461; +1d3a : 636B2069; +1d3b : 73202564; +1d3c : 20627974; +1d3d : 65730A00; +1d3e : 5741524E; +1d3f : 494E473A; +1d40 : 20686172; +1d41 : 64776172; +1d42 : 65207361; +1d43 : 79732025; +1d44 : 696B4220; +1d45 : 3C3D2052; +1d46 : 414D203C; +1d47 : 2025696B; +1d48 : 420A0000; +1d49 : 76657200; +1d4a : 25733B20; +1d4b : 25732025; +1d4c : 730A0000; +1d4d : 556E6B6E; +1d4e : 6F776E20; +1d4f : 73756263; +1d50 : 6F6D6D61; +1d51 : 6E642022; +1d52 : 2573220A; +1d53 : 00000000; +1d54 : 73746172; +1d55 : 74000000; +1d56 : 73746F70; +1d57 : 00000000; +1d58 : 65326500; +1d59 : 64656C61; +1d5a : 79000000; +1d5b : 676D0000; +1d5c : 61627363; +1d5d : 616C0000; +1d5e : 6D6F6465; +1d5f : 00000000; +1d60 : 73746F70; +1d61 : 70656400; +1d62 : 72756E6E; +1d63 : 696E6700; +1d64 : 70327000; +1d65 : 41766169; +1d66 : 6C61626C; +1d67 : 6520636F; +1d68 : 6D6D616E; +1d69 : 64733A0A; +1d6a : 00000000; +1d6b : 20202573; +1d6c : 0A000000; +1d6d : 68656C70; +1d6e : 00000000; +1d6f : 25303278; +1d70 : 3A253032; +1d71 : 783A2530; +1d72 : 32783A25; +1d73 : 3032783A; +1d74 : 25303278; +1d75 : 3A253032; +1d76 : 78000000; +1d77 : 67657400; +1d78 : 67657470; +1d79 : 00000000; +1d7a : 73657400; +1d7b : 73657470; +1d7c : 00000000; +1d7d : 4D41432D; +1d7e : 61646472; +1d7f : 6573733A; +1d80 : 2025730A; +1d81 : 00000000; +1d82 : 6D616300; +1d83 : 72657365; +1d84 : 74000000; +1d85 : 6D617800; +1d86 : 7072696E; +1d87 : 745F7461; +1d88 : 736B5F74; +1d89 : 696D655F; +1d8a : 74687265; +1d8b : 73686F6C; +1d8c : 64202564; +1d8d : 0A000000; +1d8e : 20697465; +1d8f : 72617469; +1d90 : 6F6E7320; +1d91 : 20202020; +1d92 : 7365636F; +1d93 : 6E64732E; +1d94 : 6D696372; +1d95 : 6F732020; +1d96 : 20206D61; +1d97 : 785F6D73; +1d98 : 206E616D; +1d99 : 650A0000; +1d9a : 20202539; +1d9b : 6C692020; +1d9c : 2025396C; +1d9d : 692E2530; +1d9e : 366C6920; +1d9f : 25396C64; +1da0 : 2025730A; +1da1 : 00000000; +1da2 : 70730000; +1da3 : 25750A00; +1da4 : 55736167; +1da5 : 653A2072; +1da6 : 65667265; +1da7 : 7368203C; +1da8 : 7365636F; +1da9 : 6E64733E; +1daa : 0A000000; +1dab : 72656672; +1dac : 65736800; +1dad : 73746174; +1dae : 69737469; +1daf : 6373206E; +1db0 : 6F77206F; +1db1 : 66660A00; +1db2 : 62747300; +1db3 : 6F666600; +1db4 : 73746174; +1db5 : 00000000; +1db6 : 57726F6E; +1db7 : 67207061; +1db8 : 72616D65; +1db9 : 7465720A; +1dba : 00000000; +1dbb : 65726173; +1dbc : 65000000; +1dbd : 436F756C; +1dbe : 64206E6F; +1dbf : 74206572; +1dc0 : 61736520; +1dc1 : 44420A00; +1dc2 : 61646400; +1dc3 : 53465020; +1dc4 : 44422069; +1dc5 : 73206675; +1dc6 : 6C6C0A00; +1dc7 : 49324320; +1dc8 : 6572726F; +1dc9 : 720A0000; +1dca : 53465020; +1dcb : 64617461; +1dcc : 62617365; +1dcd : 20657272; +1dce : 6F722028; +1dcf : 2564290A; +1dd0 : 00000000; +1dd1 : 25642053; +1dd2 : 46507320; +1dd3 : 696E2044; +1dd4 : 420A0000; +1dd5 : 73686F77; +1dd6 : 00000000; +1dd7 : 53465020; +1dd8 : 64617461; +1dd9 : 62617365; +1dda : 20656D70; +1ddb : 74790A00; +1ddc : 25643A20; +1ddd : 504E3A00; +1dde : 20645478; +1ddf : 3A202538; +1de0 : 64206452; +1de1 : 783A2025; +1de2 : 38642061; +1de3 : 6C706861; +1de4 : 3A202538; +1de5 : 640A0000; +1de6 : 6D617463; +1de7 : 68000000; +1de8 : 4E6F2053; +1de9 : 46502E0A; +1dea : 00000000; +1deb : 53465020; +1dec : 72656164; +1ded : 20657272; +1dee : 6F720A00; +1def : 436F756C; +1df0 : 64206E6F; +1df1 : 74206D61; +1df2 : 74636820; +1df3 : 746F2044; +1df4 : 420A0000; +1df5 : 53465020; +1df6 : 6D617463; +1df7 : 6865642C; +1df8 : 20645478; +1df9 : 3D256420; +1dfa : 6452783D; +1dfb : 25642061; +1dfc : 6C706861; +1dfd : 3D25640A; +1dfe : 00000000; +1dff : 656E6100; +1e00 : 73667000; +1e01 : 696E6974; +1e02 : 00000000; +1e03 : 636C0000; +1e04 : 73707300; +1e05 : 67707300; +1e06 : 25642025; +1e07 : 640A0000; +1e08 : 73646163; +1e09 : 00000000; +1e0a : 67646163; +1e0b : 00000000; +1e0c : 63686563; +1e0d : 6B76636F; +1e0e : 00000000; +1e0f : 706C6C00; +1e10 : 666F7263; +1e11 : 65000000; +1e12 : 466F756E; +1e13 : 64207068; +1e14 : 61736520; +1e15 : 7472616E; +1e16 : 73697469; +1e17 : 6F6E2069; +1e18 : 6E204545; +1e19 : 50524F4D; +1e1a : 3A202564; +1e1b : 70730A00; +1e1c : 4D656173; +1e1d : 7572696E; +1e1e : 67207432; +1e1f : 2F743420; +1e20 : 70686173; +1e21 : 65207472; +1e22 : 616E7369; +1e23 : 74696F6E; +1e24 : 2E2E2E0A; +1e25 : 00000000; +1e26 : 63616C69; +1e27 : 62726174; +1e28 : 696F6E00; +1e29 : 73657473; +1e2a : 65630000; +1e2b : 7365746E; +1e2c : 73656300; +1e2d : 72617700; +1e2e : 2573202B; +1e2f : 2564206E; +1e30 : 616E6F73; +1e31 : 65636F6E; +1e32 : 64732E0A; +1e33 : 00000000; +1e34 : 74696D65; +1e35 : 00000000; +1e36 : 67756900; +1e37 : 66730000; +1e38 : 66736500; +1e39 : 73646200; +1e3a : 4F4E0000; +1e3b : 4F464600; +1e3c : 656E6162; +1e3d : 6C650000; +1e3e : 64697361; +1e3f : 626C6500; +1e40 : 70686173; +1e41 : 65207472; +1e42 : 61636B69; +1e43 : 6E672025; +1e44 : 730A0000; +1e45 : 70747261; +1e46 : 636B0000; +1e47 : 50505349; +1e48 : 20766572; +1e49 : 626F7369; +1e4a : 74793A20; +1e4b : 2530386C; +1e4c : 780A0000; +1e4d : 76657262; +1e4e : 6F736500; +1e4f : 436F756C; +1e50 : 64206E6F; +1e51 : 74206572; +1e52 : 61736520; +1e53 : 696E6974; +1e54 : 20736372; +1e55 : 6970740A; +1e56 : 00000000; +1e57 : 436F756C; +1e58 : 64206E6F; +1e59 : 74206164; +1e5a : 64207468; +1e5b : 6520636F; +1e5c : 6D6D616E; +1e5d : 640A0000; +1e5e : 4F4B2E0A; +1e5f : 00000000; +1e60 : 626F6F74; +1e61 : 00000000; +1e62 : 25732C20; +1e63 : 25732025; +1e64 : 642C2025; +1e65 : 642C2025; +1e66 : 3032643A; +1e67 : 25303264; +1e68 : 3A253032; +1e69 : 64000000; +1e6a : 25732025; +1e6b : 32642025; +1e6c : 3032643A; +1e6d : 25303264; +1e6e : 3A253032; +1e6f : 64000000; +1e70 : 2534642D; +1e71 : 25303264; +1e72 : 2D253032; +1e73 : 642D2530; +1e74 : 32643A25; +1e75 : 3032643A; +1e76 : 25303264; +1e77 : 00000000; +1e78 : 1B5B3025; +1e79 : 643B3325; +1e7a : 646D0000; +1e7b : 1B5B6D00; +1e7c : 1B5B2564; +1e7d : 3B256466; +1e7e : 00000000; +1e7f : 1B5B324A; +1e80 : 1B5B313B; +1e81 : 31480000; +1e82 : 53756E00; +1e83 : 4D6F6E00; +1e84 : 54756500; +1e85 : 57656400; +1e86 : 54687500; +1e87 : 46726900; +1e88 : 53617400; +1e89 : 4A616E00; +1e8a : 46656200; +1e8b : 4D617200; +1e8c : 41707200; +1e8d : 4D617900; +1e8e : 4A756E00; +1e8f : 4A756C00; +1e90 : 41756700; +1e91 : 53657000; +1e92 : 4F637400; +1e93 : 4E6F7600; +1e94 : 44656300; +1e95 : 4C6F6F70; +1e96 : 73207065; +1e97 : 72206A69; +1e98 : 6666793A; +1e99 : 2025690A; +1e9a : 00000000; +1e9b : 25733A20; +1e9c : 6E6F2073; +1e9d : 6F636B65; +1e9e : 7420736C; +1e9f : 6F747320; +1ea0 : 6C656674; +1ea1 : 0A000000; +1ea2 : 77723000; +1ea3 : 6E65742D; +1ea4 : 62680000; +1ea5 : 30313233; +1ea6 : 34353637; +1ea7 : 38396162; +1ea8 : 63646566; +1ea9 : 00000000; +1eaa : 6E6F2070; +1eab : 66696C74; +1eac : 65722072; +1ead : 756C652D; +1eae : 73657421; +1eaf : 0A000000; +1eb0 : 7066696C; +1eb1 : 7465723A; +1eb2 : 2077726F; +1eb3 : 6E67206D; +1eb4 : 61676963; +1eb5 : 206E756D; +1eb6 : 62657220; +1eb7 : 28676F74; +1eb8 : 20307825; +1eb9 : 78290A00; +1eba : 7066696C; +1ebb : 7465723A; +1ebc : 2077726F; +1ebd : 6E672072; +1ebe : 756C652D; +1ebf : 7365742C; +1ec0 : 2063616E; +1ec1 : 27742061; +1ec2 : 70706C79; +1ec3 : 0A000000; +1ec4 : 4572726F; +1ec5 : 723A204D; +1ec6 : 696E6963; +1ec7 : 2048444C; +1ec8 : 20766572; +1ec9 : 73696F6E; +1eca : 20256420; +1ecb : 6E6F7420; +1ecc : 73757070; +1ecd : 6F727465; +1ece : 64206279; +1ecf : 2073770A; +1ed0 : 00000000; +1ed1 : 5761726E; +1ed2 : 696E673A; +1ed3 : 204D696E; +1ed4 : 69632072; +1ed5 : 65636569; +1ed6 : 76656420; +1ed7 : 6572726F; +1ed8 : 6E656F75; +1ed9 : 73206672; +1eda : 616D650A; +1edb : 00000000; +1edc : 5761726E; +1edd : 696E673A; +1ede : 204D696E; +1edf : 69632052; +1ee0 : 78206669; +1ee1 : 666F2066; +1ee2 : 756C6C2C; +1ee3 : 20657870; +1ee4 : 65637420; +1ee5 : 77726F6E; +1ee6 : 67206672; +1ee7 : 616D6573; +1ee8 : 0A000000; +1ee9 : 5761726E; +1eea : 696E673A; +1eeb : 20747820; +1eec : 6E6F7420; +1eed : 7465726D; +1eee : 696E6174; +1eef : 65642069; +1ef0 : 6E66696E; +1ef1 : 69746520; +1ef2 : 6D63723D; +1ef3 : 30782578; +1ef4 : 0A000000; +1ef5 : 5761726E; +1ef6 : 696E673A; +1ef7 : 20747820; +1ef8 : 74696D65; +1ef9 : 7374616D; +1efa : 70206E65; +1efb : 76657220; +1efc : 62656361; +1efd : 6D652061; +1efe : 7661696C; +1eff : 61626C65; +1f00 : 0A000000; +1f01 : 64657620; +1f02 : 20307825; +1f03 : 30386C78; +1f04 : 20402025; +1f05 : 30366C78; +1f06 : 2C202573; +1f07 : 0A000000; +1f08 : 66706761; +1f09 : 2D617265; +1f0a : 61000000; +1f0b : 4572726F; +1f0c : 72202564; +1f0d : 20776869; +1f0e : 6C652072; +1f0f : 65616469; +1f10 : 6E672074; +1f11 : 32347020; +1f12 : 66726F6D; +1f13 : 2073746F; +1f14 : 72616765; +1f15 : 0A000000; +1f16 : 74323470; +1f17 : 20726561; +1f18 : 64206672; +1f19 : 6F6D2073; +1f1a : 746F7261; +1f1b : 67653A20; +1f1c : 25642070; +1f1d : 730A0000; +1f1e : 57616974; +1f1f : 696E6720; +1f20 : 666F7220; +1f21 : 6C696E6B; +1f22 : 2E2E2E0A; +1f23 : 00000000; +1f24 : 4C6F636B; +1f25 : 696E6720; +1f26 : 504C4C2E; +1f27 : 2E2E0A00; +1f28 : 43616C69; +1f29 : 62726174; +1f2a : 696E6720; +1f2b : 52582074; +1f2c : 696D6573; +1f2d : 74616D70; +1f2e : 65722E2E; +1f2f : 2E0A0000; +1f30 : 4661696C; +1f31 : 65640000; +1f32 : 53756363; +1f33 : 65737300; +1f34 : 57726F74; +1f35 : 65206E65; +1f36 : 77207432; +1f37 : 34702076; +1f38 : 616C7565; +1f39 : 3A202564; +1f3a : 20707320; +1f3b : 28257329; +1f3c : 0A000000; +1f3d : 20454E4F; +1f3e : 53504300; +1f3f : 25732573; +1f40 : 3A000000; +1f41 : 494E5641; +1f42 : 4C494400; +1f43 : 25642E25; +1f44 : 30346400; +1f45 : 74656D70; +1f46 : 00000000; +1f47 : 74656D70; +1f48 : 65726174; +1f49 : 75726500; +1f4a : 7366703A; +1f4b : 20636F72; +1f4c : 72757074; +1f4d : 65642063; +1f4e : 6865636B; +1f4f : 73756D0A; +1f50 : 00000000; +1f51 : 73646266; +1f52 : 733A2066; +1f53 : 6F756E64; +1f54 : 20617420; +1f55 : 25692069; +1f56 : 6E20466C; +1f57 : 6173680A; +1f58 : 00000000; +1f59 : 73646266; +1f5a : 733A2066; +1f5b : 6F756E64; +1f5c : 20617420; +1f5d : 25692069; +1f5e : 6E205731; +1f5f : 0A000000; +1f60 : 73646266; +1f61 : 733A2066; +1f62 : 6F756E64; +1f63 : 20617420; +1f64 : 25692069; +1f65 : 6E204932; +1f66 : 43283078; +1f67 : 25325829; +1f68 : 0A000000; +1f69 : 66696C65; +1f6a : 20307825; +1f6b : 30387820; +1f6c : 40202534; +1f6d : 692C206E; +1f6e : 616D6520; +1f6f : 25730A00; +1f70 : 25733A20; +1f71 : 53444220; +1f72 : 6572726F; +1f73 : 720A0000; +1f74 : 25733A20; +1f75 : 53444220; +1f76 : 66696C65; +1f77 : 20697320; +1f78 : 656D7074; +1f79 : 790A0000; +1f7a : 25733A20; +1f7b : 5573696E; +1f7c : 67205731; +1f7d : 20736572; +1f7e : 69616C20; +1f7f : 6E756D62; +1f80 : 65720A00; +1f81 : 25733A20; +1f82 : 6661696C; +1f83 : 7572650A; +1f84 : 00000000; +1f85 : 25733A20; +1f86 : 53444220; +1f87 : 6572726F; +1f88 : 722C2063; +1f89 : 616E2774; +1f8a : 20736176; +1f8b : 650A0000; +1f8c : 41646469; +1f8d : 6E67206E; +1f8e : 65772053; +1f8f : 46502065; +1f90 : 6E747279; +1f91 : 0A000000; +1f92 : 55706461; +1f93 : 74652065; +1f94 : 78697374; +1f95 : 696E6720; +1f96 : 53465020; +1f97 : 656E7472; +1f98 : 790A0000; +1f99 : 2D2D2075; +1f9a : 7365722D; +1f9b : 64656669; +1f9c : 6E656420; +1f9d : 73637269; +1f9e : 7074202D; +1f9f : 2D0A0000; +1fa0 : 45726173; +1fa1 : 696E6720; +1fa2 : 466C6173; +1fa3 : 68283078; +1fa4 : 2578292E; +1fa5 : 2E2E0A00; +1fa6 : 45726173; +1fa7 : 696E6720; +1fa8 : 45455052; +1fa9 : 4F4D2025; +1faa : 64202830; +1fab : 78257829; +1fac : 2E2E2E0A; +1fad : 00000000; +1fae : 45726173; +1faf : 696E6720; +1fb0 : 312D5720; +1fb1 : 45455052; +1fb2 : 4F4D2028; +1fb3 : 30782578; +1fb4 : 292E2E2E; +1fb5 : 0A000000; +1fb6 : 66696C65; +1fb7 : 6E616D65; +1fb8 : 3A202573; +1fb9 : 3B206669; +1fba : 7273743A; +1fbb : 2025783B; +1fbc : 206C6173; +1fbd : 743A2025; +1fbe : 780A0000; +1fbf : 466F726D; +1fc0 : 61747469; +1fc1 : 6E672053; +1fc2 : 44424653; +1fc3 : 20696E20; +1fc4 : 466C6173; +1fc5 : 68283078; +1fc6 : 2578292E; +1fc7 : 2E2E0A00; +1fc8 : 49324320; +1fc9 : 45455052; +1fca : 4F4D206E; +1fcb : 6F742066; +1fcc : 6F756E64; +1fcd : 0A000000; +1fce : 466F726D; +1fcf : 61747469; +1fd0 : 6E672053; +1fd1 : 44424653; +1fd2 : 20696E20; +1fd3 : 49324320; +1fd4 : 45455052; +1fd5 : 4F4D2025; +1fd6 : 64202830; +1fd7 : 78257829; +1fd8 : 2E2E2E0A; +1fd9 : 00000000; +1fda : 312D5769; +1fdb : 72652045; +1fdc : 4550524F; +1fdd : 4D206E6F; +1fde : 7420666F; +1fdf : 756E640A; +1fe0 : 00000000; +1fe1 : 466F726D; +1fe2 : 61747469; +1fe3 : 6E672053; +1fe4 : 44424653; +1fe5 : 20696E20; +1fe6 : 312D5720; +1fe7 : 45455052; +1fe8 : 4F4D2028; +1fe9 : 30782578; +1fea : 292E2E2E; +1feb : 0A000000; +1fec : 65657072; +1fed : 6F6D0000; +1fee : 6F666673; +1fef : 65742025; +1ff0 : 34692028; +1ff1 : 30782530; +1ff2 : 3378293A; +1ff3 : 20253369; +1ff4 : 20283078; +1ff5 : 25303278; +1ff6 : 290A0000; +1ff7 : 77726974; +1ff8 : 65283078; +1ff9 : 25782C20; +1ffa : 2569293A; +1ffb : 20726573; +1ffc : 756C7420; +1ffd : 3D202569; +1ffe : 0A000000; +1fff : 72656164; +2000 : 28307825; +2001 : 782C2025; +2002 : 69293A20; +2003 : 72657375; +2004 : 6C74203D; +2005 : 2025690A; +2006 : 00000000; +2007 : 64657669; +2008 : 63652025; +2009 : 693A2025; +200a : 30387825; +200b : 3038780A; +200c : 00000000; +200d : 74656D70; +200e : 3A202564; +200f : 2E253034; +2010 : 640A0000; +2011 : 77310000; +2012 : 77317200; +2013 : 77317700; +2014 : 3C556E6B; +2015 : 6E6F776E; +2016 : 3E000000; +2017 : 736F6674; +2018 : 706C6C3A; +2019 : 20697271; +201a : 73202564; +201b : 20736571; +201c : 20257320; +201d : 6D6F6465; +201e : 20256420; +201f : 616C6967; +2020 : 6E6D656E; +2021 : 745F7374; +2022 : 61746520; +2023 : 25642048; +2024 : 4C256420; +2025 : 4D4C2564; +2026 : 2048593D; +2027 : 2564204D; +2028 : 593D2564; +2029 : 2044656C; +202a : 436E743D; +202b : 25640A00; +202c : 73746172; +202d : 742D6578; +202e : 74000000; +202f : 77616974; +2030 : 2D657874; +2031 : 00000000; +2032 : 73746172; +2033 : 742D6865; +2034 : 6C706572; +2035 : 00000000; +2036 : 77616974; +2037 : 2D68656C; +2038 : 70657200; +2039 : 73746172; +203a : 742D6D61; +203b : 696E0000; +203c : 77616974; +203d : 2D6D6169; +203e : 6E000000; +203f : 72656164; +2040 : 79000000; +2041 : 636C6561; +2042 : 722D6461; +2043 : 63730000; +2044 : 77616974; +2045 : 2D636C65; +2046 : 61722D64; +2047 : 61637300; +2048 : BADC0FFE; +2049 : 3B9ACA00; +204a : 00020100; +204b : 00020200; +204c : 00020300; +204d : 00020400; +204e : 00020500; +204f : 00020600; +2050 : 00020700; +2051 : 000F4240; +2052 : 41C64E6D; +2053 : 7FFFFFFF; +2054 : 00080030; +2055 : C4653600; +2056 : FFF0BDC0; +2057 : 0007D000; +2058 : 3B9AC9FF; +2059 : 00010043; +205a : 00010044; +205b : 00015180; +205c : 005EE000; +205d : 01000001; +205e : 11223344; +205f : E0001FFF; +2060 : 00246000; +2061 : 01554000; +2062 : 02468000; +2063 : 13578000; +2064 : 0FFFFFFF; +2065 : 059682F0; +2066 : 0EE6B27F; +2067 : 01312D02; +2068 : 01312D0A; +2069 : 46696C65; +206a : 44617461; +206b : 7366702D; +206c : 5344422D; +206d : 6D61632D; +206e : 63616C69; +206f : 77722D69; +2070 : 003D0137; +2071 : 8000001F; +2072 : 009895B6; +2073 : C4000001; +2074 : 000186A0; +2075 : 00FFFFFF; +2076 : FFFDB610; +2077 : 000249F0; +2078 : 05F5E100; +2079 : 0BEBC200; +207a : FA0A1F00; +207b : 01312D03; +207c : 011B1900; +207d : 00000000; +207e : 00000000; +207f : 00005DF8; +2080 : 00005E04; +2081 : 00005E14; +2082 : 00005E20; +2083 : 00005E2C; +2084 : 00005E38; +2085 : 00005E44; +2086 : 00000AA0; +2087 : 00000B10; +2088 : 00000E28; +2089 : 00000E28; +208a : 00000E28; +208b : 00000E28; +208c : 00000E28; +208d : 00000E28; +208e : 00000B8C; +208f : 00000BFC; +2090 : 00000E28; +2091 : 00000C90; +2092 : 00000DFC; +2093 : 77727063; +2094 : 5F74696D; +2095 : 655F6164; +2096 : 6A757374; +2097 : 5F6F6666; +2098 : 73657400; +2099 : 77725F73; +209a : 31000000; +209b : 77727063; +209c : 5F74696D; +209d : 655F6164; +209e : 6A757374; +209f : 00000000; +20a0 : 77727063; +20a1 : 5F74696D; +20a2 : 655F7365; +20a3 : 74000000; +20a4 : 77727063; +20a5 : 5F74696D; +20a6 : 655F6765; +20a7 : 74000000; +20a8 : 77727063; +20a9 : 5F6E6574; +20aa : 5F73656E; +20ab : 64000000; +20ac : 011B1900; +20ad : 00000180; +20ae : C200000E; +20af : 70747064; +20b0 : 5F6E6574; +20b1 : 69665F63; +20b2 : 72656174; +20b3 : 655F736F; +20b4 : 636B6574; +20b5 : 00000000; +20b6 : 00000000; +20b7 : 00000000; +20b8 : 00000000; +20b9 : 00000000; +20ba : 00000001; +20bb : 00000001; +20bc : 00000001; +20bd : 00000001; +20be : 00000000; +20bf : 00000000; +20c0 : 00000000; +20c1 : 00004B08; +20c2 : 00004B28; +20c3 : 00004B34; +20c4 : 00004B44; +20c5 : 00004B64; +20c6 : 00004B74; +20c7 : 00004BDC; +20c8 : 00004B94; +20c9 : 00004A9C; +20ca : 00004AE0; +20cb : 00000000; +20cc : 00000000; +20cd : 00000000; +20ce : 00000000; +20cf : 00010000; +20d0 : 00000000; +20d1 : 00000000; +20d2 : 00000000; +20d3 : 00020100; +20d4 : 00000000; +20d5 : 00000000; +20d6 : 00000000; +20d7 : 00030101; +20d8 : 00000000; +20d9 : 00000000; +20da : 00000000; +20db : 00040201; +20dc : 01000000; +20dd : 00000000; +20de : 00000000; +20df : 00050201; +20e0 : 01010000; +20e1 : 00000000; +20e2 : 00000000; +20e3 : 00060302; +20e4 : 01010100; +20e5 : 00000000; +20e6 : 00000000; +20e7 : 00070302; +20e8 : 01010101; +20e9 : 00000000; +20ea : 00000000; +20eb : 00080402; +20ec : 02010101; +20ed : 01000000; +20ee : 00000000; +20ef : 00090403; +20f0 : 02010101; +20f1 : 01010000; +20f2 : 00000000; +20f3 : 000A0503; +20f4 : 02020101; +20f5 : 01010100; +20f6 : 00000000; +20f7 : 000B0503; +20f8 : 02020101; +20f9 : 01010101; +20fa : 00000000; +20fb : 000C0604; +20fc : 03020201; +20fd : 01010101; +20fe : 01000000; +20ff : 000D0604; +2100 : 03020201; +2101 : 01010101; +2102 : 01010000; +2103 : 000E0704; +2104 : 03020202; +2105 : 01010101; +2106 : 01010100; +2107 : 000F0705; +2108 : 03030202; +2109 : 01010101; +210a : 01010101; +210b : 00000000; +210c : 00000955; +210d : 4D433EBC; +210e : 00000001; +210f : 00000000; +2110 : 00000000; +2111 : 00005EBC; +2112 : 002C0100; +2113 : 00010000; +2114 : 00005EC4; +2115 : 002C0100; +2116 : 017F0000; +2117 : 00005ED0; +2118 : 00360101; +2119 : 057F0000; +211a : 00005EDC; +211b : 00360101; +211c : 057F0000; +211d : 00000000; +211e : 00000000; +211f : 00000000; +2120 : 00000000; +2121 : 00000000; +2122 : 00000000; +2123 : 00000000; +2124 : 00000000; +2125 : 00000000; +2126 : 00000000; +2127 : 00000000; +2128 : 00000000; +2129 : 00005F00; +212a : 002C0000; +212b : 02010000; +212c : 00005EE8; +212d : 00360000; +212e : 03020000; +212f : 00005EF4; +2130 : 00360001; +2131 : 057F0000; +2132 : 00005F0C; +2133 : 00400000; +2134 : 05000000; +2135 : 00005F18; +2136 : FFFF0000; +2137 : 057F0000; +2138 : 00005F24; +2139 : FFFF0000; +213a : 047F0000; +213b : 00000000; +213c : 00000000; +213d : 00000000; +213e : 00000000; +213f : 00000000; +2140 : 00000000; +2141 : 00000000; +2142 : 00000000; +2143 : 00000000; +2144 : 00000000; +2145 : 00000000; +2146 : 00000000; +2147 : 00000000; +2148 : 00000000; +2149 : 00000000; +214a : 00000000; +214b : 00000000; +214c : 00000000; +214d : 00000000; +214e : 00008920; +214f : 00008A3C; +2150 : 00008A20; +2151 : 00008E50; +2152 : 00008ED0; +2153 : 00000000; +2154 : 00000000; +2155 : 00000000; +2156 : 00000000; +2157 : 00000000; +2158 : 00000000; +2159 : 00000000; +215a : 00000000; +215b : 00000000; +215c : 00000000; +215d : 00000000; +215e : 00000000; +215f : 00000000; +2160 : 00000000; +2161 : 00000000; +2162 : 00000000; +2163 : 00000000; +2164 : 00000000; +2165 : 00000000; +2166 : 00000000; +2167 : 00000000; +2168 : 00000000; +2169 : 00000000; +216a : 00000000; +216b : 00000000; +216c : 00000000; +216d : 00000000; +216e : 00000000; +216f : 00000000; +2170 : 00000000; +2171 : 00000000; +2172 : 00000000; +2173 : 00000000; +2174 : 00000000; +2175 : 00000000; +2176 : 00000000; +2177 : 00000000; +2178 : 00000000; +2179 : 00000000; +217a : 00000000; +217b : 00000000; +217c : 00000000; +217d : 00000000; +217e : 00000000; +217f : 00000000; +2180 : 00000000; +2181 : 00000000; +2182 : 00000000; +2183 : 00000000; +2184 : 00000000; +2185 : 00000000; +2186 : 00000000; +2187 : 00000000; +2188 : 00000000; +2189 : 00000000; +218a : 00000000; +218b : 00000000; +218c : 00000000; +218d : 00000000; +218e : 00000000; +218f : 00000000; +2190 : 00000000; +2191 : 00000000; +2192 : 00000000; +2193 : 00000000; +2194 : 00000000; +2195 : 00000000; +2196 : 00000000; +2197 : 00000000; +2198 : 00000000; +2199 : 00000000; +219a : 00000000; +219b : 00000000; +219c : 00000000; +219d : 00000000; +219e : 00000000; +219f : 00000000; +21a0 : 00000000; +21a1 : 00000000; +21a2 : 00000000; +21a3 : 00000000; +21a4 : 00000000; +21a5 : 00000000; +21a6 : 00000000; +21a7 : 00000000; +21a8 : 00000000; +21a9 : 00000000; +21aa : 00000000; +21ab : 00000000; +21ac : 00000000; +21ad : 00000000; +21ae : 00000000; +21af : 00000000; +21b0 : 00000000; +21b1 : 00000000; +21b2 : 00000000; +21b3 : 00000000; +21b4 : 00000000; +21b5 : 00000000; +21b6 : 00000000; +21b7 : 00000000; +21b8 : 00000000; +21b9 : 00000000; +21ba : 00000000; +21bb : 00000000; +21bc : 00000000; +21bd : 00000000; +21be : 00000000; +21bf : 00000000; +21c0 : 00000000; +21c1 : 00000000; +21c2 : 00000000; +21c3 : 00000000; +21c4 : 00000000; +21c5 : 00000000; +21c6 : 00000000; +21c7 : 00000000; +21c8 : 00000000; +21c9 : 00000000; +21ca : 00000000; +21cb : 00000000; +21cc : 00000000; +21cd : 00000000; +21ce : 00000000; +21cf : 00000000; +21d0 : 00000000; +21d1 : 00000000; +21d2 : 00000000; +21d3 : 00000000; +21d4 : 00000000; +21d5 : 00000000; +21d6 : 00000000; +21d7 : 00000000; +21d8 : 00000000; +21d9 : 00000000; +21da : 00000000; +21db : 00000000; +21dc : 00000000; +21dd : 00000000; +21de : 00000000; +21df : 00000000; +21e0 : 00000000; +21e1 : 00000000; +21e2 : 00000000; +21e3 : 00000000; +21e4 : 00000000; +21e5 : 00000000; +21e6 : 00000000; +21e7 : 00000000; +21e8 : 00000000; +21e9 : 00000000; +21ea : 00000000; +21eb : 00000000; +21ec : 00000000; +21ed : 00000000; +21ee : 00000000; +21ef : 00000000; +21f0 : 00000000; +21f1 : 00000000; +21f2 : 00000000; +21f3 : 00000000; +21f4 : 00000000; +21f5 : 00000000; +21f6 : 00000000; +21f7 : 00000000; +21f8 : 00000000; +21f9 : 00000000; +21fa : 00000000; +21fb : 00000000; +21fc : 00000000; +21fd : 00000000; +21fe : 00000000; +21ff : 00000000; +2200 : 00000000; +2201 : 00000000; +2202 : 00000000; +2203 : 00000000; +2204 : 00000000; +2205 : 00000000; +2206 : 00000000; +2207 : 00000000; +2208 : 00000000; +2209 : 00000000; +220a : 00000000; +220b : 00000000; +220c : 00000000; +220d : 00000000; +220e : 00000000; +220f : 00000000; +2210 : 00000000; +2211 : 00000000; +2212 : 00000000; +2213 : 00000000; +2214 : 00000000; +2215 : 00000000; +2216 : 00000000; +2217 : 00000000; +2218 : 00008964; +2219 : 00000000; +221a : 00000000; +221b : 00000000; +221c : 00000000; +221d : 00000000; +221e : 00000000; +221f : 00000000; +2220 : 00000000; +2221 : 00000000; +2222 : 00000000; +2223 : 00000000; +2224 : 00000000; +2225 : 00000000; +2226 : 00000000; +2227 : 00000000; +2228 : 00000000; +2229 : 00000000; +222a : 00000000; +222b : 00000000; +222c : 00000000; +222d : 00000000; +222e : 00000000; +222f : 00000000; +2230 : 00000000; +2231 : 00000000; +2232 : 00000000; +2233 : 00000000; +2234 : 00000000; +2235 : 00000000; +2236 : 00005FB4; +2237 : 00005FB4; +2238 : 00000000; +2239 : 00000001; +223a : 00000000; +223b : 00000000; +223c : 00000000; +223d : 00000000; +223e : 00000000; +223f : 00000000; +2240 : 00000000; +2241 : 00000000; +2242 : 00000000; +2243 : 00000000; +2244 : 00000000; +2245 : 00000000; +2246 : 00000000; +2247 : 00000000; +2248 : 00008508; +2249 : 00008F50; +224a : 00000000; +224b : 00008F90; +224c : 00008FB8; +224d : 00008FE8; +224e : 00009010; +224f : 00000000; +2250 : 00000000; +2251 : 00000000; +2252 : 00000000; +2253 : 00000000; +2254 : 00000000; +2255 : 00000000; +2256 : 00000000; +2257 : 00000000; +2258 : 00009030; +2259 : 00000000; +225a : 00000000; +225b : 00000000; +225c : 00000000; +225d : 00008978; +225e : 000089E4; +225f : 00000000; +2260 : 00000000; +2261 : 00000000; +2262 : 00000000; +2263 : 00000000; +2264 : 00000000; +2265 : 00000000; +2266 : 00000000; +2267 : 00000000; +2268 : 00000000; +2269 : 00000000; +226a : 00000000; +226b : 00000000; +226c : 00000000; +226d : 00000000; +226e : 00000000; +226f : 00000000; +2270 : 00000000; +2271 : 00000000; +2272 : 00000000; +2273 : 00000000; +2274 : 00000000; +2275 : 00000000; +2276 : 00000000; +2277 : 00000000; +2278 : 00000000; +2279 : 000003DC; +227a : 00000414; +227b : 000004A4; +227c : 000004AC; +227d : 00000504; +227e : 00000530; +227f : 00000588; +2280 : 000005AC; +2281 : 00000670; +2282 : 00000678; +2283 : 00000680; +2284 : 000006E4; +2285 : 00000700; +2286 : 000004D0; +2287 : 00000000; +2288 : 0000127C; +2289 : 000011F4; +228a : 00001198; +228b : 00001140; +228c : 00000000; +228d : 00000000; +228e : 00001118; +228f : 000016EC; +2290 : 000016CC; +2291 : 000014C4; +2292 : 00001310; +2293 : 00000000; +2294 : 00000000; +2295 : 00000000; +2296 : 00000000; +2297 : 00000000; +2298 : 00000000; +2299 : 00000000; +229a : 00000000; +229b : 00000000; +229c : 00000000; +229d : 00000000; +229e : 00000200; +229f : 00000000; +22a0 : 00009150; +22a1 : 00008B68; +22a2 : 00008C64; +22a3 : 00000000; +22a4 : 00000000; +22a5 : 00000004; +22a6 : 00000008; +22a7 : 0000000F; +22a8 : 00000100; +22a9 : 00000200; +22aa : 0000012C; +22ab : 046362A0; +22ac : 00007FB0; +22ad : 00009434; +22ae : 00000001; +22af : 00000000; +22b0 : 00000000; +22b1 : 00000000; +22b2 : 00000000; +22b3 : 00003B00; +22b4 : 00003BE4; +22b5 : 00000000; +22b6 : 00000000; +22b7 : 00000000; +22b8 : 00000000; +22b9 : 00000000; +22ba : 00000000; +22bb : 00000000; +22bc : 00000000; +22bd : 00000000; +22be : 00000000; +22bf : 00000000; +22c0 : 00000000; +22c1 : 00000000; +22c2 : 00000000; +22c3 : 00000000; +22c4 : 00000000; +22c5 : 00000000; +22c6 : 00000000; +22c7 : 00000000; +22c8 : 00000000; +22c9 : 00000000; +22ca : 00000000; +22cb : 00000000; +22cc : 00000000; +22cd : 00000000; +22ce : 00000000; +22cf : 00000000; +22d0 : 00000000; +22d1 : 00000000; +22d2 : 00000000; +22d3 : 00000000; +22d4 : 00000000; +22d5 : 00000000; +22d6 : 00000000; +22d7 : 00000000; +22d8 : 00000000; +22d9 : 00000000; +22da : 44332211; +22db : 00000000; +22dc : 04000000; +22dd : 138046E2; +22de : 01000000; +22df : 9000CFEA; +22e0 : 01000000; +22e1 : 108157F3; +22e2 : 01000000; +22e3 : 0BE0FFFF; +22e4 : 01000000; +22e5 : 88E0FFFF; +22e6 : 01000000; +22e7 : 08E1FFFF; +22e8 : 01000000; +22e9 : 1B0020E0; +22ea : 01000000; +22eb : 9800C0EB; +22ec : 01000000; +22ed : 6B2130E0; +22ee : 01000000; +22ef : 69610DE0; +22f0 : 01000000; +22f1 : 10A38900; +22f2 : 04000000; +22f3 : 6B0320F0; +22f4 : 01000000; +22f5 : BB0D8001; +22f6 : 04000000; +22f7 : 33E31EF1; +22f8 : 01000000; +22f9 : 31C35FF9; +22fa : 01000000; +22fb : 2B0300E1; +22fc : 01000000; +22fd : 43C300E1; +22fe : 01000000; +22ff : 79411400; +2300 : 04000000; +2301 : CB250060; +2302 : 00000000; +2303 : D3250260; +2304 : 00000000; +2305 : 50EA8101; +2306 : 04000000; +2307 : 81C88001; +2308 : 04000000; +2309 : 802FC100; +230a : 04000000; +230b : 5B090080; +230c : 01000000; +230d : 59092080; +230e : 01000000; +230f : C06AC100; +2310 : 04000000; +2311 : 63097AFD; +2312 : 01000000; +2313 : F88A8101; +2314 : 04000000; +2315 : F48A8101; +2316 : 04000000; +2317 : 00000000; +2318 : 08000000; +2319 : 5344422D; +231a : 00050101; +231b : 00000000; +231c : 00000000; +231d : 00000000; +231e : 0000037F; +231f : 46696C65; +2320 : 44617461; +2321 : 2E202020; +2322 : 00000001; +2323 : 00000000; +2324 : 2E202020; +2325 : 20202020; +2326 : 20202020; +2327 : 20202020; +2328 : 20202000; +2329 : 00000000; +232a : 00000006; +232b : 00000000; +232c : 00000140; +232d : 00000000; +232e : 0000023F; +232f : 46696C65; +2330 : 44617461; +2331 : 77722D69; +2332 : 00000001; +2333 : 00000000; +2334 : 77722D69; +2335 : 6E697420; +2336 : 20202020; +2337 : 20202020; +2338 : 20202001; +2339 : 00000000; +233a : 00000006; +233b : 00000000; +233c : 00000240; +233d : 00000000; +233e : 000002BF; +233f : 46696C65; +2340 : 44617461; +2341 : 63616C69; +2342 : 00000001; +2343 : 00000000; +2344 : 63616C69; +2345 : 62726174; +2346 : 696F6E20; +2347 : 20202020; +2348 : 20202001; +2349 : 00000000; +234a : 00000006; +234b : 00000000; +234c : 000002C0; +234d : 00000000; +234e : 000002C5; +234f : 46696C65; +2350 : 44617461; +2351 : 6D61632D; +2352 : 00000001; +2353 : 00000000; +2354 : 6D61632D; +2355 : 61646472; +2356 : 65737320; +2357 : 20202020; +2358 : 20202001; +2359 : 00000000; +235a : 00000006; +235b : 00000000; +235c : 00000300; +235d : 00000000; +235e : 0000037F; +235f : 46696C65; +2360 : 44617461; +2361 : 7366702D; +2362 : 00000001; +2363 : 00000000; +2364 : 7366702D; +2365 : 64617461; +2366 : 62617365; +2367 : 20202020; +2368 : 20202001; +2369 : FFFFFFFF; +236a : 5B1157A7; +236b : 00000003; +236c : 00000000; +236d : 00000000; +236e : 00000000; +236f : 00000000; +2370 : 00000000; +2371 : 00000000; +2372 : 00000000; +2373 : 00000000; +2374 : 00000000; +2375 : 00000000; +2376 : 00000000; +2377 : 77727063; +2378 : 2D76342E; +2379 : 32000000; +237a : 00000000; +237b : 00000000; +237c : 00000000; +237d : 00000000; +237e : 00000000; +237f : 44656320; +2380 : 31382032; +2381 : 30313700; +2382 : 00000000; +2383 : 30393A33; +2384 : 393A3337; +2385 : 00000000; +2386 : 00000000; +2387 : 47727A65; +2388 : 676F727A; +2389 : 2044616E; +238a : 696C756B; +238b : 00000000; +238c : 00000000; +238d : 00000000; +238e : 00000000; +238f : 00000000; +2390 : 00000000; +2391 : 00000000; +2392 : 00000000; +2393 : 00000000; +2394 : 00000000; +2395 : 00000000; +2396 : 00000000; +2397 : 00000000; +2398 : 00000000; +2399 : 00000000; +239a : 00000000; +239b : 00000000; +239c : 00000000; +239d : 00000000; +239e : 00000000; +239f : 00000000; +23a0 : 00000000; +23a1 : 00000000; +23a2 : 00000000; +23a3 : 00000000; +23a4 : 00000000; +23a5 : 00000000; +23a6 : 00000000; +23a7 : 00000000; +23a8 : 00000000; +23a9 : 00000000; +23aa : 00000000; +23ab : 00000000; +23ac : 00000000; +23ad : 00000000; +23ae : 00000000; +23af : 00000000; +23b0 : 00000000; +23b1 : 00000000; +23b2 : 00000000; +23b3 : 00000000; +23b4 : 00000000; +23b5 : 00000000; +23b6 : 00000000; +23b7 : 00000000; +23b8 : 00000000; +23b9 : 00000000; +23ba : 00000000; +23bb : 00000000; +23bc : 00000000; +23bd : 00000000; +23be : 00000000; +23bf : 00000000; +23c0 : 00000000; +23c1 : 00000000; +23c2 : 00000000; +23c3 : 00000000; +23c4 : 00000000; +23c5 : 00000000; +23c6 : 00000000; +23c7 : 00000000; +23c8 : 00000000; +23c9 : 00000000; +23ca : 00000000; +23cb : 00000000; +23cc : 00000000; +23cd : 00000000; +23ce : 00000000; +23cf : 00000000; +23d0 : 00000000; +23d1 : 00000000; +23d2 : 00000000; +23d3 : 00000000; +23d4 : 00000000; +23d5 : 00000000; +23d6 : 00000000; +23d7 : 00000000; +23d8 : 00000000; +23d9 : 00000000; +23da : 00000000; +23db : 00000000; +23dc : 00000000; +23dd : 00000000; +23de : 00000000; +23df : 00000000; +23e0 : 00000000; +23e1 : 00000000; +23e2 : 00000000; +23e3 : 00000000; +23e4 : 00000000; +23e5 : 00000000; +23e6 : 00000000; +23e7 : 00000000; +23e8 : 00000000; +23e9 : 00000000; +23ea : 00000000; +23eb : 00000000; +23ec : 00000000; +23ed : 00000000; +23ee : 00000000; +23ef : 00000000; +23f0 : 00000000; +23f1 : 00000000; +23f2 : 00000000; +23f3 : 00000000; +23f4 : 00000000; +23f5 : 00000000; +23f6 : 00000000; +23f7 : 00000000; +23f8 : 00000000; +23f9 : 00000000; +23fa : 00000000; +23fb : 00000000; +23fc : 00000000; +23fd : 00000000; +23fe : 00000000; +23ff : 00000000; +2400 : 00000000; +2401 : 00000000; +2402 : 00000000; +2403 : 00000000; +2404 : 00000000; +2405 : 00000000; +2406 : 00000000; +2407 : 00000000; +2408 : 00000000; +2409 : 00000000; +240a : 00000000; +240b : 00000000; +240c : 00000000; +240d : 00000000; +240e : 00000000; +240f : 00000000; +2410 : 00000000; +2411 : 00000000; +2412 : 00000000; +2413 : 00000000; +2414 : 00000000; +2415 : 00000000; +2416 : 00000000; +2417 : 00000000; +2418 : 00000000; +2419 : 00000000; +241a : 00000000; +241b : 00000000; +241c : 00000000; +241d : 00000000; +241e : 00000000; +241f : 00000000; +2420 : 00000000; +2421 : 00000000; +2422 : 00000000; +2423 : 00000000; +2424 : 00000000; +2425 : 00000000; +2426 : 00000000; +2427 : 00000000; +2428 : 00000000; +2429 : 00000000; +242a : 00000000; +242b : 00000000; +242c : 00000000; +242d : 00000000; +242e : 00000000; +242f : 00000000; +2430 : 00000000; +2431 : 00000000; +2432 : 00000000; +2433 : 00000000; +2434 : 00000000; +2435 : 00000000; +2436 : 00000000; +2437 : 00000000; +2438 : 00000000; +2439 : 00000000; +243a : 00000000; +243b : 00000000; +243c : 00000000; +243d : 00000000; +243e : 00000000; +243f : 00000000; +2440 : 00000000; +2441 : 00000000; +2442 : 00000000; +2443 : 00000000; +2444 : 00000000; +2445 : 00000000; +2446 : 00000000; +2447 : 00000000; +2448 : 00000000; +2449 : 00000000; +244a : 00000000; +244b : 00000000; +244c : 00000000; +244d : 00000000; +244e : 00000000; +244f : 00000000; +2450 : 00000000; +2451 : 00000000; +2452 : 00000000; +2453 : 00000000; +2454 : 00000000; +2455 : 00000000; +2456 : 00000000; +2457 : 00000000; +2458 : 00000000; +2459 : 00000000; +245a : 00000000; +245b : 00000000; +245c : 00000000; +245d : 00000000; +245e : 00000000; +245f : 00000000; +2460 : 00000000; +2461 : 00000000; +2462 : 00000000; +2463 : 00000000; +2464 : 00000000; +2465 : 00000000; +2466 : 00000000; +2467 : 00000000; +2468 : 00000000; +2469 : 00000000; +246a : 00000000; +246b : 00000000; +246c : 00000000; +246d : 00000000; +246e : 00000000; +246f : 00000000; +2470 : 00000000; +2471 : 00000000; +2472 : 00000000; +2473 : 00000000; +2474 : 00000000; +2475 : 00000000; +2476 : 00000000; +2477 : 00000000; +2478 : 00000000; +2479 : 00000000; +247a : 00000000; +247b : 00000000; +247c : 00000000; +247d : 00000000; +247e : 00000000; +247f : 00000000; +2480 : 00000000; +2481 : 00000000; +2482 : 00000000; +2483 : 00000000; +2484 : 00000000; +2485 : 00000000; +2486 : 00000000; +2487 : 00000000; +2488 : 00000000; +2489 : 00000000; +248a : 00000000; +248b : 00000000; +248c : 00000000; +248d : 00000000; +248e : 00000000; +248f : 00000000; +2490 : 00000000; +2491 : 00000000; +2492 : 00000000; +2493 : 00000000; +2494 : 00000000; +2495 : 00000000; +2496 : 00000000; +2497 : 00000000; +2498 : 00000000; +2499 : 00000000; +249a : 00000000; +249b : 00000000; +249c : 00000000; +249d : 00000000; +249e : 00000000; +249f : 00000000; +24a0 : 00000000; +24a1 : 00000000; +24a2 : 00000000; +24a3 : 00000000; +24a4 : 00000000; +24a5 : 00000000; +24a6 : 00000000; +24a7 : 00000000; +24a8 : 00000000; +24a9 : 00000000; +24aa : 00000000; +24ab : 00000000; +24ac : 00000000; +24ad : 00000000; +24ae : 00000000; +24af : 00000000; +24b0 : 00000000; +24b1 : 00000000; +24b2 : 00000000; +24b3 : 00000000; +24b4 : 00000000; +24b5 : 00000000; +24b6 : 00000000; +24b7 : 00000000; +24b8 : 00000000; +24b9 : 00000000; +24ba : 00000000; +24bb : 00000000; +24bc : 00000000; +24bd : 00000000; +24be : 00000000; +24bf : 00000000; +24c0 : 00000000; +24c1 : 00000000; +24c2 : 00000000; +24c3 : 00000000; +24c4 : 00000000; +24c5 : 00000000; +24c6 : 00000000; +24c7 : 00000000; +24c8 : 00000000; +24c9 : 00000000; +24ca : 00000000; +24cb : 00000000; +24cc : 00000000; +24cd : 00000000; +24ce : 00000000; +24cf : 00000000; +24d0 : 00000000; +24d1 : 00000000; +24d2 : 00000000; +24d3 : 00000000; +24d4 : 00000000; +24d5 : 00000000; +24d6 : 00000000; +24d7 : 00000000; +24d8 : 00000000; +24d9 : 00000000; +24da : 00000000; +24db : 00000000; +24dc : 00000000; +24dd : 00000000; +24de : 00000000; +24df : 00000000; +24e0 : 00000000; +24e1 : 00000000; +24e2 : 00000000; +24e3 : 00000000; +24e4 : 00000000; +24e5 : 00000000; +24e6 : 00000000; +24e7 : 00000000; +24e8 : 00000000; +24e9 : 00000000; +24ea : 00000000; +24eb : 00000000; +24ec : 00000000; +24ed : 00000000; +24ee : 00000000; +24ef : 00000000; +24f0 : 00000000; +24f1 : 00000000; +24f2 : 00000000; +24f3 : 00000000; +24f4 : 00000000; +24f5 : 00000000; +24f6 : 00000000; +24f7 : 00000000; +24f8 : 00000000; +24f9 : 00000000; +24fa : 00000000; +24fb : 00000000; +24fc : 00000000; +24fd : 00000000; +24fe : 00000000; +24ff : 00000000; +2500 : 00000000; +2501 : 00000000; +2502 : 00000000; +2503 : 00000000; +2504 : 00000000; +2505 : 00000000; +2506 : 00000000; +2507 : 00000000; +2508 : 00000000; +2509 : 00000000; +250a : 00000000; +250b : 00000000; +250c : 00000000; +250d : 00000000; +250e : 00000000; +250f : 00000000; +2510 : 00000000; +2511 : 00000000; +2512 : 00000000; +2513 : 00000000; +2514 : 00000000; +2515 : 00000000; +2516 : 00000000; +2517 : 00000000; +2518 : 00000000; +2519 : 00000000; +251a : 00000000; +251b : 00000000; +251c : 00000000; +251d : 00000000; +251e : 00000000; +251f : 00000000; +2520 : 00000000; +2521 : 00000000; +2522 : 00000000; +2523 : 00000000; +2524 : 00000000; +2525 : 00000000; +2526 : 00000000; +2527 : 00000000; +2528 : 00000000; +2529 : 00000000; +252a : 00000000; +252b : 00000000; +252c : 00000000; +252d : 00000000; +252e : 00000000; +252f : 00000000; +2530 : 00000000; +2531 : 00000000; +2532 : 00000000; +2533 : 00000000; +2534 : 00000000; +2535 : 00000000; +2536 : 00000000; +2537 : 00000000; +2538 : 00000000; +2539 : 00000000; +253a : 00000000; +253b : 00000000; +253c : 00000000; +253d : 00000000; +253e : 00000000; +253f : 00000000; +2540 : 00000000; +2541 : 00000000; +2542 : 00000000; +2543 : 00000000; +2544 : 00000000; +2545 : 00000000; +2546 : 00000000; +2547 : 00000000; +2548 : 00000000; +2549 : 00000000; +254a : 00000000; +254b : 00000000; +254c : 00000000; +254d : 00000000; +254e : 00000000; +254f : 00000000; +2550 : 00000000; +2551 : 00000000; +2552 : 00000000; +2553 : 00000000; +2554 : 00000000; +2555 : 00000000; +2556 : 00000000; +2557 : 00000000; +2558 : 00000000; +2559 : 00000000; +255a : 00000000; +255b : 00000000; +255c : 00000000; +255d : 00000000; +255e : 00000000; +255f : 00000000; +2560 : 00000000; +2561 : 00000000; +2562 : 00000000; +2563 : 00000000; +2564 : 00000000; +2565 : 00000000; +2566 : 00000000; +2567 : 00000000; +2568 : 00000000; +2569 : 00000000; +256a : 00000000; +256b : 00000000; +256c : 00000000; +256d : 00000000; +256e : 00000000; +256f : 00000000; +2570 : 00000000; +2571 : 00000000; +2572 : 00000000; +2573 : 00000000; +2574 : 00000000; +2575 : 00000000; +2576 : 00000000; +2577 : 00000000; +2578 : 00000000; +2579 : 00000000; +257a : 00000000; +257b : 00000000; +257c : 00000000; +257d : 00000000; +257e : 00000000; +257f : 00000000; +2580 : 00000000; +2581 : 00000000; +2582 : 00000000; +2583 : 00000000; +2584 : 00000000; +2585 : 00000000; +2586 : 00000000; +2587 : 00000000; +2588 : 00000000; +2589 : 00000000; +258a : 00000000; +258b : 00000000; +258c : 00000000; +258d : 00000000; +258e : 00000000; +258f : 00000000; +2590 : 00000000; +2591 : 00000000; +2592 : 00000000; +2593 : 00000000; +2594 : 00000000; +2595 : 00000000; +2596 : 00000000; +2597 : 00000000; +2598 : 00000000; +2599 : 00000000; +259a : 00000000; +259b : 00000000; +259c : 00000000; +259d : 00000000; +259e : 00000000; +259f : 00000000; +25a0 : 00000000; +25a1 : 00000000; +25a2 : 00000000; +25a3 : 00000000; +25a4 : 00000000; +25a5 : 00000000; +25a6 : 00000000; +25a7 : 00000000; +25a8 : 00000000; +25a9 : 00000000; +25aa : 00000000; +25ab : 00000000; +25ac : 00000000; +25ad : 00000000; +25ae : 00000000; +25af : 00000000; +25b0 : 00000000; +25b1 : 00000000; +25b2 : 00000000; +25b3 : 00000000; +25b4 : 00000000; +25b5 : 00000000; +25b6 : 00000000; +25b7 : 00000000; +25b8 : 00000000; +25b9 : 00000000; +25ba : 00000000; +25bb : 00000000; +25bc : 00000000; +25bd : 00000000; +25be : 00000000; +25bf : 00000000; +25c0 : 00000000; +25c1 : 00000000; +25c2 : 00000000; +25c3 : 00000000; +25c4 : 00000000; +25c5 : 00000000; +25c6 : 00000000; +25c7 : 00000000; +25c8 : 00000000; +25c9 : 00000000; +25ca : 00000000; +25cb : 00000000; +25cc : 00000000; +25cd : 00000000; +25ce : 00000000; +25cf : 00000000; +25d0 : 00000000; +25d1 : 00000000; +25d2 : 00000000; +25d3 : 00000000; +25d4 : 00000000; +25d5 : 00000000; +25d6 : 00000000; +25d7 : 00000000; +25d8 : 00000000; +25d9 : 00000000; +25da : 00000000; +25db : 00000000; +25dc : 00000000; +25dd : 00000000; +25de : 00000000; +25df : 00000000; +25e0 : 00000000; +25e1 : 00000000; +25e2 : 00000000; +25e3 : 00000000; +25e4 : 00000000; +25e5 : 00000000; +25e6 : 00000000; +25e7 : 00000000; +25e8 : 00000000; +25e9 : 00000000; +25ea : 00000000; +25eb : 00000000; +25ec : 00000000; +25ed : 00000000; +25ee : 00000000; +25ef : 00000000; +25f0 : 00000000; +25f1 : 00000000; +25f2 : 00000000; +25f3 : 00000000; +25f4 : 00000000; +25f5 : 00000000; +25f6 : 00000000; +25f7 : 00000000; +25f8 : 00000000; +25f9 : 00000000; +25fa : 00000000; +25fb : 00000000; +25fc : 00000000; +25fd : 00000000; +25fe : 00000000; +25ff : 00000000; +2600 : 00000000; +2601 : 00000000; +2602 : 00000000; +2603 : 00000000; +2604 : 00000000; +2605 : 00000000; +2606 : 00000000; +2607 : 00000000; +2608 : 00000000; +2609 : 00000000; +260a : 00000000; +260b : 00000000; +260c : 00000000; +260d : 00000000; +260e : 00000000; +260f : 00000000; +2610 : 00000000; +2611 : 00000000; +2612 : 00000000; +2613 : 00000000; +2614 : 00000000; +2615 : 00000000; +2616 : 00000000; +2617 : 00000000; +2618 : 00000000; +2619 : 00000000; +261a : 00000000; +261b : 00000000; +261c : 00000000; +261d : 00000000; +261e : 00000000; +261f : 00000000; +2620 : 00000000; +2621 : 00000000; +2622 : 00000000; +2623 : 00000000; +2624 : 00000000; +2625 : 00000000; +2626 : 00000000; +2627 : 00000000; +2628 : 00000000; +2629 : 00000000; +262a : 00000000; +262b : 00000000; +262c : 00000000; +262d : 00000000; +262e : 00000000; +262f : 00000000; +2630 : 00000000; +2631 : 00000000; +2632 : 00000000; +2633 : 00000000; +2634 : 00000000; +2635 : 00000000; +2636 : 00000000; +2637 : 00000000; +2638 : 00000000; +2639 : 00000000; +263a : 00000000; +263b : 00000000; +263c : 00000000; +263d : 00000000; +263e : 00000000; +263f : 00000000; +2640 : 00000000; +2641 : 00000000; +2642 : 00000000; +2643 : 00000000; +2644 : 00000000; +2645 : 00000000; +2646 : 00000000; +2647 : 00000000; +2648 : 00000000; +2649 : 00000000; +264a : 00000000; +264b : 00000000; +264c : 00000000; +264d : 00000000; +264e : 00000000; +264f : 00000000; +2650 : 00000000; +2651 : 00000000; +2652 : 00000000; +2653 : 00000000; +2654 : 00000000; +2655 : 00000000; +2656 : 00000000; +2657 : 00000000; +2658 : 00000000; +2659 : 00000000; +265a : 00000000; +265b : 00000000; +265c : 00000000; +265d : 00000000; +265e : 00000000; +265f : 00000000; +2660 : 00000000; +2661 : 00000000; +2662 : 00000000; +2663 : 00000000; +2664 : 00000000; +2665 : 00000000; +2666 : 00000000; +2667 : 00000000; +2668 : 00000000; +2669 : 00000000; +266a : 00000000; +266b : 00000000; +266c : 00000000; +266d : 00000000; +266e : 00000000; +266f : 00000000; +2670 : 00000000; +2671 : 00000000; +2672 : 00000000; +2673 : 00000000; +2674 : 00000000; +2675 : 00000000; +2676 : 00000000; +2677 : 00000000; +2678 : 00000000; +2679 : 00000000; +267a : 00000000; +267b : 00000000; +267c : 00000000; +267d : 00000000; +267e : 00000000; +267f : 00000000; +2680 : 00000000; +2681 : 00000000; +2682 : 00000000; +2683 : 00000000; +2684 : 00000000; +2685 : 00000000; +2686 : 00000000; +2687 : 00000000; +2688 : 00000000; +2689 : 00000000; +268a : 00000000; +268b : 00000000; +268c : 00000000; +268d : 00000000; +268e : 00000000; +268f : 00000000; +2690 : 00000000; +2691 : 00000000; +2692 : 00000000; +2693 : 00000000; +2694 : 00000000; +2695 : 00000000; +2696 : 00000000; +2697 : 00000000; +2698 : 00000000; +2699 : 00000000; +269a : 00000000; +269b : 00000000; +269c : 00000000; +269d : 00000000; +269e : 00000000; +269f : 00000000; +26a0 : 00000000; +26a1 : 00000000; +26a2 : 00000000; +26a3 : 00000000; +26a4 : 00000000; +26a5 : 00000000; +26a6 : 00000000; +26a7 : 00000000; +26a8 : 00000000; +26a9 : 00000000; +26aa : 00000000; +26ab : 00000000; +26ac : 00000000; +26ad : 00000000; +26ae : 00000000; +26af : 00000000; +26b0 : 00000000; +26b1 : 00000000; +26b2 : 00000000; +26b3 : 00000000; +26b4 : 00000000; +26b5 : 00000000; +26b6 : 00000000; +26b7 : 00000000; +26b8 : 00000000; +26b9 : 00000000; +26ba : 00000000; +26bb : 00000000; +26bc : 00000000; +26bd : 00000000; +26be : 00000000; +26bf : 00000000; +26c0 : 00000000; +26c1 : 00000000; +26c2 : 00000000; +26c3 : 00000000; +26c4 : 00000000; +26c5 : 00000000; +26c6 : 00000000; +26c7 : 00000000; +26c8 : 00000000; +26c9 : 00000000; +26ca : 00000000; +26cb : 00000000; +26cc : 00000000; +26cd : 00000000; +26ce : 00000000; +26cf : 00000000; +26d0 : 00000000; +26d1 : 00000000; +26d2 : 00000000; +26d3 : 00000000; +26d4 : 00000000; +26d5 : 00000000; +26d6 : 00000000; +26d7 : 00000000; +26d8 : 00000000; +26d9 : 00000000; +26da : 00000000; +26db : 00000000; +26dc : 00000000; +26dd : 00000000; +26de : 00000000; +26df : 00000000; +26e0 : 00000000; +26e1 : 00000000; +26e2 : 00000000; +26e3 : 00000000; +26e4 : 00000000; +26e5 : 00000000; +26e6 : 00000000; +26e7 : 00000000; +26e8 : 00000000; +26e9 : 00000000; +26ea : 00000000; +26eb : 00000000; +26ec : 00000000; +26ed : 00000000; +26ee : 00000000; +26ef : 00000000; +26f0 : 00000000; +26f1 : 00000000; +26f2 : 00000000; +26f3 : 00000000; +26f4 : 00000000; +26f5 : 00000000; +26f6 : 00000000; +26f7 : 00000000; +26f8 : 00000000; +26f9 : 00000000; +26fa : 00000000; +26fb : 00000000; +26fc : 00000000; +26fd : 00000000; +26fe : 00000000; +26ff : 00000000; +2700 : 00000000; +2701 : 00000000; +2702 : 00000000; +2703 : 00000000; +2704 : 00000000; +2705 : 00000000; +2706 : 00000000; +2707 : 00000000; +2708 : 00000000; +2709 : 00000000; +270a : 00000000; +270b : 00000000; +270c : 00000000; +270d : 00000000; +270e : 00000000; +270f : 00000000; +2710 : 00000000; +2711 : 00000000; +2712 : 00000000; +2713 : 00000000; +2714 : 00000000; +2715 : 00000000; +2716 : 00000000; +2717 : 00000000; +2718 : 00000000; +2719 : 00000000; +271a : 00000000; +271b : 00000000; +271c : 00000000; +271d : 00000000; +271e : 00000000; +271f : 00000000; +2720 : 00000000; +2721 : 00000000; +2722 : 00000000; +2723 : 00000000; +2724 : 00000000; +2725 : 00000000; +2726 : 00000000; +2727 : 00000000; +2728 : 00000000; +2729 : 00000000; +272a : 00000000; +272b : 00000000; +272c : 00000000; +272d : 00000000; +272e : 00000000; +272f : 00000000; +2730 : 00000000; +2731 : 00000000; +2732 : 00000000; +2733 : 00000000; +2734 : 00000000; +2735 : 00000000; +2736 : 00000000; +2737 : 00000000; +2738 : 00000000; +2739 : 00000000; +273a : 00000000; +273b : 00000000; +273c : 00000000; +273d : 00000000; +273e : 00000000; +273f : 00000000; +2740 : 00000000; +2741 : 00000000; +2742 : 00000000; +2743 : 00000000; +2744 : 00000000; +2745 : 00000000; +2746 : 00000000; +2747 : 00000000; +2748 : 00000000; +2749 : 00000000; +274a : 00000000; +274b : 00000000; +274c : 00000000; +274d : 00000000; +274e : 00000000; +274f : 00000000; +2750 : 00000000; +2751 : 00000000; +2752 : 00000000; +2753 : 00000000; +2754 : 00000000; +2755 : 00000000; +2756 : 00000000; +2757 : 00000000; +2758 : 00000000; +2759 : 00000000; +275a : 00000000; +275b : 00000000; +275c : 00000000; +275d : 00000000; +275e : 00000000; +275f : 00000000; +2760 : 00000000; +2761 : 00000000; +2762 : 00000000; +2763 : 00000000; +2764 : 00000000; +2765 : 00000000; +2766 : 00000000; +2767 : 00000000; +2768 : 00000000; +2769 : 00000000; +276a : 00000000; +276b : 00000000; +276c : 00000000; +276d : 00000000; +276e : 00000000; +276f : 00000000; +2770 : 00000000; +2771 : 00000000; +2772 : 00000000; +2773 : 00000000; +2774 : 00000000; +2775 : 00000000; +2776 : 00000000; +2777 : 00000000; +2778 : 00000000; +2779 : 00000000; +277a : 00000000; +277b : 00000000; +277c : 00000000; +277d : 00000000; +277e : 00000000; +277f : 00000000; +2780 : 00000000; +2781 : 00000000; +2782 : 00000000; +2783 : 00000000; +2784 : 00000000; +2785 : 00000000; +2786 : 00000000; +2787 : 00000000; +2788 : 00000000; +2789 : 00000000; +278a : 00000000; +278b : 00000000; +278c : 00000000; +278d : 00000000; +278e : 00000000; +278f : 00000000; +2790 : 00000000; +2791 : 00000000; +2792 : 00000000; +2793 : 00000000; +2794 : 00000000; +2795 : 00000000; +2796 : 00000000; +2797 : 00000000; +2798 : 00000000; +2799 : 00000000; +279a : 00000000; +279b : 00000000; +279c : 00000000; +279d : 00000000; +279e : 00000000; +279f : 00000000; +27a0 : 00000000; +27a1 : 00000000; +27a2 : 00000000; +27a3 : 00000000; +27a4 : 00000000; +27a5 : 00000000; +27a6 : 00000000; +27a7 : 00000000; +27a8 : 00000000; +27a9 : 00000000; +27aa : 00000000; +27ab : 00000000; +27ac : 00000000; +27ad : 00000000; +27ae : 00000000; +27af : 00000000; +27b0 : 00000000; +27b1 : 00000000; +27b2 : 00000000; +27b3 : 00000000; +27b4 : 00000000; +27b5 : 00000000; +27b6 : 00000000; +27b7 : 00000000; +27b8 : 00000000; +27b9 : 00000000; +27ba : 00000000; +27bb : 00000000; +27bc : 00000000; +27bd : 00000000; +27be : 00000000; +27bf : 00000000; +27c0 : 00000000; +27c1 : 00000000; +27c2 : 00000000; +27c3 : 00000000; +27c4 : 00000000; +27c5 : 00000000; +27c6 : 00000000; +27c7 : 00000000; +27c8 : 00000000; +27c9 : 00000000; +27ca : 00000000; +27cb : 00000000; +27cc : 00000000; +27cd : 00000000; +27ce : 00000000; +27cf : 00000000; +27d0 : 00000000; +27d1 : 00000000; +27d2 : 00000000; +27d3 : 00000000; +27d4 : 00000000; +27d5 : 00000000; +27d6 : 00000000; +27d7 : 00000000; +27d8 : 00000000; +27d9 : 00000000; +27da : 00000000; +27db : 00000000; +27dc : 00000000; +27dd : 00000000; +27de : 00000000; +27df : 00000000; +27e0 : 00000000; +27e1 : 00000000; +27e2 : 00000000; +27e3 : 00000000; +27e4 : 00000000; +27e5 : 00000000; +27e6 : 00000000; +27e7 : 00000000; +27e8 : 00000000; +27e9 : 00000000; +27ea : 00000000; +27eb : 00000000; +27ec : 00000000; +27ed : 00000000; +27ee : 00000000; +27ef : 00000000; +27f0 : 00000000; +27f1 : 00000000; +27f2 : 00000000; +27f3 : 00000000; +27f4 : 00000000; +27f5 : 00000000; +27f6 : 00000000; +27f7 : 00000000; +27f8 : 00000000; +27f9 : 00000000; +27fa : 00000000; +27fb : 00000000; +27fc : 00000000; +27fd : 00000000; +27fe : 00000000; +27ff : 00000000; +2800 : 00000000; +2801 : 00000000; +2802 : 00000000; +2803 : 00000000; +2804 : 00000000; +2805 : 00000000; +2806 : 00000000; +2807 : 00000000; +2808 : 00000000; +2809 : 00000000; +280a : 00000000; +280b : 00000000; +280c : 00000000; +280d : 00000000; +280e : 00000000; +280f : 00000000; +2810 : 00000000; +2811 : 00000000; +2812 : 00000000; +2813 : 00000000; +2814 : 00000000; +2815 : 00000000; +2816 : 00000000; +2817 : 00000000; +2818 : 00000000; +2819 : 00000000; +281a : 00000000; +281b : 00000000; +281c : 00000000; +281d : 00000000; +281e : 00000000; +281f : 00000000; +2820 : 00000000; +2821 : 00000000; +2822 : 00000000; +2823 : 00000000; +2824 : 00000000; +2825 : 00000000; +2826 : 00000000; +2827 : 00000000; +2828 : 00000000; +2829 : 00000000; +282a : 00000000; +282b : 00000000; +282c : 00000000; +282d : 00000000; +282e : 00000000; +282f : 00000000; +2830 : 00000000; +2831 : 00000000; +2832 : 00000000; +2833 : 00000000; +2834 : 00000000; +2835 : 00000000; +2836 : 00000000; +2837 : 00000000; +2838 : 00000000; +2839 : 00000000; +283a : 00000000; +283b : 00000000; +283c : 00000000; +283d : 00000000; +283e : 00000000; +283f : 00000000; +2840 : 00000000; +2841 : 00000000; +2842 : 00000000; +2843 : 00000000; +2844 : 00000000; +2845 : 00000000; +2846 : 00000000; +2847 : 00000000; +2848 : 00000000; +2849 : 00000000; +284a : 00000000; +284b : 00000000; +284c : 00000000; +284d : 00000000; +284e : 00000000; +284f : 00000000; +2850 : 00000000; +2851 : 00000000; +2852 : 00000000; +2853 : 00000000; +2854 : 00000000; +2855 : 00000000; +2856 : 00000000; +2857 : 00000000; +2858 : 00000000; +2859 : 00000000; +285a : 00000000; +285b : 00000000; +285c : 00000000; +285d : 00000000; +285e : 00000000; +285f : 00000000; +2860 : 00000000; +2861 : 00000000; +2862 : 00000000; +2863 : 00000000; +2864 : 00000000; +2865 : 00000000; +2866 : 00000000; +2867 : 00000000; +2868 : 00000000; +2869 : 00000000; +286a : 00000000; +286b : 00000000; +286c : 00000000; +286d : 00000000; +286e : 00000000; +286f : 00000000; +2870 : 00000000; +2871 : 00000000; +2872 : 00000000; +2873 : 00000000; +2874 : 00000000; +2875 : 00000000; +2876 : 00000000; +2877 : 00000000; +2878 : 00000000; +2879 : 00000000; +287a : 00000000; +287b : 00000000; +287c : 00000000; +287d : 00000000; +287e : 00000000; +287f : 00000000; +2880 : 00000000; +2881 : 00000000; +2882 : 00000000; +2883 : 00000000; +2884 : 00000000; +2885 : 00000000; +2886 : 00000000; +2887 : 00000000; +2888 : 00000000; +2889 : 00000000; +288a : 00000000; +288b : 00000000; +288c : 00000000; +288d : 00000000; +288e : 00000000; +288f : 00000000; +2890 : 00000000; +2891 : 00000000; +2892 : 00000000; +2893 : 00000000; +2894 : 00000000; +2895 : 00000000; +2896 : 00000000; +2897 : 00000000; +2898 : 00000000; +2899 : 00000000; +289a : 00000000; +289b : 00000000; +289c : 00000000; +289d : 00000000; +289e : 00000000; +289f : 00000000; +28a0 : 00000000; +28a1 : 00000000; +28a2 : 00000000; +28a3 : 00000000; +28a4 : 00000000; +28a5 : 00000000; +28a6 : 00000000; +28a7 : 00000000; +28a8 : 00000000; +28a9 : 00000000; +28aa : 00000000; +28ab : 00000000; +28ac : 00000000; +28ad : 00000000; +28ae : 00000000; +28af : 00000000; +28b0 : 00000000; +28b1 : 00000000; +28b2 : 00000000; +28b3 : 00000000; +28b4 : 00000000; +28b5 : 00000000; +28b6 : 00000000; +28b7 : 00000000; +28b8 : 00000000; +28b9 : 00000000; +28ba : 00000000; +28bb : 00000000; +28bc : 00000000; +28bd : 00000000; +28be : 00000000; +28bf : 00000000; +28c0 : 00000000; +28c1 : 00000000; +28c2 : 00000000; +28c3 : 00000000; +28c4 : 00000000; +28c5 : 00000000; +28c6 : 00000000; +28c7 : 00000000; +28c8 : 00000000; +28c9 : 00000000; +28ca : 00000000; +28cb : 00000000; +28cc : 00000000; +28cd : 00000000; +28ce : 00000000; +28cf : 00000000; +28d0 : 00000000; +28d1 : 00000000; +28d2 : 00000000; +28d3 : 00000000; +28d4 : 00000000; +28d5 : 00000000; +28d6 : 00000000; +28d7 : 00000000; +28d8 : 00000000; +28d9 : 00000000; +28da : 00000000; +28db : 00000000; +28dc : 00000000; +28dd : 00000000; +28de : 00000000; +28df : 00000000; +28e0 : 00000000; +28e1 : 00000000; +28e2 : 00000000; +28e3 : 00000000; +28e4 : 00000000; +28e5 : 00000000; +28e6 : 00000000; +28e7 : 00000000; +28e8 : 00000000; +28e9 : 00000000; +28ea : 00000000; +28eb : 00000000; +28ec : 00000000; +28ed : 00000000; +28ee : 00000000; +28ef : 00000000; +28f0 : 00000000; +28f1 : 00000000; +28f2 : 00000000; +28f3 : 00000000; +28f4 : 00000000; +28f5 : 00000000; +28f6 : 00000000; +28f7 : 00000000; +28f8 : 00000000; +28f9 : 00000000; +28fa : 00000000; +28fb : 00000000; +28fc : 00000000; +28fd : 00000000; +28fe : 00000000; +28ff : 00000000; +2900 : 00000000; +2901 : 00000000; +2902 : 00000000; +2903 : 00000000; +2904 : 00000000; +2905 : 00000000; +2906 : 00000000; +2907 : 00000000; +2908 : 00000000; +2909 : 00000000; +290a : 00000000; +290b : 00000000; +290c : 00000000; +290d : 00000000; +290e : 00000000; +290f : 00000000; +2910 : 00000000; +2911 : 00000000; +2912 : 00000000; +2913 : 00000000; +2914 : 00000000; +2915 : 00000000; +2916 : 00000000; +2917 : 00000000; +2918 : 00000000; +2919 : 00000000; +291a : 00000000; +291b : 00000000; +291c : 00000000; +291d : 00000000; +291e : 00000000; +291f : 00000000; +2920 : 00000000; +2921 : 00000000; +2922 : 00000000; +2923 : 00000000; +2924 : 00000000; +2925 : 00000000; +2926 : 00000000; +2927 : 00000000; +2928 : 00000000; +2929 : 00000000; +292a : 00000000; +292b : 00000000; +292c : 00000000; +292d : 00000000; +292e : 00000000; +292f : 00000000; +2930 : 00000000; +2931 : 00000000; +2932 : 00000000; +2933 : 00000000; +2934 : 00000000; +2935 : 00000000; +2936 : 00000000; +2937 : 00000000; +2938 : 00000000; +2939 : 00000000; +293a : 00000000; +293b : 00000000; +293c : 00000000; +293d : 00000000; +293e : 00000000; +293f : 00000000; +2940 : 00000000; +2941 : 00000000; +2942 : 00000000; +2943 : 00000000; +2944 : 00000000; +2945 : 00000000; +2946 : 00000000; +2947 : 00000000; +2948 : 00000000; +2949 : 00000000; +294a : 00000000; +294b : 00000000; +294c : 00000000; +294d : 00000000; +294e : 00000000; +294f : 00000000; +2950 : 00000000; +2951 : 00000000; +2952 : 00000000; +2953 : 00000000; +2954 : 00000000; +2955 : 00000000; +2956 : 00000000; +2957 : 00000000; +2958 : 00000000; +2959 : 00000000; +295a : 00000000; +295b : 00000000; +295c : 00000000; +295d : 00000000; +295e : 00000000; +295f : 00000000; +2960 : 00000000; +2961 : 00000000; +2962 : 00000000; +2963 : 00000000; +2964 : 00000000; +2965 : 00000000; +2966 : 00000000; +2967 : 00000000; +2968 : 00000000; +2969 : 00000000; +296a : 00000000; +296b : 00000000; +296c : 00000000; +296d : 00000000; +296e : 00000000; +296f : 00000000; +2970 : 00000000; +2971 : 00000000; +2972 : 00000000; +2973 : 00000000; +2974 : 00000000; +2975 : 00000000; +2976 : 00000000; +2977 : 00000000; +2978 : 00000000; +2979 : 00000000; +297a : 00000000; +297b : 00000000; +297c : 00000000; +297d : 00000000; +297e : 00000000; +297f : 00000000; +2980 : 00000000; +2981 : 00000000; +2982 : 00000000; +2983 : 00000000; +2984 : 00000000; +2985 : 00000000; +2986 : 00000000; +2987 : 00000000; +2988 : 00000000; +2989 : 00000000; +298a : 00000000; +298b : 00000000; +298c : 00000000; +298d : 00000000; +298e : 00000000; +298f : 00000000; +2990 : 00000000; +2991 : 00000000; +2992 : 00000000; +2993 : 00000000; +2994 : 00000000; +2995 : 00000000; +2996 : 00000000; +2997 : 00000000; +2998 : 00000000; +2999 : 00000000; +299a : 00000000; +299b : 00000000; +299c : 00000000; +299d : 00000000; +299e : 00000000; +299f : 00000000; +29a0 : 00000000; +29a1 : 00000000; +29a2 : 00000000; +29a3 : 00000000; +29a4 : 00000000; +29a5 : 00000000; +29a6 : 00000000; +29a7 : 00000000; +29a8 : 00000000; +29a9 : 00000000; +29aa : 00000000; +29ab : 00000000; +29ac : 00000000; +29ad : 00000000; +29ae : 00000000; +29af : 00000000; +29b0 : 00000000; +29b1 : 00000000; +29b2 : 00000000; +29b3 : 00000000; +29b4 : 00000000; +29b5 : 00000000; +29b6 : 00000000; +29b7 : 00000000; +29b8 : 00000000; +29b9 : 00000000; +29ba : 00000000; +29bb : 00000000; +29bc : 00000000; +29bd : 00000000; +29be : 00000000; +29bf : 00000000; +29c0 : 00000000; +29c1 : 00000000; +29c2 : 00000000; +29c3 : 00000000; +29c4 : 00000000; +29c5 : 00000000; +29c6 : 00000000; +29c7 : 00000000; +29c8 : 00000000; +29c9 : 00000000; +29ca : 00000000; +29cb : 00000000; +29cc : 00000000; +29cd : 00000000; +29ce : 00000000; +29cf : 00000000; +29d0 : 00000000; +29d1 : 00000000; +29d2 : 00000000; +29d3 : 00000000; +29d4 : 00000000; +29d5 : 00000000; +29d6 : 00000000; +29d7 : 00000000; +29d8 : 00000000; +29d9 : 00000000; +29da : 00000000; +29db : 00000000; +29dc : 00000000; +29dd : 00000000; +29de : 00000000; +29df : 00000000; +29e0 : 00000000; +29e1 : 00000000; +29e2 : 00000000; +29e3 : 00000000; +29e4 : 00000000; +29e5 : 00000000; +29e6 : 00000000; +29e7 : 00000000; +29e8 : 00000000; +29e9 : 00000000; +29ea : 00000000; +29eb : 00000000; +29ec : 00000000; +29ed : 00000000; +29ee : 00000000; +29ef : 00000000; +29f0 : 00000000; +29f1 : 00000000; +29f2 : 00000000; +29f3 : 00000000; +29f4 : 00000000; +29f5 : 00000000; +29f6 : 00000000; +29f7 : 00000000; +29f8 : 00000000; +29f9 : 00000000; +29fa : 00000000; +29fb : 00000000; +29fc : 00000000; +29fd : 00000000; +29fe : 00000000; +29ff : 00000000; +2a00 : 00000000; +2a01 : 00000000; +2a02 : 00000000; +2a03 : 00000000; +2a04 : 00000000; +2a05 : 00000000; +2a06 : 00000000; +2a07 : 00000000; +2a08 : 00000000; +2a09 : 00000000; +2a0a : 00000000; +2a0b : 00000000; +2a0c : 00000000; +2a0d : 00000000; +2a0e : 00000000; +2a0f : 00000000; +2a10 : 00000000; +2a11 : 00000000; +2a12 : 00000000; +2a13 : 00000000; +2a14 : 00000000; +2a15 : 00000000; +2a16 : 00000000; +2a17 : 00000000; +2a18 : 00000000; +2a19 : 00000000; +2a1a : 00000000; +2a1b : 00000000; +2a1c : 00000000; +2a1d : 00000000; +2a1e : 00000000; +2a1f : 00000000; +2a20 : 00000000; +2a21 : 00000000; +2a22 : 00000000; +2a23 : 00000000; +2a24 : 00000000; +2a25 : 00000000; +2a26 : 00000000; +2a27 : 00000000; +2a28 : 00000000; +2a29 : 00000000; +2a2a : 00000000; +2a2b : 00000000; +2a2c : 00000000; +2a2d : 00000000; +2a2e : 00000000; +2a2f : 00000000; +2a30 : 00000000; +2a31 : 00000000; +2a32 : 00000000; +2a33 : 00000000; +2a34 : 00000000; +2a35 : 00000000; +2a36 : 00000000; +2a37 : 00000000; +2a38 : 00000000; +2a39 : 00000000; +2a3a : 00000000; +2a3b : 00000000; +2a3c : 00000000; +2a3d : 00000000; +2a3e : 00000000; +2a3f : 00000000; +2a40 : 00000000; +2a41 : 00000000; +2a42 : 00000000; +2a43 : 00000000; +2a44 : 00000000; +2a45 : 00000000; +2a46 : 00000000; +2a47 : 00000000; +2a48 : 00000000; +2a49 : 00000000; +2a4a : 00000000; +2a4b : 00000000; +2a4c : 00000000; +2a4d : 00000000; +2a4e : 00000000; +2a4f : 00000000; +2a50 : 00000000; +2a51 : 00000000; +2a52 : 00000000; +2a53 : 00000000; +2a54 : 00000000; +2a55 : 00000000; +2a56 : 00000000; +2a57 : 00000000; +2a58 : 00000000; +2a59 : 00000000; +2a5a : 00000000; +2a5b : 00000000; +2a5c : 00000000; +2a5d : 00000000; +2a5e : 00000000; +2a5f : 00000000; +2a60 : 00000000; +2a61 : 00000000; +2a62 : 00000000; +2a63 : 00000000; +2a64 : 00000000; +2a65 : 00000000; +2a66 : 00000000; +2a67 : 00000000; +2a68 : 00000000; +2a69 : 00000000; +2a6a : 00000000; +2a6b : 00000000; +2a6c : 00000000; +2a6d : 00000000; +2a6e : 00000000; +2a6f : 00000000; +2a70 : 00000000; +2a71 : 00000000; +2a72 : 00000000; +2a73 : 00000000; +2a74 : 00000000; +2a75 : 00000000; +2a76 : 00000000; +2a77 : 00000000; +2a78 : 00000000; +2a79 : 00000000; +2a7a : 00000000; +2a7b : 00000000; +2a7c : 00000000; +2a7d : 00000000; +2a7e : 00000000; +2a7f : 00000000; +2a80 : 00000000; +2a81 : 00000000; +2a82 : 00000000; +2a83 : 00000000; +2a84 : 00000000; +2a85 : 00000000; +2a86 : 00000000; +2a87 : 00000000; +2a88 : 00000000; +2a89 : 00000000; +2a8a : 00000000; +2a8b : 00000000; +2a8c : 00000000; +2a8d : 00000000; +2a8e : 00000000; +2a8f : 00000000; +2a90 : 00000000; +2a91 : 00000000; +2a92 : 00000000; +2a93 : 00000000; +2a94 : 00000000; +2a95 : 00000000; +2a96 : 00000000; +2a97 : 00000000; +2a98 : 00000000; +2a99 : 00000000; +2a9a : 00000000; +2a9b : 00000000; +2a9c : 00000000; +2a9d : 00000000; +2a9e : 00000000; +2a9f : 00000000; +2aa0 : 00000000; +2aa1 : 00000000; +2aa2 : 00000000; +2aa3 : 00000000; +2aa4 : 00000000; +2aa5 : 00000000; +2aa6 : 00000000; +2aa7 : 00000000; +2aa8 : 00000000; +2aa9 : 00000000; +2aaa : 00000000; +2aab : 00000000; +2aac : 00000000; +2aad : 00000000; +2aae : 00000000; +2aaf : 00000000; +2ab0 : 00000000; +2ab1 : 00000000; +2ab2 : 00000000; +2ab3 : 00000000; +2ab4 : 00000000; +2ab5 : 00000000; +2ab6 : 00000000; +2ab7 : 00000000; +2ab8 : 00000000; +2ab9 : 00000000; +2aba : 00000000; +2abb : 00000000; +2abc : 00000000; +2abd : 00000000; +2abe : 00000000; +2abf : 00000000; +2ac0 : 00000000; +2ac1 : 00000000; +2ac2 : 00000000; +2ac3 : 00000000; +2ac4 : 00000000; +2ac5 : 00000000; +2ac6 : 00000000; +2ac7 : 00000000; +2ac8 : 00000000; +2ac9 : 00000000; +2aca : 00000000; +2acb : 00000000; +2acc : 00000000; +2acd : 00000000; +2ace : 00000000; +2acf : 00000000; +2ad0 : 00000000; +2ad1 : 00000000; +2ad2 : 00000000; +2ad3 : 00000000; +2ad4 : 00000000; +2ad5 : 00000000; +2ad6 : 00000000; +2ad7 : 00000000; +2ad8 : 00000000; +2ad9 : 00000000; +2ada : 00000000; +2adb : 00000000; +2adc : 00000000; +2add : 00000000; +2ade : 00000000; +2adf : 00000000; +2ae0 : 00000000; +2ae1 : 00000000; +2ae2 : 00000000; +2ae3 : 00000000; +2ae4 : 00000000; +2ae5 : 00000000; +2ae6 : 00000000; +2ae7 : 00000000; +2ae8 : 00000000; +2ae9 : 00000000; +2aea : 00000000; +2aeb : 00000000; +2aec : 00000000; +2aed : 00000000; +2aee : 00000000; +2aef : 00000000; +2af0 : 00000000; +2af1 : 00000000; +2af2 : 00000000; +2af3 : 00000000; +2af4 : 00000000; +2af5 : 00000000; +2af6 : 00000000; +2af7 : 00000000; +2af8 : 00000000; +2af9 : 00000000; +2afa : 00000000; +2afb : 00000000; +2afc : 00000000; +2afd : 00000000; +2afe : 00000000; +2aff : 00000000; +2b00 : 00000000; +2b01 : 00000000; +2b02 : 00000000; +2b03 : 00000000; +2b04 : 00000000; +2b05 : 00000000; +2b06 : 00000000; +2b07 : 00000000; +2b08 : 00000000; +2b09 : 00000000; +2b0a : 00000000; +2b0b : 00000000; +2b0c : 00000000; +2b0d : 00000000; +2b0e : 00000000; +2b0f : 00000000; +2b10 : 00000000; +2b11 : 00000000; +2b12 : 00000000; +2b13 : 00000000; +2b14 : 00000000; +2b15 : 00000000; +2b16 : 00000000; +2b17 : 00000000; +2b18 : 00000000; +2b19 : 00000000; +2b1a : 00000000; +2b1b : 00000000; +2b1c : 00000000; +2b1d : 00000000; +2b1e : 00000000; +2b1f : 00000000; +2b20 : 00000000; +2b21 : 00000000; +2b22 : 00000000; +2b23 : 00000000; +2b24 : 00000000; +2b25 : 00000000; +2b26 : 00000000; +2b27 : 00000000; +2b28 : 00000000; +2b29 : 00000000; +2b2a : 00000000; +2b2b : 00000000; +2b2c : 00000000; +2b2d : 00000000; +2b2e : 00000000; +2b2f : 00000000; +2b30 : 00000000; +2b31 : 00000000; +2b32 : 00000000; +2b33 : 00000000; +2b34 : 00000000; +2b35 : 00000000; +2b36 : 00000000; +2b37 : 00000000; +2b38 : 00000000; +2b39 : 00000000; +2b3a : 00000000; +2b3b : 00000000; +2b3c : 00000000; +2b3d : 00000000; +2b3e : 00000000; +2b3f : 00000000; +2b40 : 00000000; +2b41 : 00000000; +2b42 : 00000000; +2b43 : 00000000; +2b44 : 00000000; +2b45 : 00000000; +2b46 : 00000000; +2b47 : 00000000; +2b48 : 00000000; +2b49 : 00000000; +2b4a : 00000000; +2b4b : 00000000; +2b4c : 00000000; +2b4d : 00000000; +2b4e : 00000000; +2b4f : 00000000; +2b50 : 00000000; +2b51 : 00000000; +2b52 : 00000000; +2b53 : 00000000; +2b54 : 00000000; +2b55 : 00000000; +2b56 : 00000000; +2b57 : 00000000; +2b58 : 00000000; +2b59 : 00000000; +2b5a : 00000000; +2b5b : 00000000; +2b5c : 00000000; +2b5d : 00000000; +2b5e : 00000000; +2b5f : 00000000; +2b60 : 00000000; +2b61 : 00000000; +2b62 : 00000000; +2b63 : 00000000; +2b64 : 00000000; +2b65 : 00000000; +2b66 : 00000000; +2b67 : 00000000; +2b68 : 00000000; +2b69 : 00000000; +2b6a : 00000000; +2b6b : 00000000; +2b6c : 00000000; +2b6d : 00000000; +2b6e : 00000000; +2b6f : 00000000; +2b70 : 00000000; +2b71 : 00000000; +2b72 : 00000000; +2b73 : 00000000; +2b74 : 00000000; +2b75 : 00000000; +2b76 : 00000000; +2b77 : 00000000; +2b78 : 00000000; +2b79 : 00000000; +2b7a : 00000000; +2b7b : 00000000; +2b7c : 00000000; +2b7d : 00000000; +2b7e : 00000000; +2b7f : 00000000; +2b80 : 00000000; +2b81 : 00000000; +2b82 : 00000000; +2b83 : 00000000; +2b84 : 00000000; +2b85 : 00000000; +2b86 : 00000000; +2b87 : 00000000; +2b88 : 00000000; +2b89 : 00000000; +2b8a : 00000000; +2b8b : 00000000; +2b8c : 00000000; +2b8d : 00000000; +2b8e : 00000000; +2b8f : 00000000; +2b90 : 00000000; +2b91 : 00000000; +2b92 : 00000000; +2b93 : 00000000; +2b94 : 00000000; +2b95 : 00000000; +2b96 : 00000000; +2b97 : 00000000; +2b98 : 00000000; +2b99 : 00000000; +2b9a : 00000000; +2b9b : 00000000; +2b9c : 00000000; +2b9d : 00000000; +2b9e : 00000000; +2b9f : 00000000; +2ba0 : 00000000; +2ba1 : 00000000; +2ba2 : 00000000; +2ba3 : 00000000; +2ba4 : 00000000; +2ba5 : 00000000; +2ba6 : 00000000; +2ba7 : 00000000; +2ba8 : 00000000; +2ba9 : 00000000; +2baa : 00000000; +2bab : 00000000; +2bac : 00000000; +2bad : 00000000; +2bae : 00000000; +2baf : 00000000; +2bb0 : 00000000; +2bb1 : 00000000; +2bb2 : 00000000; +2bb3 : 00000000; +2bb4 : 00000000; +2bb5 : 00000000; +2bb6 : 00000000; +2bb7 : 00000000; +2bb8 : 00000000; +2bb9 : 00000000; +2bba : 00000000; +2bbb : 00000000; +2bbc : 00000000; +2bbd : 00000000; +2bbe : 00000000; +2bbf : 00000000; +2bc0 : 00000000; +2bc1 : 00000000; +2bc2 : 00000000; +2bc3 : 00000000; +2bc4 : 00000000; +2bc5 : 00000000; +2bc6 : 00000000; +2bc7 : 00000000; +2bc8 : 00000000; +2bc9 : 00000000; +2bca : 00000000; +2bcb : 00000000; +2bcc : 00000000; +2bcd : 00000000; +2bce : 00000000; +2bcf : 00000000; +2bd0 : 00000000; +2bd1 : 00000000; +2bd2 : 00000000; +2bd3 : 00000000; +2bd4 : 00000000; +2bd5 : 00000000; +2bd6 : 00000000; +2bd7 : 00000000; +2bd8 : 00000000; +2bd9 : 00000000; +2bda : 00000000; +2bdb : 00000000; +2bdc : 00000000; +2bdd : 00000000; +2bde : 00000000; +2bdf : 00000000; +2be0 : 00000000; +2be1 : 00000000; +2be2 : 00000000; +2be3 : 00000000; +2be4 : 00000000; +2be5 : 00000000; +2be6 : 00000000; +2be7 : 00000000; +2be8 : 00000000; +2be9 : 00000000; +2bea : 00000000; +2beb : 00000000; +2bec : 00000000; +2bed : 00000000; +2bee : 00000000; +2bef : 00000000; +2bf0 : 00000000; +2bf1 : 00000000; +2bf2 : 00000000; +2bf3 : 00000000; +2bf4 : 00000000; +2bf5 : 00000000; +2bf6 : 00000000; +2bf7 : 00000000; +2bf8 : 00000000; +2bf9 : 00000000; +2bfa : 00000000; +2bfb : 00000000; +2bfc : 00000000; +2bfd : 00000000; +2bfe : 00000000; +2bff : 00000000; +2c00 : 00000000; +2c01 : 00000000; +2c02 : 00000000; +2c03 : 00000000; +2c04 : 00000000; +2c05 : 00000000; +2c06 : 00000000; +2c07 : 00000000; +2c08 : 00000000; +2c09 : 00000000; +2c0a : 00000000; +2c0b : 00000000; +2c0c : 00000000; +2c0d : 00000000; +2c0e : 00000000; +2c0f : 00000000; +2c10 : 00000000; +2c11 : 00000000; +2c12 : 00000000; +2c13 : 00000000; +2c14 : 00000000; +2c15 : 00000000; +2c16 : 00000000; +2c17 : 00000000; +2c18 : 00000000; +2c19 : 00000000; +2c1a : 00000000; +2c1b : 00000000; +2c1c : 00000000; +2c1d : 00000000; +2c1e : 00000000; +2c1f : 00000000; +2c20 : 00000000; +2c21 : 00000000; +2c22 : 00000000; +2c23 : 00000000; +2c24 : 00000000; +2c25 : 00000000; +2c26 : 00000000; +2c27 : 00000000; +2c28 : 00000000; +2c29 : 00000000; +2c2a : 00000000; +2c2b : 00000000; +2c2c : 00000000; +2c2d : 00000000; +2c2e : 00000000; +2c2f : 00000000; +2c30 : 00000000; +2c31 : 00000000; +2c32 : 00000000; +2c33 : 00000000; +2c34 : 00000000; +2c35 : 00000000; +2c36 : 00000000; +2c37 : 00000000; +2c38 : 00000000; +2c39 : 00000000; +2c3a : 00000000; +2c3b : 00000000; +2c3c : 00000000; +2c3d : 00000000; +2c3e : 00000000; +2c3f : 00000000; +2c40 : 00000000; +2c41 : 00000000; +2c42 : 00000000; +2c43 : 00000000; +2c44 : 00000000; +2c45 : 00000000; +2c46 : 00000000; +2c47 : 00000000; +2c48 : 00000000; +2c49 : 00000000; +2c4a : 00000000; +2c4b : 00000000; +2c4c : 00000000; +2c4d : 00000000; +2c4e : 00000000; +2c4f : 00000000; +2c50 : 00000000; +2c51 : 00000000; +2c52 : 00000000; +2c53 : 00000000; +2c54 : 00000000; +2c55 : 00000000; +2c56 : 00000000; +2c57 : 00000000; +2c58 : 00000000; +2c59 : 00000000; +2c5a : 00000000; +2c5b : 00000000; +2c5c : 00000000; +2c5d : 00000000; +2c5e : 00000000; +2c5f : 00000000; +2c60 : 00000000; +2c61 : 00000000; +2c62 : 00000000; +2c63 : 00000000; +2c64 : 00000000; +2c65 : 00000000; +2c66 : 00000000; +2c67 : 00000000; +2c68 : 00000000; +2c69 : 00000000; +2c6a : 00000000; +2c6b : 00000000; +2c6c : 00000000; +2c6d : 00000000; +2c6e : 00000000; +2c6f : 00000000; +2c70 : 00000000; +2c71 : 00000000; +2c72 : 00000000; +2c73 : 00000000; +2c74 : 00000000; +2c75 : 00000000; +2c76 : 00000000; +2c77 : 00000000; +2c78 : 00000000; +2c79 : 00000000; +2c7a : 00000000; +2c7b : 00000000; +2c7c : 00000000; +2c7d : 00000000; +2c7e : 00000000; +2c7f : 00000000; +2c80 : 00000000; +2c81 : 00000000; +2c82 : 00000000; +2c83 : 00000000; +2c84 : 00000000; +2c85 : 00000000; +2c86 : 00000000; +2c87 : 00000000; +2c88 : 00000000; +2c89 : 00000000; +2c8a : 00000000; +2c8b : 00000000; +2c8c : 00000000; +2c8d : 00000000; +2c8e : 00000000; +2c8f : 00000000; +2c90 : 00000000; +2c91 : 00000000; +2c92 : 00000000; +2c93 : 00000000; +2c94 : 00000000; +2c95 : 00000000; +2c96 : 00000000; +2c97 : 00000000; +2c98 : 00000000; +2c99 : 00000000; +2c9a : 00000000; +2c9b : 00000000; +2c9c : 00000000; +2c9d : 00000000; +2c9e : 00000000; +2c9f : 00000000; +2ca0 : 00000000; +2ca1 : 00000000; +2ca2 : 00000000; +2ca3 : 00000000; +2ca4 : 00000000; +2ca5 : 00000000; +2ca6 : 00000000; +2ca7 : 00000000; +2ca8 : 00000000; +2ca9 : 00000000; +2caa : 00000000; +2cab : 00000000; +2cac : 00000000; +2cad : 00000000; +2cae : 00000000; +2caf : 00000000; +2cb0 : 00000000; +2cb1 : 00000000; +2cb2 : 00000000; +2cb3 : 00000000; +2cb4 : 00000000; +2cb5 : 00000000; +2cb6 : 00000000; +2cb7 : 00000000; +2cb8 : 00000000; +2cb9 : 00000000; +2cba : 00000000; +2cbb : 00000000; +2cbc : 00000000; +2cbd : 00000000; +2cbe : 00000000; +2cbf : 00000000; +2cc0 : 00000000; +2cc1 : 00000000; +2cc2 : 00000000; +2cc3 : 00000000; +2cc4 : 00000000; +2cc5 : 00000000; +2cc6 : 00000000; +2cc7 : 00000000; +2cc8 : 00000000; +2cc9 : 00000000; +2cca : 00000000; +2ccb : 00000000; +2ccc : 00000000; +2ccd : 00000000; +2cce : 00000000; +2ccf : 00000000; +2cd0 : 00000000; +2cd1 : 00000000; +2cd2 : 00000000; +2cd3 : 00000000; +2cd4 : 00000000; +2cd5 : 00000000; +2cd6 : 00000000; +2cd7 : 00000000; +2cd8 : 00000000; +2cd9 : 00000000; +2cda : 00000000; +2cdb : 00000000; +2cdc : 00000000; +2cdd : 00000000; +2cde : 00000000; +2cdf : 00000000; +2ce0 : 00000000; +2ce1 : 00000000; +2ce2 : 00000000; +2ce3 : 00000000; +2ce4 : 00000000; +2ce5 : 00000000; +2ce6 : 00000000; +2ce7 : 00000000; +2ce8 : 00000000; +2ce9 : 00000000; +2cea : 00000000; +2ceb : 00000000; +2cec : 00000000; +2ced : 00000000; +2cee : 00000000; +2cef : 00000000; +2cf0 : 00000000; +2cf1 : 00000000; +2cf2 : 00000000; +2cf3 : 00000000; +2cf4 : 00000000; +2cf5 : 00000000; +2cf6 : 00000000; +2cf7 : 00000000; +2cf8 : 00000000; +2cf9 : 00000000; +2cfa : 00000000; +2cfb : 00000000; +2cfc : 00000000; +2cfd : 00000000; +2cfe : 00000000; +2cff : 00000000; +2d00 : 00000000; +2d01 : 00000000; +2d02 : 00000000; +2d03 : 00000000; +2d04 : 00000000; +2d05 : 00000000; +2d06 : 00000000; +2d07 : 00000000; +2d08 : 00000000; +2d09 : 00000000; +2d0a : 00000000; +2d0b : 00000000; +2d0c : 00000000; +2d0d : 00000000; +2d0e : 00000000; +2d0f : 00000000; +2d10 : 00000000; +2d11 : 00000000; +2d12 : 00000000; +2d13 : 00000000; +2d14 : 00000000; +2d15 : 00000000; +2d16 : 00000000; +2d17 : 00000000; +2d18 : 00000000; +2d19 : 00000000; +2d1a : 00000000; +2d1b : 00000000; +2d1c : 00000000; +2d1d : 00000000; +2d1e : 00000000; +2d1f : 00000000; +2d20 : 00000000; +2d21 : 00000000; +2d22 : 00000000; +2d23 : 00000000; +2d24 : 00000000; +2d25 : 00000000; +2d26 : 00000000; +2d27 : 00000000; +2d28 : 00000000; +2d29 : 00000000; +2d2a : 00000000; +2d2b : 00000000; +2d2c : 00000000; +2d2d : 00000000; +2d2e : 00000000; +2d2f : 00000000; +2d30 : 00000000; +2d31 : 00000000; +2d32 : 00000000; +2d33 : 00000000; +2d34 : 00000000; +2d35 : 00000000; +2d36 : 00000000; +2d37 : 00000000; +2d38 : 00000000; +2d39 : 00000000; +2d3a : 00000000; +2d3b : 00000000; +2d3c : 00000000; +2d3d : 00000000; +2d3e : 00000000; +2d3f : 00000000; +2d40 : 00000000; +2d41 : 00000000; +2d42 : 00000000; +2d43 : 00000000; +2d44 : 00000000; +2d45 : 00000000; +2d46 : 00000000; +2d47 : 00000000; +2d48 : 00000000; +2d49 : 00000000; +2d4a : 00000000; +2d4b : 00000000; +2d4c : 00000000; +2d4d : 00000000; +2d4e : 00000000; +2d4f : 00000000; +2d50 : 00000000; +2d51 : 00000000; +2d52 : 00000000; +2d53 : 00000000; +2d54 : 00000000; +2d55 : 00000000; +2d56 : 00000000; +2d57 : 00000000; +2d58 : 00000000; +2d59 : 00000000; +2d5a : 00000000; +2d5b : 00000000; +2d5c : 00000000; +2d5d : 00000000; +2d5e : 00000000; +2d5f : 00000000; +2d60 : 00000000; +2d61 : 00000000; +2d62 : 00000000; +2d63 : 00000000; +2d64 : 00000000; +2d65 : 00000000; +2d66 : 00000000; +2d67 : 00000000; +2d68 : 00000000; +2d69 : 00000000; +2d6a : 00000000; +2d6b : 00000000; +2d6c : 00000000; +2d6d : 00000000; +2d6e : 00000000; +2d6f : 00000000; +2d70 : 00000000; +2d71 : 00000000; +2d72 : 00000000; +2d73 : 00000000; +2d74 : 00000000; +2d75 : 00000000; +2d76 : 00000000; +2d77 : 00000000; +2d78 : 00000000; +2d79 : 00000000; +2d7a : 00000000; +2d7b : 00000000; +2d7c : 00000000; +2d7d : 00000000; +2d7e : 00000000; +2d7f : 00000000; +2d80 : 00000000; +2d81 : 00000000; +2d82 : 00000000; +2d83 : 00000000; +2d84 : 00000000; +2d85 : 00000000; +2d86 : 00000000; +2d87 : 00000000; +2d88 : 00000000; +2d89 : 00000000; +2d8a : 00000000; +2d8b : 00000000; +2d8c : 00000000; +2d8d : 00000000; +2d8e : 00000000; +2d8f : 00000000; +2d90 : 00000000; +2d91 : 00000000; +2d92 : 00000000; +2d93 : 00000000; +2d94 : 00000000; +2d95 : 00000000; +2d96 : 00000000; +2d97 : 00000000; +2d98 : 00000000; +2d99 : 00000000; +2d9a : 00000000; +2d9b : 00000000; +2d9c : 00000000; +2d9d : 00000000; +2d9e : 00000000; +2d9f : 00000000; +2da0 : 00000000; +2da1 : 00000000; +2da2 : 00000000; +2da3 : 00000000; +2da4 : 00000000; +2da5 : 00000000; +2da6 : 00000000; +2da7 : 00000000; +2da8 : 00000000; +2da9 : 00000000; +2daa : 00000000; +2dab : 00000000; +2dac : 00000000; +2dad : 00000000; +2dae : 00000000; +2daf : 00000000; +2db0 : 00000000; +2db1 : 00000000; +2db2 : 00000000; +2db3 : 00000000; +2db4 : 00000000; +2db5 : 00000000; +2db6 : 00000000; +2db7 : 00000000; +2db8 : 00000000; +2db9 : 00000000; +2dba : 00000000; +2dbb : 00000000; +2dbc : 00000000; +2dbd : 00000000; +2dbe : 00000000; +2dbf : 00000000; +2dc0 : 00000000; +2dc1 : 00000000; +2dc2 : 00000000; +2dc3 : 00000000; +2dc4 : 00000000; +2dc5 : 00000000; +2dc6 : 00000000; +2dc7 : 00000000; +2dc8 : 00000000; +2dc9 : 00000000; +2dca : 00000000; +2dcb : 00000000; +2dcc : 00000000; +2dcd : 00000000; +2dce : 00000000; +2dcf : 00000000; +2dd0 : 00000000; +2dd1 : 00000000; +2dd2 : 00000000; +2dd3 : 00000000; +2dd4 : 00000000; +2dd5 : 00000000; +2dd6 : 00000000; +2dd7 : 00000000; +2dd8 : 00000000; +2dd9 : 00000000; +2dda : 00000000; +2ddb : 00000000; +2ddc : 00000000; +2ddd : 00000000; +2dde : 00000000; +2ddf : 00000000; +2de0 : 00000000; +2de1 : 00000000; +2de2 : 00000000; +2de3 : 00000000; +2de4 : 00000000; +2de5 : 00000000; +2de6 : 00000000; +2de7 : 00000000; +2de8 : 00000000; +2de9 : 00000000; +2dea : 00000000; +2deb : 00000000; +2dec : 00000000; +2ded : 00000000; +2dee : 00000000; +2def : 00000000; +2df0 : 00000000; +2df1 : 00000000; +2df2 : 00000000; +2df3 : 00000000; +2df4 : 00000000; +2df5 : 00000000; +2df6 : 00000000; +2df7 : 00000000; +2df8 : 00000000; +2df9 : 00000000; +2dfa : 00000000; +2dfb : 00000000; +2dfc : 00000000; +2dfd : 00000000; +2dfe : 00000000; +2dff : 00000000; +2e00 : 00000000; +2e01 : 00000000; +2e02 : 00000000; +2e03 : 00000000; +2e04 : 00000000; +2e05 : 00000000; +2e06 : 00000000; +2e07 : 00000000; +2e08 : 00000000; +2e09 : 00000000; +2e0a : 00000000; +2e0b : 00000000; +2e0c : 00000000; +2e0d : 00000000; +2e0e : 00000000; +2e0f : 00000000; +2e10 : 00000000; +2e11 : 00000000; +2e12 : 00000000; +2e13 : 00000000; +2e14 : 00000000; +2e15 : 00000000; +2e16 : 00000000; +2e17 : 00000000; +2e18 : 00000000; +2e19 : 00000000; +2e1a : 00000000; +2e1b : 00000000; +2e1c : 00000000; +2e1d : 00000000; +2e1e : 00000000; +2e1f : 00000000; +2e20 : 00000000; +2e21 : 00000000; +2e22 : 00000000; +2e23 : 00000000; +2e24 : 00000000; +2e25 : 00000000; +2e26 : 00000000; +2e27 : 00000000; +2e28 : 00000000; +2e29 : 00000000; +2e2a : 00000000; +2e2b : 00000000; +2e2c : 00000000; +2e2d : 00000000; +2e2e : 00000000; +2e2f : 00000000; +2e30 : 00000000; +2e31 : 00000000; +2e32 : 00000000; +2e33 : 00000000; +2e34 : 00000000; +2e35 : 00000000; +2e36 : 00000000; +2e37 : 00000000; +2e38 : 00000000; +2e39 : 00000000; +2e3a : 00000000; +2e3b : 00000000; +2e3c : 00000000; +2e3d : 00000000; +2e3e : 00000000; +2e3f : 00000000; +2e40 : 00000000; +2e41 : 00000000; +2e42 : 00000000; +2e43 : 00000000; +2e44 : 00000000; +2e45 : 00000000; +2e46 : 00000000; +2e47 : 00000000; +2e48 : 00000000; +2e49 : 00000000; +2e4a : 00000000; +2e4b : 00000000; +2e4c : 00000000; +2e4d : 00000000; +2e4e : 00000000; +2e4f : 00000000; +2e50 : 00000000; +2e51 : 00000000; +2e52 : 00000000; +2e53 : 00000000; +2e54 : 00000000; +2e55 : 00000000; +2e56 : 00000000; +2e57 : 00000000; +2e58 : 00000000; +2e59 : 00000000; +2e5a : 00000000; +2e5b : 00000000; +2e5c : 00000000; +2e5d : 00000000; +2e5e : 00000000; +2e5f : 00000000; +2e60 : 00000000; +2e61 : 00000000; +2e62 : 00000000; +2e63 : 00000000; +2e64 : 00000000; +2e65 : 00000000; +2e66 : 00000000; +2e67 : 00000000; +2e68 : 00000000; +2e69 : 00000000; +2e6a : 00000000; +2e6b : 00000000; +2e6c : 00000000; +2e6d : 00000000; +2e6e : 00000000; +2e6f : 00000000; +2e70 : 00000000; +2e71 : 00000000; +2e72 : 00000000; +2e73 : 00000000; +2e74 : 00000000; +2e75 : 00000000; +2e76 : 00000000; +2e77 : 00000000; +2e78 : 00000000; +2e79 : 00000000; +2e7a : 00000000; +2e7b : 00000000; +2e7c : 00000000; +2e7d : 00000000; +2e7e : 00000000; +2e7f : 00000000; +2e80 : 00000000; +2e81 : 00000000; +2e82 : 00000000; +2e83 : 00000000; +2e84 : 00000000; +2e85 : 00000000; +2e86 : 00000000; +2e87 : 00000000; +2e88 : 00000000; +2e89 : 00000000; +2e8a : 00000000; +2e8b : 00000000; +2e8c : 00000000; +2e8d : 00000000; +2e8e : 00000000; +2e8f : 00000000; +2e90 : 00000000; +2e91 : 00000000; +2e92 : 00000000; +2e93 : 00000000; +2e94 : 00000000; +2e95 : 00000000; +2e96 : 00000000; +2e97 : 00000000; +2e98 : 00000000; +2e99 : 00000000; +2e9a : 00000000; +2e9b : 00000000; +2e9c : 00000000; +2e9d : 00000000; +2e9e : 00000000; +2e9f : 00000000; +2ea0 : 00000000; +2ea1 : 00000000; +2ea2 : 00000000; +2ea3 : 00000000; +2ea4 : 00000000; +2ea5 : 00000000; +2ea6 : 00000000; +2ea7 : 00000000; +2ea8 : 00000000; +2ea9 : 00000000; +2eaa : 00000000; +2eab : 00000000; +2eac : 00000000; +2ead : 00000000; +2eae : 00000000; +2eaf : 00000000; +2eb0 : 00000000; +2eb1 : 00000000; +2eb2 : 00000000; +2eb3 : 00000000; +2eb4 : 00000000; +2eb5 : 00000000; +2eb6 : 00000000; +2eb7 : 00000000; +2eb8 : 00000000; +2eb9 : 00000000; +2eba : 00000000; +2ebb : 00000000; +2ebc : 00000000; +2ebd : 00000000; +2ebe : 00000000; +2ebf : 00000000; +2ec0 : 00000000; +2ec1 : 00000000; +2ec2 : 00000000; +2ec3 : 00000000; +2ec4 : 00000000; +2ec5 : 00000000; +2ec6 : 00000000; +2ec7 : 00000000; +2ec8 : 00000000; +2ec9 : 00000000; +2eca : 00000000; +2ecb : 00000000; +2ecc : 00000000; +2ecd : 00000000; +2ece : 00000000; +2ecf : 00000000; +2ed0 : 00000000; +2ed1 : 00000000; +2ed2 : 00000000; +2ed3 : 00000000; +2ed4 : 00000000; +2ed5 : 00000000; +2ed6 : 00000000; +2ed7 : 00000000; +2ed8 : 00000000; +2ed9 : 00000000; +2eda : 00000000; +2edb : 00000000; +2edc : 00000000; +2edd : 00000000; +2ede : 00000000; +2edf : 00000000; +2ee0 : 00000000; +2ee1 : 00000000; +2ee2 : 00000000; +2ee3 : 00000000; +2ee4 : 00000000; +2ee5 : 00000000; +2ee6 : 00000000; +2ee7 : 00000000; +2ee8 : 00000000; +2ee9 : 00000000; +2eea : 00000000; +2eeb : 00000000; +2eec : 00000000; +2eed : 00000000; +2eee : 00000000; +2eef : 00000000; +2ef0 : 00000000; +2ef1 : 00000000; +2ef2 : 00000000; +2ef3 : 00000000; +2ef4 : 00000000; +2ef5 : 00000000; +2ef6 : 00000000; +2ef7 : 00000000; +2ef8 : 00000000; +2ef9 : 00000000; +2efa : 00000000; +2efb : 00000000; +2efc : 00000000; +2efd : 00000000; +2efe : 00000000; +2eff : 00000000; +2f00 : 00000000; +2f01 : 00000000; +2f02 : 00000000; +2f03 : 00000000; +2f04 : 00000000; +2f05 : 00000000; +2f06 : 00000000; +2f07 : 00000000; +2f08 : 00000000; +2f09 : 00000000; +2f0a : 00000000; +2f0b : 00000000; +2f0c : 00000000; +2f0d : 00000000; +2f0e : 00000000; +2f0f : 00000000; +2f10 : 00000000; +2f11 : 00000000; +2f12 : 00000000; +2f13 : 00000000; +2f14 : 00000000; +2f15 : 00000000; +2f16 : 00000000; +2f17 : 00000000; +2f18 : 00000000; +2f19 : 00000000; +2f1a : 00000000; +2f1b : 00000000; +2f1c : 00000000; +2f1d : 00000000; +2f1e : 00000000; +2f1f : 00000000; +2f20 : 00000000; +2f21 : 00000000; +2f22 : 00000000; +2f23 : 00000000; +2f24 : 00000000; +2f25 : 00000000; +2f26 : 00000000; +2f27 : 00000000; +2f28 : 00000000; +2f29 : 00000000; +2f2a : 00000000; +2f2b : 00000000; +2f2c : 00000000; +2f2d : 00000000; +2f2e : 00000000; +2f2f : 00000000; +2f30 : 00000000; +2f31 : 00000000; +2f32 : 00000000; +2f33 : 00000000; +2f34 : 00000000; +2f35 : 00000000; +2f36 : 00000000; +2f37 : 00000000; +2f38 : 00000000; +2f39 : 00000000; +2f3a : 00000000; +2f3b : 00000000; +2f3c : 00000000; +2f3d : 00000000; +2f3e : 00000000; +2f3f : 00000000; +2f40 : 00000000; +2f41 : 00000000; +2f42 : 00000000; +2f43 : 00000000; +2f44 : 00000000; +2f45 : 00000000; +2f46 : 00000000; +2f47 : 00000000; +2f48 : 00000000; +2f49 : 00000000; +2f4a : 00000000; +2f4b : 00000000; +2f4c : 00000000; +2f4d : 00000000; +2f4e : 00000000; +2f4f : 00000000; +2f50 : 00000000; +2f51 : 00000000; +2f52 : 00000000; +2f53 : 00000000; +2f54 : 00000000; +2f55 : 00000000; +2f56 : 00000000; +2f57 : 00000000; +2f58 : 00000000; +2f59 : 00000000; +2f5a : 00000000; +2f5b : 00000000; +2f5c : 00000000; +2f5d : 00000000; +2f5e : 00000000; +2f5f : 00000000; +2f60 : 00000000; +2f61 : 00000000; +2f62 : 00000000; +2f63 : 00000000; +2f64 : 00000000; +2f65 : 00000000; +2f66 : 00000000; +2f67 : 00000000; +2f68 : 00000000; +2f69 : 00000000; +2f6a : 00000000; +2f6b : 00000000; +2f6c : 00000000; +2f6d : 00000000; +2f6e : 00000000; +2f6f : 00000000; +2f70 : 00000000; +2f71 : 00000000; +2f72 : 00000000; +2f73 : 00000000; +2f74 : 00000000; +2f75 : 00000000; +2f76 : 00000000; +2f77 : 00000000; +2f78 : 00000000; +2f79 : 00000000; +2f7a : 00000000; +2f7b : 00000000; +2f7c : 00000000; +2f7d : 00000000; +2f7e : 00000000; +2f7f : 00000000; +2f80 : 00000000; +2f81 : 00000000; +2f82 : 00000000; +2f83 : 00000000; +2f84 : 00000000; +2f85 : 00000000; +2f86 : 00000000; +2f87 : 00000000; +2f88 : 00000000; +2f89 : 00000000; +2f8a : 00000000; +2f8b : 00000000; +2f8c : 00000000; +2f8d : 00000000; +2f8e : 00000000; +2f8f : 00000000; +2f90 : 00000000; +2f91 : 00000000; +2f92 : 00000000; +2f93 : 00000000; +2f94 : 00000000; +2f95 : 00000000; +2f96 : 00000000; +2f97 : 00000000; +2f98 : 00000000; +2f99 : 00000000; +2f9a : 00000000; +2f9b : 00000000; +2f9c : 00000000; +2f9d : 00000000; +2f9e : 00000000; +2f9f : 00000000; +2fa0 : 00000000; +2fa1 : 00000000; +2fa2 : 00000000; +2fa3 : 00000000; +2fa4 : 00000000; +2fa5 : 00000000; +2fa6 : 00000000; +2fa7 : 00000000; +2fa8 : 00000000; +2fa9 : 00000000; +2faa : 00000000; +2fab : 00000000; +2fac : 00000000; +2fad : 00000000; +2fae : 00000000; +2faf : 00000000; +2fb0 : 00000000; +2fb1 : 00000000; +2fb2 : 00000000; +2fb3 : 00000000; +2fb4 : 00000000; +2fb5 : 00000000; +2fb6 : 00000000; +2fb7 : 00000000; +2fb8 : 00000000; +2fb9 : 00000000; +2fba : 00000000; +2fbb : 00000000; +2fbc : 00000000; +2fbd : 00000000; +2fbe : 00000000; +2fbf : 00000000; +2fc0 : 00000000; +2fc1 : 00000000; +2fc2 : 00000000; +2fc3 : 00000000; +2fc4 : 00000000; +2fc5 : 00000000; +2fc6 : 00000000; +2fc7 : 00000000; +2fc8 : 00000000; +2fc9 : 00000000; +2fca : 00000000; +2fcb : 00000000; +2fcc : 00000000; +2fcd : 00000000; +2fce : 00000000; +2fcf : 00000000; +2fd0 : 00000000; +2fd1 : 00000000; +2fd2 : 00000000; +2fd3 : 00000000; +2fd4 : 00000000; +2fd5 : 00000000; +2fd6 : 00000000; +2fd7 : 00000000; +2fd8 : 00000000; +2fd9 : 00000000; +2fda : 00000000; +2fdb : 00000000; +2fdc : 00000000; +2fdd : 00000000; +2fde : 00000000; +2fdf : 00000000; +2fe0 : 00000000; +2fe1 : 00000000; +2fe2 : 00000000; +2fe3 : 00000000; +2fe4 : 00000000; +2fe5 : 00000000; +2fe6 : 00000000; +2fe7 : 00000000; +2fe8 : 00000000; +2fe9 : 00000000; +2fea : 00000000; +2feb : 00000000; +2fec : 00000000; +2fed : 00000000; +2fee : 00000000; +2fef : 00000000; +2ff0 : 00000000; +2ff1 : 00000000; +2ff2 : 00000000; +2ff3 : 00000000; +2ff4 : 00000000; +2ff5 : 00000000; +2ff6 : 00000000; +2ff7 : 00000000; +2ff8 : 00000000; +2ff9 : 00000000; +2ffa : 00000000; +2ffb : 00000000; +2ffc : 00000000; +2ffd : 00000000; +2ffe : 00000000; +2fff : 00000000; +3000 : 00000000; +3001 : 00000000; +3002 : 00000000; +3003 : 00000000; +3004 : 00000000; +3005 : 00000000; +3006 : 00000000; +3007 : 00000000; +3008 : 00000000; +3009 : 00000000; +300a : 00000000; +300b : 00000000; +300c : 00000000; +300d : 00000000; +300e : 00000000; +300f : 00000000; +3010 : 00000000; +3011 : 00000000; +3012 : 00000000; +3013 : 00000000; +3014 : 00000000; +3015 : 00000000; +3016 : 00000000; +3017 : 00000000; +3018 : 00000000; +3019 : 00000000; +301a : 00000000; +301b : 00000000; +301c : 00000000; +301d : 00000000; +301e : 00000000; +301f : 00000000; +3020 : 00000000; +3021 : 00000000; +3022 : 00000000; +3023 : 00000000; +3024 : 00000000; +3025 : 00000000; +3026 : 00000000; +3027 : 00000000; +3028 : 00000000; +3029 : 00000000; +302a : 00000000; +302b : 00000000; +302c : 00000000; +302d : 00000000; +302e : 00000000; +302f : 00000000; +3030 : 00000000; +3031 : 00000000; +3032 : 00000000; +3033 : 00000000; +3034 : 00000000; +3035 : 00000000; +3036 : 00000000; +3037 : 00000000; +3038 : 00000000; +3039 : 00000000; +303a : 00000000; +303b : 00000000; +303c : 00000000; +303d : 00000000; +303e : 00000000; +303f : 00000000; +3040 : 00000000; +3041 : 00000000; +3042 : 00000000; +3043 : 00000000; +3044 : 00000000; +3045 : 00000000; +3046 : 00000000; +3047 : 00000000; +3048 : 00000000; +3049 : 00000000; +304a : 00000000; +304b : 00000000; +304c : 00000000; +304d : 00000000; +304e : 00000000; +304f : 00000000; +3050 : 00000000; +3051 : 00000000; +3052 : 00000000; +3053 : 00000000; +3054 : 00000000; +3055 : 00000000; +3056 : 00000000; +3057 : 00000000; +3058 : 00000000; +3059 : 00000000; +305a : 00000000; +305b : 00000000; +305c : 00000000; +305d : 00000000; +305e : 00000000; +305f : 00000000; +3060 : 00000000; +3061 : 00000000; +3062 : 00000000; +3063 : 00000000; +3064 : 00000000; +3065 : 00000000; +3066 : 00000000; +3067 : 00000000; +3068 : 00000000; +3069 : 00000000; +306a : 00000000; +306b : 00000000; +306c : 00000000; +306d : 00000000; +306e : 00000000; +306f : 00000000; +3070 : 00000000; +3071 : 00000000; +3072 : 00000000; +3073 : 00000000; +3074 : 00000000; +3075 : 00000000; +3076 : 00000000; +3077 : 00000000; +3078 : 00000000; +3079 : 00000000; +307a : 00000000; +307b : 00000000; +307c : 00000000; +307d : 00000000; +307e : 00000000; +307f : 00000000; +3080 : 00000000; +3081 : 00000000; +3082 : 00000000; +3083 : 00000000; +3084 : 00000000; +3085 : 00000000; +3086 : 00000000; +3087 : 00000000; +3088 : 00000000; +3089 : 00000000; +308a : 00000000; +308b : 00000000; +308c : 00000000; +308d : 00000000; +308e : 00000000; +308f : 00000000; +3090 : 00000000; +3091 : 00000000; +3092 : 00000000; +3093 : 00000000; +3094 : 00000000; +3095 : 00000000; +3096 : 00000000; +3097 : 00000000; +3098 : 00000000; +3099 : 00000000; +309a : 00000000; +309b : 00000000; +309c : 00000000; +309d : 00000000; +309e : 00000000; +309f : 00000000; +30a0 : 00000000; +30a1 : 00000000; +30a2 : 00000000; +30a3 : 00000000; +30a4 : 00000000; +30a5 : 00000000; +30a6 : 00000000; +30a7 : 00000000; +30a8 : 00000000; +30a9 : 00000000; +30aa : 00000000; +30ab : 00000000; +30ac : 00000000; +30ad : 00000000; +30ae : 00000000; +30af : 00000000; +30b0 : 00000000; +30b1 : 00000000; +30b2 : 00000000; +30b3 : 00000000; +30b4 : 00000000; +30b5 : 00000000; +30b6 : 00000000; +30b7 : 00000000; +30b8 : 00000000; +30b9 : 00000000; +30ba : 00000000; +30bb : 00000000; +30bc : 00000000; +30bd : 00000000; +30be : 00000000; +30bf : 00000000; +30c0 : 00000000; +30c1 : 00000000; +30c2 : 00000000; +30c3 : 00000000; +30c4 : 00000000; +30c5 : 00000000; +30c6 : 00000000; +30c7 : 00000000; +30c8 : 00000000; +30c9 : 00000000; +30ca : 00000000; +30cb : 00000000; +30cc : 00000000; +30cd : 00000000; +30ce : 00000000; +30cf : 00000000; +30d0 : 00000000; +30d1 : 00000000; +30d2 : 00000000; +30d3 : 00000000; +30d4 : 00000000; +30d5 : 00000000; +30d6 : 00000000; +30d7 : 00000000; +30d8 : 00000000; +30d9 : 00000000; +30da : 00000000; +30db : 00000000; +30dc : 00000000; +30dd : 00000000; +30de : 00000000; +30df : 00000000; +30e0 : 00000000; +30e1 : 00000000; +30e2 : 00000000; +30e3 : 00000000; +30e4 : 00000000; +30e5 : 00000000; +30e6 : 00000000; +30e7 : 00000000; +30e8 : 00000000; +30e9 : 00000000; +30ea : 00000000; +30eb : 00000000; +30ec : 00000000; +30ed : 00000000; +30ee : 00000000; +30ef : 00000000; +30f0 : 00000000; +30f1 : 00000000; +30f2 : 00000000; +30f3 : 00000000; +30f4 : 00000000; +30f5 : 00000000; +30f6 : 00000000; +30f7 : 00000000; +30f8 : 00000000; +30f9 : 00000000; +30fa : 00000000; +30fb : 00000000; +30fc : 00000000; +30fd : 00000000; +30fe : 00000000; +30ff : 00000000; +3100 : 00000000; +3101 : 00000000; +3102 : 00000000; +3103 : 00000000; +3104 : 00000000; +3105 : 00000000; +3106 : 00000000; +3107 : 00000000; +3108 : 00000000; +3109 : 00000000; +310a : 00000000; +310b : 00000000; +310c : 00000000; +310d : 00000000; +310e : 00000000; +310f : 00000000; +3110 : 00000000; +3111 : 00000000; +3112 : 00000000; +3113 : 00000000; +3114 : 00000000; +3115 : 00000000; +3116 : 00000000; +3117 : 00000000; +3118 : 00000000; +3119 : 00000000; +311a : 00000000; +311b : 00000000; +311c : 00000000; +311d : 00000000; +311e : 00000000; +311f : 00000000; +3120 : 00000000; +3121 : 00000000; +3122 : 00000000; +3123 : 00000000; +3124 : 00000000; +3125 : 00000000; +3126 : 00000000; +3127 : 00000000; +3128 : 00000000; +3129 : 00000000; +312a : 00000000; +312b : 00000000; +312c : 00000000; +312d : 00000000; +312e : 00000000; +312f : 00000000; +3130 : 00000000; +3131 : 00000000; +3132 : 00000000; +3133 : 00000000; +3134 : 00000000; +3135 : 00000000; +3136 : 00000000; +3137 : 00000000; +3138 : 00000000; +3139 : 00000000; +313a : 00000000; +313b : 00000000; +313c : 00000000; +313d : 00000000; +313e : 00000000; +313f : 00000000; +3140 : 00000000; +3141 : 00000000; +3142 : 00000000; +3143 : 00000000; +3144 : 00000000; +3145 : 00000000; +3146 : 00000000; +3147 : 00000000; +3148 : 00000000; +3149 : 00000000; +314a : 00000000; +314b : 00000000; +314c : 00000000; +314d : 00000000; +314e : 00000000; +314f : 00000000; +3150 : 00000000; +3151 : 00000000; +3152 : 00000000; +3153 : 00000000; +3154 : 00000000; +3155 : 00000000; +3156 : 00000000; +3157 : 00000000; +3158 : 00000000; +3159 : 00000000; +315a : 00000000; +315b : 00000000; +315c : 00000000; +315d : 00000000; +315e : 00000000; +315f : 00000000; +3160 : 00000000; +3161 : 00000000; +3162 : 00000000; +3163 : 00000000; +3164 : 00000000; +3165 : 00000000; +3166 : 00000000; +3167 : 00000000; +3168 : 00000000; +3169 : 00000000; +316a : 00000000; +316b : 00000000; +316c : 00000000; +316d : 00000000; +316e : 00000000; +316f : 00000000; +3170 : 00000000; +3171 : 00000000; +3172 : 00000000; +3173 : 00000000; +3174 : 00000000; +3175 : 00000000; +3176 : 00000000; +3177 : 00000000; +3178 : 00000000; +3179 : 00000000; +317a : 00000000; +317b : 00000000; +317c : 00000000; +317d : 00000000; +317e : 00000000; +317f : 00000000; +3180 : 00000000; +3181 : 00000000; +3182 : 00000000; +3183 : 00000000; +3184 : 00000000; +3185 : 00000000; +3186 : 00000000; +3187 : 00000000; +3188 : 00000000; +3189 : 00000000; +318a : 00000000; +318b : 00000000; +318c : 00000000; +318d : 00000000; +318e : 00000000; +318f : 00000000; +3190 : 00000000; +3191 : 00000000; +3192 : 00000000; +3193 : 00000000; +3194 : 00000000; +3195 : 00000000; +3196 : 00000000; +3197 : 00000000; +3198 : 00000000; +3199 : 00000000; +319a : 00000000; +319b : 00000000; +319c : 00000000; +319d : 00000000; +319e : 00000000; +319f : 00000000; +31a0 : 00000000; +31a1 : 00000000; +31a2 : 00000000; +31a3 : 00000000; +31a4 : 00000000; +31a5 : 00000000; +31a6 : 00000000; +31a7 : 00000000; +31a8 : 00000000; +31a9 : 00000000; +31aa : 00000000; +31ab : 00000000; +31ac : 00000000; +31ad : 00000000; +31ae : 00000000; +31af : 00000000; +31b0 : 00000000; +31b1 : 00000000; +31b2 : 00000000; +31b3 : 00000000; +31b4 : 00000000; +31b5 : 00000000; +31b6 : 00000000; +31b7 : 00000000; +31b8 : 00000000; +31b9 : 00000000; +31ba : 00000000; +31bb : 00000000; +31bc : 00000000; +31bd : 00000000; +31be : 00000000; +31bf : 00000000; +31c0 : 00000000; +31c1 : 00000000; +31c2 : 00000000; +31c3 : 00000000; +31c4 : 00000000; +31c5 : 00000000; +31c6 : 00000000; +31c7 : 00000000; +31c8 : 00000000; +31c9 : 00000000; +31ca : 00000000; +31cb : 00000000; +31cc : 00000000; +31cd : 00000000; +31ce : 00000000; +31cf : 00000000; +31d0 : 00000000; +31d1 : 00000000; +31d2 : 00000000; +31d3 : 00000000; +31d4 : 00000000; +31d5 : 00000000; +31d6 : 00000000; +31d7 : 00000000; +31d8 : 00000000; +31d9 : 00000000; +31da : 00000000; +31db : 00000000; +31dc : 00000000; +31dd : 00000000; +31de : 00000000; +31df : 00000000; +31e0 : 00000000; +31e1 : 00000000; +31e2 : 00000000; +31e3 : 00000000; +31e4 : 00000000; +31e5 : 00000000; +31e6 : 00000000; +31e7 : 00000000; +31e8 : 00000000; +31e9 : 00000000; +31ea : 00000000; +31eb : 00000000; +31ec : 00000000; +31ed : 00000000; +31ee : 00000000; +31ef : 00000000; +31f0 : 00000000; +31f1 : 00000000; +31f2 : 00000000; +31f3 : 00000000; +31f4 : 00000000; +31f5 : 00000000; +31f6 : 00000000; +31f7 : 00000000; +31f8 : 00000000; +31f9 : 00000000; +31fa : 00000000; +31fb : 00000000; +31fc : 00000000; +31fd : 00000000; +31fe : 00000000; +31ff : 00000000; +3200 : 00000000; +3201 : 00000000; +3202 : 00000000; +3203 : 00000000; +3204 : 00000000; +3205 : 00000000; +3206 : 00000000; +3207 : 00000000; +3208 : 00000000; +3209 : 00000000; +320a : 00000000; +320b : 00000000; +320c : 00000000; +320d : 00000000; +320e : 00000000; +320f : 00000000; +3210 : 00000000; +3211 : 00000000; +3212 : 00000000; +3213 : 00000000; +3214 : 00000000; +3215 : 00000000; +3216 : 00000000; +3217 : 00000000; +3218 : 00000000; +3219 : 00000000; +321a : 00000000; +321b : 00000000; +321c : 00000000; +321d : 00000000; +321e : 00000000; +321f : 00000000; +3220 : 00000000; +3221 : 00000000; +3222 : 00000000; +3223 : 00000000; +3224 : 00000000; +3225 : 00000000; +3226 : 00000000; +3227 : 00000000; +3228 : 00000000; +3229 : 00000000; +322a : 00000000; +322b : 00000000; +322c : 00000000; +322d : 00000000; +322e : 00000000; +322f : 00000000; +3230 : 00000000; +3231 : 00000000; +3232 : 00000000; +3233 : 00000000; +3234 : 00000000; +3235 : 00000000; +3236 : 00000000; +3237 : 00000000; +3238 : 00000000; +3239 : 00000000; +323a : 00000000; +323b : 00000000; +323c : 00000000; +323d : 00000000; +323e : 00000000; +323f : 00000000; +3240 : 00000000; +3241 : 00000000; +3242 : 00000000; +3243 : 00000000; +3244 : 00000000; +3245 : 00000000; +3246 : 00000000; +3247 : 00000000; +3248 : 00000000; +3249 : 00000000; +324a : 00000000; +324b : 00000000; +324c : 00000000; +324d : 00000000; +324e : 00000000; +324f : 00000000; +3250 : 00000000; +3251 : 00000000; +3252 : 00000000; +3253 : 00000000; +3254 : 00000000; +3255 : 00000000; +3256 : 00000000; +3257 : 00000000; +3258 : 00000000; +3259 : 00000000; +325a : 00000000; +325b : 00000000; +325c : 00000000; +325d : 00000000; +325e : 00000000; +325f : 00000000; +3260 : 00000000; +3261 : 00000000; +3262 : 00000000; +3263 : 00000000; +3264 : 00000000; +3265 : 00000000; +3266 : 00000000; +3267 : 00000000; +3268 : 00000000; +3269 : 00000000; +326a : 00000000; +326b : 00000000; +326c : 00000000; +326d : 00000000; +326e : 00000000; +326f : 00000000; +3270 : 00000000; +3271 : 00000000; +3272 : 00000000; +3273 : 00000000; +3274 : 00000000; +3275 : 00000000; +3276 : 00000000; +3277 : 00000000; +3278 : 00000000; +3279 : 00000000; +327a : 00000000; +327b : 00000000; +327c : 00000000; +327d : 00000000; +327e : 00000000; +327f : 00000000; +3280 : 00000000; +3281 : 00000000; +3282 : 00000000; +3283 : 00000000; +3284 : 00000000; +3285 : 00000000; +3286 : 00000000; +3287 : 00000000; +3288 : 00000000; +3289 : 00000000; +328a : 00000000; +328b : 00000000; +328c : 00000000; +328d : 00000000; +328e : 00000000; +328f : 00000000; +3290 : 00000000; +3291 : 00000000; +3292 : 00000000; +3293 : 00000000; +3294 : 00000000; +3295 : 00000000; +3296 : 00000000; +3297 : 00000000; +3298 : 00000000; +3299 : 00000000; +329a : 00000000; +329b : 00000000; +329c : 00000000; +329d : 00000000; +329e : 00000000; +329f : 00000000; +32a0 : 00000000; +32a1 : 00000000; +32a2 : 00000000; +32a3 : 00000000; +32a4 : 00000000; +32a5 : 00000000; +32a6 : 00000000; +32a7 : 00000000; +32a8 : 00000000; +32a9 : 00000000; +32aa : 00000000; +32ab : 00000000; +32ac : 00000000; +32ad : 00000000; +32ae : 00000000; +32af : 00000000; +32b0 : 00000000; +32b1 : 00000000; +32b2 : 00000000; +32b3 : 00000000; +32b4 : 00000000; +32b5 : 00000000; +32b6 : 00000000; +32b7 : 00000000; +32b8 : 00000000; +32b9 : 00000000; +32ba : 00000000; +32bb : 00000000; +32bc : 00000000; +32bd : 00000000; +32be : 00000000; +32bf : 00000000; +32c0 : 00000000; +32c1 : 00000000; +32c2 : 00000000; +32c3 : 00000000; +32c4 : 00000000; +32c5 : 00000000; +32c6 : 00000000; +32c7 : 00000000; +32c8 : 00000000; +32c9 : 00000000; +32ca : 00000000; +32cb : 00000000; +32cc : 00000000; +32cd : 00000000; +32ce : 00000000; +32cf : 00000000; +32d0 : 00000000; +32d1 : 00000000; +32d2 : 00000000; +32d3 : 00000000; +32d4 : 00000000; +32d5 : 00000000; +32d6 : 00000000; +32d7 : 00000000; +32d8 : 00000000; +32d9 : 00000000; +32da : 00000000; +32db : 00000000; +32dc : 00000000; +32dd : 00000000; +32de : 00000000; +32df : 00000000; +32e0 : 00000000; +32e1 : 00000000; +32e2 : 00000000; +32e3 : 00000000; +32e4 : 00000000; +32e5 : 00000000; +32e6 : 00000000; +32e7 : 00000000; +32e8 : 00000000; +32e9 : 00000000; +32ea : 00000000; +32eb : 00000000; +32ec : 00000000; +32ed : 00000000; +32ee : 00000000; +32ef : 00000000; +32f0 : 00000000; +32f1 : 00000000; +32f2 : 00000000; +32f3 : 00000000; +32f4 : 00000000; +32f5 : 00000000; +32f6 : 00000000; +32f7 : 00000000; +32f8 : 00000000; +32f9 : 00000000; +32fa : 00000000; +32fb : 00000000; +32fc : 00000000; +32fd : 00000000; +32fe : 00000000; +32ff : 00000000; +3300 : 00000000; +3301 : 00000000; +3302 : 00000000; +3303 : 00000000; +3304 : 00000000; +3305 : 00000000; +3306 : 00000000; +3307 : 00000000; +3308 : 00000000; +3309 : 00000000; +330a : 00000000; +330b : 00000000; +330c : 00000000; +330d : 00000000; +330e : 00000000; +330f : 00000000; +3310 : 00000000; +3311 : 00000000; +3312 : 00000000; +3313 : 00000000; +3314 : 00000000; +3315 : 00000000; +3316 : 00000000; +3317 : 00000000; +3318 : 00000000; +3319 : 00000000; +331a : 00000000; +331b : 00000000; +331c : 00000000; +331d : 00000000; +331e : 00000000; +331f : 00000000; +3320 : 00000000; +3321 : 00000000; +3322 : 00000000; +3323 : 00000000; +3324 : 00000000; +3325 : 00000000; +3326 : 00000000; +3327 : 00000000; +3328 : 00000000; +3329 : 00000000; +332a : 00000000; +332b : 00000000; +332c : 00000000; +332d : 00000000; +332e : 00000000; +332f : 00000000; +3330 : 00000000; +3331 : 00000000; +3332 : 00000000; +3333 : 00000000; +3334 : 00000000; +3335 : 00000000; +3336 : 00000000; +3337 : 00000000; +3338 : 00000000; +3339 : 00000000; +333a : 00000000; +333b : 00000000; +333c : 00000000; +333d : 00000000; +333e : 00000000; +333f : 00000000; +3340 : 00000000; +3341 : 00000000; +3342 : 00000000; +3343 : 00000000; +3344 : 00000000; +3345 : 00000000; +3346 : 00000000; +3347 : 00000000; +3348 : 00000000; +3349 : 00000000; +334a : 00000000; +334b : 00000000; +334c : 00000000; +334d : 00000000; +334e : 00000000; +334f : 00000000; +3350 : 00000000; +3351 : 00000000; +3352 : 00000000; +3353 : 00000000; +3354 : 00000000; +3355 : 00000000; +3356 : 00000000; +3357 : 00000000; +3358 : 00000000; +3359 : 00000000; +335a : 00000000; +335b : 00000000; +335c : 00000000; +335d : 00000000; +335e : 00000000; +335f : 00000000; +3360 : 00000000; +3361 : 00000000; +3362 : 00000000; +3363 : 00000000; +3364 : 00000000; +3365 : 00000000; +3366 : 00000000; +3367 : 00000000; +3368 : 00000000; +3369 : 00000000; +336a : 00000000; +336b : 00000000; +336c : 00000000; +336d : 00000000; +336e : 00000000; +336f : 00000000; +3370 : 00000000; +3371 : 00000000; +3372 : 00000000; +3373 : 00000000; +3374 : 00000000; +3375 : 00000000; +3376 : 00000000; +3377 : 00000000; +3378 : 00000000; +3379 : 00000000; +337a : 00000000; +337b : 00000000; +337c : 00000000; +337d : 00000000; +337e : 00000000; +337f : 00000000; +3380 : 00000000; +3381 : 00000000; +3382 : 00000000; +3383 : 00000000; +3384 : 00000000; +3385 : 00000000; +3386 : 00000000; +3387 : 00000000; +3388 : 00000000; +3389 : 00000000; +338a : 00000000; +338b : 00000000; +338c : 00000000; +338d : 00000000; +338e : 00000000; +338f : 00000000; +3390 : 00000000; +3391 : 00000000; +3392 : 00000000; +3393 : 00000000; +3394 : 00000000; +3395 : 00000000; +3396 : 00000000; +3397 : 00000000; +3398 : 00000000; +3399 : 00000000; +339a : 00000000; +339b : 00000000; +339c : 00000000; +339d : 00000000; +339e : 00000000; +339f : 00000000; +33a0 : 00000000; +33a1 : 00000000; +33a2 : 00000000; +33a3 : 00000000; +33a4 : 00000000; +33a5 : 00000000; +33a6 : 00000000; +33a7 : 00000000; +33a8 : 00000000; +33a9 : 00000000; +33aa : 00000000; +33ab : 00000000; +33ac : 00000000; +33ad : 00000000; +33ae : 00000000; +33af : 00000000; +33b0 : 00000000; +33b1 : 00000000; +33b2 : 00000000; +33b3 : 00000000; +33b4 : 00000000; +33b5 : 00000000; +33b6 : 00000000; +33b7 : 00000000; +33b8 : 00000000; +33b9 : 00000000; +33ba : 00000000; +33bb : 00000000; +33bc : 00000000; +33bd : 00000000; +33be : 00000000; +33bf : 00000000; +33c0 : 00000000; +33c1 : 00000000; +33c2 : 00000000; +33c3 : 00000000; +33c4 : 00000000; +33c5 : 00000000; +33c6 : 00000000; +33c7 : 00000000; +33c8 : 00000000; +33c9 : 00000000; +33ca : 00000000; +33cb : 00000000; +33cc : 00000000; +33cd : 00000000; +33ce : 00000000; +33cf : 00000000; +33d0 : 00000000; +33d1 : 00000000; +33d2 : 00000000; +33d3 : 00000000; +33d4 : 00000000; +33d5 : 00000000; +33d6 : 00000000; +33d7 : 00000000; +33d8 : 00000000; +33d9 : 00000000; +33da : 00000000; +33db : 00000000; +33dc : 00000000; +33dd : 00000000; +33de : 00000000; +33df : 00000000; +33e0 : 00000000; +33e1 : 00000000; +33e2 : 00000000; +33e3 : 00000000; +33e4 : 00000000; +33e5 : 00000000; +33e6 : 00000000; +33e7 : 00000000; +33e8 : 00000000; +33e9 : 00000000; +33ea : 00000000; +33eb : 00000000; +33ec : 00000000; +33ed : 00000000; +33ee : 00000000; +33ef : 00000000; +33f0 : 00000000; +33f1 : 00000000; +33f2 : 00000000; +33f3 : 00000000; +33f4 : 00000000; +33f5 : 00000000; +33f6 : 00000000; +33f7 : 00000000; +33f8 : 00000000; +33f9 : 00000000; +33fa : 00000000; +33fb : 00000000; +33fc : 00000000; +33fd : 00000000; +33fe : 00000000; +33ff : 00000000; +3400 : 00000000; +3401 : 00000000; +3402 : 00000000; +3403 : 00000000; +3404 : 00000000; +3405 : 00000000; +3406 : 00000000; +3407 : 00000000; +3408 : 00000000; +3409 : 00000000; +340a : 00000000; +340b : 00000000; +340c : 00000000; +340d : 00000000; +340e : 00000000; +340f : 00000000; +3410 : 00000000; +3411 : 00000000; +3412 : 00000000; +3413 : 00000000; +3414 : 00000000; +3415 : 00000000; +3416 : 00000000; +3417 : 00000000; +3418 : 00000000; +3419 : 00000000; +341a : 00000000; +341b : 00000000; +341c : 00000000; +341d : 00000000; +341e : 00000000; +341f : 00000000; +3420 : 00000000; +3421 : 00000000; +3422 : 00000000; +3423 : 00000000; +3424 : 00000000; +3425 : 00000000; +3426 : 00000000; +3427 : 00000000; +3428 : 00000000; +3429 : 00000000; +342a : 00000000; +342b : 00000000; +342c : 00000000; +342d : 00000000; +342e : 00000000; +342f : 00000000; +3430 : 00000000; +3431 : 00000000; +3432 : 00000000; +3433 : 00000000; +3434 : 00000000; +3435 : 00000000; +3436 : 00000000; +3437 : 00000000; +3438 : 00000000; +3439 : 00000000; +343a : 00000000; +343b : 00000000; +343c : 00000000; +343d : 00000000; +343e : 00000000; +343f : 00000000; +3440 : 00000000; +3441 : 00000000; +3442 : 00000000; +3443 : 00000000; +3444 : 00000000; +3445 : 00000000; +3446 : 00000000; +3447 : 00000000; +3448 : 00000000; +3449 : 00000000; +344a : 00000000; +344b : 00000000; +344c : 00000000; +344d : 00000000; +344e : 00000000; +344f : 00000000; +3450 : 00000000; +3451 : 00000000; +3452 : 00000000; +3453 : 00000000; +3454 : 00000000; +3455 : 00000000; +3456 : 00000000; +3457 : 00000000; +3458 : 00000000; +3459 : 00000000; +345a : 00000000; +345b : 00000000; +345c : 00000000; +345d : 00000000; +345e : 00000000; +345f : 00000000; +3460 : 00000000; +3461 : 00000000; +3462 : 00000000; +3463 : 00000000; +3464 : 00000000; +3465 : 00000000; +3466 : 00000000; +3467 : 00000000; +3468 : 00000000; +3469 : 00000000; +346a : 00000000; +346b : 00000000; +346c : 00000000; +346d : 00000000; +346e : 00000000; +346f : 00000000; +3470 : 00000000; +3471 : 00000000; +3472 : 00000000; +3473 : 00000000; +3474 : 00000000; +3475 : 00000000; +3476 : 00000000; +3477 : 00000000; +3478 : 00000000; +3479 : 00000000; +347a : 00000000; +347b : 00000000; +347c : 00000000; +347d : 00000000; +347e : 00000000; +347f : 00000000; +3480 : 00000000; +3481 : 00000000; +3482 : 00000000; +3483 : 00000000; +3484 : 00000000; +3485 : 00000000; +3486 : 00000000; +3487 : 00000000; +3488 : 00000000; +3489 : 00000000; +348a : 00000000; +348b : 00000000; +348c : 00000000; +348d : 00000000; +348e : 00000000; +348f : 00000000; +3490 : 00000000; +3491 : 00000000; +3492 : 00000000; +3493 : 00000000; +3494 : 00000000; +3495 : 00000000; +3496 : 00000000; +3497 : 00000000; +3498 : 00000000; +3499 : 00000000; +349a : 00000000; +349b : 00000000; +349c : 00000000; +349d : 00000000; +349e : 00000000; +349f : 00000000; +34a0 : 00000000; +34a1 : 00000000; +34a2 : 00000000; +34a3 : 00000000; +34a4 : 00000000; +34a5 : 00000000; +34a6 : 00000000; +34a7 : 00000000; +34a8 : 00000000; +34a9 : 00000000; +34aa : 00000000; +34ab : 00000000; +34ac : 00000000; +34ad : 00000000; +34ae : 00000000; +34af : 00000000; +34b0 : 00000000; +34b1 : 00000000; +34b2 : 00000000; +34b3 : 00000000; +34b4 : 00000000; +34b5 : 00000000; +34b6 : 00000000; +34b7 : 00000000; +34b8 : 00000000; +34b9 : 00000000; +34ba : 00000000; +34bb : 00000000; +34bc : 00000000; +34bd : 00000000; +34be : 00000000; +34bf : 00000000; +34c0 : 00000000; +34c1 : 00000000; +34c2 : 00000000; +34c3 : 00000000; +34c4 : 00000000; +34c5 : 00000000; +34c6 : 00000000; +34c7 : 00000000; +34c8 : 00000000; +34c9 : 00000000; +34ca : 00000000; +34cb : 00000000; +34cc : 00000000; +34cd : 00000000; +34ce : 00000000; +34cf : 00000000; +34d0 : 00000000; +34d1 : 00000000; +34d2 : 00000000; +34d3 : 00000000; +34d4 : 00000000; +34d5 : 00000000; +34d6 : 00000000; +34d7 : 00000000; +34d8 : 00000000; +34d9 : 00000000; +34da : 00000000; +34db : 00000000; +34dc : 00000000; +34dd : 00000000; +34de : 00000000; +34df : 00000000; +34e0 : 00000000; +34e1 : 00000000; +34e2 : 00000000; +34e3 : 00000000; +34e4 : 00000000; +34e5 : 00000000; +34e6 : 00000000; +34e7 : 00000000; +34e8 : 00000000; +34e9 : 00000000; +34ea : 00000000; +34eb : 00000000; +34ec : 00000000; +34ed : 00000000; +34ee : 00000000; +34ef : 00000000; +34f0 : 00000000; +34f1 : 00000000; +34f2 : 00000000; +34f3 : 00000000; +34f4 : 00000000; +34f5 : 00000000; +34f6 : 00000000; +34f7 : 00000000; +34f8 : 00000000; +34f9 : 00000000; +34fa : 00000000; +34fb : 00000000; +34fc : 00000000; +34fd : 00000000; +34fe : 00000000; +34ff : 00000000; +3500 : 00000000; +3501 : 00000000; +3502 : 00000000; +3503 : 00000000; +3504 : 00000000; +3505 : 00000000; +3506 : 00000000; +3507 : 00000000; +3508 : 00000000; +3509 : 00000000; +350a : 00000000; +350b : 00000000; +350c : 00000000; +350d : 00000000; +350e : 00000000; +350f : 00000000; +3510 : 00000000; +3511 : 00000000; +3512 : 00000000; +3513 : 00000000; +3514 : 00000000; +3515 : 00000000; +3516 : 00000000; +3517 : 00000000; +3518 : 00000000; +3519 : 00000000; +351a : 00000000; +351b : 00000000; +351c : 00000000; +351d : 00000000; +351e : 00000000; +351f : 00000000; +3520 : 00000000; +3521 : 00000000; +3522 : 00000000; +3523 : 00000000; +3524 : 00000000; +3525 : 00000000; +3526 : 00000000; +3527 : 00000000; +3528 : 00000000; +3529 : 00000000; +352a : 00000000; +352b : 00000000; +352c : 00000000; +352d : 00000000; +352e : 00000000; +352f : 00000000; +3530 : 00000000; +3531 : 00000000; +3532 : 00000000; +3533 : 00000000; +3534 : 00000000; +3535 : 00000000; +3536 : 00000000; +3537 : 00000000; +3538 : 00000000; +3539 : 00000000; +353a : 00000000; +353b : 00000000; +353c : 00000000; +353d : 00000000; +353e : 00000000; +353f : 00000000; +3540 : 00000000; +3541 : 00000000; +3542 : 00000000; +3543 : 00000000; +3544 : 00000000; +3545 : 00000000; +3546 : 00000000; +3547 : 00000000; +3548 : 00000000; +3549 : 00000000; +354a : 00000000; +354b : 00000000; +354c : 00000000; +354d : 00000000; +354e : 00000000; +354f : 00000000; +3550 : 00000000; +3551 : 00000000; +3552 : 00000000; +3553 : 00000000; +3554 : 00000000; +3555 : 00000000; +3556 : 00000000; +3557 : 00000000; +3558 : 00000000; +3559 : 00000000; +355a : 00000000; +355b : 00000000; +355c : 00000000; +355d : 00000000; +355e : 00000000; +355f : 00000000; +3560 : 00000000; +3561 : 00000000; +3562 : 00000000; +3563 : 00000000; +3564 : 00000000; +3565 : 00000000; +3566 : 00000000; +3567 : 00000000; +3568 : 00000000; +3569 : 00000000; +356a : 00000000; +356b : 00000000; +356c : 00000000; +356d : 00000000; +356e : 00000000; +356f : 00000000; +3570 : 00000000; +3571 : 00000000; +3572 : 00000000; +3573 : 00000000; +3574 : 00000000; +3575 : 00000000; +3576 : 00000000; +3577 : 00000000; +3578 : 00000000; +3579 : 00000000; +357a : 00000000; +357b : 00000000; +357c : 00000000; +357d : 00000000; +357e : 00000000; +357f : 00000000; +3580 : 00000000; +3581 : 00000000; +3582 : 00000000; +3583 : 00000000; +3584 : 00000000; +3585 : 00000000; +3586 : 00000000; +3587 : 00000000; +3588 : 00000000; +3589 : 00000000; +358a : 00000000; +358b : 00000000; +358c : 00000000; +358d : 00000000; +358e : 00000000; +358f : 00000000; +3590 : 00000000; +3591 : 00000000; +3592 : 00000000; +3593 : 00000000; +3594 : 00000000; +3595 : 00000000; +3596 : 00000000; +3597 : 00000000; +3598 : 00000000; +3599 : 00000000; +359a : 00000000; +359b : 00000000; +359c : 00000000; +359d : 00000000; +359e : 00000000; +359f : 00000000; +35a0 : 00000000; +35a1 : 00000000; +35a2 : 00000000; +35a3 : 00000000; +35a4 : 00000000; +35a5 : 00000000; +35a6 : 00000000; +35a7 : 00000000; +35a8 : 00000000; +35a9 : 00000000; +35aa : 00000000; +35ab : 00000000; +35ac : 00000000; +35ad : 00000000; +35ae : 00000000; +35af : 00000000; +35b0 : 00000000; +35b1 : 00000000; +35b2 : 00000000; +35b3 : 00000000; +35b4 : 00000000; +35b5 : 00000000; +35b6 : 00000000; +35b7 : 00000000; +35b8 : 00000000; +35b9 : 00000000; +35ba : 00000000; +35bb : 00000000; +35bc : 00000000; +35bd : 00000000; +35be : 00000000; +35bf : 00000000; +35c0 : 00000000; +35c1 : 00000000; +35c2 : 00000000; +35c3 : 00000000; +35c4 : 00000000; +35c5 : 00000000; +35c6 : 00000000; +35c7 : 00000000; +35c8 : 00000000; +35c9 : 00000000; +35ca : 00000000; +35cb : 00000000; +35cc : 00000000; +35cd : 00000000; +35ce : 00000000; +35cf : 00000000; +35d0 : 00000000; +35d1 : 00000000; +35d2 : 00000000; +35d3 : 00000000; +35d4 : 00000000; +35d5 : 00000000; +35d6 : 00000000; +35d7 : 00000000; +35d8 : 00000000; +35d9 : 00000000; +35da : 00000000; +35db : 00000000; +35dc : 00000000; +35dd : 00000000; +35de : 00000000; +35df : 00000000; +35e0 : 00000000; +35e1 : 00000000; +35e2 : 00000000; +35e3 : 00000000; +35e4 : 00000000; +35e5 : 00000000; +35e6 : 00000000; +35e7 : 00000000; +35e8 : 00000000; +35e9 : 00000000; +35ea : 00000000; +35eb : 00000000; +35ec : 00000000; +35ed : 00000000; +35ee : 00000000; +35ef : 00000000; +35f0 : 00000000; +35f1 : 00000000; +35f2 : 00000000; +35f3 : 00000000; +35f4 : 00000000; +35f5 : 00000000; +35f6 : 00000000; +35f7 : 00000000; +35f8 : 00000000; +35f9 : 00000000; +35fa : 00000000; +35fb : 00000000; +35fc : 00000000; +35fd : 00000000; +35fe : 00000000; +35ff : 00000000; +3600 : 00000000; +3601 : 00000000; +3602 : 00000000; +3603 : 00000000; +3604 : 00000000; +3605 : 00000000; +3606 : 00000000; +3607 : 00000000; +3608 : 00000000; +3609 : 00000000; +360a : 00000000; +360b : 00000000; +360c : 00000000; +360d : 00000000; +360e : 00000000; +360f : 00000000; +3610 : 00000000; +3611 : 00000000; +3612 : 00000000; +3613 : 00000000; +3614 : 00000000; +3615 : 00000000; +3616 : 00000000; +3617 : 00000000; +3618 : 00000000; +3619 : 00000000; +361a : 00000000; +361b : 00000000; +361c : 00000000; +361d : 00000000; +361e : 00000000; +361f : 00000000; +3620 : 00000000; +3621 : 00000000; +3622 : 00000000; +3623 : 00000000; +3624 : 00000000; +3625 : 00000000; +3626 : 00000000; +3627 : 00000000; +3628 : 00000000; +3629 : 00000000; +362a : 00000000; +362b : 00000000; +362c : 00000000; +362d : 00000000; +362e : 00000000; +362f : 00000000; +3630 : 00000000; +3631 : 00000000; +3632 : 00000000; +3633 : 00000000; +3634 : 00000000; +3635 : 00000000; +3636 : 00000000; +3637 : 00000000; +3638 : 00000000; +3639 : 00000000; +363a : 00000000; +363b : 00000000; +363c : 00000000; +363d : 00000000; +363e : 00000000; +363f : 00000000; +3640 : 00000000; +3641 : 00000000; +3642 : 00000000; +3643 : 00000000; +3644 : 00000000; +3645 : 00000000; +3646 : 00000000; +3647 : 00000000; +3648 : 00000000; +3649 : 00000000; +364a : 00000000; +364b : 00000000; +364c : 00000000; +364d : 00000000; +364e : 00000000; +364f : 00000000; +3650 : 00000000; +3651 : 00000000; +3652 : 00000000; +3653 : 00000000; +3654 : 00000000; +3655 : 00000000; +3656 : 00000000; +3657 : 00000000; +3658 : 00000000; +3659 : 00000000; +365a : 00000000; +365b : 00000000; +365c : 00000000; +365d : 00000000; +365e : 00000000; +365f : 00000000; +3660 : 00000000; +3661 : 00000000; +3662 : 00000000; +3663 : 00000000; +3664 : 00000000; +3665 : 00000000; +3666 : 00000000; +3667 : 00000000; +3668 : 00000000; +3669 : 00000000; +366a : 00000000; +366b : 00000000; +366c : 00000000; +366d : 00000000; +366e : 00000000; +366f : 00000000; +3670 : 00000000; +3671 : 00000000; +3672 : 00000000; +3673 : 00000000; +3674 : 00000000; +3675 : 00000000; +3676 : 00000000; +3677 : 00000000; +3678 : 00000000; +3679 : 00000000; +367a : 00000000; +367b : 00000000; +367c : 00000000; +367d : 00000000; +367e : 00000000; +367f : 00000000; +3680 : 00000000; +3681 : 00000000; +3682 : 00000000; +3683 : 00000000; +3684 : 00000000; +3685 : 00000000; +3686 : 00000000; +3687 : 00000000; +3688 : 00000000; +3689 : 00000000; +368a : 00000000; +368b : 00000000; +368c : 00000000; +368d : 00000000; +368e : 00000000; +368f : 00000000; +3690 : 00000000; +3691 : 00000000; +3692 : 00000000; +3693 : 00000000; +3694 : 00000000; +3695 : 00000000; +3696 : 00000000; +3697 : 00000000; +3698 : 00000000; +3699 : 00000000; +369a : 00000000; +369b : 00000000; +369c : 00000000; +369d : 00000000; +369e : 00000000; +369f : 00000000; +36a0 : 00000000; +36a1 : 00000000; +36a2 : 00000000; +36a3 : 00000000; +36a4 : 00000000; +36a5 : 00000000; +36a6 : 00000000; +36a7 : 00000000; +36a8 : 00000000; +36a9 : 00000000; +36aa : 00000000; +36ab : 00000000; +36ac : 00000000; +36ad : 00000000; +36ae : 00000000; +36af : 00000000; +36b0 : 00000000; +36b1 : 00000000; +36b2 : 00000000; +36b3 : 00000000; +36b4 : 00000000; +36b5 : 00000000; +36b6 : 00000000; +36b7 : 00000000; +36b8 : 00000000; +36b9 : 00000000; +36ba : 00000000; +36bb : 00000000; +36bc : 00000000; +36bd : 00000000; +36be : 00000000; +36bf : 00000000; +36c0 : 00000000; +36c1 : 00000000; +36c2 : 00000000; +36c3 : 00000000; +36c4 : 00000000; +36c5 : 00000000; +36c6 : 00000000; +36c7 : 00000000; +36c8 : 00000000; +36c9 : 00000000; +36ca : 00000000; +36cb : 00000000; +36cc : 00000000; +36cd : 00000000; +36ce : 00000000; +36cf : 00000000; +36d0 : 00000000; +36d1 : 00000000; +36d2 : 00000000; +36d3 : 00000000; +36d4 : 00000000; +36d5 : 00000000; +36d6 : 00000000; +36d7 : 00000000; +36d8 : 00000000; +36d9 : 00000000; +36da : 00000000; +36db : 00000000; +36dc : 00000000; +36dd : 00000000; +36de : 00000000; +36df : 00000000; +36e0 : 00000000; +36e1 : 00000000; +36e2 : 00000000; +36e3 : 00000000; +36e4 : 00000000; +36e5 : 00000000; +36e6 : 00000000; +36e7 : 00000000; +36e8 : 00000000; +36e9 : 00000000; +36ea : 00000000; +36eb : 00000000; +36ec : 00000000; +36ed : 00000000; +36ee : 00000000; +36ef : 00000000; +36f0 : 00000000; +36f1 : 00000000; +36f2 : 00000000; +36f3 : 00000000; +36f4 : 00000000; +36f5 : 00000000; +36f6 : 00000000; +36f7 : 00000000; +36f8 : 00000000; +36f9 : 00000000; +36fa : 00000000; +36fb : 00000000; +36fc : 00000000; +36fd : 00000000; +36fe : 00000000; +36ff : 00000000; +3700 : 00000000; +3701 : 00000000; +3702 : 00000000; +3703 : 00000000; +3704 : 00000000; +3705 : 00000000; +3706 : 00000000; +3707 : 00000000; +3708 : 00000000; +3709 : 00000000; +370a : 00000000; +370b : 00000000; +370c : 00000000; +370d : 00000000; +370e : 00000000; +370f : 00000000; +3710 : 00000000; +3711 : 00000000; +3712 : 00000000; +3713 : 00000000; +3714 : 00000000; +3715 : 00000000; +3716 : 00000000; +3717 : 00000000; +3718 : 00000000; +3719 : 00000000; +371a : 00000000; +371b : 00000000; +371c : 00000000; +371d : 00000000; +371e : 00000000; +371f : 00000000; +3720 : 00000000; +3721 : 00000000; +3722 : 00000000; +3723 : 00000000; +3724 : 00000000; +3725 : 00000000; +3726 : 00000000; +3727 : 00000000; +3728 : 00000000; +3729 : 00000000; +372a : 00000000; +372b : 00000000; +372c : 00000000; +372d : 00000000; +372e : 00000000; +372f : 00000000; +3730 : 00000000; +3731 : 00000000; +3732 : 00000000; +3733 : 00000000; +3734 : 00000000; +3735 : 00000000; +3736 : 00000000; +3737 : 00000000; +3738 : 00000000; +3739 : 00000000; +373a : 00000000; +373b : 00000000; +373c : 00000000; +373d : 00000000; +373e : 00000000; +373f : 00000000; +3740 : 00000000; +3741 : 00000000; +3742 : 00000000; +3743 : 00000000; +3744 : 00000000; +3745 : 00000000; +3746 : 00000000; +3747 : 00000000; +3748 : 00000000; +3749 : 00000000; +374a : 00000000; +374b : 00000000; +374c : 00000000; +374d : 00000000; +374e : 00000000; +374f : 00000000; +3750 : 00000000; +3751 : 00000000; +3752 : 00000000; +3753 : 00000000; +3754 : 00000000; +3755 : 00000000; +3756 : 00000000; +3757 : 00000000; +3758 : 00000000; +3759 : 00000000; +375a : 00000000; +375b : 00000000; +375c : 00000000; +375d : 00000000; +375e : 00000000; +375f : 00000000; +3760 : 00000000; +3761 : 00000000; +3762 : 00000000; +3763 : 00000000; +3764 : 00000000; +3765 : 00000000; +3766 : 00000000; +3767 : 00000000; +3768 : 00000000; +3769 : 00000000; +376a : 00000000; +376b : 00000000; +376c : 00000000; +376d : 00000000; +376e : 00000000; +376f : 00000000; +3770 : 00000000; +3771 : 00000000; +3772 : 00000000; +3773 : 00000000; +3774 : 00000000; +3775 : 00000000; +3776 : 00000000; +3777 : 00000000; +3778 : 00000000; +3779 : 00000000; +377a : 00000000; +377b : 00000000; +377c : 00000000; +377d : 00000000; +377e : 00000000; +377f : 00000000; +3780 : 00000000; +3781 : 00000000; +3782 : 00000000; +3783 : 00000000; +3784 : 00000000; +3785 : 00000000; +3786 : 00000000; +3787 : 00000000; +3788 : 00000000; +3789 : 00000000; +378a : 00000000; +378b : 00000000; +378c : 00000000; +378d : 00000000; +378e : 00000000; +378f : 00000000; +3790 : 00000000; +3791 : 00000000; +3792 : 00000000; +3793 : 00000000; +3794 : 00000000; +3795 : 00000000; +3796 : 00000000; +3797 : 00000000; +3798 : 00000000; +3799 : 00000000; +379a : 00000000; +379b : 00000000; +379c : 00000000; +379d : 00000000; +379e : 00000000; +379f : 00000000; +37a0 : 00000000; +37a1 : 00000000; +37a2 : 00000000; +37a3 : 00000000; +37a4 : 00000000; +37a5 : 00000000; +37a6 : 00000000; +37a7 : 00000000; +37a8 : 00000000; +37a9 : 00000000; +37aa : 00000000; +37ab : 00000000; +37ac : 00000000; +37ad : 00000000; +37ae : 00000000; +37af : 00000000; +37b0 : 00000000; +37b1 : 00000000; +37b2 : 00000000; +37b3 : 00000000; +37b4 : 00000000; +37b5 : 00000000; +37b6 : 00000000; +37b7 : 00000000; +37b8 : 00000000; +37b9 : 00000000; +37ba : 00000000; +37bb : 00000000; +37bc : 00000000; +37bd : 00000000; +37be : 00000000; +37bf : 00000000; +37c0 : 00000000; +37c1 : 00000000; +37c2 : 00000000; +37c3 : 00000000; +37c4 : 00000000; +37c5 : 00000000; +37c6 : 00000000; +37c7 : 00000000; +37c8 : 00000000; +37c9 : 00000000; +37ca : 00000000; +37cb : 00000000; +37cc : 00000000; +37cd : 00000000; +37ce : 00000000; +37cf : 00000000; +37d0 : 00000000; +37d1 : 00000000; +37d2 : 00000000; +37d3 : 00000000; +37d4 : 00000000; +37d5 : 00000000; +37d6 : 00000000; +37d7 : 00000000; +37d8 : 00000000; +37d9 : 00000000; +37da : 00000000; +37db : 00000000; +37dc : 00000000; +37dd : 00000000; +37de : 00000000; +37df : 00000000; +37e0 : 00000000; +37e1 : 00000000; +37e2 : 00000000; +37e3 : 00000000; +37e4 : 00000000; +37e5 : 00000000; +37e6 : 00000000; +37e7 : 00000000; +37e8 : 00000000; +37e9 : 00000000; +37ea : 00000000; +37eb : 00000000; +37ec : 00000000; +37ed : 00000000; +37ee : 00000000; +37ef : 00000000; +37f0 : 00000000; +37f1 : 00000000; +37f2 : 00000000; +37f3 : 00000000; +37f4 : 00000000; +37f5 : 00000000; +37f6 : 00000000; +37f7 : 00000000; +37f8 : 00000000; +37f9 : 00000000; +37fa : 00000000; +37fb : 00000000; +37fc : 00000000; +37fd : 00000000; +37fe : 00000000; +37ff : 00000000; +3800 : 00000000; +3801 : 00000000; +3802 : 00000000; +3803 : 00000000; +3804 : 00000000; +3805 : 00000000; +3806 : 00000000; +3807 : 00000000; +3808 : 00000000; +3809 : 00000000; +380a : 00000000; +380b : 00000000; +380c : 00000000; +380d : 00000000; +380e : 00000000; +380f : 00000000; +3810 : 00000000; +3811 : 00000000; +3812 : 00000000; +3813 : 00000000; +3814 : 00000000; +3815 : 00000000; +3816 : 00000000; +3817 : 00000000; +3818 : 00000000; +3819 : 00000000; +381a : 00000000; +381b : 00000000; +381c : 00000000; +381d : 00000000; +381e : 00000000; +381f : 00000000; +3820 : 00000000; +3821 : 00000000; +3822 : 00000000; +3823 : 00000000; +3824 : 00000000; +3825 : 00000000; +3826 : 00000000; +3827 : 00000000; +3828 : 00000000; +3829 : 00000000; +382a : 00000000; +382b : 00000000; +382c : 00000000; +382d : 00000000; +382e : 00000000; +382f : 00000000; +3830 : 00000000; +3831 : 00000000; +3832 : 00000000; +3833 : 00000000; +3834 : 00000000; +3835 : 00000000; +3836 : 00000000; +3837 : 00000000; +3838 : 00000000; +3839 : 00000000; +383a : 00000000; +383b : 00000000; +383c : 00000000; +383d : 00000000; +383e : 00000000; +383f : 00000000; +3840 : 00000000; +3841 : 00000000; +3842 : 00000000; +3843 : 00000000; +3844 : 00000000; +3845 : 00000000; +3846 : 00000000; +3847 : 00000000; +3848 : 00000000; +3849 : 00000000; +384a : 00000000; +384b : 00000000; +384c : 00000000; +384d : 00000000; +384e : 00000000; +384f : 00000000; +3850 : 00000000; +3851 : 00000000; +3852 : 00000000; +3853 : 00000000; +3854 : 00000000; +3855 : 00000000; +3856 : 00000000; +3857 : 00000000; +3858 : 00000000; +3859 : 00000000; +385a : 00000000; +385b : 00000000; +385c : 00000000; +385d : 00000000; +385e : 00000000; +385f : 00000000; +3860 : 00000000; +3861 : 00000000; +3862 : 00000000; +3863 : 00000000; +3864 : 00000000; +3865 : 00000000; +3866 : 00000000; +3867 : 00000000; +3868 : 00000000; +3869 : 00000000; +386a : 00000000; +386b : 00000000; +386c : 00000000; +386d : 00000000; +386e : 00000000; +386f : 00000000; +3870 : 00000000; +3871 : 00000000; +3872 : 00000000; +3873 : 00000000; +3874 : 00000000; +3875 : 00000000; +3876 : 00000000; +3877 : 00000000; +3878 : 00000000; +3879 : 00000000; +387a : 00000000; +387b : 00000000; +387c : 00000000; +387d : 00000000; +387e : 00000000; +387f : 00000000; +3880 : 00000000; +3881 : 00000000; +3882 : 00000000; +3883 : 00000000; +3884 : 00000000; +3885 : 00000000; +3886 : 00000000; +3887 : 00000000; +3888 : 00000000; +3889 : 00000000; +388a : 00000000; +388b : 00000000; +388c : 00000000; +388d : 00000000; +388e : 00000000; +388f : 00000000; +3890 : 00000000; +3891 : 00000000; +3892 : 00000000; +3893 : 00000000; +3894 : 00000000; +3895 : 00000000; +3896 : 00000000; +3897 : 00000000; +3898 : 00000000; +3899 : 00000000; +389a : 00000000; +389b : 00000000; +389c : 00000000; +389d : 00000000; +389e : 00000000; +389f : 00000000; +38a0 : 00000000; +38a1 : 00000000; +38a2 : 00000000; +38a3 : 00000000; +38a4 : 00000000; +38a5 : 00000000; +38a6 : 00000000; +38a7 : 00000000; +38a8 : 00000000; +38a9 : 00000000; +38aa : 00000000; +38ab : 00000000; +38ac : 00000000; +38ad : 00000000; +38ae : 00000000; +38af : 00000000; +38b0 : 00000000; +38b1 : 00000000; +38b2 : 00000000; +38b3 : 00000000; +38b4 : 00000000; +38b5 : 00000000; +38b6 : 00000000; +38b7 : 00000000; +38b8 : 00000000; +38b9 : 00000000; +38ba : 00000000; +38bb : 00000000; +38bc : 00000000; +38bd : 00000000; +38be : 00000000; +38bf : 00000000; +38c0 : 00000000; +38c1 : 00000000; +38c2 : 00000000; +38c3 : 00000000; +38c4 : 00000000; +38c5 : 00000000; +38c6 : 00000000; +38c7 : 00000000; +38c8 : 00000000; +38c9 : 00000000; +38ca : 00000000; +38cb : 00000000; +38cc : 00000000; +38cd : 00000000; +38ce : 00000000; +38cf : 00000000; +38d0 : 00000000; +38d1 : 00000000; +38d2 : 00000000; +38d3 : 00000000; +38d4 : 00000000; +38d5 : 00000000; +38d6 : 00000000; +38d7 : 00000000; +38d8 : 00000000; +38d9 : 00000000; +38da : 00000000; +38db : 00000000; +38dc : 00000000; +38dd : 00000000; +38de : 00000000; +38df : 00000000; +38e0 : 00000000; +38e1 : 00000000; +38e2 : 00000000; +38e3 : 00000000; +38e4 : 00000000; +38e5 : 00000000; +38e6 : 00000000; +38e7 : 00000000; +38e8 : 00000000; +38e9 : 00000000; +38ea : 00000000; +38eb : 00000000; +38ec : 00000000; +38ed : 00000000; +38ee : 00000000; +38ef : 00000000; +38f0 : 00000000; +38f1 : 00000000; +38f2 : 00000000; +38f3 : 00000000; +38f4 : 00000000; +38f5 : 00000000; +38f6 : 00000000; +38f7 : 00000000; +38f8 : 00000000; +38f9 : 00000000; +38fa : 00000000; +38fb : 00000000; +38fc : 00000000; +38fd : 00000000; +38fe : 00000000; +38ff : 00000000; +3900 : 00000000; +3901 : 00000000; +3902 : 00000000; +3903 : 00000000; +3904 : 00000000; +3905 : 00000000; +3906 : 00000000; +3907 : 00000000; +3908 : 00000000; +3909 : 00000000; +390a : 00000000; +390b : 00000000; +390c : 00000000; +390d : 00000000; +390e : 00000000; +390f : 00000000; +3910 : 00000000; +3911 : 00000000; +3912 : 00000000; +3913 : 00000000; +3914 : 00000000; +3915 : 00000000; +3916 : 00000000; +3917 : 00000000; +3918 : 00000000; +3919 : 00000000; +391a : 00000000; +391b : 00000000; +391c : 00000000; +391d : 00000000; +391e : 00000000; +391f : 00000000; +3920 : 00000000; +3921 : 00000000; +3922 : 00000000; +3923 : 00000000; +3924 : 00000000; +3925 : 00000000; +3926 : 00000000; +3927 : 00000000; +3928 : 00000000; +3929 : 00000000; +392a : 00000000; +392b : 00000000; +392c : 00000000; +392d : 00000000; +392e : 00000000; +392f : 00000000; +3930 : 00000000; +3931 : 00000000; +3932 : 00000000; +3933 : 00000000; +3934 : 00000000; +3935 : 00000000; +3936 : 00000000; +3937 : 00000000; +3938 : 00000000; +3939 : 00000000; +393a : 00000000; +393b : 00000000; +393c : 00000000; +393d : 00000000; +393e : 00000000; +393f : 00000000; +3940 : 00000000; +3941 : 00000000; +3942 : 00000000; +3943 : 00000000; +3944 : 00000000; +3945 : 00000000; +3946 : 00000000; +3947 : 00000000; +3948 : 00000000; +3949 : 00000000; +394a : 00000000; +394b : 00000000; +394c : 00000000; +394d : 00000000; +394e : 00000000; +394f : 00000000; +3950 : 00000000; +3951 : 00000000; +3952 : 00000000; +3953 : 00000000; +3954 : 00000000; +3955 : 00000000; +3956 : 00000000; +3957 : 00000000; +3958 : 00000000; +3959 : 00000000; +395a : 00000000; +395b : 00000000; +395c : 00000000; +395d : 00000000; +395e : 00000000; +395f : 00000000; +3960 : 00000000; +3961 : 00000000; +3962 : 00000000; +3963 : 00000000; +3964 : 00000000; +3965 : 00000000; +3966 : 00000000; +3967 : 00000000; +3968 : 00000000; +3969 : 00000000; +396a : 00000000; +396b : 00000000; +396c : 00000000; +396d : 00000000; +396e : 00000000; +396f : 00000000; +3970 : 00000000; +3971 : 00000000; +3972 : 00000000; +3973 : 00000000; +3974 : 00000000; +3975 : 00000000; +3976 : 00000000; +3977 : 00000000; +3978 : 00000000; +3979 : 00000000; +397a : 00000000; +397b : 00000000; +397c : 00000000; +397d : 00000000; +397e : 00000000; +397f : 00000000; +3980 : 00000000; +3981 : 00000000; +3982 : 00000000; +3983 : 00000000; +3984 : 00000000; +3985 : 00000000; +3986 : 00000000; +3987 : 00000000; +3988 : 00000000; +3989 : 00000000; +398a : 00000000; +398b : 00000000; +398c : 00000000; +398d : 00000000; +398e : 00000000; +398f : 00000000; +3990 : 00000000; +3991 : 00000000; +3992 : 00000000; +3993 : 00000000; +3994 : 00000000; +3995 : 00000000; +3996 : 00000000; +3997 : 00000000; +3998 : 00000000; +3999 : 00000000; +399a : 00000000; +399b : 00000000; +399c : 00000000; +399d : 00000000; +399e : 00000000; +399f : 00000000; +39a0 : 00000000; +39a1 : 00000000; +39a2 : 00000000; +39a3 : 00000000; +39a4 : 00000000; +39a5 : 00000000; +39a6 : 00000000; +39a7 : 00000000; +39a8 : 00000000; +39a9 : 00000000; +39aa : 00000000; +39ab : 00000000; +39ac : 00000000; +39ad : 00000000; +39ae : 00000000; +39af : 00000000; +39b0 : 00000000; +39b1 : 00000000; +39b2 : 00000000; +39b3 : 00000000; +39b4 : 00000000; +39b5 : 00000000; +39b6 : 00000000; +39b7 : 00000000; +39b8 : 00000000; +39b9 : 00000000; +39ba : 00000000; +39bb : 00000000; +39bc : 00000000; +39bd : 00000000; +39be : 00000000; +39bf : 00000000; +39c0 : 00000000; +39c1 : 00000000; +39c2 : 00000000; +39c3 : 00000000; +39c4 : 00000000; +39c5 : 00000000; +39c6 : 00000000; +39c7 : 00000000; +39c8 : 00000000; +39c9 : 00000000; +39ca : 00000000; +39cb : 00000000; +39cc : 00000000; +39cd : 00000000; +39ce : 00000000; +39cf : 00000000; +39d0 : 00000000; +39d1 : 00000000; +39d2 : 00000000; +39d3 : 00000000; +39d4 : 00000000; +39d5 : 00000000; +39d6 : 00000000; +39d7 : 00000000; +39d8 : 00000000; +39d9 : 00000000; +39da : 00000000; +39db : 00000000; +39dc : 00000000; +39dd : 00000000; +39de : 00000000; +39df : 00000000; +39e0 : 00000000; +39e1 : 00000000; +39e2 : 00000000; +39e3 : 00000000; +39e4 : 00000000; +39e5 : 00000000; +39e6 : 00000000; +39e7 : 00000000; +39e8 : 00000000; +39e9 : 00000000; +39ea : 00000000; +39eb : 00000000; +39ec : 00000000; +39ed : 00000000; +39ee : 00000000; +39ef : 00000000; +39f0 : 00000000; +39f1 : 00000000; +39f2 : 00000000; +39f3 : 00000000; +39f4 : 00000000; +39f5 : 00000000; +39f6 : 00000000; +39f7 : 00000000; +39f8 : 00000000; +39f9 : 00000000; +39fa : 00000000; +39fb : 00000000; +39fc : 00000000; +39fd : 00000000; +39fe : 00000000; +39ff : 00000000; +3a00 : 00000000; +3a01 : 00000000; +3a02 : 00000000; +3a03 : 00000000; +3a04 : 00000000; +3a05 : 00000000; +3a06 : 00000000; +3a07 : 00000000; +3a08 : 00000000; +3a09 : 00000000; +3a0a : 00000000; +3a0b : 00000000; +3a0c : 00000000; +3a0d : 00000000; +3a0e : 00000000; +3a0f : 00000000; +3a10 : 00000000; +3a11 : 00000000; +3a12 : 00000000; +3a13 : 00000000; +3a14 : 00000000; +3a15 : 00000000; +3a16 : 00000000; +3a17 : 00000000; +3a18 : 00000000; +3a19 : 00000000; +3a1a : 00000000; +3a1b : 00000000; +3a1c : 00000000; +3a1d : 00000000; +3a1e : 00000000; +3a1f : 00000000; +3a20 : 00000000; +3a21 : 00000000; +3a22 : 00000000; +3a23 : 00000000; +3a24 : 00000000; +3a25 : 00000000; +3a26 : 00000000; +3a27 : 00000000; +3a28 : 00000000; +3a29 : 00000000; +3a2a : 00000000; +3a2b : 00000000; +3a2c : 00000000; +3a2d : 00000000; +3a2e : 00000000; +3a2f : 00000000; +3a30 : 00000000; +3a31 : 00000000; +3a32 : 00000000; +3a33 : 00000000; +3a34 : 00000000; +3a35 : 00000000; +3a36 : 00000000; +3a37 : 00000000; +3a38 : 00000000; +3a39 : 00000000; +3a3a : 00000000; +3a3b : 00000000; +3a3c : 00000000; +3a3d : 00000000; +3a3e : 00000000; +3a3f : 00000000; +3a40 : 00000000; +3a41 : 00000000; +3a42 : 00000000; +3a43 : 00000000; +3a44 : 00000000; +3a45 : 00000000; +3a46 : 00000000; +3a47 : 00000000; +3a48 : 00000000; +3a49 : 00000000; +3a4a : 00000000; +3a4b : 00000000; +3a4c : 00000000; +3a4d : 00000000; +3a4e : 00000000; +3a4f : 00000000; +3a50 : 00000000; +3a51 : 00000000; +3a52 : 00000000; +3a53 : 00000000; +3a54 : 00000000; +3a55 : 00000000; +3a56 : 00000000; +3a57 : 00000000; +3a58 : 00000000; +3a59 : 00000000; +3a5a : 00000000; +3a5b : 00000000; +3a5c : 00000000; +3a5d : 00000000; +3a5e : 00000000; +3a5f : 00000000; +3a60 : 00000000; +3a61 : 00000000; +3a62 : 00000000; +3a63 : 00000000; +3a64 : 00000000; +3a65 : 00000000; +3a66 : 00000000; +3a67 : 00000000; +3a68 : 00000000; +3a69 : 00000000; +3a6a : 00000000; +3a6b : 00000000; +3a6c : 00000000; +3a6d : 00000000; +3a6e : 00000000; +3a6f : 00000000; +3a70 : 00000000; +3a71 : 00000000; +3a72 : 00000000; +3a73 : 00000000; +3a74 : 00000000; +3a75 : 00000000; +3a76 : 00000000; +3a77 : 00000000; +3a78 : 00000000; +3a79 : 00000000; +3a7a : 00000000; +3a7b : 00000000; +3a7c : 00000000; +3a7d : 00000000; +3a7e : 00000000; +3a7f : 00000000; +3a80 : 00000000; +3a81 : 00000000; +3a82 : 00000000; +3a83 : 00000000; +3a84 : 00000000; +3a85 : 00000000; +3a86 : 00000000; +3a87 : 00000000; +3a88 : 00000000; +3a89 : 00000000; +3a8a : 00000000; +3a8b : 00000000; +3a8c : 00000000; +3a8d : 00000000; +3a8e : 00000000; +3a8f : 00000000; +3a90 : 00000000; +3a91 : 00000000; +3a92 : 00000000; +3a93 : 00000000; +3a94 : 00000000; +3a95 : 00000000; +3a96 : 00000000; +3a97 : 00000000; +3a98 : 00000000; +3a99 : 00000000; +3a9a : 00000000; +3a9b : 00000000; +3a9c : 00000000; +3a9d : 00000000; +3a9e : 00000000; +3a9f : 00000000; +3aa0 : 00000000; +3aa1 : 00000000; +3aa2 : 00000000; +3aa3 : 00000000; +3aa4 : 00000000; +3aa5 : 00000000; +3aa6 : 00000000; +3aa7 : 00000000; +3aa8 : 00000000; +3aa9 : 00000000; +3aaa : 00000000; +3aab : 00000000; +3aac : 00000000; +3aad : 00000000; +3aae : 00000000; +3aaf : 00000000; +3ab0 : 00000000; +3ab1 : 00000000; +3ab2 : 00000000; +3ab3 : 00000000; +3ab4 : 00000000; +3ab5 : 00000000; +3ab6 : 00000000; +3ab7 : 00000000; +3ab8 : 00000000; +3ab9 : 00000000; +3aba : 00000000; +3abb : 00000000; +3abc : 00000000; +3abd : 00000000; +3abe : 00000000; +3abf : 00000000; +3ac0 : 00000000; +3ac1 : 00000000; +3ac2 : 00000000; +3ac3 : 00000000; +3ac4 : 00000000; +3ac5 : 00000000; +3ac6 : 00000000; +3ac7 : 00000000; +3ac8 : 00000000; +3ac9 : 00000000; +3aca : 00000000; +3acb : 00000000; +3acc : 00000000; +3acd : 00000000; +3ace : 00000000; +3acf : 00000000; +3ad0 : 00000000; +3ad1 : 00000000; +3ad2 : 00000000; +3ad3 : 00000000; +3ad4 : 00000000; +3ad5 : 00000000; +3ad6 : 00000000; +3ad7 : 00000000; +3ad8 : 00000000; +3ad9 : 00000000; +3ada : 00000000; +3adb : 00000000; +3adc : 00000000; +3add : 00000000; +3ade : 00000000; +3adf : 00000000; +3ae0 : 00000000; +3ae1 : 00000000; +3ae2 : 00000000; +3ae3 : 00000000; +3ae4 : 00000000; +3ae5 : 00000000; +3ae6 : 00000000; +3ae7 : 00000000; +3ae8 : 00000000; +3ae9 : 00000000; +3aea : 00000000; +3aeb : 00000000; +3aec : 00000000; +3aed : 00000000; +3aee : 00000000; +3aef : 00000000; +3af0 : 00000000; +3af1 : 00000000; +3af2 : 00000000; +3af3 : 00000000; +3af4 : 00000000; +3af5 : 00000000; +3af6 : 00000000; +3af7 : 00000000; +3af8 : 00000000; +3af9 : 00000000; +3afa : 00000000; +3afb : 00000000; +3afc : 00000000; +3afd : 00000000; +3afe : 00000000; +3aff : 00000000; +3b00 : 00000000; +3b01 : 00000000; +3b02 : 00000000; +3b03 : 00000000; +3b04 : 00000000; +3b05 : 00000000; +3b06 : 00000000; +3b07 : 00000000; +3b08 : 00000000; +3b09 : 00000000; +3b0a : 00000000; +3b0b : 00000000; +3b0c : 00000000; +3b0d : 00000000; +3b0e : 00000000; +3b0f : 00000000; +3b10 : 00000000; +3b11 : 00000000; +3b12 : 00000000; +3b13 : 00000000; +3b14 : 00000000; +3b15 : 00000000; +3b16 : 00000000; +3b17 : 00000000; +3b18 : 00000000; +3b19 : 00000000; +3b1a : 00000000; +3b1b : 00000000; +3b1c : 00000000; +3b1d : 00000000; +3b1e : 00000000; +3b1f : 00000000; +3b20 : 00000000; +3b21 : 00000000; +3b22 : 00000000; +3b23 : 00000000; +3b24 : 00000000; +3b25 : 00000000; +3b26 : 00000000; +3b27 : 00000000; +3b28 : 00000000; +3b29 : 00000000; +3b2a : 00000000; +3b2b : 00000000; +3b2c : 00000000; +3b2d : 00000000; +3b2e : 00000000; +3b2f : 00000000; +3b30 : 00000000; +3b31 : 00000000; +3b32 : 00000000; +3b33 : 00000000; +3b34 : 00000000; +3b35 : 00000000; +3b36 : 00000000; +3b37 : 00000000; +3b38 : 00000000; +3b39 : 00000000; +3b3a : 00000000; +3b3b : 00000000; +3b3c : 00000000; +3b3d : 00000000; +3b3e : 00000000; +3b3f : 00000000; +3b40 : 00000000; +3b41 : 00000000; +3b42 : 00000000; +3b43 : 00000000; +3b44 : 00000000; +3b45 : 00000000; +3b46 : 00000000; +3b47 : 00000000; +3b48 : 00000000; +3b49 : 00000000; +3b4a : 00000000; +3b4b : 00000000; +3b4c : 00000000; +3b4d : 00000000; +3b4e : 00000000; +3b4f : 00000000; +3b50 : 00000000; +3b51 : 00000000; +3b52 : 00000000; +3b53 : 00000000; +3b54 : 00000000; +3b55 : 00000000; +3b56 : 00000000; +3b57 : 00000000; +3b58 : 00000000; +3b59 : 00000000; +3b5a : 00000000; +3b5b : 00000000; +3b5c : 00000000; +3b5d : 00000000; +3b5e : 00000000; +3b5f : 00000000; +3b60 : 00000000; +3b61 : 00000000; +3b62 : 00000000; +3b63 : 00000000; +3b64 : 00000000; +3b65 : 00000000; +3b66 : 00000000; +3b67 : 00000000; +3b68 : 00000000; +3b69 : 00000000; +3b6a : 00000000; +3b6b : 00000000; +3b6c : 00000000; +3b6d : 00000000; +3b6e : 00000000; +3b6f : 00000000; +3b70 : 00000000; +3b71 : 00000000; +3b72 : 00000000; +3b73 : 00000000; +3b74 : 00000000; +3b75 : 00000000; +3b76 : 00000000; +3b77 : 00000000; +3b78 : 00000000; +3b79 : 00000000; +3b7a : 00000000; +3b7b : 00000000; +3b7c : 00000000; +3b7d : 00000000; +3b7e : 00000000; +3b7f : 00000000; +3b80 : 00000000; +3b81 : 00000000; +3b82 : 00000000; +3b83 : 00000000; +3b84 : 00000000; +3b85 : 00000000; +3b86 : 00000000; +3b87 : 00000000; +3b88 : 00000000; +3b89 : 00000000; +3b8a : 00000000; +3b8b : 00000000; +3b8c : 00000000; +3b8d : 00000000; +3b8e : 00000000; +3b8f : 00000000; +3b90 : 00000000; +3b91 : 00000000; +3b92 : 00000000; +3b93 : 00000000; +3b94 : 00000000; +3b95 : 00000000; +3b96 : 00000000; +3b97 : 00000000; +3b98 : 00000000; +3b99 : 00000000; +3b9a : 00000000; +3b9b : 00000000; +3b9c : 00000000; +3b9d : 00000000; +3b9e : 00000000; +3b9f : 00000000; +3ba0 : 00000000; +3ba1 : 00000000; +3ba2 : 00000000; +3ba3 : 00000000; +3ba4 : 00000000; +3ba5 : 00000000; +3ba6 : 00000000; +3ba7 : 00000000; +3ba8 : 00000000; +3ba9 : 00000000; +3baa : 00000000; +3bab : 00000000; +3bac : 00000000; +3bad : 00000000; +3bae : 00000000; +3baf : 00000000; +3bb0 : 00000000; +3bb1 : 00000000; +3bb2 : 00000000; +3bb3 : 00000000; +3bb4 : 00000000; +3bb5 : 00000000; +3bb6 : 00000000; +3bb7 : 00000000; +3bb8 : 00000000; +3bb9 : 00000000; +3bba : 00000000; +3bbb : 00000000; +3bbc : 00000000; +3bbd : 00000000; +3bbe : 00000000; +3bbf : 00000000; +3bc0 : 00000000; +3bc1 : 00000000; +3bc2 : 00000000; +3bc3 : 00000000; +3bc4 : 00000000; +3bc5 : 00000000; +3bc6 : 00000000; +3bc7 : 00000000; +3bc8 : 00000000; +3bc9 : 00000000; +3bca : 00000000; +3bcb : 00000000; +3bcc : 00000000; +3bcd : 00000000; +3bce : 00000000; +3bcf : 00000000; +3bd0 : 00000000; +3bd1 : 00000000; +3bd2 : 00000000; +3bd3 : 00000000; +3bd4 : 00000000; +3bd5 : 00000000; +3bd6 : 00000000; +3bd7 : 00000000; +3bd8 : 00000000; +3bd9 : 00000000; +3bda : 00000000; +3bdb : 00000000; +3bdc : 00000000; +3bdd : 00000000; +3bde : 00000000; +3bdf : 00000000; +3be0 : 00000000; +3be1 : 00000000; +3be2 : 00000000; +3be3 : 00000000; +3be4 : 00000000; +3be5 : 00000000; +3be6 : 00000000; +3be7 : 00000000; +3be8 : 00000000; +3be9 : 00000000; +3bea : 00000000; +3beb : 00000000; +3bec : 00000000; +3bed : 00000000; +3bee : 00000000; +3bef : 00000000; +3bf0 : 00000000; +3bf1 : 00000000; +3bf2 : 00000000; +3bf3 : 00000000; +3bf4 : 00000000; +3bf5 : 00000000; +3bf6 : 00000000; +3bf7 : 00000000; +3bf8 : 00000000; +3bf9 : 00000000; +3bfa : 00000000; +3bfb : 00000000; +3bfc : 00000000; +3bfd : 00000000; +3bfe : 00000000; +3bff : 00000000; +3c00 : 00000000; +3c01 : 00000000; +3c02 : 00000000; +3c03 : 00000000; +3c04 : 00000000; +3c05 : 00000000; +3c06 : 00000000; +3c07 : 00000000; +3c08 : 00000000; +3c09 : 00000000; +3c0a : 00000000; +3c0b : 00000000; +3c0c : 00000000; +3c0d : 00000000; +3c0e : 00000000; +3c0f : 00000000; +3c10 : 00000000; +3c11 : 00000000; +3c12 : 00000000; +3c13 : 00000000; +3c14 : 00000000; +3c15 : 00000000; +3c16 : 00000000; +3c17 : 00000000; +3c18 : 00000000; +3c19 : 00000000; +3c1a : 00000000; +3c1b : 00000000; +3c1c : 00000000; +3c1d : 00000000; +3c1e : 00000000; +3c1f : 00000000; +3c20 : 00000000; +3c21 : 00000000; +3c22 : 00000000; +3c23 : 00000000; +3c24 : 00000000; +3c25 : 00000000; +3c26 : 00000000; +3c27 : 00000000; +3c28 : 00000000; +3c29 : 00000000; +3c2a : 00000000; +3c2b : 00000000; +3c2c : 00000000; +3c2d : 00000000; +3c2e : 00000000; +3c2f : 00000000; +3c30 : 00000000; +3c31 : 00000000; +3c32 : 00000000; +3c33 : 00000000; +3c34 : 00000000; +3c35 : 00000000; +3c36 : 00000000; +3c37 : 00000000; +3c38 : 00000000; +3c39 : 00000000; +3c3a : 00000000; +3c3b : 00000000; +3c3c : 00000000; +3c3d : 00000000; +3c3e : 00000000; +3c3f : 00000000; +3c40 : 00000000; +3c41 : 00000000; +3c42 : 00000000; +3c43 : 00000000; +3c44 : 00000000; +3c45 : 00000000; +3c46 : 00000000; +3c47 : 00000000; +3c48 : 00000000; +3c49 : 00000000; +3c4a : 00000000; +3c4b : 00000000; +3c4c : 00000000; +3c4d : 00000000; +3c4e : 00000000; +3c4f : 00000000; +3c50 : 00000000; +3c51 : 00000000; +3c52 : 00000000; +3c53 : 00000000; +3c54 : 00000000; +3c55 : 00000000; +3c56 : 00000000; +3c57 : 00000000; +3c58 : 00000000; +3c59 : 00000000; +3c5a : 00000000; +3c5b : 00000000; +3c5c : 00000000; +3c5d : 00000000; +3c5e : 00000000; +3c5f : 00000000; +3c60 : 00000000; +3c61 : 00000000; +3c62 : 00000000; +3c63 : 00000000; +3c64 : 00000000; +3c65 : 00000000; +3c66 : 00000000; +3c67 : 00000000; +3c68 : 00000000; +3c69 : 00000000; +3c6a : 00000000; +3c6b : 00000000; +3c6c : 00000000; +3c6d : 00000000; +3c6e : 00000000; +3c6f : 00000000; +3c70 : 00000000; +3c71 : 00000000; +3c72 : 00000000; +3c73 : 00000000; +3c74 : 00000000; +3c75 : 00000000; +3c76 : 00000000; +3c77 : 00000000; +3c78 : 00000000; +3c79 : 00000000; +3c7a : 00000000; +3c7b : 00000000; +3c7c : 00000000; +3c7d : 00000000; +3c7e : 00000000; +3c7f : 00000000; +3c80 : 00000000; +3c81 : 00000000; +3c82 : 00000000; +3c83 : 00000000; +3c84 : 00000000; +3c85 : 00000000; +3c86 : 00000000; +3c87 : 00000000; +3c88 : 00000000; +3c89 : 00000000; +3c8a : 00000000; +3c8b : 00000000; +3c8c : 00000000; +3c8d : 00000000; +3c8e : 00000000; +3c8f : 00000000; +3c90 : 00000000; +3c91 : 00000000; +3c92 : 00000000; +3c93 : 00000000; +3c94 : 00000000; +3c95 : 00000000; +3c96 : 00000000; +3c97 : 00000000; +3c98 : 00000000; +3c99 : 00000000; +3c9a : 00000000; +3c9b : 00000000; +3c9c : 00000000; +3c9d : 00000000; +3c9e : 00000000; +3c9f : 00000000; +3ca0 : 00000000; +3ca1 : 00000000; +3ca2 : 00000000; +3ca3 : 00000000; +3ca4 : 00000000; +3ca5 : 00000000; +3ca6 : 00000000; +3ca7 : 00000000; +3ca8 : 00000000; +3ca9 : 00000000; +3caa : 00000000; +3cab : 00000000; +3cac : 00000000; +3cad : 00000000; +3cae : 00000000; +3caf : 00000000; +3cb0 : 00000000; +3cb1 : 00000000; +3cb2 : 00000000; +3cb3 : 00000000; +3cb4 : 00000000; +3cb5 : 00000000; +3cb6 : 00000000; +3cb7 : 00000000; +3cb8 : 00000000; +3cb9 : 00000000; +3cba : 00000000; +3cbb : 00000000; +3cbc : 00000000; +3cbd : 00000000; +3cbe : 00000000; +3cbf : 00000000; +3cc0 : 00000000; +3cc1 : 00000000; +3cc2 : 00000000; +3cc3 : 00000000; +3cc4 : 00000000; +3cc5 : 00000000; +3cc6 : 00000000; +3cc7 : 00000000; +3cc8 : 00000000; +3cc9 : 00000000; +3cca : 00000000; +3ccb : 00000000; +3ccc : 00000000; +3ccd : 00000000; +3cce : 00000000; +3ccf : 00000000; +3cd0 : 00000000; +3cd1 : 00000000; +3cd2 : 00000000; +3cd3 : 00000000; +3cd4 : 00000000; +3cd5 : 00000000; +3cd6 : 00000000; +3cd7 : 00000000; +3cd8 : 00000000; +3cd9 : 00000000; +3cda : 00000000; +3cdb : 00000000; +3cdc : 00000000; +3cdd : 00000000; +3cde : 00000000; +3cdf : 00000000; +3ce0 : 00000000; +3ce1 : 00000000; +3ce2 : 00000000; +3ce3 : 00000000; +3ce4 : 00000000; +3ce5 : 00000000; +3ce6 : 00000000; +3ce7 : 00000000; +3ce8 : 00000000; +3ce9 : 00000000; +3cea : 00000000; +3ceb : 00000000; +3cec : 00000000; +3ced : 00000000; +3cee : 00000000; +3cef : 00000000; +3cf0 : 00000000; +3cf1 : 00000000; +3cf2 : 00000000; +3cf3 : 00000000; +3cf4 : 00000000; +3cf5 : 00000000; +3cf6 : 00000000; +3cf7 : 00000000; +3cf8 : 00000000; +3cf9 : 00000000; +3cfa : 00000000; +3cfb : 00000000; +3cfc : 00000000; +3cfd : 00000000; +3cfe : 00000000; +3cff : 00000000; +3d00 : 00000000; +3d01 : 00000000; +3d02 : 00000000; +3d03 : 00000000; +3d04 : 00000000; +3d05 : 00000000; +3d06 : 00000000; +3d07 : 00000000; +3d08 : 00000000; +3d09 : 00000000; +3d0a : 00000000; +3d0b : 00000000; +3d0c : 00000000; +3d0d : 00000000; +3d0e : 00000000; +3d0f : 00000000; +3d10 : 00000000; +3d11 : 00000000; +3d12 : 00000000; +3d13 : 00000000; +3d14 : 00000000; +3d15 : 00000000; +3d16 : 00000000; +3d17 : 00000000; +3d18 : 00000000; +3d19 : 00000000; +3d1a : 00000000; +3d1b : 00000000; +3d1c : 00000000; +3d1d : 00000000; +3d1e : 00000000; +3d1f : 00000000; +3d20 : 00000000; +3d21 : 00000000; +3d22 : 00000000; +3d23 : 00000000; +3d24 : 00000000; +3d25 : 00000000; +3d26 : 00000000; +3d27 : 00000000; +3d28 : 00000000; +3d29 : 00000000; +3d2a : 00000000; +3d2b : 00000000; +3d2c : 00000000; +3d2d : 00000000; +3d2e : 00000000; +3d2f : 00000000; +3d30 : 00000000; +3d31 : 00000000; +3d32 : 00000000; +3d33 : 00000000; +3d34 : 00000000; +3d35 : 00000000; +3d36 : 00000000; +3d37 : 00000000; +3d38 : 00000000; +3d39 : 00000000; +3d3a : 00000000; +3d3b : 00000000; +3d3c : 00000000; +3d3d : 00000000; +3d3e : 00000000; +3d3f : 00000000; +3d40 : 00000000; +3d41 : 00000000; +3d42 : 00000000; +3d43 : 00000000; +3d44 : 00000000; +3d45 : 00000000; +3d46 : 00000000; +3d47 : 00000000; +3d48 : 00000000; +3d49 : 00000000; +3d4a : 00000000; +3d4b : 00000000; +3d4c : 00000000; +3d4d : 00000000; +3d4e : 00000000; +3d4f : 00000000; +3d50 : 00000000; +3d51 : 00000000; +3d52 : 00000000; +3d53 : 00000000; +3d54 : 00000000; +3d55 : 00000000; +3d56 : 00000000; +3d57 : 00000000; +3d58 : 00000000; +3d59 : 00000000; +3d5a : 00000000; +3d5b : 00000000; +3d5c : 00000000; +3d5d : 00000000; +3d5e : 00000000; +3d5f : 00000000; +3d60 : 00000000; +3d61 : 00000000; +3d62 : 00000000; +3d63 : 00000000; +3d64 : 00000000; +3d65 : 00000000; +3d66 : 00000000; +3d67 : 00000000; +3d68 : 00000000; +3d69 : 00000000; +3d6a : 00000000; +3d6b : 00000000; +3d6c : 00000000; +3d6d : 00000000; +3d6e : 00000000; +3d6f : 00000000; +3d70 : 00000000; +3d71 : 00000000; +3d72 : 00000000; +3d73 : 00000000; +3d74 : 00000000; +3d75 : 00000000; +3d76 : 00000000; +3d77 : 00000000; +3d78 : 00000000; +3d79 : 00000000; +3d7a : 00000000; +3d7b : 00000000; +3d7c : 00000000; +3d7d : 00000000; +3d7e : 00000000; +3d7f : 00000000; +3d80 : 00000000; +3d81 : 00000000; +3d82 : 00000000; +3d83 : 00000000; +3d84 : 00000000; +3d85 : 00000000; +3d86 : 00000000; +3d87 : 00000000; +3d88 : 00000000; +3d89 : 00000000; +3d8a : 00000000; +3d8b : 00000000; +3d8c : 00000000; +3d8d : 00000000; +3d8e : 00000000; +3d8f : 00000000; +3d90 : 00000000; +3d91 : 00000000; +3d92 : 00000000; +3d93 : 00000000; +3d94 : 00000000; +3d95 : 00000000; +3d96 : 00000000; +3d97 : 00000000; +3d98 : 00000000; +3d99 : 00000000; +3d9a : 00000000; +3d9b : 00000000; +3d9c : 00000000; +3d9d : 00000000; +3d9e : 00000000; +3d9f : 00000000; +3da0 : 00000000; +3da1 : 00000000; +3da2 : 00000000; +3da3 : 00000000; +3da4 : 00000000; +3da5 : 00000000; +3da6 : 00000000; +3da7 : 00000000; +3da8 : 00000000; +3da9 : 00000000; +3daa : 00000000; +3dab : 00000000; +3dac : 00000000; +3dad : 00000000; +3dae : 00000000; +3daf : 00000000; +3db0 : 00000000; +3db1 : 00000000; +3db2 : 00000000; +3db3 : 00000000; +3db4 : 00000000; +3db5 : 00000000; +3db6 : 00000000; +3db7 : 00000000; +3db8 : 00000000; +3db9 : 00000000; +3dba : 00000000; +3dbb : 00000000; +3dbc : 00000000; +3dbd : 00000000; +3dbe : 00000000; +3dbf : 00000000; +3dc0 : 00000000; +3dc1 : 00000000; +3dc2 : 00000000; +3dc3 : 00000000; +3dc4 : 00000000; +3dc5 : 00000000; +3dc6 : 00000000; +3dc7 : 00000000; +3dc8 : 00000000; +3dc9 : 00000000; +3dca : 00000000; +3dcb : 00000000; +3dcc : 00000000; +3dcd : 00000000; +3dce : 00000000; +3dcf : 00000000; +3dd0 : 00000000; +3dd1 : 00000000; +3dd2 : 00000000; +3dd3 : 00000000; +3dd4 : 00000000; +3dd5 : 00000000; +3dd6 : 00000000; +3dd7 : 00000000; +3dd8 : 00000000; +3dd9 : 00000000; +3dda : 00000000; +3ddb : 00000000; +3ddc : 00000000; +3ddd : 00000000; +3dde : 00000000; +3ddf : 00000000; +3de0 : 00000000; +3de1 : 00000000; +3de2 : 00000000; +3de3 : 00000000; +3de4 : 00000000; +3de5 : 00000000; +3de6 : 00000000; +3de7 : 00000000; +3de8 : 00000000; +3de9 : 00000000; +3dea : 00000000; +3deb : 00000000; +3dec : 00000000; +3ded : 00000000; +3dee : 00000000; +3def : 00000000; +3df0 : 00000000; +3df1 : 00000000; +3df2 : 00000000; +3df3 : 00000000; +3df4 : 00000000; +3df5 : 00000000; +3df6 : 00000000; +3df7 : 00000000; +3df8 : 00000000; +3df9 : 00000000; +3dfa : 00000000; +3dfb : 00000000; +3dfc : 00000000; +3dfd : 00000000; +3dfe : 00000000; +3dff : 00000000; +3e00 : 00000000; +3e01 : 00000000; +3e02 : 00000000; +3e03 : 00000000; +3e04 : 00000000; +3e05 : 00000000; +3e06 : 00000000; +3e07 : 00000000; +3e08 : 00000000; +3e09 : 00000000; +3e0a : 00000000; +3e0b : 00000000; +3e0c : 00000000; +3e0d : 00000000; +3e0e : 00000000; +3e0f : 00000000; +3e10 : 00000000; +3e11 : 00000000; +3e12 : 00000000; +3e13 : 00000000; +3e14 : 00000000; +3e15 : 00000000; +3e16 : 00000000; +3e17 : 00000000; +3e18 : 00000000; +3e19 : 00000000; +3e1a : 00000000; +3e1b : 00000000; +3e1c : 00000000; +3e1d : 00000000; +3e1e : 00000000; +3e1f : 00000000; +3e20 : 00000000; +3e21 : 00000000; +3e22 : 00000000; +3e23 : 00000000; +3e24 : 00000000; +3e25 : 00000000; +3e26 : 00000000; +3e27 : 00000000; +3e28 : 00000000; +3e29 : 00000000; +3e2a : 00000000; +3e2b : 00000000; +3e2c : 00000000; +3e2d : 00000000; +3e2e : 00000000; +3e2f : 00000000; +3e30 : 00000000; +3e31 : 00000000; +3e32 : 00000000; +3e33 : 00000000; +3e34 : 00000000; +3e35 : 00000000; +3e36 : 00000000; +3e37 : 00000000; +3e38 : 00000000; +3e39 : 00000000; +3e3a : 00000000; +3e3b : 00000000; +3e3c : 00000000; +3e3d : 00000000; +3e3e : 00000000; +3e3f : 00000000; +3e40 : 00000000; +3e41 : 00000000; +3e42 : 00000000; +3e43 : 00000000; +3e44 : 00000000; +3e45 : 00000000; +3e46 : 00000000; +3e47 : 00000000; +3e48 : 00000000; +3e49 : 00000000; +3e4a : 00000000; +3e4b : 00000000; +3e4c : 00000000; +3e4d : 00000000; +3e4e : 00000000; +3e4f : 00000000; +3e50 : 00000000; +3e51 : 00000000; +3e52 : 00000000; +3e53 : 00000000; +3e54 : 00000000; +3e55 : 00000000; +3e56 : 00000000; +3e57 : 00000000; +3e58 : 00000000; +3e59 : 00000000; +3e5a : 00000000; +3e5b : 00000000; +3e5c : 00000000; +3e5d : 00000000; +3e5e : 00000000; +3e5f : 00000000; +3e60 : 00000000; +3e61 : 00000000; +3e62 : 00000000; +3e63 : 00000000; +3e64 : 00000000; +3e65 : 00000000; +3e66 : 00000000; +3e67 : 00000000; +3e68 : 00000000; +3e69 : 00000000; +3e6a : 00000000; +3e6b : 00000000; +3e6c : 00000000; +3e6d : 00000000; +3e6e : 00000000; +3e6f : 00000000; +3e70 : 00000000; +3e71 : 00000000; +3e72 : 00000000; +3e73 : 00000000; +3e74 : 00000000; +3e75 : 00000000; +3e76 : 00000000; +3e77 : 00000000; +3e78 : 00000000; +3e79 : 00000000; +3e7a : 00000000; +3e7b : 00000000; +3e7c : 00000000; +3e7d : 00000000; +3e7e : 00000000; +3e7f : 00000000; +3e80 : 00000000; +3e81 : 00000000; +3e82 : 00000000; +3e83 : 00000000; +3e84 : 00000000; +3e85 : 00000000; +3e86 : 00000000; +3e87 : 00000000; +3e88 : 00000000; +3e89 : 00000000; +3e8a : 00000000; +3e8b : 00000000; +3e8c : 00000000; +3e8d : 00000000; +3e8e : 00000000; +3e8f : 00000000; +3e90 : 00000000; +3e91 : 00000000; +3e92 : 00000000; +3e93 : 00000000; +3e94 : 00000000; +3e95 : 00000000; +3e96 : 00000000; +3e97 : 00000000; +3e98 : 00000000; +3e99 : 00000000; +3e9a : 00000000; +3e9b : 00000000; +3e9c : 00000000; +3e9d : 00000000; +3e9e : 00000000; +3e9f : 00000000; +3ea0 : 00000000; +3ea1 : 00000000; +3ea2 : 00000000; +3ea3 : 00000000; +3ea4 : 00000000; +3ea5 : 00000000; +3ea6 : 00000000; +3ea7 : 00000000; +3ea8 : 00000000; +3ea9 : 00000000; +3eaa : 00000000; +3eab : 00000000; +3eac : 00000000; +3ead : 00000000; +3eae : 00000000; +3eaf : 00000000; +3eb0 : 00000000; +3eb1 : 00000000; +3eb2 : 00000000; +3eb3 : 00000000; +3eb4 : 00000000; +3eb5 : 00000000; +3eb6 : 00000000; +3eb7 : 00000000; +3eb8 : 00000000; +3eb9 : 00000000; +3eba : 00000000; +3ebb : 00000000; +3ebc : 00000000; +3ebd : 00000000; +3ebe : 00000000; +3ebf : 00000000; +3ec0 : 00000000; +3ec1 : 00000000; +3ec2 : 00000000; +3ec3 : 00000000; +3ec4 : 00000000; +3ec5 : 00000000; +3ec6 : 00000000; +3ec7 : 00000000; +3ec8 : 00000000; +3ec9 : 00000000; +3eca : 00000000; +3ecb : 00000000; +3ecc : 00000000; +3ecd : 00000000; +3ece : 00000000; +3ecf : 00000000; +3ed0 : 00000000; +3ed1 : 00000000; +3ed2 : 00000000; +3ed3 : 00000000; +3ed4 : 00000000; +3ed5 : 00000000; +3ed6 : 00000000; +3ed7 : 00000000; +3ed8 : 00000000; +3ed9 : 00000000; +3eda : 00000000; +3edb : 00000000; +3edc : 00000000; +3edd : 00000000; +3ede : 00000000; +3edf : 00000000; +3ee0 : 00000000; +3ee1 : 00000000; +3ee2 : 00000000; +3ee3 : 00000000; +3ee4 : 00000000; +3ee5 : 00000000; +3ee6 : 00000000; +3ee7 : 00000000; +3ee8 : 00000000; +3ee9 : 00000000; +3eea : 00000000; +3eeb : 00000000; +3eec : 00000000; +3eed : 00000000; +3eee : 00000000; +3eef : 00000000; +3ef0 : 00000000; +3ef1 : 00000000; +3ef2 : 00000000; +3ef3 : 00000000; +3ef4 : 00000000; +3ef5 : 00000000; +3ef6 : 00000000; +3ef7 : 00000000; +3ef8 : 00000000; +3ef9 : 00000000; +3efa : 00000000; +3efb : 00000000; +3efc : 00000000; +3efd : 00000000; +3efe : 00000000; +3eff : 00000000; +3f00 : 00000000; +3f01 : 00000000; +3f02 : 00000000; +3f03 : 00000000; +3f04 : 00000000; +3f05 : 00000000; +3f06 : 00000000; +3f07 : 00000000; +3f08 : 00000000; +3f09 : 00000000; +3f0a : 00000000; +3f0b : 00000000; +3f0c : 00000000; +3f0d : 00000000; +3f0e : 00000000; +3f0f : 00000000; +3f10 : 00000000; +3f11 : 00000000; +3f12 : 00000000; +3f13 : 00000000; +3f14 : 00000000; +3f15 : 00000000; +3f16 : 00000000; +3f17 : 00000000; +3f18 : 00000000; +3f19 : 00000000; +3f1a : 00000000; +3f1b : 00000000; +3f1c : 00000000; +3f1d : 00000000; +3f1e : 00000000; +3f1f : 00000000; +3f20 : 00000000; +3f21 : 00000000; +3f22 : 00000000; +3f23 : 00000000; +3f24 : 00000000; +3f25 : 00000000; +3f26 : 00000000; +3f27 : 00000000; +3f28 : 00000000; +3f29 : 00000000; +3f2a : 00000000; +3f2b : 00000000; +3f2c : 00000000; +3f2d : 00000000; +3f2e : 00000000; +3f2f : 00000000; +3f30 : 00000000; +3f31 : 00000000; +3f32 : 00000000; +3f33 : 00000000; +3f34 : 00000000; +3f35 : 00000000; +3f36 : 00000000; +3f37 : 00000000; +3f38 : 00000000; +3f39 : 00000000; +3f3a : 00000000; +3f3b : 00000000; +3f3c : 00000000; +3f3d : 00000000; +3f3e : 00000000; +3f3f : 00000000; +3f40 : 00000000; +3f41 : 00000000; +3f42 : 00000000; +3f43 : 00000000; +3f44 : 00000000; +3f45 : 00000000; +3f46 : 00000000; +3f47 : 00000000; +3f48 : 00000000; +3f49 : 00000000; +3f4a : 00000000; +3f4b : 00000000; +3f4c : 00000000; +3f4d : 00000000; +3f4e : 00000000; +3f4f : 00000000; +3f50 : 00000000; +3f51 : 00000000; +3f52 : 00000000; +3f53 : 00000000; +3f54 : 00000000; +3f55 : 00000000; +3f56 : 00000000; +3f57 : 00000000; +3f58 : 00000000; +3f59 : 00000000; +3f5a : 00000000; +3f5b : 00000000; +3f5c : 00000000; +3f5d : 00000000; +3f5e : 00000000; +3f5f : 00000000; +3f60 : 00000000; +3f61 : 00000000; +3f62 : 00000000; +3f63 : 00000000; +3f64 : 00000000; +3f65 : 00000000; +3f66 : 00000000; +3f67 : 00000000; +3f68 : 00000000; +3f69 : 00000000; +3f6a : 00000000; +3f6b : 00000000; +3f6c : 00000000; +3f6d : 00000000; +3f6e : 00000000; +3f6f : 00000000; +3f70 : 00000000; +3f71 : 00000000; +3f72 : 00000000; +3f73 : 00000000; +3f74 : 00000000; +3f75 : 00000000; +3f76 : 00000000; +3f77 : 00000000; +3f78 : 00000000; +3f79 : 00000000; +3f7a : 00000000; +3f7b : 00000000; +3f7c : 00000000; +3f7d : 00000000; +3f7e : 00000000; +3f7f : 00000000; +3f80 : 00000000; +3f81 : 00000000; +3f82 : 00000000; +3f83 : 00000000; +3f84 : 00000000; +3f85 : 00000000; +3f86 : 00000000; +3f87 : 00000000; +3f88 : 00000000; +3f89 : 00000000; +3f8a : 00000000; +3f8b : 00000000; +3f8c : 00000000; +3f8d : 00000000; +3f8e : 00000000; +3f8f : 00000000; +3f90 : 00000000; +3f91 : 00000000; +3f92 : 00000000; +3f93 : 00000000; +3f94 : 00000000; +3f95 : 00000000; +3f96 : 00000000; +3f97 : 00000000; +3f98 : 00000000; +3f99 : 00000000; +3f9a : 00000000; +3f9b : 00000000; +3f9c : 00000000; +3f9d : 00000000; +3f9e : 00000000; +3f9f : 00000000; +3fa0 : 00000000; +3fa1 : 00000000; +3fa2 : 00000000; +3fa3 : 00000000; +3fa4 : 00000000; +3fa5 : 00000000; +3fa6 : 00000000; +3fa7 : 00000000; +3fa8 : 00000000; +3fa9 : 00000000; +3faa : 00000000; +3fab : 00000000; +3fac : 00000000; +3fad : 00000000; +3fae : 00000000; +3faf : 00000000; +3fb0 : 00000000; +3fb1 : 00000000; +3fb2 : 00000000; +3fb3 : 00000000; +3fb4 : 00000000; +3fb5 : 00000000; +3fb6 : 00000000; +3fb7 : 00000000; +3fb8 : 00000000; +3fb9 : 00000000; +3fba : 00000000; +3fbb : 00000000; +3fbc : 00000000; +3fbd : 00000000; +3fbe : 00000000; +3fbf : 00000000; +3fc0 : 00000000; +3fc1 : 00000000; +3fc2 : 00000000; +3fc3 : 00000000; +3fc4 : 00000000; +3fc5 : 00000000; +3fc6 : 00000000; +3fc7 : 00000000; +3fc8 : 00000000; +3fc9 : 00000000; +3fca : 00000000; +3fcb : 00000000; +3fcc : 00000000; +3fcd : 00000000; +3fce : 00000000; +3fcf : 00000000; +3fd0 : 00000000; +3fd1 : 00000000; +3fd2 : 00000000; +3fd3 : 00000000; +3fd4 : 00000000; +3fd5 : 00000000; +3fd6 : 00000000; +3fd7 : 00000000; +3fd8 : 00000000; +3fd9 : 00000000; +3fda : 00000000; +3fdb : 00000000; +3fdc : 00000000; +3fdd : 00000000; +3fde : 00000000; +3fdf : 00000000; +3fe0 : 00000000; +3fe1 : 00000000; +3fe2 : 00000000; +3fe3 : 00000000; +3fe4 : 00000000; +3fe5 : 00000000; +3fe6 : 00000000; +3fe7 : 00000000; +3fe8 : 00000000; +3fe9 : 00000000; +3fea : 00000000; +3feb : 00000000; +3fec : 00000000; +3fed : 00000000; +3fee : 00000000; +3fef : 00000000; +3ff0 : 00000000; +3ff1 : 00000000; +3ff2 : 00000000; +3ff3 : 00000000; +3ff4 : 00000000; +3ff5 : 00000000; +3ff6 : 00000000; +3ff7 : 00000000; +3ff8 : 00000000; +3ff9 : 00000000; +3ffa : 00000000; +3ffb : 00000000; +3ffc : 00000000; +3ffd : 00000000; +3ffe : 00000000; +3fff : 00000000; +4000 : 00000000; +4001 : 00000000; +4002 : 00000000; +4003 : 00000000; +4004 : 00000000; +4005 : 00000000; +4006 : 00000000; +4007 : 00000000; +4008 : 00000000; +4009 : 00000000; +400a : 00000000; +400b : 00000000; +400c : 00000000; +400d : 00000000; +400e : 00000000; +400f : 00000000; +4010 : 00000000; +4011 : 00000000; +4012 : 00000000; +4013 : 00000000; +4014 : 00000000; +4015 : 00000000; +4016 : 00000000; +4017 : 00000000; +4018 : 00000000; +4019 : 00000000; +401a : 00000000; +401b : 00000000; +401c : 00000000; +401d : 00000000; +401e : 00000000; +401f : 00000000; +4020 : 00000000; +4021 : 00000000; +4022 : 00000000; +4023 : 00000000; +4024 : 00000000; +4025 : 00000000; +4026 : 00000000; +4027 : 00000000; +4028 : 00000000; +4029 : 00000000; +402a : 00000000; +402b : 00000000; +402c : 00000000; +402d : 00000000; +402e : 00000000; +402f : 00000000; +4030 : 00000000; +4031 : 00000000; +4032 : 00000000; +4033 : 00000000; +4034 : 00000000; +4035 : 00000000; +4036 : 00000000; +4037 : 00000000; +4038 : 00000000; +4039 : 00000000; +403a : 00000000; +403b : 00000000; +403c : 00000000; +403d : 00000000; +403e : 00000000; +403f : 00000000; +4040 : 00000000; +4041 : 00000000; +4042 : 00000000; +4043 : 00000000; +4044 : 00000000; +4045 : 00000000; +4046 : 00000000; +4047 : 00000000; +4048 : 00000000; +4049 : 00000000; +404a : 00000000; +404b : 00000000; +404c : 00000000; +404d : 00000000; +404e : 00000000; +404f : 00000000; +4050 : 00000000; +4051 : 00000000; +4052 : 00000000; +4053 : 00000000; +4054 : 00000000; +4055 : 00000000; +4056 : 00000000; +4057 : 00000000; +4058 : 00000000; +4059 : 00000000; +405a : 00000000; +405b : 00000000; +405c : 00000000; +405d : 00000000; +405e : 00000000; +405f : 00000000; +4060 : 00000000; +4061 : 00000000; +4062 : 00000000; +4063 : 00000000; +4064 : 00000000; +4065 : 00000000; +4066 : 00000000; +4067 : 00000000; +4068 : 00000000; +4069 : 00000000; +406a : 00000000; +406b : 00000000; +406c : 00000000; +406d : 00000000; +406e : 00000000; +406f : 00000000; +4070 : 00000000; +4071 : 00000000; +4072 : 00000000; +4073 : 00000000; +4074 : 00000000; +4075 : 00000000; +4076 : 00000000; +4077 : 00000000; +4078 : 00000000; +4079 : 00000000; +407a : 00000000; +407b : 00000000; +407c : 00000000; +407d : 00000000; +407e : 00000000; +407f : 00000000; +4080 : 00000000; +4081 : 00000000; +4082 : 00000000; +4083 : 00000000; +4084 : 00000000; +4085 : 00000000; +4086 : 00000000; +4087 : 00000000; +4088 : 00000000; +4089 : 00000000; +408a : 00000000; +408b : 00000000; +408c : 00000000; +408d : 00000000; +408e : 00000000; +408f : 00000000; +4090 : 00000000; +4091 : 00000000; +4092 : 00000000; +4093 : 00000000; +4094 : 00000000; +4095 : 00000000; +4096 : 00000000; +4097 : 00000000; +4098 : 00000000; +4099 : 00000000; +409a : 00000000; +409b : 00000000; +409c : 00000000; +409d : 00000000; +409e : 00000000; +409f : 00000000; +40a0 : 00000000; +40a1 : 00000000; +40a2 : 00000000; +40a3 : 00000000; +40a4 : 00000000; +40a5 : 00000000; +40a6 : 00000000; +40a7 : 00000000; +40a8 : 00000000; +40a9 : 00000000; +40aa : 00000000; +40ab : 00000000; +40ac : 00000000; +40ad : 00000000; +40ae : 00000000; +40af : 00000000; +40b0 : 00000000; +40b1 : 00000000; +40b2 : 00000000; +40b3 : 00000000; +40b4 : 00000000; +40b5 : 00000000; +40b6 : 00000000; +40b7 : 00000000; +40b8 : 00000000; +40b9 : 00000000; +40ba : 00000000; +40bb : 00000000; +40bc : 00000000; +40bd : 00000000; +40be : 00000000; +40bf : 00000000; +40c0 : 00000000; +40c1 : 00000000; +40c2 : 00000000; +40c3 : 00000000; +40c4 : 00000000; +40c5 : 00000000; +40c6 : 00000000; +40c7 : 00000000; +40c8 : 00000000; +40c9 : 00000000; +40ca : 00000000; +40cb : 00000000; +40cc : 00000000; +40cd : 00000000; +40ce : 00000000; +40cf : 00000000; +40d0 : 00000000; +40d1 : 00000000; +40d2 : 00000000; +40d3 : 00000000; +40d4 : 00000000; +40d5 : 00000000; +40d6 : 00000000; +40d7 : 00000000; +40d8 : 00000000; +40d9 : 00000000; +40da : 00000000; +40db : 00000000; +40dc : 00000000; +40dd : 00000000; +40de : 00000000; +40df : 00000000; +40e0 : 00000000; +40e1 : 00000000; +40e2 : 00000000; +40e3 : 00000000; +40e4 : 00000000; +40e5 : 00000000; +40e6 : 00000000; +40e7 : 00000000; +40e8 : 00000000; +40e9 : 00000000; +40ea : 00000000; +40eb : 00000000; +40ec : 00000000; +40ed : 00000000; +40ee : 00000000; +40ef : 00000000; +40f0 : 00000000; +40f1 : 00000000; +40f2 : 00000000; +40f3 : 00000000; +40f4 : 00000000; +40f5 : 00000000; +40f6 : 00000000; +40f7 : 00000000; +40f8 : 00000000; +40f9 : 00000000; +40fa : 00000000; +40fb : 00000000; +40fc : 00000000; +40fd : 00000000; +40fe : 00000000; +40ff : 00000000; +4100 : 00000000; +4101 : 00000000; +4102 : 00000000; +4103 : 00000000; +4104 : 00000000; +4105 : 00000000; +4106 : 00000000; +4107 : 00000000; +4108 : 00000000; +4109 : 00000000; +410a : 00000000; +410b : 00000000; +410c : 00000000; +410d : 00000000; +410e : 00000000; +410f : 00000000; +4110 : 00000000; +4111 : 00000000; +4112 : 00000000; +4113 : 00000000; +4114 : 00000000; +4115 : 00000000; +4116 : 00000000; +4117 : 00000000; +4118 : 00000000; +4119 : 00000000; +411a : 00000000; +411b : 00000000; +411c : 00000000; +411d : 00000000; +411e : 00000000; +411f : 00000000; +4120 : 00000000; +4121 : 00000000; +4122 : 00000000; +4123 : 00000000; +4124 : 00000000; +4125 : 00000000; +4126 : 00000000; +4127 : 00000000; +4128 : 00000000; +4129 : 00000000; +412a : 00000000; +412b : 00000000; +412c : 00000000; +412d : 00000000; +412e : 00000000; +412f : 00000000; +4130 : 00000000; +4131 : 00000000; +4132 : 00000000; +4133 : 00000000; +4134 : 00000000; +4135 : 00000000; +4136 : 00000000; +4137 : 00000000; +4138 : 00000000; +4139 : 00000000; +413a : 00000000; +413b : 00000000; +413c : 00000000; +413d : 00000000; +413e : 00000000; +413f : 00000000; +4140 : 00000000; +4141 : 00000000; +4142 : 00000000; +4143 : 00000000; +4144 : 00000000; +4145 : 00000000; +4146 : 00000000; +4147 : 00000000; +4148 : 00000000; +4149 : 00000000; +414a : 00000000; +414b : 00000000; +414c : 00000000; +414d : 00000000; +414e : 00000000; +414f : 00000000; +4150 : 00000000; +4151 : 00000000; +4152 : 00000000; +4153 : 00000000; +4154 : 00000000; +4155 : 00000000; +4156 : 00000000; +4157 : 00000000; +4158 : 00000000; +4159 : 00000000; +415a : 00000000; +415b : 00000000; +415c : 00000000; +415d : 00000000; +415e : 00000000; +415f : 00000000; +4160 : 00000000; +4161 : 00000000; +4162 : 00000000; +4163 : 00000000; +4164 : 00000000; +4165 : 00000000; +4166 : 00000000; +4167 : 00000000; +4168 : 00000000; +4169 : 00000000; +416a : 00000000; +416b : 00000000; +416c : 00000000; +416d : 00000000; +416e : 00000000; +416f : 00000000; +4170 : 00000000; +4171 : 00000000; +4172 : 00000000; +4173 : 00000000; +4174 : 00000000; +4175 : 00000000; +4176 : 00000000; +4177 : 00000000; +4178 : 00000000; +4179 : 00000000; +417a : 00000000; +417b : 00000000; +417c : 00000000; +417d : 00000000; +417e : 00000000; +417f : 00000000; +4180 : 00000000; +4181 : 00000000; +4182 : 00000000; +4183 : 00000000; +4184 : 00000000; +4185 : 00000000; +4186 : 00000000; +4187 : 00000000; +4188 : 00000000; +4189 : 00000000; +418a : 00000000; +418b : 00000000; +418c : 00000000; +418d : 00000000; +418e : 00000000; +418f : 00000000; +4190 : 00000000; +4191 : 00000000; +4192 : 00000000; +4193 : 00000000; +4194 : 00000000; +4195 : 00000000; +4196 : 00000000; +4197 : 00000000; +4198 : 00000000; +4199 : 00000000; +419a : 00000000; +419b : 00000000; +419c : 00000000; +419d : 00000000; +419e : 00000000; +419f : 00000000; +41a0 : 00000000; +41a1 : 00000000; +41a2 : 00000000; +41a3 : 00000000; +41a4 : 00000000; +41a5 : 00000000; +41a6 : 00000000; +41a7 : 00000000; +41a8 : 00000000; +41a9 : 00000000; +41aa : 00000000; +41ab : 00000000; +41ac : 00000000; +41ad : 00000000; +41ae : 00000000; +41af : 00000000; +41b0 : 00000000; +41b1 : 00000000; +41b2 : 00000000; +41b3 : 00000000; +41b4 : 00000000; +41b5 : 00000000; +41b6 : 00000000; +41b7 : 00000000; +41b8 : 00000000; +41b9 : 00000000; +41ba : 00000000; +41bb : 00000000; +41bc : 00000000; +41bd : 00000000; +41be : 00000000; +41bf : 00000000; +41c0 : 00000000; +41c1 : 00000000; +41c2 : 00000000; +41c3 : 00000000; +41c4 : 00000000; +41c5 : 00000000; +41c6 : 00000000; +41c7 : 00000000; +41c8 : 00000000; +41c9 : 00000000; +41ca : 00000000; +41cb : 00000000; +41cc : 00000000; +41cd : 00000000; +41ce : 00000000; +41cf : 00000000; +41d0 : 00000000; +41d1 : 00000000; +41d2 : 00000000; +41d3 : 00000000; +41d4 : 00000000; +41d5 : 00000000; +41d6 : 00000000; +41d7 : 00000000; +41d8 : 00000000; +41d9 : 00000000; +41da : 00000000; +41db : 00000000; +41dc : 00000000; +41dd : 00000000; +41de : 00000000; +41df : 00000000; +41e0 : 00000000; +41e1 : 00000000; +41e2 : 00000000; +41e3 : 00000000; +41e4 : 00000000; +41e5 : 00000000; +41e6 : 00000000; +41e7 : 00000000; +41e8 : 00000000; +41e9 : 00000000; +41ea : 00000000; +41eb : 00000000; +41ec : 00000000; +41ed : 00000000; +41ee : 00000000; +41ef : 00000000; +41f0 : 00000000; +41f1 : 00000000; +41f2 : 00000000; +41f3 : 00000000; +41f4 : 00000000; +41f5 : 00000000; +41f6 : 00000000; +41f7 : 00000000; +41f8 : 00000000; +41f9 : 00000000; +41fa : 00000000; +41fb : 00000000; +41fc : 00000000; +41fd : 00000000; +41fe : 00000000; +41ff : 00000000; +4200 : 00000000; +4201 : 00000000; +4202 : 00000000; +4203 : 00000000; +4204 : 00000000; +4205 : 00000000; +4206 : 00000000; +4207 : 00000000; +4208 : 00000000; +4209 : 00000000; +420a : 00000000; +420b : 00000000; +420c : 00000000; +420d : 00000000; +420e : 00000000; +420f : 00000000; +4210 : 00000000; +4211 : 00000000; +4212 : 00000000; +4213 : 00000000; +4214 : 00000000; +4215 : 00000000; +4216 : 00000000; +4217 : 00000000; +4218 : 00000000; +4219 : 00000000; +421a : 00000000; +421b : 00000000; +421c : 00000000; +421d : 00000000; +421e : 00000000; +421f : 00000000; +4220 : 00000000; +4221 : 00000000; +4222 : 00000000; +4223 : 00000000; +4224 : 00000000; +4225 : 00000000; +4226 : 00000000; +4227 : 00000000; +4228 : 00000000; +4229 : 00000000; +422a : 00000000; +422b : 00000000; +422c : 00000000; +422d : 00000000; +422e : 00000000; +422f : 00000000; +4230 : 00000000; +4231 : 00000000; +4232 : 00000000; +4233 : 00000000; +4234 : 00000000; +4235 : 00000000; +4236 : 00000000; +4237 : 00000000; +4238 : 00000000; +4239 : 00000000; +423a : 00000000; +423b : 00000000; +423c : 00000000; +423d : 00000000; +423e : 00000000; +423f : 00000000; +4240 : 00000000; +4241 : 00000000; +4242 : 00000000; +4243 : 00000000; +4244 : 00000000; +4245 : 00000000; +4246 : 00000000; +4247 : 00000000; +4248 : 00000000; +4249 : 00000000; +424a : 00000000; +424b : 00000000; +424c : 00000000; +424d : 00000000; +424e : 00000000; +424f : 00000000; +4250 : 00000000; +4251 : 00000000; +4252 : 00000000; +4253 : 00000000; +4254 : 00000000; +4255 : 00000000; +4256 : 00000000; +4257 : 00000000; +4258 : 00000000; +4259 : 00000000; +425a : 00000000; +425b : 00000000; +425c : 00000000; +425d : 00000000; +425e : 00000000; +425f : 00000000; +4260 : 00000000; +4261 : 00000000; +4262 : 00000000; +4263 : 00000000; +4264 : 00000000; +4265 : 00000000; +4266 : 00000000; +4267 : 00000000; +4268 : 00000000; +4269 : 00000000; +426a : 00000000; +426b : 00000000; +426c : 00000000; +426d : 00000000; +426e : 00000000; +426f : 00000000; +4270 : 00000000; +4271 : 00000000; +4272 : 00000000; +4273 : 00000000; +4274 : 00000000; +4275 : 00000000; +4276 : 00000000; +4277 : 00000000; +4278 : 00000000; +4279 : 00000000; +427a : 00000000; +427b : 00000000; +427c : 00000000; +427d : 00000000; +427e : 00000000; +427f : 00000000; +4280 : 00000000; +4281 : 00000000; +4282 : 00000000; +4283 : 00000000; +4284 : 00000000; +4285 : 00000000; +4286 : 00000000; +4287 : 00000000; +4288 : 00000000; +4289 : 00000000; +428a : 00000000; +428b : 00000000; +428c : 00000000; +428d : 00000000; +428e : 00000000; +428f : 00000000; +4290 : 00000000; +4291 : 00000000; +4292 : 00000000; +4293 : 00000000; +4294 : 00000000; +4295 : 00000000; +4296 : 00000000; +4297 : 00000000; +4298 : 00000000; +4299 : 00000000; +429a : 00000000; +429b : 00000000; +429c : 00000000; +429d : 00000000; +429e : 00000000; +429f : 00000000; +42a0 : 00000000; +42a1 : 00000000; +42a2 : 00000000; +42a3 : 00000000; +42a4 : 00000000; +42a5 : 00000000; +42a6 : 00000000; +42a7 : 00000000; +42a8 : 00000000; +42a9 : 00000000; +42aa : 00000000; +42ab : 00000000; +42ac : 00000000; +42ad : 00000000; +42ae : 00000000; +42af : 00000000; +42b0 : 00000000; +42b1 : 00000000; +42b2 : 00000000; +42b3 : 00000000; +42b4 : 00000000; +42b5 : 00000000; +42b6 : 00000000; +42b7 : 00000000; +42b8 : 00000000; +42b9 : 00000000; +42ba : 00000000; +42bb : 00000000; +42bc : 00000000; +42bd : 00000000; +42be : 00000000; +42bf : 00000000; +42c0 : 00000000; +42c1 : 00000000; +42c2 : 00000000; +42c3 : 00000000; +42c4 : 00000000; +42c5 : 00000000; +42c6 : 00000000; +42c7 : 00000000; +42c8 : 00000000; +42c9 : 00000000; +42ca : 00000000; +42cb : 00000000; +42cc : 00000000; +42cd : 00000000; +42ce : 00000000; +42cf : 00000000; +42d0 : 00000000; +42d1 : 00000000; +42d2 : 00000000; +42d3 : 00000000; +42d4 : 00000000; +42d5 : 00000000; +42d6 : 00000000; +42d7 : 00000000; +42d8 : 00000000; +42d9 : 00000000; +42da : 00000000; +42db : 00000000; +42dc : 00000000; +42dd : 00000000; +42de : 00000000; +42df : 00000000; +42e0 : 00000000; +42e1 : 00000000; +42e2 : 00000000; +42e3 : 00000000; +42e4 : 00000000; +42e5 : 00000000; +42e6 : 00000000; +42e7 : 00000000; +42e8 : 00000000; +42e9 : 00000000; +42ea : 00000000; +42eb : 00000000; +42ec : 00000000; +42ed : 00000000; +42ee : 00000000; +42ef : 00000000; +42f0 : 00000000; +42f1 : 00000000; +42f2 : 00000000; +42f3 : 00000000; +42f4 : 00000000; +42f5 : 00000000; +42f6 : 00000000; +42f7 : 00000000; +42f8 : 00000000; +42f9 : 00000000; +42fa : 00000000; +42fb : 00000000; +42fc : 00000000; +42fd : 00000000; +42fe : 00000000; +42ff : 00000000; +4300 : 00000000; +4301 : 00000000; +4302 : 00000000; +4303 : 00000000; +4304 : 00000000; +4305 : 00000000; +4306 : 00000000; +4307 : 00000000; +4308 : 00000000; +4309 : 00000000; +430a : 00000000; +430b : 00000000; +430c : 00000000; +430d : 00000000; +430e : 00000000; +430f : 00000000; +4310 : 00000000; +4311 : 00000000; +4312 : 00000000; +4313 : 00000000; +4314 : 00000000; +4315 : 00000000; +4316 : 00000000; +4317 : 00000000; +4318 : 00000000; +4319 : 00000000; +431a : 00000000; +431b : 00000000; +431c : 00000000; +431d : 00000000; +431e : 00000000; +431f : 00000000; +4320 : 00000000; +4321 : 00000000; +4322 : 00000000; +4323 : 00000000; +4324 : 00000000; +4325 : 00000000; +4326 : 00000000; +4327 : 00000000; +4328 : 00000000; +4329 : 00000000; +432a : 00000000; +432b : 00000000; +432c : 00000000; +432d : 00000000; +432e : 00000000; +432f : 00000000; +4330 : 00000000; +4331 : 00000000; +4332 : 00000000; +4333 : 00000000; +4334 : 00000000; +4335 : 00000000; +4336 : 00000000; +4337 : 00000000; +4338 : 00000000; +4339 : 00000000; +433a : 00000000; +433b : 00000000; +433c : 00000000; +433d : 00000000; +433e : 00000000; +433f : 00000000; +4340 : 00000000; +4341 : 00000000; +4342 : 00000000; +4343 : 00000000; +4344 : 00000000; +4345 : 00000000; +4346 : 00000000; +4347 : 00000000; +4348 : 00000000; +4349 : 00000000; +434a : 00000000; +434b : 00000000; +434c : 00000000; +434d : 00000000; +434e : 00000000; +434f : 00000000; +4350 : 00000000; +4351 : 00000000; +4352 : 00000000; +4353 : 00000000; +4354 : 00000000; +4355 : 00000000; +4356 : 00000000; +4357 : 00000000; +4358 : 00000000; +4359 : 00000000; +435a : 00000000; +435b : 00000000; +435c : 00000000; +435d : 00000000; +435e : 00000000; +435f : 00000000; +4360 : 00000000; +4361 : 00000000; +4362 : 00000000; +4363 : 00000000; +4364 : 00000000; +4365 : 00000000; +4366 : 00000000; +4367 : 00000000; +4368 : 00000000; +4369 : 00000000; +436a : 00000000; +436b : 00000000; +436c : 00000000; +436d : 00000000; +436e : 00000000; +436f : 00000000; +4370 : 00000000; +4371 : 00000000; +4372 : 00000000; +4373 : 00000000; +4374 : 00000000; +4375 : 00000000; +4376 : 00000000; +4377 : 00000000; +4378 : 00000000; +4379 : 00000000; +437a : 00000000; +437b : 00000000; +437c : 00000000; +437d : 00000000; +437e : 00000000; +437f : 00000000; +4380 : 00000000; +4381 : 00000000; +4382 : 00000000; +4383 : 00000000; +4384 : 00000000; +4385 : 00000000; +4386 : 00000000; +4387 : 00000000; +4388 : 00000000; +4389 : 00000000; +438a : 00000000; +438b : 00000000; +438c : 00000000; +438d : 00000000; +438e : 00000000; +438f : 00000000; +4390 : 00000000; +4391 : 00000000; +4392 : 00000000; +4393 : 00000000; +4394 : 00000000; +4395 : 00000000; +4396 : 00000000; +4397 : 00000000; +4398 : 00000000; +4399 : 00000000; +439a : 00000000; +439b : 00000000; +439c : 00000000; +439d : 00000000; +439e : 00000000; +439f : 00000000; +43a0 : 00000000; +43a1 : 00000000; +43a2 : 00000000; +43a3 : 00000000; +43a4 : 00000000; +43a5 : 00000000; +43a6 : 00000000; +43a7 : 00000000; +43a8 : 00000000; +43a9 : 00000000; +43aa : 00000000; +43ab : 00000000; +43ac : 00000000; +43ad : 00000000; +43ae : 00000000; +43af : 00000000; +43b0 : 00000000; +43b1 : 00000000; +43b2 : 00000000; +43b3 : 00000000; +43b4 : 00000000; +43b5 : 00000000; +43b6 : 00000000; +43b7 : 00000000; +43b8 : 00000000; +43b9 : 00000000; +43ba : 00000000; +43bb : 00000000; +43bc : 00000000; +43bd : 00000000; +43be : 00000000; +43bf : 00000000; +43c0 : 00000000; +43c1 : 00000000; +43c2 : 00000000; +43c3 : 00000000; +43c4 : 00000000; +43c5 : 00000000; +43c6 : 00000000; +43c7 : 00000000; +43c8 : 00000000; +43c9 : 00000000; +43ca : 00000000; +43cb : 00000000; +43cc : 00000000; +43cd : 00000000; +43ce : 00000000; +43cf : 00000000; +43d0 : 00000000; +43d1 : 00000000; +43d2 : 00000000; +43d3 : 00000000; +43d4 : 00000000; +43d5 : 00000000; +43d6 : 00000000; +43d7 : 00000000; +43d8 : 00000000; +43d9 : 00000000; +43da : 00000000; +43db : 00000000; +43dc : 00000000; +43dd : 00000000; +43de : 00000000; +43df : 00000000; +43e0 : 00000000; +43e1 : 00000000; +43e2 : 00000000; +43e3 : 00000000; +43e4 : 00000000; +43e5 : 00000000; +43e6 : 00000000; +43e7 : 00000000; +43e8 : 00000000; +43e9 : 00000000; +43ea : 00000000; +43eb : 00000000; +43ec : 00000000; +43ed : 00000000; +43ee : 00000000; +43ef : 00000000; +43f0 : 00000000; +43f1 : 00000000; +43f2 : 00000000; +43f3 : 00000000; +43f4 : 00000000; +43f5 : 00000000; +43f6 : 00000000; +43f7 : 00000000; +43f8 : 00000000; +43f9 : 00000000; +43fa : 00000000; +43fb : 00000000; +43fc : 00000000; +43fd : 00000000; +43fe : 00000000; +43ff : 00000000; +4400 : 00000000; +4401 : 00000000; +4402 : 00000000; +4403 : 00000000; +4404 : 00000000; +4405 : 00000000; +4406 : 00000000; +4407 : 00000000; +4408 : 00000000; +4409 : 00000000; +440a : 00000000; +440b : 00000000; +440c : 00000000; +440d : 00000000; +440e : 00000000; +440f : 00000000; +4410 : 00000000; +4411 : 00000000; +4412 : 00000000; +4413 : 00000000; +4414 : 00000000; +4415 : 00000000; +4416 : 00000000; +4417 : 00000000; +4418 : 00000000; +4419 : 00000000; +441a : 00000000; +441b : 00000000; +441c : 00000000; +441d : 00000000; +441e : 00000000; +441f : 00000000; +4420 : 00000000; +4421 : 00000000; +4422 : 00000000; +4423 : 00000000; +4424 : 00000000; +4425 : 00000000; +4426 : 00000000; +4427 : 00000000; +4428 : 00000000; +4429 : 00000000; +442a : 00000000; +442b : 00000000; +442c : 00000000; +442d : 00000000; +442e : 00000000; +442f : 00000000; +4430 : 00000000; +4431 : 00000000; +4432 : 00000000; +4433 : 00000000; +4434 : 00000000; +4435 : 00000000; +4436 : 00000000; +4437 : 00000000; +4438 : 00000000; +4439 : 00000000; +443a : 00000000; +443b : 00000000; +443c : 00000000; +443d : 00000000; +443e : 00000000; +443f : 00000000; +4440 : 00000000; +4441 : 00000000; +4442 : 00000000; +4443 : 00000000; +4444 : 00000000; +4445 : 00000000; +4446 : 00000000; +4447 : 00000000; +4448 : 00000000; +4449 : 00000000; +444a : 00000000; +444b : 00000000; +444c : 00000000; +444d : 00000000; +444e : 00000000; +444f : 00000000; +4450 : 00000000; +4451 : 00000000; +4452 : 00000000; +4453 : 00000000; +4454 : 00000000; +4455 : 00000000; +4456 : 00000000; +4457 : 00000000; +4458 : 00000000; +4459 : 00000000; +445a : 00000000; +445b : 00000000; +445c : 00000000; +445d : 00000000; +445e : 00000000; +445f : 00000000; +4460 : 00000000; +4461 : 00000000; +4462 : 00000000; +4463 : 00000000; +4464 : 00000000; +4465 : 00000000; +4466 : 00000000; +4467 : 00000000; +4468 : 00000000; +4469 : 00000000; +446a : 00000000; +446b : 00000000; +446c : 00000000; +446d : 00000000; +446e : 00000000; +446f : 00000000; +4470 : 00000000; +4471 : 00000000; +4472 : 00000000; +4473 : 00000000; +4474 : 00000000; +4475 : 00000000; +4476 : 00000000; +4477 : 00000000; +4478 : 00000000; +4479 : 00000000; +447a : 00000000; +447b : 00000000; +447c : 00000000; +447d : 00000000; +447e : 00000000; +447f : 00000000; +4480 : 00000000; +4481 : 00000000; +4482 : 00000000; +4483 : 00000000; +4484 : 00000000; +4485 : 00000000; +4486 : 00000000; +4487 : 00000000; +4488 : 00000000; +4489 : 00000000; +448a : 00000000; +448b : 00000000; +448c : 00000000; +448d : 00000000; +448e : 00000000; +448f : 00000000; +4490 : 00000000; +4491 : 00000000; +4492 : 00000000; +4493 : 00000000; +4494 : 00000000; +4495 : 00000000; +4496 : 00000000; +4497 : 00000000; +4498 : 00000000; +4499 : 00000000; +449a : 00000000; +449b : 00000000; +449c : 00000000; +449d : 00000000; +449e : 00000000; +449f : 00000000; +44a0 : 00000000; +44a1 : 00000000; +44a2 : 00000000; +44a3 : 00000000; +44a4 : 00000000; +44a5 : 00000000; +44a6 : 00000000; +44a7 : 00000000; +44a8 : 00000000; +44a9 : 00000000; +44aa : 00000000; +44ab : 00000000; +44ac : 00000000; +44ad : 00000000; +44ae : 00000000; +44af : 00000000; +44b0 : 00000000; +44b1 : 00000000; +44b2 : 00000000; +44b3 : 00000000; +44b4 : 00000000; +44b5 : 00000000; +44b6 : 00000000; +44b7 : 00000000; +44b8 : 00000000; +44b9 : 00000000; +44ba : 00000000; +44bb : 00000000; +44bc : 00000000; +44bd : 00000000; +44be : 00000000; +44bf : 00000000; +44c0 : 00000000; +44c1 : 00000000; +44c2 : 00000000; +44c3 : 00000000; +44c4 : 00000000; +44c5 : 00000000; +44c6 : 00000000; +44c7 : 00000000; +44c8 : 00000000; +44c9 : 00000000; +44ca : 00000000; +44cb : 00000000; +44cc : 00000000; +44cd : 00000000; +44ce : 00000000; +44cf : 00000000; +44d0 : 00000000; +44d1 : 00000000; +44d2 : 00000000; +44d3 : 00000000; +44d4 : 00000000; +44d5 : 00000000; +44d6 : 00000000; +44d7 : 00000000; +44d8 : 00000000; +44d9 : 00000000; +44da : 00000000; +44db : 00000000; +44dc : 00000000; +44dd : 00000000; +44de : 00000000; +44df : 00000000; +44e0 : 00000000; +44e1 : 00000000; +44e2 : 00000000; +44e3 : 00000000; +44e4 : 00000000; +44e5 : 00000000; +44e6 : 00000000; +44e7 : 00000000; +44e8 : 00000000; +44e9 : 00000000; +44ea : 00000000; +44eb : 00000000; +44ec : 00000000; +44ed : 00000000; +44ee : 00000000; +44ef : 00000000; +44f0 : 00000000; +44f1 : 00000000; +44f2 : 00000000; +44f3 : 00000000; +44f4 : 00000000; +44f5 : 00000000; +44f6 : 00000000; +44f7 : 00000000; +44f8 : 00000000; +44f9 : 00000000; +44fa : 00000000; +44fb : 00000000; +44fc : 00000000; +44fd : 00000000; +44fe : 00000000; +44ff : 00000000; +4500 : 00000000; +4501 : 00000000; +4502 : 00000000; +4503 : 00000000; +4504 : 00000000; +4505 : 00000000; +4506 : 00000000; +4507 : 00000000; +4508 : 00000000; +4509 : 00000000; +450a : 00000000; +450b : 00000000; +450c : 00000000; +450d : 00000000; +450e : 00000000; +450f : 00000000; +4510 : 00000000; +4511 : 00000000; +4512 : 00000000; +4513 : 00000000; +4514 : 00000000; +4515 : 00000000; +4516 : 00000000; +4517 : 00000000; +4518 : 00000000; +4519 : 00000000; +451a : 00000000; +451b : 00000000; +451c : 00000000; +451d : 00000000; +451e : 00000000; +451f : 00000000; +4520 : 00000000; +4521 : 00000000; +4522 : 00000000; +4523 : 00000000; +4524 : 00000000; +4525 : 00000000; +4526 : 00000000; +4527 : 00000000; +4528 : 00000000; +4529 : 00000000; +452a : 00000000; +452b : 00000000; +452c : 00000000; +452d : 00000000; +452e : 00000000; +452f : 00000000; +4530 : 00000000; +4531 : 00000000; +4532 : 00000000; +4533 : 00000000; +4534 : 00000000; +4535 : 00000000; +4536 : 00000000; +4537 : 00000000; +4538 : 00000000; +4539 : 00000000; +453a : 00000000; +453b : 00000000; +453c : 00000000; +453d : 00000000; +453e : 00000000; +453f : 00000000; +4540 : 00000000; +4541 : 00000000; +4542 : 00000000; +4543 : 00000000; +4544 : 00000000; +4545 : 00000000; +4546 : 00000000; +4547 : 00000000; +4548 : 00000000; +4549 : 00000000; +454a : 00000000; +454b : 00000000; +454c : 00000000; +454d : 00000000; +454e : 00000000; +454f : 00000000; +4550 : 00000000; +4551 : 00000000; +4552 : 00000000; +4553 : 00000000; +4554 : 00000000; +4555 : 00000000; +4556 : 00000000; +4557 : 00000000; +4558 : 00000000; +4559 : 00000000; +455a : 00000000; +455b : 00000000; +455c : 00000000; +455d : 00000000; +455e : 00000000; +455f : 00000000; +4560 : 00000000; +4561 : 00000000; +4562 : 00000000; +4563 : 00000000; +4564 : 00000000; +4565 : 00000000; +4566 : 00000000; +4567 : 00000000; +4568 : 00000000; +4569 : 00000000; +456a : 00000000; +456b : 00000000; +456c : 00000000; +456d : 00000000; +456e : 00000000; +456f : 00000000; +4570 : 00000000; +4571 : 00000000; +4572 : 00000000; +4573 : 00000000; +4574 : 00000000; +4575 : 00000000; +4576 : 00000000; +4577 : 00000000; +4578 : 00000000; +4579 : 00000000; +457a : 00000000; +457b : 00000000; +457c : 00000000; +457d : 00000000; +457e : 00000000; +457f : 00000000; +4580 : 00000000; +4581 : 00000000; +4582 : 00000000; +4583 : 00000000; +4584 : 00000000; +4585 : 00000000; +4586 : 00000000; +4587 : 00000000; +4588 : 00000000; +4589 : 00000000; +458a : 00000000; +458b : 00000000; +458c : 00000000; +458d : 00000000; +458e : 00000000; +458f : 00000000; +4590 : 00000000; +4591 : 00000000; +4592 : 00000000; +4593 : 00000000; +4594 : 00000000; +4595 : 00000000; +4596 : 00000000; +4597 : 00000000; +4598 : 00000000; +4599 : 00000000; +459a : 00000000; +459b : 00000000; +459c : 00000000; +459d : 00000000; +459e : 00000000; +459f : 00000000; +45a0 : 00000000; +45a1 : 00000000; +45a2 : 00000000; +45a3 : 00000000; +45a4 : 00000000; +45a5 : 00000000; +45a6 : 00000000; +45a7 : 00000000; +45a8 : 00000000; +45a9 : 00000000; +45aa : 00000000; +45ab : 00000000; +45ac : 00000000; +45ad : 00000000; +45ae : 00000000; +45af : 00000000; +45b0 : 00000000; +45b1 : 00000000; +45b2 : 00000000; +45b3 : 00000000; +45b4 : 00000000; +45b5 : 00000000; +45b6 : 00000000; +45b7 : 00000000; +45b8 : 00000000; +45b9 : 00000000; +45ba : 00000000; +45bb : 00000000; +45bc : 00000000; +45bd : 00000000; +45be : 00000000; +45bf : 00000000; +45c0 : 00000000; +45c1 : 00000000; +45c2 : 00000000; +45c3 : 00000000; +45c4 : 00000000; +45c5 : 00000000; +45c6 : 00000000; +45c7 : 00000000; +45c8 : 00000000; +45c9 : 00000000; +45ca : 00000000; +45cb : 00000000; +45cc : 00000000; +45cd : 00000000; +45ce : 00000000; +45cf : 00000000; +45d0 : 00000000; +45d1 : 00000000; +45d2 : 00000000; +45d3 : 00000000; +45d4 : 00000000; +45d5 : 00000000; +45d6 : 00000000; +45d7 : 00000000; +45d8 : 00000000; +45d9 : 00000000; +45da : 00000000; +45db : 00000000; +45dc : 00000000; +45dd : 00000000; +45de : 00000000; +45df : 00000000; +45e0 : 00000000; +45e1 : 00000000; +45e2 : 00000000; +45e3 : 00000000; +45e4 : 00000000; +45e5 : 00000000; +45e6 : 00000000; +45e7 : 00000000; +45e8 : 00000000; +45e9 : 00000000; +45ea : 00000000; +45eb : 00000000; +45ec : 00000000; +45ed : 00000000; +45ee : 00000000; +45ef : 00000000; +45f0 : 00000000; +45f1 : 00000000; +45f2 : 00000000; +45f3 : 00000000; +45f4 : 00000000; +45f5 : 00000000; +45f6 : 00000000; +45f7 : 00000000; +45f8 : 00000000; +45f9 : 00000000; +45fa : 00000000; +45fb : 00000000; +45fc : 00000000; +45fd : 00000000; +45fe : 00000000; +45ff : 00000000; +4600 : 00000000; +4601 : 00000000; +4602 : 00000000; +4603 : 00000000; +4604 : 00000000; +4605 : 00000000; +4606 : 00000000; +4607 : 00000000; +4608 : 00000000; +4609 : 00000000; +460a : 00000000; +460b : 00000000; +460c : 00000000; +460d : 00000000; +460e : 00000000; +460f : 00000000; +4610 : 00000000; +4611 : 00000000; +4612 : 00000000; +4613 : 00000000; +4614 : 00000000; +4615 : 00000000; +4616 : 00000000; +4617 : 00000000; +4618 : 00000000; +4619 : 00000000; +461a : 00000000; +461b : 00000000; +461c : 00000000; +461d : 00000000; +461e : 00000000; +461f : 00000000; +4620 : 00000000; +4621 : 00000000; +4622 : 00000000; +4623 : 00000000; +4624 : 00000000; +4625 : 00000000; +4626 : 00000000; +4627 : 00000000; +4628 : 00000000; +4629 : 00000000; +462a : 00000000; +462b : 00000000; +462c : 00000000; +462d : 00000000; +462e : 00000000; +462f : 00000000; +4630 : 00000000; +4631 : 00000000; +4632 : 00000000; +4633 : 00000000; +4634 : 00000000; +4635 : 00000000; +4636 : 00000000; +4637 : 00000000; +4638 : 00000000; +4639 : 00000000; +463a : 00000000; +463b : 00000000; +463c : 00000000; +463d : 00000000; +463e : 00000000; +463f : 00000000; +4640 : 00000000; +4641 : 00000000; +4642 : 00000000; +4643 : 00000000; +4644 : 00000000; +4645 : 00000000; +4646 : 00000000; +4647 : 00000000; +4648 : 00000000; +4649 : 00000000; +464a : 00000000; +464b : 00000000; +464c : 00000000; +464d : 00000000; +464e : 00000000; +464f : 00000000; +4650 : 00000000; +4651 : 00000000; +4652 : 00000000; +4653 : 00000000; +4654 : 00000000; +4655 : 00000000; +4656 : 00000000; +4657 : 00000000; +4658 : 00000000; +4659 : 00000000; +465a : 00000000; +465b : 00000000; +465c : 00000000; +465d : 00000000; +465e : 00000000; +465f : 00000000; +4660 : 00000000; +4661 : 00000000; +4662 : 00000000; +4663 : 00000000; +4664 : 00000000; +4665 : 00000000; +4666 : 00000000; +4667 : 00000000; +4668 : 00000000; +4669 : 00000000; +466a : 00000000; +466b : 00000000; +466c : 00000000; +466d : 00000000; +466e : 00000000; +466f : 00000000; +4670 : 00000000; +4671 : 00000000; +4672 : 00000000; +4673 : 00000000; +4674 : 00000000; +4675 : 00000000; +4676 : 00000000; +4677 : 00000000; +4678 : 00000000; +4679 : 00000000; +467a : 00000000; +467b : 00000000; +467c : 00000000; +467d : 00000000; +467e : 00000000; +467f : 00000000; +4680 : 00000000; +4681 : 00000000; +4682 : 00000000; +4683 : 00000000; +4684 : 00000000; +4685 : 00000000; +4686 : 00000000; +4687 : 00000000; +4688 : 00000000; +4689 : 00000000; +468a : 00000000; +468b : 00000000; +468c : 00000000; +468d : 00000000; +468e : 00000000; +468f : 00000000; +4690 : 00000000; +4691 : 00000000; +4692 : 00000000; +4693 : 00000000; +4694 : 00000000; +4695 : 00000000; +4696 : 00000000; +4697 : 00000000; +4698 : 00000000; +4699 : 00000000; +469a : 00000000; +469b : 00000000; +469c : 00000000; +469d : 00000000; +469e : 00000000; +469f : 00000000; +46a0 : 00000000; +46a1 : 00000000; +46a2 : 00000000; +46a3 : 00000000; +46a4 : 00000000; +46a5 : 00000000; +46a6 : 00000000; +46a7 : 00000000; +46a8 : 00000000; +46a9 : 00000000; +46aa : 00000000; +46ab : 00000000; +46ac : 00000000; +46ad : 00000000; +46ae : 00000000; +46af : 00000000; +46b0 : 00000000; +46b1 : 00000000; +46b2 : 00000000; +46b3 : 00000000; +46b4 : 00000000; +46b5 : 00000000; +46b6 : 00000000; +46b7 : 00000000; +46b8 : 00000000; +46b9 : 00000000; +46ba : 00000000; +46bb : 00000000; +46bc : 00000000; +46bd : 00000000; +46be : 00000000; +46bf : 00000000; +46c0 : 00000000; +46c1 : 00000000; +46c2 : 00000000; +46c3 : 00000000; +46c4 : 00000000; +46c5 : 00000000; +46c6 : 00000000; +46c7 : 00000000; +46c8 : 00000000; +46c9 : 00000000; +46ca : 00000000; +46cb : 00000000; +46cc : 00000000; +46cd : 00000000; +46ce : 00000000; +46cf : 00000000; +46d0 : 00000000; +46d1 : 00000000; +46d2 : 00000000; +46d3 : 00000000; +46d4 : 00000000; +46d5 : 00000000; +46d6 : 00000000; +46d7 : 00000000; +46d8 : 00000000; +46d9 : 00000000; +46da : 00000000; +46db : 00000000; +46dc : 00000000; +46dd : 00000000; +46de : 00000000; +46df : 00000000; +46e0 : 00000000; +46e1 : 00000000; +46e2 : 00000000; +46e3 : 00000000; +46e4 : 00000000; +46e5 : 00000000; +46e6 : 00000000; +46e7 : 00000000; +46e8 : 00000000; +46e9 : 00000000; +46ea : 00000000; +46eb : 00000000; +46ec : 00000000; +46ed : 00000000; +46ee : 00000000; +46ef : 00000000; +46f0 : 00000000; +46f1 : 00000000; +46f2 : 00000000; +46f3 : 00000000; +46f4 : 00000000; +46f5 : 00000000; +46f6 : 00000000; +46f7 : 00000000; +46f8 : 00000000; +46f9 : 00000000; +46fa : 00000000; +46fb : 00000000; +46fc : 00000000; +46fd : 00000000; +46fe : 00000000; +46ff : 00000000; +4700 : 00000000; +4701 : 00000000; +4702 : 00000000; +4703 : 00000000; +4704 : 00000000; +4705 : 00000000; +4706 : 00000000; +4707 : 00000000; +4708 : 00000000; +4709 : 00000000; +470a : 00000000; +470b : 00000000; +470c : 00000000; +470d : 00000000; +470e : 00000000; +470f : 00000000; +4710 : 00000000; +4711 : 00000000; +4712 : 00000000; +4713 : 00000000; +4714 : 00000000; +4715 : 00000000; +4716 : 00000000; +4717 : 00000000; +4718 : 00000000; +4719 : 00000000; +471a : 00000000; +471b : 00000000; +471c : 00000000; +471d : 00000000; +471e : 00000000; +471f : 00000000; +4720 : 00000000; +4721 : 00000000; +4722 : 00000000; +4723 : 00000000; +4724 : 00000000; +4725 : 00000000; +4726 : 00000000; +4727 : 00000000; +4728 : 00000000; +4729 : 00000000; +472a : 00000000; +472b : 00000000; +472c : 00000000; +472d : 00000000; +472e : 00000000; +472f : 00000000; +4730 : 00000000; +4731 : 00000000; +4732 : 00000000; +4733 : 00000000; +4734 : 00000000; +4735 : 00000000; +4736 : 00000000; +4737 : 00000000; +4738 : 00000000; +4739 : 00000000; +473a : 00000000; +473b : 00000000; +473c : 00000000; +473d : 00000000; +473e : 00000000; +473f : 00000000; +4740 : 00000000; +4741 : 00000000; +4742 : 00000000; +4743 : 00000000; +4744 : 00000000; +4745 : 00000000; +4746 : 00000000; +4747 : 00000000; +4748 : 00000000; +4749 : 00000000; +474a : 00000000; +474b : 00000000; +474c : 00000000; +474d : 00000000; +474e : 00000000; +474f : 00000000; +4750 : 00000000; +4751 : 00000000; +4752 : 00000000; +4753 : 00000000; +4754 : 00000000; +4755 : 00000000; +4756 : 00000000; +4757 : 00000000; +4758 : 00000000; +4759 : 00000000; +475a : 00000000; +475b : 00000000; +475c : 00000000; +475d : 00000000; +475e : 00000000; +475f : 00000000; +4760 : 00000000; +4761 : 00000000; +4762 : 00000000; +4763 : 00000000; +4764 : 00000000; +4765 : 00000000; +4766 : 00000000; +4767 : 00000000; +4768 : 00000000; +4769 : 00000000; +476a : 00000000; +476b : 00000000; +476c : 00000000; +476d : 00000000; +476e : 00000000; +476f : 00000000; +4770 : 00000000; +4771 : 00000000; +4772 : 00000000; +4773 : 00000000; +4774 : 00000000; +4775 : 00000000; +4776 : 00000000; +4777 : 00000000; +4778 : 00000000; +4779 : 00000000; +477a : 00000000; +477b : 00000000; +477c : 00000000; +477d : 00000000; +477e : 00000000; +477f : 00000000; +4780 : 00000000; +4781 : 00000000; +4782 : 00000000; +4783 : 00000000; +4784 : 00000000; +4785 : 00000000; +4786 : 00000000; +4787 : 00000000; +4788 : 00000000; +4789 : 00000000; +478a : 00000000; +478b : 00000000; +478c : 00000000; +478d : 00000000; +478e : 00000000; +478f : 00000000; +4790 : 00000000; +4791 : 00000000; +4792 : 00000000; +4793 : 00000000; +4794 : 00000000; +4795 : 00000000; +4796 : 00000000; +4797 : 00000000; +4798 : 00000000; +4799 : 00000000; +479a : 00000000; +479b : 00000000; +479c : 00000000; +479d : 00000000; +479e : 00000000; +479f : 00000000; +47a0 : 00000000; +47a1 : 00000000; +47a2 : 00000000; +47a3 : 00000000; +47a4 : 00000000; +47a5 : 00000000; +47a6 : 00000000; +47a7 : 00000000; +47a8 : 00000000; +47a9 : 00000000; +47aa : 00000000; +47ab : 00000000; +47ac : 00000000; +47ad : 00000000; +47ae : 00000000; +47af : 00000000; +47b0 : 00000000; +47b1 : 00000000; +47b2 : 00000000; +47b3 : 00000000; +47b4 : 00000000; +47b5 : 00000000; +47b6 : 00000000; +47b7 : 00000000; +47b8 : 00000000; +47b9 : 00000000; +47ba : 00000000; +47bb : 00000000; +47bc : 00000000; +47bd : 00000000; +47be : 00000000; +47bf : 00000000; +47c0 : 00000000; +47c1 : 00000000; +47c2 : 00000000; +47c3 : 00000000; +47c4 : 00000000; +47c5 : 00000000; +47c6 : 00000000; +47c7 : 00000000; +47c8 : 00000000; +47c9 : 00000000; +47ca : 00000000; +47cb : 00000000; +47cc : 00000000; +47cd : 00000000; +47ce : 00000000; +47cf : 00000000; +47d0 : 00000000; +47d1 : 00000000; +47d2 : 00000000; +47d3 : 00000000; +47d4 : 00000000; +47d5 : 00000000; +47d6 : 00000000; +47d7 : 00000000; +47d8 : 00000000; +47d9 : 00000000; +47da : 00000000; +47db : 00000000; +47dc : 00000000; +47dd : 00000000; +47de : 00000000; +47df : 00000000; +47e0 : 00000000; +47e1 : 00000000; +47e2 : 00000000; +47e3 : 00000000; +47e4 : 00000000; +47e5 : 00000000; +47e6 : 00000000; +47e7 : 00000000; +47e8 : 00000000; +47e9 : 00000000; +47ea : 00000000; +47eb : 00000000; +47ec : 00000000; +47ed : 00000000; +47ee : 00000000; +47ef : 00000000; +47f0 : 00000000; +47f1 : 00000000; +47f2 : 00000000; +47f3 : 00000000; +47f4 : 00000000; +47f5 : 00000000; +47f6 : 00000000; +47f7 : 00000000; +47f8 : 00000000; +47f9 : 00000000; +47fa : 00000000; +47fb : 00000000; +47fc : 00000000; +47fd : 00000000; +47fe : 00000000; +47ff : 00000000; +4800 : 00000000; +4801 : 00000000; +4802 : 00000000; +4803 : 00000000; +4804 : 00000000; +4805 : 00000000; +4806 : 00000000; +4807 : 00000000; +4808 : 00000000; +4809 : 00000000; +480a : 00000000; +480b : 00000000; +480c : 00000000; +480d : 00000000; +480e : 00000000; +480f : 00000000; +4810 : 00000000; +4811 : 00000000; +4812 : 00000000; +4813 : 00000000; +4814 : 00000000; +4815 : 00000000; +4816 : 00000000; +4817 : 00000000; +4818 : 00000000; +4819 : 00000000; +481a : 00000000; +481b : 00000000; +481c : 00000000; +481d : 00000000; +481e : 00000000; +481f : 00000000; +4820 : 00000000; +4821 : 00000000; +4822 : 00000000; +4823 : 00000000; +4824 : 00000000; +4825 : 00000000; +4826 : 00000000; +4827 : 00000000; +4828 : 00000000; +4829 : 00000000; +482a : 00000000; +482b : 00000000; +482c : 00000000; +482d : 00000000; +482e : 00000000; +482f : 00000000; +4830 : 00000000; +4831 : 00000000; +4832 : 00000000; +4833 : 00000000; +4834 : 00000000; +4835 : 00000000; +4836 : 00000000; +4837 : 00000000; +4838 : 00000000; +4839 : 00000000; +483a : 00000000; +483b : 00000000; +483c : 00000000; +483d : 00000000; +483e : 00000000; +483f : 00000000; +4840 : 00000000; +4841 : 00000000; +4842 : 00000000; +4843 : 00000000; +4844 : 00000000; +4845 : 00000000; +4846 : 00000000; +4847 : 00000000; +4848 : 00000000; +4849 : 00000000; +484a : 00000000; +484b : 00000000; +484c : 00000000; +484d : 00000000; +484e : 00000000; +484f : 00000000; +4850 : 00000000; +4851 : 00000000; +4852 : 00000000; +4853 : 00000000; +4854 : 00000000; +4855 : 00000000; +4856 : 00000000; +4857 : 00000000; +4858 : 00000000; +4859 : 00000000; +485a : 00000000; +485b : 00000000; +485c : 00000000; +485d : 00000000; +485e : 00000000; +485f : 00000000; +4860 : 00000000; +4861 : 00000000; +4862 : 00000000; +4863 : 00000000; +4864 : 00000000; +4865 : 00000000; +4866 : 00000000; +4867 : 00000000; +4868 : 00000000; +4869 : 00000000; +486a : 00000000; +486b : 00000000; +486c : 00000000; +486d : 00000000; +486e : 00000000; +486f : 00000000; +4870 : 00000000; +4871 : 00000000; +4872 : 00000000; +4873 : 00000000; +4874 : 00000000; +4875 : 00000000; +4876 : 00000000; +4877 : 00000000; +4878 : 00000000; +4879 : 00000000; +487a : 00000000; +487b : 00000000; +487c : 00000000; +487d : 00000000; +487e : 00000000; +487f : 00000000; +4880 : 00000000; +4881 : 00000000; +4882 : 00000000; +4883 : 00000000; +4884 : 00000000; +4885 : 00000000; +4886 : 00000000; +4887 : 00000000; +4888 : 00000000; +4889 : 00000000; +488a : 00000000; +488b : 00000000; +488c : 00000000; +488d : 00000000; +488e : 00000000; +488f : 00000000; +4890 : 00000000; +4891 : 00000000; +4892 : 00000000; +4893 : 00000000; +4894 : 00000000; +4895 : 00000000; +4896 : 00000000; +4897 : 00000000; +4898 : 00000000; +4899 : 00000000; +489a : 00000000; +489b : 00000000; +489c : 00000000; +489d : 00000000; +489e : 00000000; +489f : 00000000; +48a0 : 00000000; +48a1 : 00000000; +48a2 : 00000000; +48a3 : 00000000; +48a4 : 00000000; +48a5 : 00000000; +48a6 : 00000000; +48a7 : 00000000; +48a8 : 00000000; +48a9 : 00000000; +48aa : 00000000; +48ab : 00000000; +48ac : 00000000; +48ad : 00000000; +48ae : 00000000; +48af : 00000000; +48b0 : 00000000; +48b1 : 00000000; +48b2 : 00000000; +48b3 : 00000000; +48b4 : 00000000; +48b5 : 00000000; +48b6 : 00000000; +48b7 : 00000000; +48b8 : 00000000; +48b9 : 00000000; +48ba : 00000000; +48bb : 00000000; +48bc : 00000000; +48bd : 00000000; +48be : 00000000; +48bf : 00000000; +48c0 : 00000000; +48c1 : 00000000; +48c2 : 00000000; +48c3 : 00000000; +48c4 : 00000000; +48c5 : 00000000; +48c6 : 00000000; +48c7 : 00000000; +48c8 : 00000000; +48c9 : 00000000; +48ca : 00000000; +48cb : 00000000; +48cc : 00000000; +48cd : 00000000; +48ce : 00000000; +48cf : 00000000; +48d0 : 00000000; +48d1 : 00000000; +48d2 : 00000000; +48d3 : 00000000; +48d4 : 00000000; +48d5 : 00000000; +48d6 : 00000000; +48d7 : 00000000; +48d8 : 00000000; +48d9 : 00000000; +48da : 00000000; +48db : 00000000; +48dc : 00000000; +48dd : 00000000; +48de : 00000000; +48df : 00000000; +48e0 : 00000000; +48e1 : 00000000; +48e2 : 00000000; +48e3 : 00000000; +48e4 : 00000000; +48e5 : 00000000; +48e6 : 00000000; +48e7 : 00000000; +48e8 : 00000000; +48e9 : 00000000; +48ea : 00000000; +48eb : 00000000; +48ec : 00000000; +48ed : 00000000; +48ee : 00000000; +48ef : 00000000; +48f0 : 00000000; +48f1 : 00000000; +48f2 : 00000000; +48f3 : 00000000; +48f4 : 00000000; +48f5 : 00000000; +48f6 : 00000000; +48f7 : 00000000; +48f8 : 00000000; +48f9 : 00000000; +48fa : 00000000; +48fb : 00000000; +48fc : 00000000; +48fd : 00000000; +48fe : 00000000; +48ff : 00000000; +4900 : 00000000; +4901 : 00000000; +4902 : 00000000; +4903 : 00000000; +4904 : 00000000; +4905 : 00000000; +4906 : 00000000; +4907 : 00000000; +4908 : 00000000; +4909 : 00000000; +490a : 00000000; +490b : 00000000; +490c : 00000000; +490d : 00000000; +490e : 00000000; +490f : 00000000; +4910 : 00000000; +4911 : 00000000; +4912 : 00000000; +4913 : 00000000; +4914 : 00000000; +4915 : 00000000; +4916 : 00000000; +4917 : 00000000; +4918 : 00000000; +4919 : 00000000; +491a : 00000000; +491b : 00000000; +491c : 00000000; +491d : 00000000; +491e : 00000000; +491f : 00000000; +4920 : 00000000; +4921 : 00000000; +4922 : 00000000; +4923 : 00000000; +4924 : 00000000; +4925 : 00000000; +4926 : 00000000; +4927 : 00000000; +4928 : 00000000; +4929 : 00000000; +492a : 00000000; +492b : 00000000; +492c : 00000000; +492d : 00000000; +492e : 00000000; +492f : 00000000; +4930 : 00000000; +4931 : 00000000; +4932 : 00000000; +4933 : 00000000; +4934 : 00000000; +4935 : 00000000; +4936 : 00000000; +4937 : 00000000; +4938 : 00000000; +4939 : 00000000; +493a : 00000000; +493b : 00000000; +493c : 00000000; +493d : 00000000; +493e : 00000000; +493f : 00000000; +4940 : 00000000; +4941 : 00000000; +4942 : 00000000; +4943 : 00000000; +4944 : 00000000; +4945 : 00000000; +4946 : 00000000; +4947 : 00000000; +4948 : 00000000; +4949 : 00000000; +494a : 00000000; +494b : 00000000; +494c : 00000000; +494d : 00000000; +494e : 00000000; +494f : 00000000; +4950 : 00000000; +4951 : 00000000; +4952 : 00000000; +4953 : 00000000; +4954 : 00000000; +4955 : 00000000; +4956 : 00000000; +4957 : 00000000; +4958 : 00000000; +4959 : 00000000; +495a : 00000000; +495b : 00000000; +495c : 00000000; +495d : 00000000; +495e : 00000000; +495f : 00000000; +4960 : 00000000; +4961 : 00000000; +4962 : 00000000; +4963 : 00000000; +4964 : 00000000; +4965 : 00000000; +4966 : 00000000; +4967 : 00000000; +4968 : 00000000; +4969 : 00000000; +496a : 00000000; +496b : 00000000; +496c : 00000000; +496d : 00000000; +496e : 00000000; +496f : 00000000; +4970 : 00000000; +4971 : 00000000; +4972 : 00000000; +4973 : 00000000; +4974 : 00000000; +4975 : 00000000; +4976 : 00000000; +4977 : 00000000; +4978 : 00000000; +4979 : 00000000; +497a : 00000000; +497b : 00000000; +497c : 00000000; +497d : 00000000; +497e : 00000000; +497f : 00000000; +4980 : 00000000; +4981 : 00000000; +4982 : 00000000; +4983 : 00000000; +4984 : 00000000; +4985 : 00000000; +4986 : 00000000; +4987 : 00000000; +4988 : 00000000; +4989 : 00000000; +498a : 00000000; +498b : 00000000; +498c : 00000000; +498d : 00000000; +498e : 00000000; +498f : 00000000; +4990 : 00000000; +4991 : 00000000; +4992 : 00000000; +4993 : 00000000; +4994 : 00000000; +4995 : 00000000; +4996 : 00000000; +4997 : 00000000; +4998 : 00000000; +4999 : 00000000; +499a : 00000000; +499b : 00000000; +499c : 00000000; +499d : 00000000; +499e : 00000000; +499f : 00000000; +49a0 : 00000000; +49a1 : 00000000; +49a2 : 00000000; +49a3 : 00000000; +49a4 : 00000000; +49a5 : 00000000; +49a6 : 00000000; +49a7 : 00000000; +49a8 : 00000000; +49a9 : 00000000; +49aa : 00000000; +49ab : 00000000; +49ac : 00000000; +49ad : 00000000; +49ae : 00000000; +49af : 00000000; +49b0 : 00000000; +49b1 : 00000000; +49b2 : 00000000; +49b3 : 00000000; +49b4 : 00000000; +49b5 : 00000000; +49b6 : 00000000; +49b7 : 00000000; +49b8 : 00000000; +49b9 : 00000000; +49ba : 00000000; +49bb : 00000000; +49bc : 00000000; +49bd : 00000000; +49be : 00000000; +49bf : 00000000; +49c0 : 00000000; +49c1 : 00000000; +49c2 : 00000000; +49c3 : 00000000; +49c4 : 00000000; +49c5 : 00000000; +49c6 : 00000000; +49c7 : 00000000; +49c8 : 00000000; +49c9 : 00000000; +49ca : 00000000; +49cb : 00000000; +49cc : 00000000; +49cd : 00000000; +49ce : 00000000; +49cf : 00000000; +49d0 : 00000000; +49d1 : 00000000; +49d2 : 00000000; +49d3 : 00000000; +49d4 : 00000000; +49d5 : 00000000; +49d6 : 00000000; +49d7 : 00000000; +49d8 : 00000000; +49d9 : 00000000; +49da : 00000000; +49db : 00000000; +49dc : 00000000; +49dd : 00000000; +49de : 00000000; +49df : 00000000; +49e0 : 00000000; +49e1 : 00000000; +49e2 : 00000000; +49e3 : 00000000; +49e4 : 00000000; +49e5 : 00000000; +49e6 : 00000000; +49e7 : 00000000; +49e8 : 00000000; +49e9 : 00000000; +49ea : 00000000; +49eb : 00000000; +49ec : 00000000; +49ed : 00000000; +49ee : 00000000; +49ef : 00000000; +49f0 : 00000000; +49f1 : 00000000; +49f2 : 00000000; +49f3 : 00000000; +49f4 : 00000000; +49f5 : 00000000; +49f6 : 00000000; +49f7 : 00000000; +49f8 : 00000000; +49f9 : 00000000; +49fa : 00000000; +49fb : 00000000; +49fc : 00000000; +49fd : 00000000; +49fe : 00000000; +49ff : 00000000; +4a00 : 00000000; +4a01 : 00000000; +4a02 : 00000000; +4a03 : 00000000; +4a04 : 00000000; +4a05 : 00000000; +4a06 : 00000000; +4a07 : 00000000; +4a08 : 00000000; +4a09 : 00000000; +4a0a : 00000000; +4a0b : 00000000; +4a0c : 00000000; +4a0d : 00000000; +4a0e : 00000000; +4a0f : 00000000; +4a10 : 00000000; +4a11 : 00000000; +4a12 : 00000000; +4a13 : 00000000; +4a14 : 00000000; +4a15 : 00000000; +4a16 : 00000000; +4a17 : 00000000; +4a18 : 00000000; +4a19 : 00000000; +4a1a : 00000000; +4a1b : 00000000; +4a1c : 00000000; +4a1d : 00000000; +4a1e : 00000000; +4a1f : 00000000; +4a20 : 00000000; +4a21 : 00000000; +4a22 : 00000000; +4a23 : 00000000; +4a24 : 00000000; +4a25 : 00000000; +4a26 : 00000000; +4a27 : 00000000; +4a28 : 00000000; +4a29 : 00000000; +4a2a : 00000000; +4a2b : 00000000; +4a2c : 00000000; +4a2d : 00000000; +4a2e : 00000000; +4a2f : 00000000; +4a30 : 00000000; +4a31 : 00000000; +4a32 : 00000000; +4a33 : 00000000; +4a34 : 00000000; +4a35 : 00000000; +4a36 : 00000000; +4a37 : 00000000; +4a38 : 00000000; +4a39 : 00000000; +4a3a : 00000000; +4a3b : 00000000; +4a3c : 00000000; +4a3d : 00000000; +4a3e : 00000000; +4a3f : 00000000; +4a40 : 00000000; +4a41 : 00000000; +4a42 : 00000000; +4a43 : 00000000; +4a44 : 00000000; +4a45 : 00000000; +4a46 : 00000000; +4a47 : 00000000; +4a48 : 00000000; +4a49 : 00000000; +4a4a : 00000000; +4a4b : 00000000; +4a4c : 00000000; +4a4d : 00000000; +4a4e : 00000000; +4a4f : 00000000; +4a50 : 00000000; +4a51 : 00000000; +4a52 : 00000000; +4a53 : 00000000; +4a54 : 00000000; +4a55 : 00000000; +4a56 : 00000000; +4a57 : 00000000; +4a58 : 00000000; +4a59 : 00000000; +4a5a : 00000000; +4a5b : 00000000; +4a5c : 00000000; +4a5d : 00000000; +4a5e : 00000000; +4a5f : 00000000; +4a60 : 00000000; +4a61 : 00000000; +4a62 : 00000000; +4a63 : 00000000; +4a64 : 00000000; +4a65 : 00000000; +4a66 : 00000000; +4a67 : 00000000; +4a68 : 00000000; +4a69 : 00000000; +4a6a : 00000000; +4a6b : 00000000; +4a6c : 00000000; +4a6d : 00000000; +4a6e : 00000000; +4a6f : 00000000; +4a70 : 00000000; +4a71 : 00000000; +4a72 : 00000000; +4a73 : 00000000; +4a74 : 00000000; +4a75 : 00000000; +4a76 : 00000000; +4a77 : 00000000; +4a78 : 00000000; +4a79 : 00000000; +4a7a : 00000000; +4a7b : 00000000; +4a7c : 00000000; +4a7d : 00000000; +4a7e : 00000000; +4a7f : 00000000; +4a80 : 00000000; +4a81 : 00000000; +4a82 : 00000000; +4a83 : 00000000; +4a84 : 00000000; +4a85 : 00000000; +4a86 : 00000000; +4a87 : 00000000; +4a88 : 00000000; +4a89 : 00000000; +4a8a : 00000000; +4a8b : 00000000; +4a8c : 00000000; +4a8d : 00000000; +4a8e : 00000000; +4a8f : 00000000; +4a90 : 00000000; +4a91 : 00000000; +4a92 : 00000000; +4a93 : 00000000; +4a94 : 00000000; +4a95 : 00000000; +4a96 : 00000000; +4a97 : 00000000; +4a98 : 00000000; +4a99 : 00000000; +4a9a : 00000000; +4a9b : 00000000; +4a9c : 00000000; +4a9d : 00000000; +4a9e : 00000000; +4a9f : 00000000; +4aa0 : 00000000; +4aa1 : 00000000; +4aa2 : 00000000; +4aa3 : 00000000; +4aa4 : 00000000; +4aa5 : 00000000; +4aa6 : 00000000; +4aa7 : 00000000; +4aa8 : 00000000; +4aa9 : 00000000; +4aaa : 00000000; +4aab : 00000000; +4aac : 00000000; +4aad : 00000000; +4aae : 00000000; +4aaf : 00000000; +4ab0 : 00000000; +4ab1 : 00000000; +4ab2 : 00000000; +4ab3 : 00000000; +4ab4 : 00000000; +4ab5 : 00000000; +4ab6 : 00000000; +4ab7 : 00000000; +4ab8 : 00000000; +4ab9 : 00000000; +4aba : 00000000; +4abb : 00000000; +4abc : 00000000; +4abd : 00000000; +4abe : 00000000; +4abf : 00000000; +4ac0 : 00000000; +4ac1 : 00000000; +4ac2 : 00000000; +4ac3 : 00000000; +4ac4 : 00000000; +4ac5 : 00000000; +4ac6 : 00000000; +4ac7 : 00000000; +4ac8 : 00000000; +4ac9 : 00000000; +4aca : 00000000; +4acb : 00000000; +4acc : 00000000; +4acd : 00000000; +4ace : 00000000; +4acf : 00000000; +4ad0 : 00000000; +4ad1 : 00000000; +4ad2 : 00000000; +4ad3 : 00000000; +4ad4 : 00000000; +4ad5 : 00000000; +4ad6 : 00000000; +4ad7 : 00000000; +4ad8 : 00000000; +4ad9 : 00000000; +4ada : 00000000; +4adb : 00000000; +4adc : 00000000; +4add : 00000000; +4ade : 00000000; +4adf : 00000000; +4ae0 : 00000000; +4ae1 : 00000000; +4ae2 : 00000000; +4ae3 : 00000000; +4ae4 : 00000000; +4ae5 : 00000000; +4ae6 : 00000000; +4ae7 : 00000000; +4ae8 : 00000000; +4ae9 : 00000000; +4aea : 00000000; +4aeb : 00000000; +4aec : 00000000; +4aed : 00000000; +4aee : 00000000; +4aef : 00000000; +4af0 : 00000000; +4af1 : 00000000; +4af2 : 00000000; +4af3 : 00000000; +4af4 : 00000000; +4af5 : 00000000; +4af6 : 00000000; +4af7 : 00000000; +4af8 : 00000000; +4af9 : 00000000; +4afa : 00000000; +4afb : 00000000; +4afc : 00000000; +4afd : 00000000; +4afe : 00000000; +4aff : 00000000; +4b00 : 00000000; +4b01 : 00000000; +4b02 : 00000000; +4b03 : 00000000; +4b04 : 00000000; +4b05 : 00000000; +4b06 : 00000000; +4b07 : 00000000; +4b08 : 00000000; +4b09 : 00000000; +4b0a : 00000000; +4b0b : 00000000; +4b0c : 00000000; +4b0d : 00000000; +4b0e : 00000000; +4b0f : 00000000; +4b10 : 00000000; +4b11 : 00000000; +4b12 : 00000000; +4b13 : 00000000; +4b14 : 00000000; +4b15 : 00000000; +4b16 : 00000000; +4b17 : 00000000; +4b18 : 00000000; +4b19 : 00000000; +4b1a : 00000000; +4b1b : 00000000; +4b1c : 00000000; +4b1d : 00000000; +4b1e : 00000000; +4b1f : 00000000; +4b20 : 00000000; +4b21 : 00000000; +4b22 : 00000000; +4b23 : 00000000; +4b24 : 00000000; +4b25 : 00000000; +4b26 : 00000000; +4b27 : 00000000; +4b28 : 00000000; +4b29 : 00000000; +4b2a : 00000000; +4b2b : 00000000; +4b2c : 00000000; +4b2d : 00000000; +4b2e : 00000000; +4b2f : 00000000; +4b30 : 00000000; +4b31 : 00000000; +4b32 : 00000000; +4b33 : 00000000; +4b34 : 00000000; +4b35 : 00000000; +4b36 : 00000000; +4b37 : 00000000; +4b38 : 00000000; +4b39 : 00000000; +4b3a : 00000000; +4b3b : 00000000; +4b3c : 00000000; +4b3d : 00000000; +4b3e : 00000000; +4b3f : 00000000; +4b40 : 00000000; +4b41 : 00000000; +4b42 : 00000000; +4b43 : 00000000; +4b44 : 00000000; +4b45 : 00000000; +4b46 : 00000000; +4b47 : 00000000; +4b48 : 00000000; +4b49 : 00000000; +4b4a : 00000000; +4b4b : 00000000; +4b4c : 00000000; +4b4d : 00000000; +4b4e : 00000000; +4b4f : 00000000; +4b50 : 00000000; +4b51 : 00000000; +4b52 : 00000000; +4b53 : 00000000; +4b54 : 00000000; +4b55 : 00000000; +4b56 : 00000000; +4b57 : 00000000; +4b58 : 00000000; +4b59 : 00000000; +4b5a : 00000000; +4b5b : 00000000; +4b5c : 00000000; +4b5d : 00000000; +4b5e : 00000000; +4b5f : 00000000; +4b60 : 00000000; +4b61 : 00000000; +4b62 : 00000000; +4b63 : 00000000; +4b64 : 00000000; +4b65 : 00000000; +4b66 : 00000000; +4b67 : 00000000; +4b68 : 00000000; +4b69 : 00000000; +4b6a : 00000000; +4b6b : 00000000; +4b6c : 00000000; +4b6d : 00000000; +4b6e : 00000000; +4b6f : 00000000; +4b70 : 00000000; +4b71 : 00000000; +4b72 : 00000000; +4b73 : 00000000; +4b74 : 00000000; +4b75 : 00000000; +4b76 : 00000000; +4b77 : 00000000; +4b78 : 00000000; +4b79 : 00000000; +4b7a : 00000000; +4b7b : 00000000; +4b7c : 00000000; +4b7d : 00000000; +4b7e : 00000000; +4b7f : 00000000; +4b80 : 00000000; +4b81 : 00000000; +4b82 : 00000000; +4b83 : 00000000; +4b84 : 00000000; +4b85 : 00000000; +4b86 : 00000000; +4b87 : 00000000; +4b88 : 00000000; +4b89 : 00000000; +4b8a : 00000000; +4b8b : 00000000; +4b8c : 00000000; +4b8d : 00000000; +4b8e : 00000000; +4b8f : 00000000; +4b90 : 00000000; +4b91 : 00000000; +4b92 : 00000000; +4b93 : 00000000; +4b94 : 00000000; +4b95 : 00000000; +4b96 : 00000000; +4b97 : 00000000; +4b98 : 00000000; +4b99 : 00000000; +4b9a : 00000000; +4b9b : 00000000; +4b9c : 00000000; +4b9d : 00000000; +4b9e : 00000000; +4b9f : 00000000; +4ba0 : 00000000; +4ba1 : 00000000; +4ba2 : 00000000; +4ba3 : 00000000; +4ba4 : 00000000; +4ba5 : 00000000; +4ba6 : 00000000; +4ba7 : 00000000; +4ba8 : 00000000; +4ba9 : 00000000; +4baa : 00000000; +4bab : 00000000; +4bac : 00000000; +4bad : 00000000; +4bae : 00000000; +4baf : 00000000; +4bb0 : 00000000; +4bb1 : 00000000; +4bb2 : 00000000; +4bb3 : 00000000; +4bb4 : 00000000; +4bb5 : 00000000; +4bb6 : 00000000; +4bb7 : 00000000; +4bb8 : 00000000; +4bb9 : 00000000; +4bba : 00000000; +4bbb : 00000000; +4bbc : 00000000; +4bbd : 00000000; +4bbe : 00000000; +4bbf : 00000000; +4bc0 : 00000000; +4bc1 : 00000000; +4bc2 : 00000000; +4bc3 : 00000000; +4bc4 : 00000000; +4bc5 : 00000000; +4bc6 : 00000000; +4bc7 : 00000000; +4bc8 : 00000000; +4bc9 : 00000000; +4bca : 00000000; +4bcb : 00000000; +4bcc : 00000000; +4bcd : 00000000; +4bce : 00000000; +4bcf : 00000000; +4bd0 : 00000000; +4bd1 : 00000000; +4bd2 : 00000000; +4bd3 : 00000000; +4bd4 : 00000000; +4bd5 : 00000000; +4bd6 : 00000000; +4bd7 : 00000000; +4bd8 : 00000000; +4bd9 : 00000000; +4bda : 00000000; +4bdb : 00000000; +4bdc : 00000000; +4bdd : 00000000; +4bde : 00000000; +4bdf : 00000000; +4be0 : 00000000; +4be1 : 00000000; +4be2 : 00000000; +4be3 : 00000000; +4be4 : 00000000; +4be5 : 00000000; +4be6 : 00000000; +4be7 : 00000000; +4be8 : 00000000; +4be9 : 00000000; +4bea : 00000000; +4beb : 00000000; +4bec : 00000000; +4bed : 00000000; +4bee : 00000000; +4bef : 00000000; +4bf0 : 00000000; +4bf1 : 00000000; +4bf2 : 00000000; +4bf3 : 00000000; +4bf4 : 00000000; +4bf5 : 00000000; +4bf6 : 00000000; +4bf7 : 00000000; +4bf8 : 00000000; +4bf9 : 00000000; +4bfa : 00000000; +4bfb : 00000000; +4bfc : 00000000; +4bfd : 00000000; +4bfe : 00000000; +4bff : 00000000; +4c00 : 00000000; +4c01 : 00000000; +4c02 : 00000000; +4c03 : 00000000; +4c04 : 00000000; +4c05 : 00000000; +4c06 : 00000000; +4c07 : 00000000; +4c08 : 00000000; +4c09 : 00000000; +4c0a : 00000000; +4c0b : 00000000; +4c0c : 00000000; +4c0d : 00000000; +4c0e : 00000000; +4c0f : 00000000; +4c10 : 00000000; +4c11 : 00000000; +4c12 : 00000000; +4c13 : 00000000; +4c14 : 00000000; +4c15 : 00000000; +4c16 : 00000000; +4c17 : 00000000; +4c18 : 00000000; +4c19 : 00000000; +4c1a : 00000000; +4c1b : 00000000; +4c1c : 00000000; +4c1d : 00000000; +4c1e : 00000000; +4c1f : 00000000; +4c20 : 00000000; +4c21 : 00000000; +4c22 : 00000000; +4c23 : 00000000; +4c24 : 00000000; +4c25 : 00000000; +4c26 : 00000000; +4c27 : 00000000; +4c28 : 00000000; +4c29 : 00000000; +4c2a : 00000000; +4c2b : 00000000; +4c2c : 00000000; +4c2d : 00000000; +4c2e : 00000000; +4c2f : 00000000; +4c30 : 00000000; +4c31 : 00000000; +4c32 : 00000000; +4c33 : 00000000; +4c34 : 00000000; +4c35 : 00000000; +4c36 : 00000000; +4c37 : 00000000; +4c38 : 00000000; +4c39 : 00000000; +4c3a : 00000000; +4c3b : 00000000; +4c3c : 00000000; +4c3d : 00000000; +4c3e : 00000000; +4c3f : 00000000; +4c40 : 00000000; +4c41 : 00000000; +4c42 : 00000000; +4c43 : 00000000; +4c44 : 00000000; +4c45 : 00000000; +4c46 : 00000000; +4c47 : 00000000; +4c48 : 00000000; +4c49 : 00000000; +4c4a : 00000000; +4c4b : 00000000; +4c4c : 00000000; +4c4d : 00000000; +4c4e : 00000000; +4c4f : 00000000; +4c50 : 00000000; +4c51 : 00000000; +4c52 : 00000000; +4c53 : 00000000; +4c54 : 00000000; +4c55 : 00000000; +4c56 : 00000000; +4c57 : 00000000; +4c58 : 00000000; +4c59 : 00000000; +4c5a : 00000000; +4c5b : 00000000; +4c5c : 00000000; +4c5d : 00000000; +4c5e : 00000000; +4c5f : 00000000; +4c60 : 00000000; +4c61 : 00000000; +4c62 : 00000000; +4c63 : 00000000; +4c64 : 00000000; +4c65 : 00000000; +4c66 : 00000000; +4c67 : 00000000; +4c68 : 00000000; +4c69 : 00000000; +4c6a : 00000000; +4c6b : 00000000; +4c6c : 00000000; +4c6d : 00000000; +4c6e : 00000000; +4c6f : 00000000; +4c70 : 00000000; +4c71 : 00000000; +4c72 : 00000000; +4c73 : 00000000; +4c74 : 00000000; +4c75 : 00000000; +4c76 : 00000000; +4c77 : 00000000; +4c78 : 00000000; +4c79 : 00000000; +4c7a : 00000000; +4c7b : 00000000; +4c7c : 00000000; +4c7d : 00000000; +4c7e : 00000000; +4c7f : 00000000; +4c80 : 00000000; +4c81 : 00000000; +4c82 : 00000000; +4c83 : 00000000; +4c84 : 00000000; +4c85 : 00000000; +4c86 : 00000000; +4c87 : 00000000; +4c88 : 00000000; +4c89 : 00000000; +4c8a : 00000000; +4c8b : 00000000; +4c8c : 00000000; +4c8d : 00000000; +4c8e : 00000000; +4c8f : 00000000; +4c90 : 00000000; +4c91 : 00000000; +4c92 : 00000000; +4c93 : 00000000; +4c94 : 00000000; +4c95 : 00000000; +4c96 : 00000000; +4c97 : 00000000; +4c98 : 00000000; +4c99 : 00000000; +4c9a : 00000000; +4c9b : 00000000; +4c9c : 00000000; +4c9d : 00000000; +4c9e : 00000000; +4c9f : 00000000; +4ca0 : 00000000; +4ca1 : 00000000; +4ca2 : 00000000; +4ca3 : 00000000; +4ca4 : 00000000; +4ca5 : 00000000; +4ca6 : 00000000; +4ca7 : 00000000; +4ca8 : 00000000; +4ca9 : 00000000; +4caa : 00000000; +4cab : 00000000; +4cac : 00000000; +4cad : 00000000; +4cae : 00000000; +4caf : 00000000; +4cb0 : 00000000; +4cb1 : 00000000; +4cb2 : 00000000; +4cb3 : 00000000; +4cb4 : 00000000; +4cb5 : 00000000; +4cb6 : 00000000; +4cb7 : 00000000; +4cb8 : 00000000; +4cb9 : 00000000; +4cba : 00000000; +4cbb : 00000000; +4cbc : 00000000; +4cbd : 00000000; +4cbe : 00000000; +4cbf : 00000000; +4cc0 : 00000000; +4cc1 : 00000000; +4cc2 : 00000000; +4cc3 : 00000000; +4cc4 : 00000000; +4cc5 : 00000000; +4cc6 : 00000000; +4cc7 : 00000000; +4cc8 : 00000000; +4cc9 : 00000000; +4cca : 00000000; +4ccb : 00000000; +4ccc : 00000000; +4ccd : 00000000; +4cce : 00000000; +4ccf : 00000000; +4cd0 : 00000000; +4cd1 : 00000000; +4cd2 : 00000000; +4cd3 : 00000000; +4cd4 : 00000000; +4cd5 : 00000000; +4cd6 : 00000000; +4cd7 : 00000000; +4cd8 : 00000000; +4cd9 : 00000000; +4cda : 00000000; +4cdb : 00000000; +4cdc : 00000000; +4cdd : 00000000; +4cde : 00000000; +4cdf : 00000000; +4ce0 : 00000000; +4ce1 : 00000000; +4ce2 : 00000000; +4ce3 : 00000000; +4ce4 : 00000000; +4ce5 : 00000000; +4ce6 : 00000000; +4ce7 : 00000000; +4ce8 : 00000000; +4ce9 : 00000000; +4cea : 00000000; +4ceb : 00000000; +4cec : 00000000; +4ced : 00000000; +4cee : 00000000; +4cef : 00000000; +4cf0 : 00000000; +4cf1 : 00000000; +4cf2 : 00000000; +4cf3 : 00000000; +4cf4 : 00000000; +4cf5 : 00000000; +4cf6 : 00000000; +4cf7 : 00000000; +4cf8 : 00000000; +4cf9 : 00000000; +4cfa : 00000000; +4cfb : 00000000; +4cfc : 00000000; +4cfd : 00000000; +4cfe : 00000000; +4cff : 00000000; +4d00 : 00000000; +4d01 : 00000000; +4d02 : 00000000; +4d03 : 00000000; +4d04 : 00000000; +4d05 : 00000000; +4d06 : 00000000; +4d07 : 00000000; +4d08 : 00000000; +4d09 : 00000000; +4d0a : 00000000; +4d0b : 00000000; +4d0c : 00000000; +4d0d : 00000000; +4d0e : 00000000; +4d0f : 00000000; +4d10 : 00000000; +4d11 : 00000000; +4d12 : 00000000; +4d13 : 00000000; +4d14 : 00000000; +4d15 : 00000000; +4d16 : 00000000; +4d17 : 00000000; +4d18 : 00000000; +4d19 : 00000000; +4d1a : 00000000; +4d1b : 00000000; +4d1c : 00000000; +4d1d : 00000000; +4d1e : 00000000; +4d1f : 00000000; +4d20 : 00000000; +4d21 : 00000000; +4d22 : 00000000; +4d23 : 00000000; +4d24 : 00000000; +4d25 : 00000000; +4d26 : 00000000; +4d27 : 00000000; +4d28 : 00000000; +4d29 : 00000000; +4d2a : 00000000; +4d2b : 00000000; +4d2c : 00000000; +4d2d : 00000000; +4d2e : 00000000; +4d2f : 00000000; +4d30 : 00000000; +4d31 : 00000000; +4d32 : 00000000; +4d33 : 00000000; +4d34 : 00000000; +4d35 : 00000000; +4d36 : 00000000; +4d37 : 00000000; +4d38 : 00000000; +4d39 : 00000000; +4d3a : 00000000; +4d3b : 00000000; +4d3c : 00000000; +4d3d : 00000000; +4d3e : 00000000; +4d3f : 00000000; +4d40 : 00000000; +4d41 : 00000000; +4d42 : 00000000; +4d43 : 00000000; +4d44 : 00000000; +4d45 : 00000000; +4d46 : 00000000; +4d47 : 00000000; +4d48 : 00000000; +4d49 : 00000000; +4d4a : 00000000; +4d4b : 00000000; +4d4c : 00000000; +4d4d : 00000000; +4d4e : 00000000; +4d4f : 00000000; +4d50 : 00000000; +4d51 : 00000000; +4d52 : 00000000; +4d53 : 00000000; +4d54 : 00000000; +4d55 : 00000000; +4d56 : 00000000; +4d57 : 00000000; +4d58 : 00000000; +4d59 : 00000000; +4d5a : 00000000; +4d5b : 00000000; +4d5c : 00000000; +4d5d : 00000000; +4d5e : 00000000; +4d5f : 00000000; +4d60 : 00000000; +4d61 : 00000000; +4d62 : 00000000; +4d63 : 00000000; +4d64 : 00000000; +4d65 : 00000000; +4d66 : 00000000; +4d67 : 00000000; +4d68 : 00000000; +4d69 : 00000000; +4d6a : 00000000; +4d6b : 00000000; +4d6c : 00000000; +4d6d : 00000000; +4d6e : 00000000; +4d6f : 00000000; +4d70 : 00000000; +4d71 : 00000000; +4d72 : 00000000; +4d73 : 00000000; +4d74 : 00000000; +4d75 : 00000000; +4d76 : 00000000; +4d77 : 00000000; +4d78 : 00000000; +4d79 : 00000000; +4d7a : 00000000; +4d7b : 00000000; +4d7c : 00000000; +4d7d : 00000000; +4d7e : 00000000; +4d7f : 00000000; +4d80 : 00000000; +4d81 : 00000000; +4d82 : 00000000; +4d83 : 00000000; +4d84 : 00000000; +4d85 : 00000000; +4d86 : 00000000; +4d87 : 00000000; +4d88 : 00000000; +4d89 : 00000000; +4d8a : 00000000; +4d8b : 00000000; +4d8c : 00000000; +4d8d : 00000000; +4d8e : 00000000; +4d8f : 00000000; +4d90 : 00000000; +4d91 : 00000000; +4d92 : 00000000; +4d93 : 00000000; +4d94 : 00000000; +4d95 : 00000000; +4d96 : 00000000; +4d97 : 00000000; +4d98 : 00000000; +4d99 : 00000000; +4d9a : 00000000; +4d9b : 00000000; +4d9c : 00000000; +4d9d : 00000000; +4d9e : 00000000; +4d9f : 00000000; +4da0 : 00000000; +4da1 : 00000000; +4da2 : 00000000; +4da3 : 00000000; +4da4 : 00000000; +4da5 : 00000000; +4da6 : 00000000; +4da7 : 00000000; +4da8 : 00000000; +4da9 : 00000000; +4daa : 00000000; +4dab : 00000000; +4dac : 00000000; +4dad : 00000000; +4dae : 00000000; +4daf : 00000000; +4db0 : 00000000; +4db1 : 00000000; +4db2 : 00000000; +4db3 : 00000000; +4db4 : 00000000; +4db5 : 00000000; +4db6 : 00000000; +4db7 : 00000000; +4db8 : 00000000; +4db9 : 00000000; +4dba : 00000000; +4dbb : 00000000; +4dbc : 00000000; +4dbd : 00000000; +4dbe : 00000000; +4dbf : 00000000; +4dc0 : 00000000; +4dc1 : 00000000; +4dc2 : 00000000; +4dc3 : 00000000; +4dc4 : 00000000; +4dc5 : 00000000; +4dc6 : 00000000; +4dc7 : 00000000; +4dc8 : 00000000; +4dc9 : 00000000; +4dca : 00000000; +4dcb : 00000000; +4dcc : 00000000; +4dcd : 00000000; +4dce : 00000000; +4dcf : 00000000; +4dd0 : 00000000; +4dd1 : 00000000; +4dd2 : 00000000; +4dd3 : 00000000; +4dd4 : 00000000; +4dd5 : 00000000; +4dd6 : 00000000; +4dd7 : 00000000; +4dd8 : 00000000; +4dd9 : 00000000; +4dda : 00000000; +4ddb : 00000000; +4ddc : 00000000; +4ddd : 00000000; +4dde : 00000000; +4ddf : 00000000; +4de0 : 00000000; +4de1 : 00000000; +4de2 : 00000000; +4de3 : 00000000; +4de4 : 00000000; +4de5 : 00000000; +4de6 : 00000000; +4de7 : 00000000; +4de8 : 00000000; +4de9 : 00000000; +4dea : 00000000; +4deb : 00000000; +4dec : 00000000; +4ded : 00000000; +4dee : 00000000; +4def : 00000000; +4df0 : 00000000; +4df1 : 00000000; +4df2 : 00000000; +4df3 : 00000000; +4df4 : 00000000; +4df5 : 00000000; +4df6 : 00000000; +4df7 : 00000000; +4df8 : 00000000; +4df9 : 00000000; +4dfa : 00000000; +4dfb : 00000000; +4dfc : 00000000; +4dfd : 00000000; +4dfe : 00000000; +4dff : 00000000; +4e00 : 00000000; +4e01 : 00000000; +4e02 : 00000000; +4e03 : 00000000; +4e04 : 00000000; +4e05 : 00000000; +4e06 : 00000000; +4e07 : 00000000; +4e08 : 00000000; +4e09 : 00000000; +4e0a : 00000000; +4e0b : 00000000; +4e0c : 00000000; +4e0d : 00000000; +4e0e : 00000000; +4e0f : 00000000; +4e10 : 00000000; +4e11 : 00000000; +4e12 : 00000000; +4e13 : 00000000; +4e14 : 00000000; +4e15 : 00000000; +4e16 : 00000000; +4e17 : 00000000; +4e18 : 00000000; +4e19 : 00000000; +4e1a : 00000000; +4e1b : 00000000; +4e1c : 00000000; +4e1d : 00000000; +4e1e : 00000000; +4e1f : 00000000; +4e20 : 00000000; +4e21 : 00000000; +4e22 : 00000000; +4e23 : 00000000; +4e24 : 00000000; +4e25 : 00000000; +4e26 : 00000000; +4e27 : 00000000; +4e28 : 00000000; +4e29 : 00000000; +4e2a : 00000000; +4e2b : 00000000; +4e2c : 00000000; +4e2d : 00000000; +4e2e : 00000000; +4e2f : 00000000; +4e30 : 00000000; +4e31 : 00000000; +4e32 : 00000000; +4e33 : 00000000; +4e34 : 00000000; +4e35 : 00000000; +4e36 : 00000000; +4e37 : 00000000; +4e38 : 00000000; +4e39 : 00000000; +4e3a : 00000000; +4e3b : 00000000; +4e3c : 00000000; +4e3d : 00000000; +4e3e : 00000000; +4e3f : 00000000; +4e40 : 00000000; +4e41 : 00000000; +4e42 : 00000000; +4e43 : 00000000; +4e44 : 00000000; +4e45 : 00000000; +4e46 : 00000000; +4e47 : 00000000; +4e48 : 00000000; +4e49 : 00000000; +4e4a : 00000000; +4e4b : 00000000; +4e4c : 00000000; +4e4d : 00000000; +4e4e : 00000000; +4e4f : 00000000; +4e50 : 00000000; +4e51 : 00000000; +4e52 : 00000000; +4e53 : 00000000; +4e54 : 00000000; +4e55 : 00000000; +4e56 : 00000000; +4e57 : 00000000; +4e58 : 00000000; +4e59 : 00000000; +4e5a : 00000000; +4e5b : 00000000; +4e5c : 00000000; +4e5d : 00000000; +4e5e : 00000000; +4e5f : 00000000; +4e60 : 00000000; +4e61 : 00000000; +4e62 : 00000000; +4e63 : 00000000; +4e64 : 00000000; +4e65 : 00000000; +4e66 : 00000000; +4e67 : 00000000; +4e68 : 00000000; +4e69 : 00000000; +4e6a : 00000000; +4e6b : 00000000; +4e6c : 00000000; +4e6d : 00000000; +4e6e : 00000000; +4e6f : 00000000; +4e70 : 00000000; +4e71 : 00000000; +4e72 : 00000000; +4e73 : 00000000; +4e74 : 00000000; +4e75 : 00000000; +4e76 : 00000000; +4e77 : 00000000; +4e78 : 00000000; +4e79 : 00000000; +4e7a : 00000000; +4e7b : 00000000; +4e7c : 00000000; +4e7d : 00000000; +4e7e : 00000000; +4e7f : 00000000; +4e80 : 00000000; +4e81 : 00000000; +4e82 : 00000000; +4e83 : 00000000; +4e84 : 00000000; +4e85 : 00000000; +4e86 : 00000000; +4e87 : 00000000; +4e88 : 00000000; +4e89 : 00000000; +4e8a : 00000000; +4e8b : 00000000; +4e8c : 00000000; +4e8d : 00000000; +4e8e : 00000000; +4e8f : 00000000; +4e90 : 00000000; +4e91 : 00000000; +4e92 : 00000000; +4e93 : 00000000; +4e94 : 00000000; +4e95 : 00000000; +4e96 : 00000000; +4e97 : 00000000; +4e98 : 00000000; +4e99 : 00000000; +4e9a : 00000000; +4e9b : 00000000; +4e9c : 00000000; +4e9d : 00000000; +4e9e : 00000000; +4e9f : 00000000; +4ea0 : 00000000; +4ea1 : 00000000; +4ea2 : 00000000; +4ea3 : 00000000; +4ea4 : 00000000; +4ea5 : 00000000; +4ea6 : 00000000; +4ea7 : 00000000; +4ea8 : 00000000; +4ea9 : 00000000; +4eaa : 00000000; +4eab : 00000000; +4eac : 00000000; +4ead : 00000000; +4eae : 00000000; +4eaf : 00000000; +4eb0 : 00000000; +4eb1 : 00000000; +4eb2 : 00000000; +4eb3 : 00000000; +4eb4 : 00000000; +4eb5 : 00000000; +4eb6 : 00000000; +4eb7 : 00000000; +4eb8 : 00000000; +4eb9 : 00000000; +4eba : 00000000; +4ebb : 00000000; +4ebc : 00000000; +4ebd : 00000000; +4ebe : 00000000; +4ebf : 00000000; +4ec0 : 00000000; +4ec1 : 00000000; +4ec2 : 00000000; +4ec3 : 00000000; +4ec4 : 00000000; +4ec5 : 00000000; +4ec6 : 00000000; +4ec7 : 00000000; +4ec8 : 00000000; +4ec9 : 00000000; +4eca : 00000000; +4ecb : 00000000; +4ecc : 00000000; +4ecd : 00000000; +4ece : 00000000; +4ecf : 00000000; +4ed0 : 00000000; +4ed1 : 00000000; +4ed2 : 00000000; +4ed3 : 00000000; +4ed4 : 00000000; +4ed5 : 00000000; +4ed6 : 00000000; +4ed7 : 00000000; +4ed8 : 00000000; +4ed9 : 00000000; +4eda : 00000000; +4edb : 00000000; +4edc : 00000000; +4edd : 00000000; +4ede : 00000000; +4edf : 00000000; +4ee0 : 00000000; +4ee1 : 00000000; +4ee2 : 00000000; +4ee3 : 00000000; +4ee4 : 00000000; +4ee5 : 00000000; +4ee6 : 00000000; +4ee7 : 00000000; +4ee8 : 00000000; +4ee9 : 00000000; +4eea : 00000000; +4eeb : 00000000; +4eec : 00000000; +4eed : 00000000; +4eee : 00000000; +4eef : 00000000; +4ef0 : 00000000; +4ef1 : 00000000; +4ef2 : 00000000; +4ef3 : 00000000; +4ef4 : 00000000; +4ef5 : 00000000; +4ef6 : 00000000; +4ef7 : 00000000; +4ef8 : 00000000; +4ef9 : 00000000; +4efa : 00000000; +4efb : 00000000; +4efc : 00000000; +4efd : 00000000; +4efe : 00000000; +4eff : 00000000; +4f00 : 00000000; +4f01 : 00000000; +4f02 : 00000000; +4f03 : 00000000; +4f04 : 00000000; +4f05 : 00000000; +4f06 : 00000000; +4f07 : 00000000; +4f08 : 00000000; +4f09 : 00000000; +4f0a : 00000000; +4f0b : 00000000; +4f0c : 00000000; +4f0d : 00000000; +4f0e : 00000000; +4f0f : 00000000; +4f10 : 00000000; +4f11 : 00000000; +4f12 : 00000000; +4f13 : 00000000; +4f14 : 00000000; +4f15 : 00000000; +4f16 : 00000000; +4f17 : 00000000; +4f18 : 00000000; +4f19 : 00000000; +4f1a : 00000000; +4f1b : 00000000; +4f1c : 00000000; +4f1d : 00000000; +4f1e : 00000000; +4f1f : 00000000; +4f20 : 00000000; +4f21 : 00000000; +4f22 : 00000000; +4f23 : 00000000; +4f24 : 00000000; +4f25 : 00000000; +4f26 : 00000000; +4f27 : 00000000; +4f28 : 00000000; +4f29 : 00000000; +4f2a : 00000000; +4f2b : 00000000; +4f2c : 00000000; +4f2d : 00000000; +4f2e : 00000000; +4f2f : 00000000; +4f30 : 00000000; +4f31 : 00000000; +4f32 : 00000000; +4f33 : 00000000; +4f34 : 00000000; +4f35 : 00000000; +4f36 : 00000000; +4f37 : 00000000; +4f38 : 00000000; +4f39 : 00000000; +4f3a : 00000000; +4f3b : 00000000; +4f3c : 00000000; +4f3d : 00000000; +4f3e : 00000000; +4f3f : 00000000; +4f40 : 00000000; +4f41 : 00000000; +4f42 : 00000000; +4f43 : 00000000; +4f44 : 00000000; +4f45 : 00000000; +4f46 : 00000000; +4f47 : 00000000; +4f48 : 00000000; +4f49 : 00000000; +4f4a : 00000000; +4f4b : 00000000; +4f4c : 00000000; +4f4d : 00000000; +4f4e : 00000000; +4f4f : 00000000; +4f50 : 00000000; +4f51 : 00000000; +4f52 : 00000000; +4f53 : 00000000; +4f54 : 00000000; +4f55 : 00000000; +4f56 : 00000000; +4f57 : 00000000; +4f58 : 00000000; +4f59 : 00000000; +4f5a : 00000000; +4f5b : 00000000; +4f5c : 00000000; +4f5d : 00000000; +4f5e : 00000000; +4f5f : 00000000; +4f60 : 00000000; +4f61 : 00000000; +4f62 : 00000000; +4f63 : 00000000; +4f64 : 00000000; +4f65 : 00000000; +4f66 : 00000000; +4f67 : 00000000; +4f68 : 00000000; +4f69 : 00000000; +4f6a : 00000000; +4f6b : 00000000; +4f6c : 00000000; +4f6d : 00000000; +4f6e : 00000000; +4f6f : 00000000; +4f70 : 00000000; +4f71 : 00000000; +4f72 : 00000000; +4f73 : 00000000; +4f74 : 00000000; +4f75 : 00000000; +4f76 : 00000000; +4f77 : 00000000; +4f78 : 00000000; +4f79 : 00000000; +4f7a : 00000000; +4f7b : 00000000; +4f7c : 00000000; +4f7d : 00000000; +4f7e : 00000000; +4f7f : 00000000; +4f80 : 00000000; +4f81 : 00000000; +4f82 : 00000000; +4f83 : 00000000; +4f84 : 00000000; +4f85 : 00000000; +4f86 : 00000000; +4f87 : 00000000; +4f88 : 00000000; +4f89 : 00000000; +4f8a : 00000000; +4f8b : 00000000; +4f8c : 00000000; +4f8d : 00000000; +4f8e : 00000000; +4f8f : 00000000; +4f90 : 00000000; +4f91 : 00000000; +4f92 : 00000000; +4f93 : 00000000; +4f94 : 00000000; +4f95 : 00000000; +4f96 : 00000000; +4f97 : 00000000; +4f98 : 00000000; +4f99 : 00000000; +4f9a : 00000000; +4f9b : 00000000; +4f9c : 00000000; +4f9d : 00000000; +4f9e : 00000000; +4f9f : 00000000; +4fa0 : 00000000; +4fa1 : 00000000; +4fa2 : 00000000; +4fa3 : 00000000; +4fa4 : 00000000; +4fa5 : 00000000; +4fa6 : 00000000; +4fa7 : 00000000; +4fa8 : 00000000; +4fa9 : 00000000; +4faa : 00000000; +4fab : 00000000; +4fac : 00000000; +4fad : 00000000; +4fae : 00000000; +4faf : 00000000; +4fb0 : 00000000; +4fb1 : 00000000; +4fb2 : 00000000; +4fb3 : 00000000; +4fb4 : 00000000; +4fb5 : 00000000; +4fb6 : 00000000; +4fb7 : 00000000; +4fb8 : 00000000; +4fb9 : 00000000; +4fba : 00000000; +4fbb : 00000000; +4fbc : 00000000; +4fbd : 00000000; +4fbe : 00000000; +4fbf : 00000000; +4fc0 : 00000000; +4fc1 : 00000000; +4fc2 : 00000000; +4fc3 : 00000000; +4fc4 : 00000000; +4fc5 : 00000000; +4fc6 : 00000000; +4fc7 : 00000000; +4fc8 : 00000000; +4fc9 : 00000000; +4fca : 00000000; +4fcb : 00000000; +4fcc : 00000000; +4fcd : 00000000; +4fce : 00000000; +4fcf : 00000000; +4fd0 : 00000000; +4fd1 : 00000000; +4fd2 : 00000000; +4fd3 : 00000000; +4fd4 : 00000000; +4fd5 : 00000000; +4fd6 : 00000000; +4fd7 : 00000000; +4fd8 : 00000000; +4fd9 : 00000000; +4fda : 00000000; +4fdb : 00000000; +4fdc : 00000000; +4fdd : 00000000; +4fde : 00000000; +4fdf : 00000000; +4fe0 : 00000000; +4fe1 : 00000000; +4fe2 : 00000000; +4fe3 : 00000000; +4fe4 : 00000000; +4fe5 : 00000000; +4fe6 : 00000000; +4fe7 : 00000000; +4fe8 : 00000000; +4fe9 : 00000000; +4fea : 00000000; +4feb : 00000000; +4fec : 00000000; +4fed : 00000000; +4fee : 00000000; +4fef : 00000000; +4ff0 : 00000000; +4ff1 : 00000000; +4ff2 : 00000000; +4ff3 : 00000000; +4ff4 : 00000000; +4ff5 : 00000000; +4ff6 : 00000000; +4ff7 : 00000000; +4ff8 : 00000000; +4ff9 : 00000000; +4ffa : 00000000; +4ffb : 00000000; +4ffc : 00000000; +4ffd : 00000000; +4ffe : 00000000; +4fff : 00000000; +5000 : 00000000; +5001 : 00000000; +5002 : 00000000; +5003 : 00000000; +5004 : 00000000; +5005 : 00000000; +5006 : 00000000; +5007 : 00000000; +5008 : 00000000; +5009 : 00000000; +500a : 00000000; +500b : 00000000; +500c : 00000000; +500d : 00000000; +500e : 00000000; +500f : 00000000; +5010 : 00000000; +5011 : 00000000; +5012 : 00000000; +5013 : 00000000; +5014 : 00000000; +5015 : 00000000; +5016 : 00000000; +5017 : 00000000; +5018 : 00000000; +5019 : 00000000; +501a : 00000000; +501b : 00000000; +501c : 00000000; +501d : 00000000; +501e : 00000000; +501f : 00000000; +5020 : 00000000; +5021 : 00000000; +5022 : 00000000; +5023 : 00000000; +5024 : 00000000; +5025 : 00000000; +5026 : 00000000; +5027 : 00000000; +5028 : 00000000; +5029 : 00000000; +502a : 00000000; +502b : 00000000; +502c : 00000000; +502d : 00000000; +502e : 00000000; +502f : 00000000; +5030 : 00000000; +5031 : 00000000; +5032 : 00000000; +5033 : 00000000; +5034 : 00000000; +5035 : 00000000; +5036 : 00000000; +5037 : 00000000; +5038 : 00000000; +5039 : 00000000; +503a : 00000000; +503b : 00000000; +503c : 00000000; +503d : 00000000; +503e : 00000000; +503f : 00000000; +5040 : 00000000; +5041 : 00000000; +5042 : 00000000; +5043 : 00000000; +5044 : 00000000; +5045 : 00000000; +5046 : 00000000; +5047 : 00000000; +5048 : 00000000; +5049 : 00000000; +504a : 00000000; +504b : 00000000; +504c : 00000000; +504d : 00000000; +504e : 00000000; +504f : 00000000; +5050 : 00000000; +5051 : 00000000; +5052 : 00000000; +5053 : 00000000; +5054 : 00000000; +5055 : 00000000; +5056 : 00000000; +5057 : 00000000; +5058 : 00000000; +5059 : 00000000; +505a : 00000000; +505b : 00000000; +505c : 00000000; +505d : 00000000; +505e : 00000000; +505f : 00000000; +5060 : 00000000; +5061 : 00000000; +5062 : 00000000; +5063 : 00000000; +5064 : 00000000; +5065 : 00000000; +5066 : 00000000; +5067 : 00000000; +5068 : 00000000; +5069 : 00000000; +506a : 00000000; +506b : 00000000; +506c : 00000000; +506d : 00000000; +506e : 00000000; +506f : 00000000; +5070 : 00000000; +5071 : 00000000; +5072 : 00000000; +5073 : 00000000; +5074 : 00000000; +5075 : 00000000; +5076 : 00000000; +5077 : 00000000; +5078 : 00000000; +5079 : 00000000; +507a : 00000000; +507b : 00000000; +507c : 00000000; +507d : 00000000; +507e : 00000000; +507f : 00000000; +5080 : 00000000; +5081 : 00000000; +5082 : 00000000; +5083 : 00000000; +5084 : 00000000; +5085 : 00000000; +5086 : 00000000; +5087 : 00000000; +5088 : 00000000; +5089 : 00000000; +508a : 00000000; +508b : 00000000; +508c : 00000000; +508d : 00000000; +508e : 00000000; +508f : 00000000; +5090 : 00000000; +5091 : 00000000; +5092 : 00000000; +5093 : 00000000; +5094 : 00000000; +5095 : 00000000; +5096 : 00000000; +5097 : 00000000; +5098 : 00000000; +5099 : 00000000; +509a : 00000000; +509b : 00000000; +509c : 00000000; +509d : 00000000; +509e : 00000000; +509f : 00000000; +50a0 : 00000000; +50a1 : 00000000; +50a2 : 00000000; +50a3 : 00000000; +50a4 : 00000000; +50a5 : 00000000; +50a6 : 00000000; +50a7 : 00000000; +50a8 : 00000000; +50a9 : 00000000; +50aa : 00000000; +50ab : 00000000; +50ac : 00000000; +50ad : 00000000; +50ae : 00000000; +50af : 00000000; +50b0 : 00000000; +50b1 : 00000000; +50b2 : 00000000; +50b3 : 00000000; +50b4 : 00000000; +50b5 : 00000000; +50b6 : 00000000; +50b7 : 00000000; +50b8 : 00000000; +50b9 : 00000000; +50ba : 00000000; +50bb : 00000000; +50bc : 00000000; +50bd : 00000000; +50be : 00000000; +50bf : 00000000; +50c0 : 00000000; +50c1 : 00000000; +50c2 : 00000000; +50c3 : 00000000; +50c4 : 00000000; +50c5 : 00000000; +50c6 : 00000000; +50c7 : 00000000; +50c8 : 00000000; +50c9 : 00000000; +50ca : 00000000; +50cb : 00000000; +50cc : 00000000; +50cd : 00000000; +50ce : 00000000; +50cf : 00000000; +50d0 : 00000000; +50d1 : 00000000; +50d2 : 00000000; +50d3 : 00000000; +50d4 : 00000000; +50d5 : 00000000; +50d6 : 00000000; +50d7 : 00000000; +50d8 : 00000000; +50d9 : 00000000; +50da : 00000000; +50db : 00000000; +50dc : 00000000; +50dd : 00000000; +50de : 00000000; +50df : 00000000; +50e0 : 00000000; +50e1 : 00000000; +50e2 : 00000000; +50e3 : 00000000; +50e4 : 00000000; +50e5 : 00000000; +50e6 : 00000000; +50e7 : 00000000; +50e8 : 00000000; +50e9 : 00000000; +50ea : 00000000; +50eb : 00000000; +50ec : 00000000; +50ed : 00000000; +50ee : 00000000; +50ef : 00000000; +50f0 : 00000000; +50f1 : 00000000; +50f2 : 00000000; +50f3 : 00000000; +50f4 : 00000000; +50f5 : 00000000; +50f6 : 00000000; +50f7 : 00000000; +50f8 : 00000000; +50f9 : 00000000; +50fa : 00000000; +50fb : 00000000; +50fc : 00000000; +50fd : 00000000; +50fe : 00000000; +50ff : 00000000; +5100 : 00000000; +5101 : 00000000; +5102 : 00000000; +5103 : 00000000; +5104 : 00000000; +5105 : 00000000; +5106 : 00000000; +5107 : 00000000; +5108 : 00000000; +5109 : 00000000; +510a : 00000000; +510b : 00000000; +510c : 00000000; +510d : 00000000; +510e : 00000000; +510f : 00000000; +5110 : 00000000; +5111 : 00000000; +5112 : 00000000; +5113 : 00000000; +5114 : 00000000; +5115 : 00000000; +5116 : 00000000; +5117 : 00000000; +5118 : 00000000; +5119 : 00000000; +511a : 00000000; +511b : 00000000; +511c : 00000000; +511d : 00000000; +511e : 00000000; +511f : 00000000; +5120 : 00000000; +5121 : 00000000; +5122 : 00000000; +5123 : 00000000; +5124 : 00000000; +5125 : 00000000; +5126 : 00000000; +5127 : 00000000; +5128 : 00000000; +5129 : 00000000; +512a : 00000000; +512b : 00000000; +512c : 00000000; +512d : 00000000; +512e : 00000000; +512f : 00000000; +5130 : 00000000; +5131 : 00000000; +5132 : 00000000; +5133 : 00000000; +5134 : 00000000; +5135 : 00000000; +5136 : 00000000; +5137 : 00000000; +5138 : 00000000; +5139 : 00000000; +513a : 00000000; +513b : 00000000; +513c : 00000000; +513d : 00000000; +513e : 00000000; +513f : 00000000; +5140 : 00000000; +5141 : 00000000; +5142 : 00000000; +5143 : 00000000; +5144 : 00000000; +5145 : 00000000; +5146 : 00000000; +5147 : 00000000; +5148 : 00000000; +5149 : 00000000; +514a : 00000000; +514b : 00000000; +514c : 00000000; +514d : 00000000; +514e : 00000000; +514f : 00000000; +5150 : 00000000; +5151 : 00000000; +5152 : 00000000; +5153 : 00000000; +5154 : 00000000; +5155 : 00000000; +5156 : 00000000; +5157 : 00000000; +5158 : 00000000; +5159 : 00000000; +515a : 00000000; +515b : 00000000; +515c : 00000000; +515d : 00000000; +515e : 00000000; +515f : 00000000; +5160 : 00000000; +5161 : 00000000; +5162 : 00000000; +5163 : 00000000; +5164 : 00000000; +5165 : 00000000; +5166 : 00000000; +5167 : 00000000; +5168 : 00000000; +5169 : 00000000; +516a : 00000000; +516b : 00000000; +516c : 00000000; +516d : 00000000; +516e : 00000000; +516f : 00000000; +5170 : 00000000; +5171 : 00000000; +5172 : 00000000; +5173 : 00000000; +5174 : 00000000; +5175 : 00000000; +5176 : 00000000; +5177 : 00000000; +5178 : 00000000; +5179 : 00000000; +517a : 00000000; +517b : 00000000; +517c : 00000000; +517d : 00000000; +517e : 00000000; +517f : 00000000; +5180 : 00000000; +5181 : 00000000; +5182 : 00000000; +5183 : 00000000; +5184 : 00000000; +5185 : 00000000; +5186 : 00000000; +5187 : 00000000; +5188 : 00000000; +5189 : 00000000; +518a : 00000000; +518b : 00000000; +518c : 00000000; +518d : 00000000; +518e : 00000000; +518f : 00000000; +5190 : 00000000; +5191 : 00000000; +5192 : 00000000; +5193 : 00000000; +5194 : 00000000; +5195 : 00000000; +5196 : 00000000; +5197 : 00000000; +5198 : 00000000; +5199 : 00000000; +519a : 00000000; +519b : 00000000; +519c : 00000000; +519d : 00000000; +519e : 00000000; +519f : 00000000; +51a0 : 00000000; +51a1 : 00000000; +51a2 : 00000000; +51a3 : 00000000; +51a4 : 00000000; +51a5 : 00000000; +51a6 : 00000000; +51a7 : 00000000; +51a8 : 00000000; +51a9 : 00000000; +51aa : 00000000; +51ab : 00000000; +51ac : 00000000; +51ad : 00000000; +51ae : 00000000; +51af : 00000000; +51b0 : 00000000; +51b1 : 00000000; +51b2 : 00000000; +51b3 : 00000000; +51b4 : 00000000; +51b5 : 00000000; +51b6 : 00000000; +51b7 : 00000000; +51b8 : 00000000; +51b9 : 00000000; +51ba : 00000000; +51bb : 00000000; +51bc : 00000000; +51bd : 00000000; +51be : 00000000; +51bf : 00000000; +51c0 : 00000000; +51c1 : 00000000; +51c2 : 00000000; +51c3 : 00000000; +51c4 : 00000000; +51c5 : 00000000; +51c6 : 00000000; +51c7 : 00000000; +51c8 : 00000000; +51c9 : 00000000; +51ca : 00000000; +51cb : 00000000; +51cc : 00000000; +51cd : 00000000; +51ce : 00000000; +51cf : 00000000; +51d0 : 00000000; +51d1 : 00000000; +51d2 : 00000000; +51d3 : 00000000; +51d4 : 00000000; +51d5 : 00000000; +51d6 : 00000000; +51d7 : 00000000; +51d8 : 00000000; +51d9 : 00000000; +51da : 00000000; +51db : 00000000; +51dc : 00000000; +51dd : 00000000; +51de : 00000000; +51df : 00000000; +51e0 : 00000000; +51e1 : 00000000; +51e2 : 00000000; +51e3 : 00000000; +51e4 : 00000000; +51e5 : 00000000; +51e6 : 00000000; +51e7 : 00000000; +51e8 : 00000000; +51e9 : 00000000; +51ea : 00000000; +51eb : 00000000; +51ec : 00000000; +51ed : 00000000; +51ee : 00000000; +51ef : 00000000; +51f0 : 00000000; +51f1 : 00000000; +51f2 : 00000000; +51f3 : 00000000; +51f4 : 00000000; +51f5 : 00000000; +51f6 : 00000000; +51f7 : 00000000; +51f8 : 00000000; +51f9 : 00000000; +51fa : 00000000; +51fb : 00000000; +51fc : 00000000; +51fd : 00000000; +51fe : 00000000; +51ff : 00000000; +5200 : 00000000; +5201 : 00000000; +5202 : 00000000; +5203 : 00000000; +5204 : 00000000; +5205 : 00000000; +5206 : 00000000; +5207 : 00000000; +5208 : 00000000; +5209 : 00000000; +520a : 00000000; +520b : 00000000; +520c : 00000000; +520d : 00000000; +520e : 00000000; +520f : 00000000; +5210 : 00000000; +5211 : 00000000; +5212 : 00000000; +5213 : 00000000; +5214 : 00000000; +5215 : 00000000; +5216 : 00000000; +5217 : 00000000; +5218 : 00000000; +5219 : 00000000; +521a : 00000000; +521b : 00000000; +521c : 00000000; +521d : 00000000; +521e : 00000000; +521f : 00000000; +5220 : 00000000; +5221 : 00000000; +5222 : 00000000; +5223 : 00000000; +5224 : 00000000; +5225 : 00000000; +5226 : 00000000; +5227 : 00000000; +5228 : 00000000; +5229 : 00000000; +522a : 00000000; +522b : 00000000; +522c : 00000000; +522d : 00000000; +522e : 00000000; +522f : 00000000; +5230 : 00000000; +5231 : 00000000; +5232 : 00000000; +5233 : 00000000; +5234 : 00000000; +5235 : 00000000; +5236 : 00000000; +5237 : 00000000; +5238 : 00000000; +5239 : 00000000; +523a : 00000000; +523b : 00000000; +523c : 00000000; +523d : 00000000; +523e : 00000000; +523f : 00000000; +5240 : 00000000; +5241 : 00000000; +5242 : 00000000; +5243 : 00000000; +5244 : 00000000; +5245 : 00000000; +5246 : 00000000; +5247 : 00000000; +5248 : 00000000; +5249 : 00000000; +524a : 00000000; +524b : 00000000; +524c : 00000000; +524d : 00000000; +524e : 00000000; +524f : 00000000; +5250 : 00000000; +5251 : 00000000; +5252 : 00000000; +5253 : 00000000; +5254 : 00000000; +5255 : 00000000; +5256 : 00000000; +5257 : 00000000; +5258 : 00000000; +5259 : 00000000; +525a : 00000000; +525b : 00000000; +525c : 00000000; +525d : 00000000; +525e : 00000000; +525f : 00000000; +5260 : 00000000; +5261 : 00000000; +5262 : 00000000; +5263 : 00000000; +5264 : 00000000; +5265 : 00000000; +5266 : 00000000; +5267 : 00000000; +5268 : 00000000; +5269 : 00000000; +526a : 00000000; +526b : 00000000; +526c : 00000000; +526d : 00000000; +526e : 00000000; +526f : 00000000; +5270 : 00000000; +5271 : 00000000; +5272 : 00000000; +5273 : 00000000; +5274 : 00000000; +5275 : 00000000; +5276 : 00000000; +5277 : 00000000; +5278 : 00000000; +5279 : 00000000; +527a : 00000000; +527b : 00000000; +527c : 00000000; +527d : 00000000; +527e : 00000000; +527f : 00000000; +5280 : 00000000; +5281 : 00000000; +5282 : 00000000; +5283 : 00000000; +5284 : 00000000; +5285 : 00000000; +5286 : 00000000; +5287 : 00000000; +5288 : 00000000; +5289 : 00000000; +528a : 00000000; +528b : 00000000; +528c : 00000000; +528d : 00000000; +528e : 00000000; +528f : 00000000; +5290 : 00000000; +5291 : 00000000; +5292 : 00000000; +5293 : 00000000; +5294 : 00000000; +5295 : 00000000; +5296 : 00000000; +5297 : 00000000; +5298 : 00000000; +5299 : 00000000; +529a : 00000000; +529b : 00000000; +529c : 00000000; +529d : 00000000; +529e : 00000000; +529f : 00000000; +52a0 : 00000000; +52a1 : 00000000; +52a2 : 00000000; +52a3 : 00000000; +52a4 : 00000000; +52a5 : 00000000; +52a6 : 00000000; +52a7 : 00000000; +52a8 : 00000000; +52a9 : 00000000; +52aa : 00000000; +52ab : 00000000; +52ac : 00000000; +52ad : 00000000; +52ae : 00000000; +52af : 00000000; +52b0 : 00000000; +52b1 : 00000000; +52b2 : 00000000; +52b3 : 00000000; +52b4 : 00000000; +52b5 : 00000000; +52b6 : 00000000; +52b7 : 00000000; +52b8 : 00000000; +52b9 : 00000000; +52ba : 00000000; +52bb : 00000000; +52bc : 00000000; +52bd : 00000000; +52be : 00000000; +52bf : 00000000; +52c0 : 00000000; +52c1 : 00000000; +52c2 : 00000000; +52c3 : 00000000; +52c4 : 00000000; +52c5 : 00000000; +52c6 : 00000000; +52c7 : 00000000; +52c8 : 00000000; +52c9 : 00000000; +52ca : 00000000; +52cb : 00000000; +52cc : 00000000; +52cd : 00000000; +52ce : 00000000; +52cf : 00000000; +52d0 : 00000000; +52d1 : 00000000; +52d2 : 00000000; +52d3 : 00000000; +52d4 : 00000000; +52d5 : 00000000; +52d6 : 00000000; +52d7 : 00000000; +52d8 : 00000000; +52d9 : 00000000; +52da : 00000000; +52db : 00000000; +52dc : 00000000; +52dd : 00000000; +52de : 00000000; +52df : 00000000; +52e0 : 00000000; +52e1 : 00000000; +52e2 : 00000000; +52e3 : 00000000; +52e4 : 00000000; +52e5 : 00000000; +52e6 : 00000000; +52e7 : 00000000; +52e8 : 00000000; +52e9 : 00000000; +52ea : 00000000; +52eb : 00000000; +52ec : 00000000; +52ed : 00000000; +52ee : 00000000; +52ef : 00000000; +52f0 : 00000000; +52f1 : 00000000; +52f2 : 00000000; +52f3 : 00000000; +52f4 : 00000000; +52f5 : 00000000; +52f6 : 00000000; +52f7 : 00000000; +52f8 : 00000000; +52f9 : 00000000; +52fa : 00000000; +52fb : 00000000; +52fc : 00000000; +52fd : 00000000; +52fe : 00000000; +52ff : 00000000; +5300 : 00000000; +5301 : 00000000; +5302 : 00000000; +5303 : 00000000; +5304 : 00000000; +5305 : 00000000; +5306 : 00000000; +5307 : 00000000; +5308 : 00000000; +5309 : 00000000; +530a : 00000000; +530b : 00000000; +530c : 00000000; +530d : 00000000; +530e : 00000000; +530f : 00000000; +5310 : 00000000; +5311 : 00000000; +5312 : 00000000; +5313 : 00000000; +5314 : 00000000; +5315 : 00000000; +5316 : 00000000; +5317 : 00000000; +5318 : 00000000; +5319 : 00000000; +531a : 00000000; +531b : 00000000; +531c : 00000000; +531d : 00000000; +531e : 00000000; +531f : 00000000; +5320 : 00000000; +5321 : 00000000; +5322 : 00000000; +5323 : 00000000; +5324 : 00000000; +5325 : 00000000; +5326 : 00000000; +5327 : 00000000; +5328 : 00000000; +5329 : 00000000; +532a : 00000000; +532b : 00000000; +532c : 00000000; +532d : 00000000; +532e : 00000000; +532f : 00000000; +5330 : 00000000; +5331 : 00000000; +5332 : 00000000; +5333 : 00000000; +5334 : 00000000; +5335 : 00000000; +5336 : 00000000; +5337 : 00000000; +5338 : 00000000; +5339 : 00000000; +533a : 00000000; +533b : 00000000; +533c : 00000000; +533d : 00000000; +533e : 00000000; +533f : 00000000; +5340 : 00000000; +5341 : 00000000; +5342 : 00000000; +5343 : 00000000; +5344 : 00000000; +5345 : 00000000; +5346 : 00000000; +5347 : 00000000; +5348 : 00000000; +5349 : 00000000; +534a : 00000000; +534b : 00000000; +534c : 00000000; +534d : 00000000; +534e : 00000000; +534f : 00000000; +5350 : 00000000; +5351 : 00000000; +5352 : 00000000; +5353 : 00000000; +5354 : 00000000; +5355 : 00000000; +5356 : 00000000; +5357 : 00000000; +5358 : 00000000; +5359 : 00000000; +535a : 00000000; +535b : 00000000; +535c : 00000000; +535d : 00000000; +535e : 00000000; +535f : 00000000; +5360 : 00000000; +5361 : 00000000; +5362 : 00000000; +5363 : 00000000; +5364 : 00000000; +5365 : 00000000; +5366 : 00000000; +5367 : 00000000; +5368 : 00000000; +5369 : 00000000; +536a : 00000000; +536b : 00000000; +536c : 00000000; +536d : 00000000; +536e : 00000000; +536f : 00000000; +5370 : 00000000; +5371 : 00000000; +5372 : 00000000; +5373 : 00000000; +5374 : 00000000; +5375 : 00000000; +5376 : 00000000; +5377 : 00000000; +5378 : 00000000; +5379 : 00000000; +537a : 00000000; +537b : 00000000; +537c : 00000000; +537d : 00000000; +537e : 00000000; +537f : 00000000; +5380 : 00000000; +5381 : 00000000; +5382 : 00000000; +5383 : 00000000; +5384 : 00000000; +5385 : 00000000; +5386 : 00000000; +5387 : 00000000; +5388 : 00000000; +5389 : 00000000; +538a : 00000000; +538b : 00000000; +538c : 00000000; +538d : 00000000; +538e : 00000000; +538f : 00000000; +5390 : 00000000; +5391 : 00000000; +5392 : 00000000; +5393 : 00000000; +5394 : 00000000; +5395 : 00000000; +5396 : 00000000; +5397 : 00000000; +5398 : 00000000; +5399 : 00000000; +539a : 00000000; +539b : 00000000; +539c : 00000000; +539d : 00000000; +539e : 00000000; +539f : 00000000; +53a0 : 00000000; +53a1 : 00000000; +53a2 : 00000000; +53a3 : 00000000; +53a4 : 00000000; +53a5 : 00000000; +53a6 : 00000000; +53a7 : 00000000; +53a8 : 00000000; +53a9 : 00000000; +53aa : 00000000; +53ab : 00000000; +53ac : 00000000; +53ad : 00000000; +53ae : 00000000; +53af : 00000000; +53b0 : 00000000; +53b1 : 00000000; +53b2 : 00000000; +53b3 : 00000000; +53b4 : 00000000; +53b5 : 00000000; +53b6 : 00000000; +53b7 : 00000000; +53b8 : 00000000; +53b9 : 00000000; +53ba : 00000000; +53bb : 00000000; +53bc : 00000000; +53bd : 00000000; +53be : 00000000; +53bf : 00000000; +53c0 : 00000000; +53c1 : 00000000; +53c2 : 00000000; +53c3 : 00000000; +53c4 : 00000000; +53c5 : 00000000; +53c6 : 00000000; +53c7 : 00000000; +53c8 : 00000000; +53c9 : 00000000; +53ca : 00000000; +53cb : 00000000; +53cc : 00000000; +53cd : 00000000; +53ce : 00000000; +53cf : 00000000; +53d0 : 00000000; +53d1 : 00000000; +53d2 : 00000000; +53d3 : 00000000; +53d4 : 00000000; +53d5 : 00000000; +53d6 : 00000000; +53d7 : 00000000; +53d8 : 00000000; +53d9 : 00000000; +53da : 00000000; +53db : 00000000; +53dc : 00000000; +53dd : 00000000; +53de : 00000000; +53df : 00000000; +53e0 : 00000000; +53e1 : 00000000; +53e2 : 00000000; +53e3 : 00000000; +53e4 : 00000000; +53e5 : 00000000; +53e6 : 00000000; +53e7 : 00000000; +53e8 : 00000000; +53e9 : 00000000; +53ea : 00000000; +53eb : 00000000; +53ec : 00000000; +53ed : 00000000; +53ee : 00000000; +53ef : 00000000; +53f0 : 00000000; +53f1 : 00000000; +53f2 : 00000000; +53f3 : 00000000; +53f4 : 00000000; +53f5 : 00000000; +53f6 : 00000000; +53f7 : 00000000; +53f8 : 00000000; +53f9 : 00000000; +53fa : 00000000; +53fb : 00000000; +53fc : 00000000; +53fd : 00000000; +53fe : 00000000; +53ff : 00000000; +5400 : 00000000; +5401 : 00000000; +5402 : 00000000; +5403 : 00000000; +5404 : 00000000; +5405 : 00000000; +5406 : 00000000; +5407 : 00000000; +5408 : 00000000; +5409 : 00000000; +540a : 00000000; +540b : 00000000; +540c : 00000000; +540d : 00000000; +540e : 00000000; +540f : 00000000; +5410 : 00000000; +5411 : 00000000; +5412 : 00000000; +5413 : 00000000; +5414 : 00000000; +5415 : 00000000; +5416 : 00000000; +5417 : 00000000; +5418 : 00000000; +5419 : 00000000; +541a : 00000000; +541b : 00000000; +541c : 00000000; +541d : 00000000; +541e : 00000000; +541f : 00000000; +5420 : 00000000; +5421 : 00000000; +5422 : 00000000; +5423 : 00000000; +5424 : 00000000; +5425 : 00000000; +5426 : 00000000; +5427 : 00000000; +5428 : 00000000; +5429 : 00000000; +542a : 00000000; +542b : 00000000; +542c : 00000000; +542d : 00000000; +542e : 00000000; +542f : 00000000; +5430 : 00000000; +5431 : 00000000; +5432 : 00000000; +5433 : 00000000; +5434 : 00000000; +5435 : 00000000; +5436 : 00000000; +5437 : 00000000; +5438 : 00000000; +5439 : 00000000; +543a : 00000000; +543b : 00000000; +543c : 00000000; +543d : 00000000; +543e : 00000000; +543f : 00000000; +5440 : 00000000; +5441 : 00000000; +5442 : 00000000; +5443 : 00000000; +5444 : 00000000; +5445 : 00000000; +5446 : 00000000; +5447 : 00000000; +5448 : 00000000; +5449 : 00000000; +544a : 00000000; +544b : 00000000; +544c : 00000000; +544d : 00000000; +544e : 00000000; +544f : 00000000; +5450 : 00000000; +5451 : 00000000; +5452 : 00000000; +5453 : 00000000; +5454 : 00000000; +5455 : 00000000; +5456 : 00000000; +5457 : 00000000; +5458 : 00000000; +5459 : 00000000; +545a : 00000000; +545b : 00000000; +545c : 00000000; +545d : 00000000; +545e : 00000000; +545f : 00000000; +5460 : 00000000; +5461 : 00000000; +5462 : 00000000; +5463 : 00000000; +5464 : 00000000; +5465 : 00000000; +5466 : 00000000; +5467 : 00000000; +5468 : 00000000; +5469 : 00000000; +546a : 00000000; +546b : 00000000; +546c : 00000000; +546d : 00000000; +546e : 00000000; +546f : 00000000; +5470 : 00000000; +5471 : 00000000; +5472 : 00000000; +5473 : 00000000; +5474 : 00000000; +5475 : 00000000; +5476 : 00000000; +5477 : 00000000; +5478 : 00000000; +5479 : 00000000; +547a : 00000000; +547b : 00000000; +547c : 00000000; +547d : 00000000; +547e : 00000000; +547f : 00000000; +5480 : 00000000; +5481 : 00000000; +5482 : 00000000; +5483 : 00000000; +5484 : 00000000; +5485 : 00000000; +5486 : 00000000; +5487 : 00000000; +5488 : 00000000; +5489 : 00000000; +548a : 00000000; +548b : 00000000; +548c : 00000000; +548d : 00000000; +548e : 00000000; +548f : 00000000; +5490 : 00000000; +5491 : 00000000; +5492 : 00000000; +5493 : 00000000; +5494 : 00000000; +5495 : 00000000; +5496 : 00000000; +5497 : 00000000; +5498 : 00000000; +5499 : 00000000; +549a : 00000000; +549b : 00000000; +549c : 00000000; +549d : 00000000; +549e : 00000000; +549f : 00000000; +54a0 : 00000000; +54a1 : 00000000; +54a2 : 00000000; +54a3 : 00000000; +54a4 : 00000000; +54a5 : 00000000; +54a6 : 00000000; +54a7 : 00000000; +54a8 : 00000000; +54a9 : 00000000; +54aa : 00000000; +54ab : 00000000; +54ac : 00000000; +54ad : 00000000; +54ae : 00000000; +54af : 00000000; +54b0 : 00000000; +54b1 : 00000000; +54b2 : 00000000; +54b3 : 00000000; +54b4 : 00000000; +54b5 : 00000000; +54b6 : 00000000; +54b7 : 00000000; +54b8 : 00000000; +54b9 : 00000000; +54ba : 00000000; +54bb : 00000000; +54bc : 00000000; +54bd : 00000000; +54be : 00000000; +54bf : 00000000; +54c0 : 00000000; +54c1 : 00000000; +54c2 : 00000000; +54c3 : 00000000; +54c4 : 00000000; +54c5 : 00000000; +54c6 : 00000000; +54c7 : 00000000; +54c8 : 00000000; +54c9 : 00000000; +54ca : 00000000; +54cb : 00000000; +54cc : 00000000; +54cd : 00000000; +54ce : 00000000; +54cf : 00000000; +54d0 : 00000000; +54d1 : 00000000; +54d2 : 00000000; +54d3 : 00000000; +54d4 : 00000000; +54d5 : 00000000; +54d6 : 00000000; +54d7 : 00000000; +54d8 : 00000000; +54d9 : 00000000; +54da : 00000000; +54db : 00000000; +54dc : 00000000; +54dd : 00000000; +54de : 00000000; +54df : 00000000; +54e0 : 00000000; +54e1 : 00000000; +54e2 : 00000000; +54e3 : 00000000; +54e4 : 00000000; +54e5 : 00000000; +54e6 : 00000000; +54e7 : 00000000; +54e8 : 00000000; +54e9 : 00000000; +54ea : 00000000; +54eb : 00000000; +54ec : 00000000; +54ed : 00000000; +54ee : 00000000; +54ef : 00000000; +54f0 : 00000000; +54f1 : 00000000; +54f2 : 00000000; +54f3 : 00000000; +54f4 : 00000000; +54f5 : 00000000; +54f6 : 00000000; +54f7 : 00000000; +54f8 : 00000000; +54f9 : 00000000; +54fa : 00000000; +54fb : 00000000; +54fc : 00000000; +54fd : 00000000; +54fe : 00000000; +54ff : 00000000; +5500 : 00000000; +5501 : 00000000; +5502 : 00000000; +5503 : 00000000; +5504 : 00000000; +5505 : 00000000; +5506 : 00000000; +5507 : 00000000; +5508 : 00000000; +5509 : 00000000; +550a : 00000000; +550b : 00000000; +550c : 00000000; +550d : 00000000; +550e : 00000000; +550f : 00000000; +5510 : 00000000; +5511 : 00000000; +5512 : 00000000; +5513 : 00000000; +5514 : 00000000; +5515 : 00000000; +5516 : 00000000; +5517 : 00000000; +5518 : 00000000; +5519 : 00000000; +551a : 00000000; +551b : 00000000; +551c : 00000000; +551d : 00000000; +551e : 00000000; +551f : 00000000; +5520 : 00000000; +5521 : 00000000; +5522 : 00000000; +5523 : 00000000; +5524 : 00000000; +5525 : 00000000; +5526 : 00000000; +5527 : 00000000; +5528 : 00000000; +5529 : 00000000; +552a : 00000000; +552b : 00000000; +552c : 00000000; +552d : 00000000; +552e : 00000000; +552f : 00000000; +5530 : 00000000; +5531 : 00000000; +5532 : 00000000; +5533 : 00000000; +5534 : 00000000; +5535 : 00000000; +5536 : 00000000; +5537 : 00000000; +5538 : 00000000; +5539 : 00000000; +553a : 00000000; +553b : 00000000; +553c : 00000000; +553d : 00000000; +553e : 00000000; +553f : 00000000; +5540 : 00000000; +5541 : 00000000; +5542 : 00000000; +5543 : 00000000; +5544 : 00000000; +5545 : 00000000; +5546 : 00000000; +5547 : 00000000; +5548 : 00000000; +5549 : 00000000; +554a : 00000000; +554b : 00000000; +554c : 00000000; +554d : 00000000; +554e : 00000000; +554f : 00000000; +5550 : 00000000; +5551 : 00000000; +5552 : 00000000; +5553 : 00000000; +5554 : 00000000; +5555 : 00000000; +5556 : 00000000; +5557 : 00000000; +5558 : 00000000; +5559 : 00000000; +555a : 00000000; +555b : 00000000; +555c : 00000000; +555d : 00000000; +555e : 00000000; +555f : 00000000; +5560 : 00000000; +5561 : 00000000; +5562 : 00000000; +5563 : 00000000; +5564 : 00000000; +5565 : 00000000; +5566 : 00000000; +5567 : 00000000; +5568 : 00000000; +5569 : 00000000; +556a : 00000000; +556b : 00000000; +556c : 00000000; +556d : 00000000; +556e : 00000000; +556f : 00000000; +5570 : 00000000; +5571 : 00000000; +5572 : 00000000; +5573 : 00000000; +5574 : 00000000; +5575 : 00000000; +5576 : 00000000; +5577 : 00000000; +5578 : 00000000; +5579 : 00000000; +557a : 00000000; +557b : 00000000; +557c : 00000000; +557d : 00000000; +557e : 00000000; +557f : 00000000; +5580 : 00000000; +5581 : 00000000; +5582 : 00000000; +5583 : 00000000; +5584 : 00000000; +5585 : 00000000; +5586 : 00000000; +5587 : 00000000; +5588 : 00000000; +5589 : 00000000; +558a : 00000000; +558b : 00000000; +558c : 00000000; +558d : 00000000; +558e : 00000000; +558f : 00000000; +5590 : 00000000; +5591 : 00000000; +5592 : 00000000; +5593 : 00000000; +5594 : 00000000; +5595 : 00000000; +5596 : 00000000; +5597 : 00000000; +5598 : 00000000; +5599 : 00000000; +559a : 00000000; +559b : 00000000; +559c : 00000000; +559d : 00000000; +559e : 00000000; +559f : 00000000; +55a0 : 00000000; +55a1 : 00000000; +55a2 : 00000000; +55a3 : 00000000; +55a4 : 00000000; +55a5 : 00000000; +55a6 : 00000000; +55a7 : 00000000; +55a8 : 00000000; +55a9 : 00000000; +55aa : 00000000; +55ab : 00000000; +55ac : 00000000; +55ad : 00000000; +55ae : 00000000; +55af : 00000000; +55b0 : 00000000; +55b1 : 00000000; +55b2 : 00000000; +55b3 : 00000000; +55b4 : 00000000; +55b5 : 00000000; +55b6 : 00000000; +55b7 : 00000000; +55b8 : 00000000; +55b9 : 00000000; +55ba : 00000000; +55bb : 00000000; +55bc : 00000000; +55bd : 00000000; +55be : 00000000; +55bf : 00000000; +55c0 : 00000000; +55c1 : 00000000; +55c2 : 00000000; +55c3 : 00000000; +55c4 : 00000000; +55c5 : 00000000; +55c6 : 00000000; +55c7 : 00000000; +55c8 : 00000000; +55c9 : 00000000; +55ca : 00000000; +55cb : 00000000; +55cc : 00000000; +55cd : 00000000; +55ce : 00000000; +55cf : 00000000; +55d0 : 00000000; +55d1 : 00000000; +55d2 : 00000000; +55d3 : 00000000; +55d4 : 00000000; +55d5 : 00000000; +55d6 : 00000000; +55d7 : 00000000; +55d8 : 00000000; +55d9 : 00000000; +55da : 00000000; +55db : 00000000; +55dc : 00000000; +55dd : 00000000; +55de : 00000000; +55df : 00000000; +55e0 : 00000000; +55e1 : 00000000; +55e2 : 00000000; +55e3 : 00000000; +55e4 : 00000000; +55e5 : 00000000; +55e6 : 00000000; +55e7 : 00000000; +55e8 : 00000000; +55e9 : 00000000; +55ea : 00000000; +55eb : 00000000; +55ec : 00000000; +55ed : 00000000; +55ee : 00000000; +55ef : 00000000; +55f0 : 00000000; +55f1 : 00000000; +55f2 : 00000000; +55f3 : 00000000; +55f4 : 00000000; +55f5 : 00000000; +55f6 : 00000000; +55f7 : 00000000; +55f8 : 00000000; +55f9 : 00000000; +55fa : 00000000; +55fb : 00000000; +55fc : 00000000; +55fd : 00000000; +55fe : 00000000; +55ff : 00000000; +5600 : 00000000; +5601 : 00000000; +5602 : 00000000; +5603 : 00000000; +5604 : 00000000; +5605 : 00000000; +5606 : 00000000; +5607 : 00000000; +5608 : 00000000; +5609 : 00000000; +560a : 00000000; +560b : 00000000; +560c : 00000000; +560d : 00000000; +560e : 00000000; +560f : 00000000; +5610 : 00000000; +5611 : 00000000; +5612 : 00000000; +5613 : 00000000; +5614 : 00000000; +5615 : 00000000; +5616 : 00000000; +5617 : 00000000; +5618 : 00000000; +5619 : 00000000; +561a : 00000000; +561b : 00000000; +561c : 00000000; +561d : 00000000; +561e : 00000000; +561f : 00000000; +5620 : 00000000; +5621 : 00000000; +5622 : 00000000; +5623 : 00000000; +5624 : 00000000; +5625 : 00000000; +5626 : 00000000; +5627 : 00000000; +5628 : 00000000; +5629 : 00000000; +562a : 00000000; +562b : 00000000; +562c : 00000000; +562d : 00000000; +562e : 00000000; +562f : 00000000; +5630 : 00000000; +5631 : 00000000; +5632 : 00000000; +5633 : 00000000; +5634 : 00000000; +5635 : 00000000; +5636 : 00000000; +5637 : 00000000; +5638 : 00000000; +5639 : 00000000; +563a : 00000000; +563b : 00000000; +563c : 00000000; +563d : 00000000; +563e : 00000000; +563f : 00000000; +5640 : 00000000; +5641 : 00000000; +5642 : 00000000; +5643 : 00000000; +5644 : 00000000; +5645 : 00000000; +5646 : 00000000; +5647 : 00000000; +5648 : 00000000; +5649 : 00000000; +564a : 00000000; +564b : 00000000; +564c : 00000000; +564d : 00000000; +564e : 00000000; +564f : 00000000; +5650 : 00000000; +5651 : 00000000; +5652 : 00000000; +5653 : 00000000; +5654 : 00000000; +5655 : 00000000; +5656 : 00000000; +5657 : 00000000; +5658 : 00000000; +5659 : 00000000; +565a : 00000000; +565b : 00000000; +565c : 00000000; +565d : 00000000; +565e : 00000000; +565f : 00000000; +5660 : 00000000; +5661 : 00000000; +5662 : 00000000; +5663 : 00000000; +5664 : 00000000; +5665 : 00000000; +5666 : 00000000; +5667 : 00000000; +5668 : 00000000; +5669 : 00000000; +566a : 00000000; +566b : 00000000; +566c : 00000000; +566d : 00000000; +566e : 00000000; +566f : 00000000; +5670 : 00000000; +5671 : 00000000; +5672 : 00000000; +5673 : 00000000; +5674 : 00000000; +5675 : 00000000; +5676 : 00000000; +5677 : 00000000; +5678 : 00000000; +5679 : 00000000; +567a : 00000000; +567b : 00000000; +567c : 00000000; +567d : 00000000; +567e : 00000000; +567f : 00000000; +5680 : 00000000; +5681 : 00000000; +5682 : 00000000; +5683 : 00000000; +5684 : 00000000; +5685 : 00000000; +5686 : 00000000; +5687 : 00000000; +5688 : 00000000; +5689 : 00000000; +568a : 00000000; +568b : 00000000; +568c : 00000000; +568d : 00000000; +568e : 00000000; +568f : 00000000; +5690 : 00000000; +5691 : 00000000; +5692 : 00000000; +5693 : 00000000; +5694 : 00000000; +5695 : 00000000; +5696 : 00000000; +5697 : 00000000; +5698 : 00000000; +5699 : 00000000; +569a : 00000000; +569b : 00000000; +569c : 00000000; +569d : 00000000; +569e : 00000000; +569f : 00000000; +56a0 : 00000000; +56a1 : 00000000; +56a2 : 00000000; +56a3 : 00000000; +56a4 : 00000000; +56a5 : 00000000; +56a6 : 00000000; +56a7 : 00000000; +56a8 : 00000000; +56a9 : 00000000; +56aa : 00000000; +56ab : 00000000; +56ac : 00000000; +56ad : 00000000; +56ae : 00000000; +56af : 00000000; +56b0 : 00000000; +56b1 : 00000000; +56b2 : 00000000; +56b3 : 00000000; +56b4 : 00000000; +56b5 : 00000000; +56b6 : 00000000; +56b7 : 00000000; +56b8 : 00000000; +56b9 : 00000000; +56ba : 00000000; +56bb : 00000000; +56bc : 00000000; +56bd : 00000000; +56be : 00000000; +56bf : 00000000; +56c0 : 00000000; +56c1 : 00000000; +56c2 : 00000000; +56c3 : 00000000; +56c4 : 00000000; +56c5 : 00000000; +56c6 : 00000000; +56c7 : 00000000; +56c8 : 00000000; +56c9 : 00000000; +56ca : 00000000; +56cb : 00000000; +56cc : 00000000; +56cd : 00000000; +56ce : 00000000; +56cf : 00000000; +56d0 : 00000000; +56d1 : 00000000; +56d2 : 00000000; +56d3 : 00000000; +56d4 : 00000000; +56d5 : 00000000; +56d6 : 00000000; +56d7 : 00000000; +56d8 : 00000000; +56d9 : 00000000; +56da : 00000000; +56db : 00000000; +56dc : 00000000; +56dd : 00000000; +56de : 00000000; +56df : 00000000; +56e0 : 00000000; +56e1 : 00000000; +56e2 : 00000000; +56e3 : 00000000; +56e4 : 00000000; +56e5 : 00000000; +56e6 : 00000000; +56e7 : 00000000; +56e8 : 00000000; +56e9 : 00000000; +56ea : 00000000; +56eb : 00000000; +56ec : 00000000; +56ed : 00000000; +56ee : 00000000; +56ef : 00000000; +56f0 : 00000000; +56f1 : 00000000; +56f2 : 00000000; +56f3 : 00000000; +56f4 : 00000000; +56f5 : 00000000; +56f6 : 00000000; +56f7 : 00000000; +56f8 : 00000000; +56f9 : 00000000; +56fa : 00000000; +56fb : 00000000; +56fc : 00000000; +56fd : 00000000; +56fe : 00000000; +56ff : 00000000; +5700 : 00000000; +5701 : 00000000; +5702 : 00000000; +5703 : 00000000; +5704 : 00000000; +5705 : 00000000; +5706 : 00000000; +5707 : 00000000; +5708 : 00000000; +5709 : 00000000; +570a : 00000000; +570b : 00000000; +570c : 00000000; +570d : 00000000; +570e : 00000000; +570f : 00000000; +5710 : 00000000; +5711 : 00000000; +5712 : 00000000; +5713 : 00000000; +5714 : 00000000; +5715 : 00000000; +5716 : 00000000; +5717 : 00000000; +5718 : 00000000; +5719 : 00000000; +571a : 00000000; +571b : 00000000; +571c : 00000000; +571d : 00000000; +571e : 00000000; +571f : 00000000; +5720 : 00000000; +5721 : 00000000; +5722 : 00000000; +5723 : 00000000; +5724 : 00000000; +5725 : 00000000; +5726 : 00000000; +5727 : 00000000; +5728 : 00000000; +5729 : 00000000; +572a : 00000000; +572b : 00000000; +572c : 00000000; +572d : 00000000; +572e : 00000000; +572f : 00000000; +5730 : 00000000; +5731 : 00000000; +5732 : 00000000; +5733 : 00000000; +5734 : 00000000; +5735 : 00000000; +5736 : 00000000; +5737 : 00000000; +5738 : 00000000; +5739 : 00000000; +573a : 00000000; +573b : 00000000; +573c : 00000000; +573d : 00000000; +573e : 00000000; +573f : 00000000; +5740 : 00000000; +5741 : 00000000; +5742 : 00000000; +5743 : 00000000; +5744 : 00000000; +5745 : 00000000; +5746 : 00000000; +5747 : 00000000; +5748 : 00000000; +5749 : 00000000; +574a : 00000000; +574b : 00000000; +574c : 00000000; +574d : 00000000; +574e : 00000000; +574f : 00000000; +5750 : 00000000; +5751 : 00000000; +5752 : 00000000; +5753 : 00000000; +5754 : 00000000; +5755 : 00000000; +5756 : 00000000; +5757 : 00000000; +5758 : 00000000; +5759 : 00000000; +575a : 00000000; +575b : 00000000; +575c : 00000000; +575d : 00000000; +575e : 00000000; +575f : 00000000; +5760 : 00000000; +5761 : 00000000; +5762 : 00000000; +5763 : 00000000; +5764 : 00000000; +5765 : 00000000; +5766 : 00000000; +5767 : 00000000; +5768 : 00000000; +5769 : 00000000; +576a : 00000000; +576b : 00000000; +576c : 00000000; +576d : 00000000; +576e : 00000000; +576f : 00000000; +5770 : 00000000; +5771 : 00000000; +5772 : 00000000; +5773 : 00000000; +5774 : 00000000; +5775 : 00000000; +5776 : 00000000; +5777 : 00000000; +5778 : 00000000; +5779 : 00000000; +577a : 00000000; +577b : 00000000; +577c : 00000000; +577d : 00000000; +577e : 00000000; +577f : 00000000; +5780 : 00000000; +5781 : 00000000; +5782 : 00000000; +5783 : 00000000; +5784 : 00000000; +5785 : 00000000; +5786 : 00000000; +5787 : 00000000; +5788 : 00000000; +5789 : 00000000; +578a : 00000000; +578b : 00000000; +578c : 00000000; +578d : 00000000; +578e : 00000000; +578f : 00000000; +5790 : 00000000; +5791 : 00000000; +5792 : 00000000; +5793 : 00000000; +5794 : 00000000; +5795 : 00000000; +5796 : 00000000; +5797 : 00000000; +5798 : 00000000; +5799 : 00000000; +579a : 00000000; +579b : 00000000; +579c : 00000000; +579d : 00000000; +579e : 00000000; +579f : 00000000; +57a0 : 00000000; +57a1 : 00000000; +57a2 : 00000000; +57a3 : 00000000; +57a4 : 00000000; +57a5 : 00000000; +57a6 : 00000000; +57a7 : 00000000; +57a8 : 00000000; +57a9 : 00000000; +57aa : 00000000; +57ab : 00000000; +57ac : 00000000; +57ad : 00000000; +57ae : 00000000; +57af : 00000000; +57b0 : 00000000; +57b1 : 00000000; +57b2 : 00000000; +57b3 : 00000000; +57b4 : 00000000; +57b5 : 00000000; +57b6 : 00000000; +57b7 : 00000000; +57b8 : 00000000; +57b9 : 00000000; +57ba : 00000000; +57bb : 00000000; +57bc : 00000000; +57bd : 00000000; +57be : 00000000; +57bf : 00000000; +57c0 : 00000000; +57c1 : 00000000; +57c2 : 00000000; +57c3 : 00000000; +57c4 : 00000000; +57c5 : 00000000; +57c6 : 00000000; +57c7 : 00000000; +57c8 : 00000000; +57c9 : 00000000; +57ca : 00000000; +57cb : 00000000; +57cc : 00000000; +57cd : 00000000; +57ce : 00000000; +57cf : 00000000; +57d0 : 00000000; +57d1 : 00000000; +57d2 : 00000000; +57d3 : 00000000; +57d4 : 00000000; +57d5 : 00000000; +57d6 : 00000000; +57d7 : 00000000; +57d8 : 00000000; +57d9 : 00000000; +57da : 00000000; +57db : 00000000; +57dc : 00000000; +57dd : 00000000; +57de : 00000000; +57df : 00000000; +57e0 : 00000000; +57e1 : 00000000; +57e2 : 00000000; +57e3 : 00000000; +57e4 : 00000000; +57e5 : 00000000; +57e6 : 00000000; +57e7 : 00000000; +57e8 : 00000000; +57e9 : 00000000; +57ea : 00000000; +57eb : 00000000; +57ec : 00000000; +57ed : 00000000; +57ee : 00000000; +57ef : 00000000; +57f0 : 00000000; +57f1 : 00000000; +57f2 : 00000000; +57f3 : 00000000; +57f4 : 00000000; +57f5 : 00000000; +57f6 : 00000000; +57f7 : 00000000; +57f8 : 00000000; +57f9 : 00000000; +57fa : 00000000; +57fb : 00000000; +57fc : 00000000; +57fd : 00000000; +57fe : 00000000; +57ff : 00000000; +5800 : 00000000; +5801 : 00000000; +5802 : 00000000; +5803 : 00000000; +5804 : 00000000; +5805 : 00000000; +5806 : 00000000; +5807 : 00000000; +5808 : 00000000; +5809 : 00000000; +580a : 00000000; +580b : 00000000; +580c : 00000000; +580d : 00000000; +580e : 00000000; +580f : 00000000; +5810 : 00000000; +5811 : 00000000; +5812 : 00000000; +5813 : 00000000; +5814 : 00000000; +5815 : 00000000; +5816 : 00000000; +5817 : 00000000; +5818 : 00000000; +5819 : 00000000; +581a : 00000000; +581b : 00000000; +581c : 00000000; +581d : 00000000; +581e : 00000000; +581f : 00000000; +5820 : 00000000; +5821 : 00000000; +5822 : 00000000; +5823 : 00000000; +5824 : 00000000; +5825 : 00000000; +5826 : 00000000; +5827 : 00000000; +5828 : 00000000; +5829 : 00000000; +582a : 00000000; +582b : 00000000; +582c : 00000000; +582d : 00000000; +582e : 00000000; +582f : 00000000; +5830 : 00000000; +5831 : 00000000; +5832 : 00000000; +5833 : 00000000; +5834 : 00000000; +5835 : 00000000; +5836 : 00000000; +5837 : 00000000; +5838 : 00000000; +5839 : 00000000; +583a : 00000000; +583b : 00000000; +583c : 00000000; +583d : 00000000; +583e : 00000000; +583f : 00000000; +5840 : 00000000; +5841 : 00000000; +5842 : 00000000; +5843 : 00000000; +5844 : 00000000; +5845 : 00000000; +5846 : 00000000; +5847 : 00000000; +5848 : 00000000; +5849 : 00000000; +584a : 00000000; +584b : 00000000; +584c : 00000000; +584d : 00000000; +584e : 00000000; +584f : 00000000; +5850 : 00000000; +5851 : 00000000; +5852 : 00000000; +5853 : 00000000; +5854 : 00000000; +5855 : 00000000; +5856 : 00000000; +5857 : 00000000; +5858 : 00000000; +5859 : 00000000; +585a : 00000000; +585b : 00000000; +585c : 00000000; +585d : 00000000; +585e : 00000000; +585f : 00000000; +5860 : 00000000; +5861 : 00000000; +5862 : 00000000; +5863 : 00000000; +5864 : 00000000; +5865 : 00000000; +5866 : 00000000; +5867 : 00000000; +5868 : 00000000; +5869 : 00000000; +586a : 00000000; +586b : 00000000; +586c : 00000000; +586d : 00000000; +586e : 00000000; +586f : 00000000; +5870 : 00000000; +5871 : 00000000; +5872 : 00000000; +5873 : 00000000; +5874 : 00000000; +5875 : 00000000; +5876 : 00000000; +5877 : 00000000; +5878 : 00000000; +5879 : 00000000; +587a : 00000000; +587b : 00000000; +587c : 00000000; +587d : 00000000; +587e : 00000000; +587f : 00000000; +5880 : 00000000; +5881 : 00000000; +5882 : 00000000; +5883 : 00000000; +5884 : 00000000; +5885 : 00000000; +5886 : 00000000; +5887 : 00000000; +5888 : 00000000; +5889 : 00000000; +588a : 00000000; +588b : 00000000; +588c : 00000000; +588d : 00000000; +588e : 00000000; +588f : 00000000; +5890 : 00000000; +5891 : 00000000; +5892 : 00000000; +5893 : 00000000; +5894 : 00000000; +5895 : 00000000; +5896 : 00000000; +5897 : 00000000; +5898 : 00000000; +5899 : 00000000; +589a : 00000000; +589b : 00000000; +589c : 00000000; +589d : 00000000; +589e : 00000000; +589f : 00000000; +58a0 : 00000000; +58a1 : 00000000; +58a2 : 00000000; +58a3 : 00000000; +58a4 : 00000000; +58a5 : 00000000; +58a6 : 00000000; +58a7 : 00000000; +58a8 : 00000000; +58a9 : 00000000; +58aa : 00000000; +58ab : 00000000; +58ac : 00000000; +58ad : 00000000; +58ae : 00000000; +58af : 00000000; +58b0 : 00000000; +58b1 : 00000000; +58b2 : 00000000; +58b3 : 00000000; +58b4 : 00000000; +58b5 : 00000000; +58b6 : 00000000; +58b7 : 00000000; +58b8 : 00000000; +58b9 : 00000000; +58ba : 00000000; +58bb : 00000000; +58bc : 00000000; +58bd : 00000000; +58be : 00000000; +58bf : 00000000; +58c0 : 00000000; +58c1 : 00000000; +58c2 : 00000000; +58c3 : 00000000; +58c4 : 00000000; +58c5 : 00000000; +58c6 : 00000000; +58c7 : 00000000; +58c8 : 00000000; +58c9 : 00000000; +58ca : 00000000; +58cb : 00000000; +58cc : 00000000; +58cd : 00000000; +58ce : 00000000; +58cf : 00000000; +58d0 : 00000000; +58d1 : 00000000; +58d2 : 00000000; +58d3 : 00000000; +58d4 : 00000000; +58d5 : 00000000; +58d6 : 00000000; +58d7 : 00000000; +58d8 : 00000000; +58d9 : 00000000; +58da : 00000000; +58db : 00000000; +58dc : 00000000; +58dd : 00000000; +58de : 00000000; +58df : 00000000; +58e0 : 00000000; +58e1 : 00000000; +58e2 : 00000000; +58e3 : 00000000; +58e4 : 00000000; +58e5 : 00000000; +58e6 : 00000000; +58e7 : 00000000; +58e8 : 00000000; +58e9 : 00000000; +58ea : 00000000; +58eb : 00000000; +58ec : 00000000; +58ed : 00000000; +58ee : 00000000; +58ef : 00000000; +58f0 : 00000000; +58f1 : 00000000; +58f2 : 00000000; +58f3 : 00000000; +58f4 : 00000000; +58f5 : 00000000; +58f6 : 00000000; +58f7 : 00000000; +58f8 : 00000000; +58f9 : 00000000; +58fa : 00000000; +58fb : 00000000; +58fc : 00000000; +58fd : 00000000; +58fe : 00000000; +58ff : 00000000; +5900 : 00000000; +5901 : 00000000; +5902 : 00000000; +5903 : 00000000; +5904 : 00000000; +5905 : 00000000; +5906 : 00000000; +5907 : 00000000; +5908 : 00000000; +5909 : 00000000; +590a : 00000000; +590b : 00000000; +590c : 00000000; +590d : 00000000; +590e : 00000000; +590f : 00000000; +5910 : 00000000; +5911 : 00000000; +5912 : 00000000; +5913 : 00000000; +5914 : 00000000; +5915 : 00000000; +5916 : 00000000; +5917 : 00000000; +5918 : 00000000; +5919 : 00000000; +591a : 00000000; +591b : 00000000; +591c : 00000000; +591d : 00000000; +591e : 00000000; +591f : 00000000; +5920 : 00000000; +5921 : 00000000; +5922 : 00000000; +5923 : 00000000; +5924 : 00000000; +5925 : 00000000; +5926 : 00000000; +5927 : 00000000; +5928 : 00000000; +5929 : 00000000; +592a : 00000000; +592b : 00000000; +592c : 00000000; +592d : 00000000; +592e : 00000000; +592f : 00000000; +5930 : 00000000; +5931 : 00000000; +5932 : 00000000; +5933 : 00000000; +5934 : 00000000; +5935 : 00000000; +5936 : 00000000; +5937 : 00000000; +5938 : 00000000; +5939 : 00000000; +593a : 00000000; +593b : 00000000; +593c : 00000000; +593d : 00000000; +593e : 00000000; +593f : 00000000; +5940 : 00000000; +5941 : 00000000; +5942 : 00000000; +5943 : 00000000; +5944 : 00000000; +5945 : 00000000; +5946 : 00000000; +5947 : 00000000; +5948 : 00000000; +5949 : 00000000; +594a : 00000000; +594b : 00000000; +594c : 00000000; +594d : 00000000; +594e : 00000000; +594f : 00000000; +5950 : 00000000; +5951 : 00000000; +5952 : 00000000; +5953 : 00000000; +5954 : 00000000; +5955 : 00000000; +5956 : 00000000; +5957 : 00000000; +5958 : 00000000; +5959 : 00000000; +595a : 00000000; +595b : 00000000; +595c : 00000000; +595d : 00000000; +595e : 00000000; +595f : 00000000; +5960 : 00000000; +5961 : 00000000; +5962 : 00000000; +5963 : 00000000; +5964 : 00000000; +5965 : 00000000; +5966 : 00000000; +5967 : 00000000; +5968 : 00000000; +5969 : 00000000; +596a : 00000000; +596b : 00000000; +596c : 00000000; +596d : 00000000; +596e : 00000000; +596f : 00000000; +5970 : 00000000; +5971 : 00000000; +5972 : 00000000; +5973 : 00000000; +5974 : 00000000; +5975 : 00000000; +5976 : 00000000; +5977 : 00000000; +5978 : 00000000; +5979 : 00000000; +597a : 00000000; +597b : 00000000; +597c : 00000000; +597d : 00000000; +597e : 00000000; +597f : 00000000; +5980 : 00000000; +5981 : 00000000; +5982 : 00000000; +5983 : 00000000; +5984 : 00000000; +5985 : 00000000; +5986 : 00000000; +5987 : 00000000; +5988 : 00000000; +5989 : 00000000; +598a : 00000000; +598b : 00000000; +598c : 00000000; +598d : 00000000; +598e : 00000000; +598f : 00000000; +5990 : 00000000; +5991 : 00000000; +5992 : 00000000; +5993 : 00000000; +5994 : 00000000; +5995 : 00000000; +5996 : 00000000; +5997 : 00000000; +5998 : 00000000; +5999 : 00000000; +599a : 00000000; +599b : 00000000; +599c : 00000000; +599d : 00000000; +599e : 00000000; +599f : 00000000; +59a0 : 00000000; +59a1 : 00000000; +59a2 : 00000000; +59a3 : 00000000; +59a4 : 00000000; +59a5 : 00000000; +59a6 : 00000000; +59a7 : 00000000; +59a8 : 00000000; +59a9 : 00000000; +59aa : 00000000; +59ab : 00000000; +59ac : 00000000; +59ad : 00000000; +59ae : 00000000; +59af : 00000000; +59b0 : 00000000; +59b1 : 00000000; +59b2 : 00000000; +59b3 : 00000000; +59b4 : 00000000; +59b5 : 00000000; +59b6 : 00000000; +59b7 : 00000000; +59b8 : 00000000; +59b9 : 00000000; +59ba : 00000000; +59bb : 00000000; +59bc : 00000000; +59bd : 00000000; +59be : 00000000; +59bf : 00000000; +59c0 : 00000000; +59c1 : 00000000; +59c2 : 00000000; +59c3 : 00000000; +59c4 : 00000000; +59c5 : 00000000; +59c6 : 00000000; +59c7 : 00000000; +59c8 : 00000000; +59c9 : 00000000; +59ca : 00000000; +59cb : 00000000; +59cc : 00000000; +59cd : 00000000; +59ce : 00000000; +59cf : 00000000; +59d0 : 00000000; +59d1 : 00000000; +59d2 : 00000000; +59d3 : 00000000; +59d4 : 00000000; +59d5 : 00000000; +59d6 : 00000000; +59d7 : 00000000; +59d8 : 00000000; +59d9 : 00000000; +59da : 00000000; +59db : 00000000; +59dc : 00000000; +59dd : 00000000; +59de : 00000000; +59df : 00000000; +59e0 : 00000000; +59e1 : 00000000; +59e2 : 00000000; +59e3 : 00000000; +59e4 : 00000000; +59e5 : 00000000; +59e6 : 00000000; +59e7 : 00000000; +59e8 : 00000000; +59e9 : 00000000; +59ea : 00000000; +59eb : 00000000; +59ec : 00000000; +59ed : 00000000; +59ee : 00000000; +59ef : 00000000; +59f0 : 00000000; +59f1 : 00000000; +59f2 : 00000000; +59f3 : 00000000; +59f4 : 00000000; +59f5 : 00000000; +59f6 : 00000000; +59f7 : 00000000; +59f8 : 00000000; +59f9 : 00000000; +59fa : 00000000; +59fb : 00000000; +59fc : 00000000; +59fd : 00000000; +59fe : 00000000; +59ff : 00000000; +5a00 : 00000000; +5a01 : 00000000; +5a02 : 00000000; +5a03 : 00000000; +5a04 : 00000000; +5a05 : 00000000; +5a06 : 00000000; +5a07 : 00000000; +5a08 : 00000000; +5a09 : 00000000; +5a0a : 00000000; +5a0b : 00000000; +5a0c : 00000000; +5a0d : 00000000; +5a0e : 00000000; +5a0f : 00000000; +5a10 : 00000000; +5a11 : 00000000; +5a12 : 00000000; +5a13 : 00000000; +5a14 : 00000000; +5a15 : 00000000; +5a16 : 00000000; +5a17 : 00000000; +5a18 : 00000000; +5a19 : 00000000; +5a1a : 00000000; +5a1b : 00000000; +5a1c : 00000000; +5a1d : 00000000; +5a1e : 00000000; +5a1f : 00000000; +5a20 : 00000000; +5a21 : 00000000; +5a22 : 00000000; +5a23 : 00000000; +5a24 : 00000000; +5a25 : 00000000; +5a26 : 00000000; +5a27 : 00000000; +5a28 : 00000000; +5a29 : 00000000; +5a2a : 00000000; +5a2b : 00000000; +5a2c : 00000000; +5a2d : 00000000; +5a2e : 00000000; +5a2f : 00000000; +5a30 : 00000000; +5a31 : 00000000; +5a32 : 00000000; +5a33 : 00000000; +5a34 : 00000000; +5a35 : 00000000; +5a36 : 00000000; +5a37 : 00000000; +5a38 : 00000000; +5a39 : 00000000; +5a3a : 00000000; +5a3b : 00000000; +5a3c : 00000000; +5a3d : 00000000; +5a3e : 00000000; +5a3f : 00000000; +5a40 : 00000000; +5a41 : 00000000; +5a42 : 00000000; +5a43 : 00000000; +5a44 : 00000000; +5a45 : 00000000; +5a46 : 00000000; +5a47 : 00000000; +5a48 : 00000000; +5a49 : 00000000; +5a4a : 00000000; +5a4b : 00000000; +5a4c : 00000000; +5a4d : 00000000; +5a4e : 00000000; +5a4f : 00000000; +5a50 : 00000000; +5a51 : 00000000; +5a52 : 00000000; +5a53 : 00000000; +5a54 : 00000000; +5a55 : 00000000; +5a56 : 00000000; +5a57 : 00000000; +5a58 : 00000000; +5a59 : 00000000; +5a5a : 00000000; +5a5b : 00000000; +5a5c : 00000000; +5a5d : 00000000; +5a5e : 00000000; +5a5f : 00000000; +5a60 : 00000000; +5a61 : 00000000; +5a62 : 00000000; +5a63 : 00000000; +5a64 : 00000000; +5a65 : 00000000; +5a66 : 00000000; +5a67 : 00000000; +5a68 : 00000000; +5a69 : 00000000; +5a6a : 00000000; +5a6b : 00000000; +5a6c : 00000000; +5a6d : 00000000; +5a6e : 00000000; +5a6f : 00000000; +5a70 : 00000000; +5a71 : 00000000; +5a72 : 00000000; +5a73 : 00000000; +5a74 : 00000000; +5a75 : 00000000; +5a76 : 00000000; +5a77 : 00000000; +5a78 : 00000000; +5a79 : 00000000; +5a7a : 00000000; +5a7b : 00000000; +5a7c : 00000000; +5a7d : 00000000; +5a7e : 00000000; +5a7f : 00000000; +5a80 : 00000000; +5a81 : 00000000; +5a82 : 00000000; +5a83 : 00000000; +5a84 : 00000000; +5a85 : 00000000; +5a86 : 00000000; +5a87 : 00000000; +5a88 : 00000000; +5a89 : 00000000; +5a8a : 00000000; +5a8b : 00000000; +5a8c : 00000000; +5a8d : 00000000; +5a8e : 00000000; +5a8f : 00000000; +5a90 : 00000000; +5a91 : 00000000; +5a92 : 00000000; +5a93 : 00000000; +5a94 : 00000000; +5a95 : 00000000; +5a96 : 00000000; +5a97 : 00000000; +5a98 : 00000000; +5a99 : 00000000; +5a9a : 00000000; +5a9b : 00000000; +5a9c : 00000000; +5a9d : 00000000; +5a9e : 00000000; +5a9f : 00000000; +5aa0 : 00000000; +5aa1 : 00000000; +5aa2 : 00000000; +5aa3 : 00000000; +5aa4 : 00000000; +5aa5 : 00000000; +5aa6 : 00000000; +5aa7 : 00000000; +5aa8 : 00000000; +5aa9 : 00000000; +5aaa : 00000000; +5aab : 00000000; +5aac : 00000000; +5aad : 00000000; +5aae : 00000000; +5aaf : 00000000; +5ab0 : 00000000; +5ab1 : 00000000; +5ab2 : 00000000; +5ab3 : 00000000; +5ab4 : 00000000; +5ab5 : 00000000; +5ab6 : 00000000; +5ab7 : 00000000; +5ab8 : 00000000; +5ab9 : 00000000; +5aba : 00000000; +5abb : 00000000; +5abc : 00000000; +5abd : 00000000; +5abe : 00000000; +5abf : 00000000; +5ac0 : 00000000; +5ac1 : 00000000; +5ac2 : 00000000; +5ac3 : 00000000; +5ac4 : 00000000; +5ac5 : 00000000; +5ac6 : 00000000; +5ac7 : 00000000; +5ac8 : 00000000; +5ac9 : 00000000; +5aca : 00000000; +5acb : 00000000; +5acc : 00000000; +5acd : 00000000; +5ace : 00000000; +5acf : 00000000; +5ad0 : 00000000; +5ad1 : 00000000; +5ad2 : 00000000; +5ad3 : 00000000; +5ad4 : 00000000; +5ad5 : 00000000; +5ad6 : 00000000; +5ad7 : 00000000; +5ad8 : 00000000; +5ad9 : 00000000; +5ada : 00000000; +5adb : 00000000; +5adc : 00000000; +5add : 00000000; +5ade : 00000000; +5adf : 00000000; +5ae0 : 00000000; +5ae1 : 00000000; +5ae2 : 00000000; +5ae3 : 00000000; +5ae4 : 00000000; +5ae5 : 00000000; +5ae6 : 00000000; +5ae7 : 00000000; +5ae8 : 00000000; +5ae9 : 00000000; +5aea : 00000000; +5aeb : 00000000; +5aec : 00000000; +5aed : 00000000; +5aee : 00000000; +5aef : 00000000; +5af0 : 00000000; +5af1 : 00000000; +5af2 : 00000000; +5af3 : 00000000; +5af4 : 00000000; +5af5 : 00000000; +5af6 : 00000000; +5af7 : 00000000; +5af8 : 00000000; +5af9 : 00000000; +5afa : 00000000; +5afb : 00000000; +5afc : 00000000; +5afd : 00000000; +5afe : 00000000; +5aff : 00000000; +5b00 : 00000000; +5b01 : 00000000; +5b02 : 00000000; +5b03 : 00000000; +5b04 : 00000000; +5b05 : 00000000; +5b06 : 00000000; +5b07 : 00000000; +5b08 : 00000000; +5b09 : 00000000; +5b0a : 00000000; +5b0b : 00000000; +5b0c : 00000000; +5b0d : 00000000; +5b0e : 00000000; +5b0f : 00000000; +5b10 : 00000000; +5b11 : 00000000; +5b12 : 00000000; +5b13 : 00000000; +5b14 : 00000000; +5b15 : 00000000; +5b16 : 00000000; +5b17 : 00000000; +5b18 : 00000000; +5b19 : 00000000; +5b1a : 00000000; +5b1b : 00000000; +5b1c : 00000000; +5b1d : 00000000; +5b1e : 00000000; +5b1f : 00000000; +5b20 : 00000000; +5b21 : 00000000; +5b22 : 00000000; +5b23 : 00000000; +5b24 : 00000000; +5b25 : 00000000; +5b26 : 00000000; +5b27 : 00000000; +5b28 : 00000000; +5b29 : 00000000; +5b2a : 00000000; +5b2b : 00000000; +5b2c : 00000000; +5b2d : 00000000; +5b2e : 00000000; +5b2f : 00000000; +5b30 : 00000000; +5b31 : 00000000; +5b32 : 00000000; +5b33 : 00000000; +5b34 : 00000000; +5b35 : 00000000; +5b36 : 00000000; +5b37 : 00000000; +5b38 : 00000000; +5b39 : 00000000; +5b3a : 00000000; +5b3b : 00000000; +5b3c : 00000000; +5b3d : 00000000; +5b3e : 00000000; +5b3f : 00000000; +5b40 : 00000000; +5b41 : 00000000; +5b42 : 00000000; +5b43 : 00000000; +5b44 : 00000000; +5b45 : 00000000; +5b46 : 00000000; +5b47 : 00000000; +5b48 : 00000000; +5b49 : 00000000; +5b4a : 00000000; +5b4b : 00000000; +5b4c : 00000000; +5b4d : 00000000; +5b4e : 00000000; +5b4f : 00000000; +5b50 : 00000000; +5b51 : 00000000; +5b52 : 00000000; +5b53 : 00000000; +5b54 : 00000000; +5b55 : 00000000; +5b56 : 00000000; +5b57 : 00000000; +5b58 : 00000000; +5b59 : 00000000; +5b5a : 00000000; +5b5b : 00000000; +5b5c : 00000000; +5b5d : 00000000; +5b5e : 00000000; +5b5f : 00000000; +5b60 : 00000000; +5b61 : 00000000; +5b62 : 00000000; +5b63 : 00000000; +5b64 : 00000000; +5b65 : 00000000; +5b66 : 00000000; +5b67 : 00000000; +5b68 : 00000000; +5b69 : 00000000; +5b6a : 00000000; +5b6b : 00000000; +5b6c : 00000000; +5b6d : 00000000; +5b6e : 00000000; +5b6f : 00000000; +5b70 : 00000000; +5b71 : 00000000; +5b72 : 00000000; +5b73 : 00000000; +5b74 : 00000000; +5b75 : 00000000; +5b76 : 00000000; +5b77 : 00000000; +5b78 : 00000000; +5b79 : 00000000; +5b7a : 00000000; +5b7b : 00000000; +5b7c : 00000000; +5b7d : 00000000; +5b7e : 00000000; +5b7f : 00000000; +5b80 : 00000000; +5b81 : 00000000; +5b82 : 00000000; +5b83 : 00000000; +5b84 : 00000000; +5b85 : 00000000; +5b86 : 00000000; +5b87 : 00000000; +5b88 : 00000000; +5b89 : 00000000; +5b8a : 00000000; +5b8b : 00000000; +5b8c : 00000000; +5b8d : 00000000; +5b8e : 00000000; +5b8f : 00000000; +5b90 : 00000000; +5b91 : 00000000; +5b92 : 00000000; +5b93 : 00000000; +5b94 : 00000000; +5b95 : 00000000; +5b96 : 00000000; +5b97 : 00000000; +5b98 : 00000000; +5b99 : 00000000; +5b9a : 00000000; +5b9b : 00000000; +5b9c : 00000000; +5b9d : 00000000; +5b9e : 00000000; +5b9f : 00000000; +5ba0 : 00000000; +5ba1 : 00000000; +5ba2 : 00000000; +5ba3 : 00000000; +5ba4 : 00000000; +5ba5 : 00000000; +5ba6 : 00000000; +5ba7 : 00000000; +5ba8 : 00000000; +5ba9 : 00000000; +5baa : 00000000; +5bab : 00000000; +5bac : 00000000; +5bad : 00000000; +5bae : 00000000; +5baf : 00000000; +5bb0 : 00000000; +5bb1 : 00000000; +5bb2 : 00000000; +5bb3 : 00000000; +5bb4 : 00000000; +5bb5 : 00000000; +5bb6 : 00000000; +5bb7 : 00000000; +5bb8 : 00000000; +5bb9 : 00000000; +5bba : 00000000; +5bbb : 00000000; +5bbc : 00000000; +5bbd : 00000000; +5bbe : 00000000; +5bbf : 00000000; +5bc0 : 00000000; +5bc1 : 00000000; +5bc2 : 00000000; +5bc3 : 00000000; +5bc4 : 00000000; +5bc5 : 00000000; +5bc6 : 00000000; +5bc7 : 00000000; +5bc8 : 00000000; +5bc9 : 00000000; +5bca : 00000000; +5bcb : 00000000; +5bcc : 00000000; +5bcd : 00000000; +5bce : 00000000; +5bcf : 00000000; +5bd0 : 00000000; +5bd1 : 00000000; +5bd2 : 00000000; +5bd3 : 00000000; +5bd4 : 00000000; +5bd5 : 00000000; +5bd6 : 00000000; +5bd7 : 00000000; +5bd8 : 00000000; +5bd9 : 00000000; +5bda : 00000000; +5bdb : 00000000; +5bdc : 00000000; +5bdd : 00000000; +5bde : 00000000; +5bdf : 00000000; +5be0 : 00000000; +5be1 : 00000000; +5be2 : 00000000; +5be3 : 00000000; +5be4 : 00000000; +5be5 : 00000000; +5be6 : 00000000; +5be7 : 00000000; +5be8 : 00000000; +5be9 : 00000000; +5bea : 00000000; +5beb : 00000000; +5bec : 00000000; +5bed : 00000000; +5bee : 00000000; +5bef : 00000000; +5bf0 : 00000000; +5bf1 : 00000000; +5bf2 : 00000000; +5bf3 : 00000000; +5bf4 : 00000000; +5bf5 : 00000000; +5bf6 : 00000000; +5bf7 : 00000000; +5bf8 : 00000000; +5bf9 : 00000000; +5bfa : 00000000; +5bfb : 00000000; +5bfc : 00000000; +5bfd : 00000000; +5bfe : 00000000; +5bff : 00000000; +5c00 : 00000000; +5c01 : 00000000; +5c02 : 00000000; +5c03 : 00000000; +5c04 : 00000000; +5c05 : 00000000; +5c06 : 00000000; +5c07 : 00000000; +5c08 : 00000000; +5c09 : 00000000; +5c0a : 00000000; +5c0b : 00000000; +5c0c : 00000000; +5c0d : 00000000; +5c0e : 00000000; +5c0f : 00000000; +5c10 : 00000000; +5c11 : 00000000; +5c12 : 00000000; +5c13 : 00000000; +5c14 : 00000000; +5c15 : 00000000; +5c16 : 00000000; +5c17 : 00000000; +5c18 : 00000000; +5c19 : 00000000; +5c1a : 00000000; +5c1b : 00000000; +5c1c : 00000000; +5c1d : 00000000; +5c1e : 00000000; +5c1f : 00000000; +5c20 : 00000000; +5c21 : 00000000; +5c22 : 00000000; +5c23 : 00000000; +5c24 : 00000000; +5c25 : 00000000; +5c26 : 00000000; +5c27 : 00000000; +5c28 : 00000000; +5c29 : 00000000; +5c2a : 00000000; +5c2b : 00000000; +5c2c : 00000000; +5c2d : 00000000; +5c2e : 00000000; +5c2f : 00000000; +5c30 : 00000000; +5c31 : 00000000; +5c32 : 00000000; +5c33 : 00000000; +5c34 : 00000000; +5c35 : 00000000; +5c36 : 00000000; +5c37 : 00000000; +5c38 : 00000000; +5c39 : 00000000; +5c3a : 00000000; +5c3b : 00000000; +5c3c : 00000000; +5c3d : 00000000; +5c3e : 00000000; +5c3f : 00000000; +5c40 : 00000000; +5c41 : 00000000; +5c42 : 00000000; +5c43 : 00000000; +5c44 : 00000000; +5c45 : 00000000; +5c46 : 00000000; +5c47 : 00000000; +5c48 : 00000000; +5c49 : 00000000; +5c4a : 00000000; +5c4b : 00000000; +5c4c : 00000000; +5c4d : 00000000; +5c4e : 00000000; +5c4f : 00000000; +5c50 : 00000000; +5c51 : 00000000; +5c52 : 00000000; +5c53 : 00000000; +5c54 : 00000000; +5c55 : 00000000; +5c56 : 00000000; +5c57 : 00000000; +5c58 : 00000000; +5c59 : 00000000; +5c5a : 00000000; +5c5b : 00000000; +5c5c : 00000000; +5c5d : 00000000; +5c5e : 00000000; +5c5f : 00000000; +5c60 : 00000000; +5c61 : 00000000; +5c62 : 00000000; +5c63 : 00000000; +5c64 : 00000000; +5c65 : 00000000; +5c66 : 00000000; +5c67 : 00000000; +5c68 : 00000000; +5c69 : 00000000; +5c6a : 00000000; +5c6b : 00000000; +5c6c : 00000000; +5c6d : 00000000; +5c6e : 00000000; +5c6f : 00000000; +5c70 : 00000000; +5c71 : 00000000; +5c72 : 00000000; +5c73 : 00000000; +5c74 : 00000000; +5c75 : 00000000; +5c76 : 00000000; +5c77 : 00000000; +5c78 : 00000000; +5c79 : 00000000; +5c7a : 00000000; +5c7b : 00000000; +5c7c : 00000000; +5c7d : 00000000; +5c7e : 00000000; +5c7f : 00000000; +5c80 : 00000000; +5c81 : 00000000; +5c82 : 00000000; +5c83 : 00000000; +5c84 : 00000000; +5c85 : 00000000; +5c86 : 00000000; +5c87 : 00000000; +5c88 : 00000000; +5c89 : 00000000; +5c8a : 00000000; +5c8b : 00000000; +5c8c : 00000000; +5c8d : 00000000; +5c8e : 00000000; +5c8f : 00000000; +5c90 : 00000000; +5c91 : 00000000; +5c92 : 00000000; +5c93 : 00000000; +5c94 : 00000000; +5c95 : 00000000; +5c96 : 00000000; +5c97 : 00000000; +5c98 : 00000000; +5c99 : 00000000; +5c9a : 00000000; +5c9b : 00000000; +5c9c : 00000000; +5c9d : 00000000; +5c9e : 00000000; +5c9f : 00000000; +5ca0 : 00000000; +5ca1 : 00000000; +5ca2 : 00000000; +5ca3 : 00000000; +5ca4 : 00000000; +5ca5 : 00000000; +5ca6 : 00000000; +5ca7 : 00000000; +5ca8 : 00000000; +5ca9 : 00000000; +5caa : 00000000; +5cab : 00000000; +5cac : 00000000; +5cad : 00000000; +5cae : 00000000; +5caf : 00000000; +5cb0 : 00000000; +5cb1 : 00000000; +5cb2 : 00000000; +5cb3 : 00000000; +5cb4 : 00000000; +5cb5 : 00000000; +5cb6 : 00000000; +5cb7 : 00000000; +5cb8 : 00000000; +5cb9 : 00000000; +5cba : 00000000; +5cbb : 00000000; +5cbc : 00000000; +5cbd : 00000000; +5cbe : 00000000; +5cbf : 00000000; +5cc0 : 00000000; +5cc1 : 00000000; +5cc2 : 00000000; +5cc3 : 00000000; +5cc4 : 00000000; +5cc5 : 00000000; +5cc6 : 00000000; +5cc7 : 00000000; +5cc8 : 00000000; +5cc9 : 00000000; +5cca : 00000000; +5ccb : 00000000; +5ccc : 00000000; +5ccd : 00000000; +5cce : 00000000; +5ccf : 00000000; +5cd0 : 00000000; +5cd1 : 00000000; +5cd2 : 00000000; +5cd3 : 00000000; +5cd4 : 00000000; +5cd5 : 00000000; +5cd6 : 00000000; +5cd7 : 00000000; +5cd8 : 00000000; +5cd9 : 00000000; +5cda : 00000000; +5cdb : 00000000; +5cdc : 00000000; +5cdd : 00000000; +5cde : 00000000; +5cdf : 00000000; +5ce0 : 00000000; +5ce1 : 00000000; +5ce2 : 00000000; +5ce3 : 00000000; +5ce4 : 00000000; +5ce5 : 00000000; +5ce6 : 00000000; +5ce7 : 00000000; +5ce8 : 00000000; +5ce9 : 00000000; +5cea : 00000000; +5ceb : 00000000; +5cec : 00000000; +5ced : 00000000; +5cee : 00000000; +5cef : 00000000; +5cf0 : 00000000; +5cf1 : 00000000; +5cf2 : 00000000; +5cf3 : 00000000; +5cf4 : 00000000; +5cf5 : 00000000; +5cf6 : 00000000; +5cf7 : 00000000; +5cf8 : 00000000; +5cf9 : 00000000; +5cfa : 00000000; +5cfb : 00000000; +5cfc : 00000000; +5cfd : 00000000; +5cfe : 00000000; +5cff : 00000000; +5d00 : 00000000; +5d01 : 00000000; +5d02 : 00000000; +5d03 : 00000000; +5d04 : 00000000; +5d05 : 00000000; +5d06 : 00000000; +5d07 : 00000000; +5d08 : 00000000; +5d09 : 00000000; +5d0a : 00000000; +5d0b : 00000000; +5d0c : 00000000; +5d0d : 00000000; +5d0e : 00000000; +5d0f : 00000000; +5d10 : 00000000; +5d11 : 00000000; +5d12 : 00000000; +5d13 : 00000000; +5d14 : 00000000; +5d15 : 00000000; +5d16 : 00000000; +5d17 : 00000000; +5d18 : 00000000; +5d19 : 00000000; +5d1a : 00000000; +5d1b : 00000000; +5d1c : 00000000; +5d1d : 00000000; +5d1e : 00000000; +5d1f : 00000000; +5d20 : 00000000; +5d21 : 00000000; +5d22 : 00000000; +5d23 : 00000000; +5d24 : 00000000; +5d25 : 00000000; +5d26 : 00000000; +5d27 : 00000000; +5d28 : 00000000; +5d29 : 00000000; +5d2a : 00000000; +5d2b : 00000000; +5d2c : 00000000; +5d2d : 00000000; +5d2e : 00000000; +5d2f : 00000000; +5d30 : 00000000; +5d31 : 00000000; +5d32 : 00000000; +5d33 : 00000000; +5d34 : 00000000; +5d35 : 00000000; +5d36 : 00000000; +5d37 : 00000000; +5d38 : 00000000; +5d39 : 00000000; +5d3a : 00000000; +5d3b : 00000000; +5d3c : 00000000; +5d3d : 00000000; +5d3e : 00000000; +5d3f : 00000000; +5d40 : 00000000; +5d41 : 00000000; +5d42 : 00000000; +5d43 : 00000000; +5d44 : 00000000; +5d45 : 00000000; +5d46 : 00000000; +5d47 : 00000000; +5d48 : 00000000; +5d49 : 00000000; +5d4a : 00000000; +5d4b : 00000000; +5d4c : 00000000; +5d4d : 00000000; +5d4e : 00000000; +5d4f : 00000000; +5d50 : 00000000; +5d51 : 00000000; +5d52 : 00000000; +5d53 : 00000000; +5d54 : 00000000; +5d55 : 00000000; +5d56 : 00000000; +5d57 : 00000000; +5d58 : 00000000; +5d59 : 00000000; +5d5a : 00000000; +5d5b : 00000000; +5d5c : 00000000; +5d5d : 00000000; +5d5e : 00000000; +5d5f : 00000000; +5d60 : 00000000; +5d61 : 00000000; +5d62 : 00000000; +5d63 : 00000000; +5d64 : 00000000; +5d65 : 00000000; +5d66 : 00000000; +5d67 : 00000000; +5d68 : 00000000; +5d69 : 00000000; +5d6a : 00000000; +5d6b : 00000000; +5d6c : 00000000; +5d6d : 00000000; +5d6e : 00000000; +5d6f : 00000000; +5d70 : 00000000; +5d71 : 00000000; +5d72 : 00000000; +5d73 : 00000000; +5d74 : 00000000; +5d75 : 00000000; +5d76 : 00000000; +5d77 : 00000000; +5d78 : 00000000; +5d79 : 00000000; +5d7a : 00000000; +5d7b : 00000000; +5d7c : 00000000; +5d7d : 00000000; +5d7e : 00000000; +5d7f : 00000000; +5d80 : 00000000; +5d81 : 00000000; +5d82 : 00000000; +5d83 : 00000000; +5d84 : 00000000; +5d85 : 00000000; +5d86 : 00000000; +5d87 : 00000000; +5d88 : 00000000; +5d89 : 00000000; +5d8a : 00000000; +5d8b : 00000000; +5d8c : 00000000; +5d8d : 00000000; +5d8e : 00000000; +5d8f : 00000000; +5d90 : 00000000; +5d91 : 00000000; +5d92 : 00000000; +5d93 : 00000000; +5d94 : 00000000; +5d95 : 00000000; +5d96 : 00000000; +5d97 : 00000000; +5d98 : 00000000; +5d99 : 00000000; +5d9a : 00000000; +5d9b : 00000000; +5d9c : 00000000; +5d9d : 00000000; +5d9e : 00000000; +5d9f : 00000000; +5da0 : 00000000; +5da1 : 00000000; +5da2 : 00000000; +5da3 : 00000000; +5da4 : 00000000; +5da5 : 00000000; +5da6 : 00000000; +5da7 : 00000000; +5da8 : 00000000; +5da9 : 00000000; +5daa : 00000000; +5dab : 00000000; +5dac : 00000000; +5dad : 00000000; +5dae : 00000000; +5daf : 00000000; +5db0 : 00000000; +5db1 : 00000000; +5db2 : 00000000; +5db3 : 00000000; +5db4 : 00000000; +5db5 : 00000000; +5db6 : 00000000; +5db7 : 00000000; +5db8 : 00000000; +5db9 : 00000000; +5dba : 00000000; +5dbb : 00000000; +5dbc : 00000000; +5dbd : 00000000; +5dbe : 00000000; +5dbf : 00000000; +5dc0 : 00000000; +5dc1 : 00000000; +5dc2 : 00000000; +5dc3 : 00000000; +5dc4 : 00000000; +5dc5 : 00000000; +5dc6 : 00000000; +5dc7 : 00000000; +5dc8 : 00000000; +5dc9 : 00000000; +5dca : 00000000; +5dcb : 00000000; +5dcc : 00000000; +5dcd : 00000000; +5dce : 00000000; +5dcf : 00000000; +5dd0 : 00000000; +5dd1 : 00000000; +5dd2 : 00000000; +5dd3 : 00000000; +5dd4 : 00000000; +5dd5 : 00000000; +5dd6 : 00000000; +5dd7 : 00000000; +5dd8 : 00000000; +5dd9 : 00000000; +5dda : 00000000; +5ddb : 00000000; +5ddc : 00000000; +5ddd : 00000000; +5dde : 00000000; +5ddf : 00000000; +5de0 : 00000000; +5de1 : 00000000; +5de2 : 00000000; +5de3 : 00000000; +5de4 : 00000000; +5de5 : 00000000; +5de6 : 00000000; +5de7 : 00000000; +5de8 : 00000000; +5de9 : 00000000; +5dea : 00000000; +5deb : 00000000; +5dec : 00000000; +5ded : 00000000; +5dee : 00000000; +5def : 00000000; +5df0 : 00000000; +5df1 : 00000000; +5df2 : 00000000; +5df3 : 00000000; +5df4 : 00000000; +5df5 : 00000000; +5df6 : 00000000; +5df7 : 00000000; +5df8 : 00000000; +5df9 : 00000000; +5dfa : 00000000; +5dfb : 00000000; +5dfc : 00000000; +5dfd : 00000000; +5dfe : 00000000; +5dff : 00000000; +5e00 : 00000000; +5e01 : 00000000; +5e02 : 00000000; +5e03 : 00000000; +5e04 : 00000000; +5e05 : 00000000; +5e06 : 00000000; +5e07 : 00000000; +5e08 : 00000000; +5e09 : 00000000; +5e0a : 00000000; +5e0b : 00000000; +5e0c : 00000000; +5e0d : 00000000; +5e0e : 00000000; +5e0f : 00000000; +5e10 : 00000000; +5e11 : 00000000; +5e12 : 00000000; +5e13 : 00000000; +5e14 : 00000000; +5e15 : 00000000; +5e16 : 00000000; +5e17 : 00000000; +5e18 : 00000000; +5e19 : 00000000; +5e1a : 00000000; +5e1b : 00000000; +5e1c : 00000000; +5e1d : 00000000; +5e1e : 00000000; +5e1f : 00000000; +5e20 : 00000000; +5e21 : 00000000; +5e22 : 00000000; +5e23 : 00000000; +5e24 : 00000000; +5e25 : 00000000; +5e26 : 00000000; +5e27 : 00000000; +5e28 : 00000000; +5e29 : 00000000; +5e2a : 00000000; +5e2b : 00000000; +5e2c : 00000000; +5e2d : 00000000; +5e2e : 00000000; +5e2f : 00000000; +5e30 : 00000000; +5e31 : 00000000; +5e32 : 00000000; +5e33 : 00000000; +5e34 : 00000000; +5e35 : 00000000; +5e36 : 00000000; +5e37 : 00000000; +5e38 : 00000000; +5e39 : 00000000; +5e3a : 00000000; +5e3b : 00000000; +5e3c : 00000000; +5e3d : 00000000; +5e3e : 00000000; +5e3f : 00000000; +5e40 : 00000000; +5e41 : 00000000; +5e42 : 00000000; +5e43 : 00000000; +5e44 : 00000000; +5e45 : 00000000; +5e46 : 00000000; +5e47 : 00000000; +5e48 : 00000000; +5e49 : 00000000; +5e4a : 00000000; +5e4b : 00000000; +5e4c : 00000000; +5e4d : 00000000; +5e4e : 00000000; +5e4f : 00000000; +5e50 : 00000000; +5e51 : 00000000; +5e52 : 00000000; +5e53 : 00000000; +5e54 : 00000000; +5e55 : 00000000; +5e56 : 00000000; +5e57 : 00000000; +5e58 : 00000000; +5e59 : 00000000; +5e5a : 00000000; +5e5b : 00000000; +5e5c : 00000000; +5e5d : 00000000; +5e5e : 00000000; +5e5f : 00000000; +5e60 : 00000000; +5e61 : 00000000; +5e62 : 00000000; +5e63 : 00000000; +5e64 : 00000000; +5e65 : 00000000; +5e66 : 00000000; +5e67 : 00000000; +5e68 : 00000000; +5e69 : 00000000; +5e6a : 00000000; +5e6b : 00000000; +5e6c : 00000000; +5e6d : 00000000; +5e6e : 00000000; +5e6f : 00000000; +5e70 : 00000000; +5e71 : 00000000; +5e72 : 00000000; +5e73 : 00000000; +5e74 : 00000000; +5e75 : 00000000; +5e76 : 00000000; +5e77 : 00000000; +5e78 : 00000000; +5e79 : 00000000; +5e7a : 00000000; +5e7b : 00000000; +5e7c : 00000000; +5e7d : 00000000; +5e7e : 00000000; +5e7f : 00000000; +5e80 : 00000000; +5e81 : 00000000; +5e82 : 00000000; +5e83 : 00000000; +5e84 : 00000000; +5e85 : 00000000; +5e86 : 00000000; +5e87 : 00000000; +5e88 : 00000000; +5e89 : 00000000; +5e8a : 00000000; +5e8b : 00000000; +5e8c : 00000000; +5e8d : 00000000; +5e8e : 00000000; +5e8f : 00000000; +5e90 : 00000000; +5e91 : 00000000; +5e92 : 00000000; +5e93 : 00000000; +5e94 : 00000000; +5e95 : 00000000; +5e96 : 00000000; +5e97 : 00000000; +5e98 : 00000000; +5e99 : 00000000; +5e9a : 00000000; +5e9b : 00000000; +5e9c : 00000000; +5e9d : 00000000; +5e9e : 00000000; +5e9f : 00000000; +5ea0 : 00000000; +5ea1 : 00000000; +5ea2 : 00000000; +5ea3 : 00000000; +5ea4 : 00000000; +5ea5 : 00000000; +5ea6 : 00000000; +5ea7 : 00000000; +5ea8 : 00000000; +5ea9 : 00000000; +5eaa : 00000000; +5eab : 00000000; +5eac : 00000000; +5ead : 00000000; +5eae : 00000000; +5eaf : 00000000; +5eb0 : 00000000; +5eb1 : 00000000; +5eb2 : 00000000; +5eb3 : 00000000; +5eb4 : 00000000; +5eb5 : 00000000; +5eb6 : 00000000; +5eb7 : 00000000; +5eb8 : 00000000; +5eb9 : 00000000; +5eba : 00000000; +5ebb : 00000000; +5ebc : 00000000; +5ebd : 00000000; +5ebe : 00000000; +5ebf : 00000000; +5ec0 : 00000000; +5ec1 : 00000000; +5ec2 : 00000000; +5ec3 : 00000000; +5ec4 : 00000000; +5ec5 : 00000000; +5ec6 : 00000000; +5ec7 : 00000000; +5ec8 : 00000000; +5ec9 : 00000000; +5eca : 00000000; +5ecb : 00000000; +5ecc : 00000000; +5ecd : 00000000; +5ece : 00000000; +5ecf : 00000000; +5ed0 : 00000000; +5ed1 : 00000000; +5ed2 : 00000000; +5ed3 : 00000000; +5ed4 : 00000000; +5ed5 : 00000000; +5ed6 : 00000000; +5ed7 : 00000000; +5ed8 : 00000000; +5ed9 : 00000000; +5eda : 00000000; +5edb : 00000000; +5edc : 00000000; +5edd : 00000000; +5ede : 00000000; +5edf : 00000000; +5ee0 : 00000000; +5ee1 : 00000000; +5ee2 : 00000000; +5ee3 : 00000000; +5ee4 : 00000000; +5ee5 : 00000000; +5ee6 : 00000000; +5ee7 : 00000000; +5ee8 : 00000000; +5ee9 : 00000000; +5eea : 00000000; +5eeb : 00000000; +5eec : 00000000; +5eed : 00000000; +5eee : 00000000; +5eef : 00000000; +5ef0 : 00000000; +5ef1 : 00000000; +5ef2 : 00000000; +5ef3 : 00000000; +5ef4 : 00000000; +5ef5 : 00000000; +5ef6 : 00000000; +5ef7 : 00000000; +5ef8 : 00000000; +5ef9 : 00000000; +5efa : 00000000; +5efb : 00000000; +5efc : 00000000; +5efd : 00000000; +5efe : 00000000; +5eff : 00000000; +5f00 : 00000000; +5f01 : 00000000; +5f02 : 00000000; +5f03 : 00000000; +5f04 : 00000000; +5f05 : 00000000; +5f06 : 00000000; +5f07 : 00000000; +5f08 : 00000000; +5f09 : 00000000; +5f0a : 00000000; +5f0b : 00000000; +5f0c : 00000000; +5f0d : 00000000; +5f0e : 00000000; +5f0f : 00000000; +5f10 : 00000000; +5f11 : 00000000; +5f12 : 00000000; +5f13 : 00000000; +5f14 : 00000000; +5f15 : 00000000; +5f16 : 00000000; +5f17 : 00000000; +5f18 : 00000000; +5f19 : 00000000; +5f1a : 00000000; +5f1b : 00000000; +5f1c : 00000000; +5f1d : 00000000; +5f1e : 00000000; +5f1f : 00000000; +5f20 : 00000000; +5f21 : 00000000; +5f22 : 00000000; +5f23 : 00000000; +5f24 : 00000000; +5f25 : 00000000; +5f26 : 00000000; +5f27 : 00000000; +5f28 : 00000000; +5f29 : 00000000; +5f2a : 00000000; +5f2b : 00000000; +5f2c : 00000000; +5f2d : 00000000; +5f2e : 00000000; +5f2f : 00000000; +5f30 : 00000000; +5f31 : 00000000; +5f32 : 00000000; +5f33 : 00000000; +5f34 : 00000000; +5f35 : 00000000; +5f36 : 00000000; +5f37 : 00000000; +5f38 : 00000000; +5f39 : 00000000; +5f3a : 00000000; +5f3b : 00000000; +5f3c : 00000000; +5f3d : 00000000; +5f3e : 00000000; +5f3f : 00000000; +5f40 : 00000000; +5f41 : 00000000; +5f42 : 00000000; +5f43 : 00000000; +5f44 : 00000000; +5f45 : 00000000; +5f46 : 00000000; +5f47 : 00000000; +5f48 : 00000000; +5f49 : 00000000; +5f4a : 00000000; +5f4b : 00000000; +5f4c : 00000000; +5f4d : 00000000; +5f4e : 00000000; +5f4f : 00000000; +5f50 : 00000000; +5f51 : 00000000; +5f52 : 00000000; +5f53 : 00000000; +5f54 : 00000000; +5f55 : 00000000; +5f56 : 00000000; +5f57 : 00000000; +5f58 : 00000000; +5f59 : 00000000; +5f5a : 00000000; +5f5b : 00000000; +5f5c : 00000000; +5f5d : 00000000; +5f5e : 00000000; +5f5f : 00000000; +5f60 : 00000000; +5f61 : 00000000; +5f62 : 00000000; +5f63 : 00000000; +5f64 : 00000000; +5f65 : 00000000; +5f66 : 00000000; +5f67 : 00000000; +5f68 : 00000000; +5f69 : 00000000; +5f6a : 00000000; +5f6b : 00000000; +5f6c : 00000000; +5f6d : 00000000; +5f6e : 00000000; +5f6f : 00000000; +5f70 : 00000000; +5f71 : 00000000; +5f72 : 00000000; +5f73 : 00000000; +5f74 : 00000000; +5f75 : 00000000; +5f76 : 00000000; +5f77 : 00000000; +5f78 : 00000000; +5f79 : 00000000; +5f7a : 00000000; +5f7b : 00000000; +5f7c : 00000000; +5f7d : 00000000; +5f7e : 00000000; +5f7f : 00000000; +5f80 : 00000000; +5f81 : 00000000; +5f82 : 00000000; +5f83 : 00000000; +5f84 : 00000000; +5f85 : 00000000; +5f86 : 00000000; +5f87 : 00000000; +5f88 : 00000000; +5f89 : 00000000; +5f8a : 00000000; +5f8b : 00000000; +5f8c : 00000000; +5f8d : 00000000; +5f8e : 00000000; +5f8f : 00000000; +5f90 : 00000000; +5f91 : 00000000; +5f92 : 00000000; +5f93 : 00000000; +5f94 : 00000000; +5f95 : 00000000; +5f96 : 00000000; +5f97 : 00000000; +5f98 : 00000000; +5f99 : 00000000; +5f9a : 00000000; +5f9b : 00000000; +5f9c : 00000000; +5f9d : 00000000; +5f9e : 00000000; +5f9f : 00000000; +5fa0 : 00000000; +5fa1 : 00000000; +5fa2 : 00000000; +5fa3 : 00000000; +5fa4 : 00000000; +5fa5 : 00000000; +5fa6 : 00000000; +5fa7 : 00000000; +5fa8 : 00000000; +5fa9 : 00000000; +5faa : 00000000; +5fab : 00000000; +5fac : 00000000; +5fad : 00000000; +5fae : 00000000; +5faf : 00000000; +5fb0 : 00000000; +5fb1 : 00000000; +5fb2 : 00000000; +5fb3 : 00000000; +5fb4 : 00000000; +5fb5 : 00000000; +5fb6 : 00000000; +5fb7 : 00000000; +5fb8 : 00000000; +5fb9 : 00000000; +5fba : 00000000; +5fbb : 00000000; +5fbc : 00000000; +5fbd : 00000000; +5fbe : 00000000; +5fbf : 00000000; +5fc0 : 00000000; +5fc1 : 00000000; +5fc2 : 00000000; +5fc3 : 00000000; +5fc4 : 00000000; +5fc5 : 00000000; +5fc6 : 00000000; +5fc7 : 00000000; +5fc8 : 00000000; +5fc9 : 00000000; +5fca : 00000000; +5fcb : 00000000; +5fcc : 00000000; +5fcd : 00000000; +5fce : 00000000; +5fcf : 00000000; +5fd0 : 00000000; +5fd1 : 00000000; +5fd2 : 00000000; +5fd3 : 00000000; +5fd4 : 00000000; +5fd5 : 00000000; +5fd6 : 00000000; +5fd7 : 00000000; +5fd8 : 00000000; +5fd9 : 00000000; +5fda : 00000000; +5fdb : 00000000; +5fdc : 00000000; +5fdd : 00000000; +5fde : 00000000; +5fdf : 00000000; +5fe0 : 00000000; +5fe1 : 00000000; +5fe2 : 00000000; +5fe3 : 00000000; +5fe4 : 00000000; +5fe5 : 00000000; +5fe6 : 00000000; +5fe7 : 00000000; +5fe8 : 00000000; +5fe9 : 00000000; +5fea : 00000000; +5feb : 00000000; +5fec : 00000000; +5fed : 00000000; +5fee : 00000000; +5fef : 00000000; +5ff0 : 00000000; +5ff1 : 00000000; +5ff2 : 00000000; +5ff3 : 00000000; +5ff4 : 00000000; +5ff5 : 00000000; +5ff6 : 00000000; +5ff7 : 00000000; +5ff8 : 00000000; +5ff9 : 00000000; +5ffa : 00000000; +5ffb : 00000000; +5ffc : 00000000; +5ffd : 00000000; +5ffe : 00000000; +5fff : 00000000; +6000 : 00000000; +6001 : 00000000; +6002 : 00000000; +6003 : 00000000; +6004 : 00000000; +6005 : 00000000; +6006 : 00000000; +6007 : 00000000; +6008 : 00000000; +6009 : 00000000; +600a : 00000000; +600b : 00000000; +600c : 00000000; +600d : 00000000; +600e : 00000000; +600f : 00000000; +6010 : 00000000; +6011 : 00000000; +6012 : 00000000; +6013 : 00000000; +6014 : 00000000; +6015 : 00000000; +6016 : 00000000; +6017 : 00000000; +6018 : 00000000; +6019 : 00000000; +601a : 00000000; +601b : 00000000; +601c : 00000000; +601d : 00000000; +601e : 00000000; +601f : 00000000; +6020 : 00000000; +6021 : 00000000; +6022 : 00000000; +6023 : 00000000; +6024 : 00000000; +6025 : 00000000; +6026 : 00000000; +6027 : 00000000; +6028 : 00000000; +6029 : 00000000; +602a : 00000000; +602b : 00000000; +602c : 00000000; +602d : 00000000; +602e : 00000000; +602f : 00000000; +6030 : 00000000; +6031 : 00000000; +6032 : 00000000; +6033 : 00000000; +6034 : 00000000; +6035 : 00000000; +6036 : 00000000; +6037 : 00000000; +6038 : 00000000; +6039 : 00000000; +603a : 00000000; +603b : 00000000; +603c : 00000000; +603d : 00000000; +603e : 00000000; +603f : 00000000; +6040 : 00000000; +6041 : 00000000; +6042 : 00000000; +6043 : 00000000; +6044 : 00000000; +6045 : 00000000; +6046 : 00000000; +6047 : 00000000; +6048 : 00000000; +6049 : 00000000; +604a : 00000000; +604b : 00000000; +604c : 00000000; +604d : 00000000; +604e : 00000000; +604f : 00000000; +6050 : 00000000; +6051 : 00000000; +6052 : 00000000; +6053 : 00000000; +6054 : 00000000; +6055 : 00000000; +6056 : 00000000; +6057 : 00000000; +6058 : 00000000; +6059 : 00000000; +605a : 00000000; +605b : 00000000; +605c : 00000000; +605d : 00000000; +605e : 00000000; +605f : 00000000; +6060 : 00000000; +6061 : 00000000; +6062 : 00000000; +6063 : 00000000; +6064 : 00000000; +6065 : 00000000; +6066 : 00000000; +6067 : 00000000; +6068 : 00000000; +6069 : 00000000; +606a : 00000000; +606b : 00000000; +606c : 00000000; +606d : 00000000; +606e : 00000000; +606f : 00000000; +6070 : 00000000; +6071 : 00000000; +6072 : 00000000; +6073 : 00000000; +6074 : 00000000; +6075 : 00000000; +6076 : 00000000; +6077 : 00000000; +6078 : 00000000; +6079 : 00000000; +607a : 00000000; +607b : 00000000; +607c : 00000000; +607d : 00000000; +607e : 00000000; +607f : 00000000; +6080 : 00000000; +6081 : 00000000; +6082 : 00000000; +6083 : 00000000; +6084 : 00000000; +6085 : 00000000; +6086 : 00000000; +6087 : 00000000; +6088 : 00000000; +6089 : 00000000; +608a : 00000000; +608b : 00000000; +608c : 00000000; +608d : 00000000; +608e : 00000000; +608f : 00000000; +6090 : 00000000; +6091 : 00000000; +6092 : 00000000; +6093 : 00000000; +6094 : 00000000; +6095 : 00000000; +6096 : 00000000; +6097 : 00000000; +6098 : 00000000; +6099 : 00000000; +609a : 00000000; +609b : 00000000; +609c : 00000000; +609d : 00000000; +609e : 00000000; +609f : 00000000; +60a0 : 00000000; +60a1 : 00000000; +60a2 : 00000000; +60a3 : 00000000; +60a4 : 00000000; +60a5 : 00000000; +60a6 : 00000000; +60a7 : 00000000; +60a8 : 00000000; +60a9 : 00000000; +60aa : 00000000; +60ab : 00000000; +60ac : 00000000; +60ad : 00000000; +60ae : 00000000; +60af : 00000000; +60b0 : 00000000; +60b1 : 00000000; +60b2 : 00000000; +60b3 : 00000000; +60b4 : 00000000; +60b5 : 00000000; +60b6 : 00000000; +60b7 : 00000000; +60b8 : 00000000; +60b9 : 00000000; +60ba : 00000000; +60bb : 00000000; +60bc : 00000000; +60bd : 00000000; +60be : 00000000; +60bf : 00000000; +60c0 : 00000000; +60c1 : 00000000; +60c2 : 00000000; +60c3 : 00000000; +60c4 : 00000000; +60c5 : 00000000; +60c6 : 00000000; +60c7 : 00000000; +60c8 : 00000000; +60c9 : 00000000; +60ca : 00000000; +60cb : 00000000; +60cc : 00000000; +60cd : 00000000; +60ce : 00000000; +60cf : 00000000; +60d0 : 00000000; +60d1 : 00000000; +60d2 : 00000000; +60d3 : 00000000; +60d4 : 00000000; +60d5 : 00000000; +60d6 : 00000000; +60d7 : 00000000; +60d8 : 00000000; +60d9 : 00000000; +60da : 00000000; +60db : 00000000; +60dc : 00000000; +60dd : 00000000; +60de : 00000000; +60df : 00000000; +60e0 : 00000000; +60e1 : 00000000; +60e2 : 00000000; +60e3 : 00000000; +60e4 : 00000000; +60e5 : 00000000; +60e6 : 00000000; +60e7 : 00000000; +60e8 : 00000000; +60e9 : 00000000; +60ea : 00000000; +60eb : 00000000; +60ec : 00000000; +60ed : 00000000; +60ee : 00000000; +60ef : 00000000; +60f0 : 00000000; +60f1 : 00000000; +60f2 : 00000000; +60f3 : 00000000; +60f4 : 00000000; +60f5 : 00000000; +60f6 : 00000000; +60f7 : 00000000; +60f8 : 00000000; +60f9 : 00000000; +60fa : 00000000; +60fb : 00000000; +60fc : 00000000; +60fd : 00000000; +60fe : 00000000; +60ff : 00000000; +6100 : 00000000; +6101 : 00000000; +6102 : 00000000; +6103 : 00000000; +6104 : 00000000; +6105 : 00000000; +6106 : 00000000; +6107 : 00000000; +6108 : 00000000; +6109 : 00000000; +610a : 00000000; +610b : 00000000; +610c : 00000000; +610d : 00000000; +610e : 00000000; +610f : 00000000; +6110 : 00000000; +6111 : 00000000; +6112 : 00000000; +6113 : 00000000; +6114 : 00000000; +6115 : 00000000; +6116 : 00000000; +6117 : 00000000; +6118 : 00000000; +6119 : 00000000; +611a : 00000000; +611b : 00000000; +611c : 00000000; +611d : 00000000; +611e : 00000000; +611f : 00000000; +6120 : 00000000; +6121 : 00000000; +6122 : 00000000; +6123 : 00000000; +6124 : 00000000; +6125 : 00000000; +6126 : 00000000; +6127 : 00000000; +6128 : 00000000; +6129 : 00000000; +612a : 00000000; +612b : 00000000; +612c : 00000000; +612d : 00000000; +612e : 00000000; +612f : 00000000; +6130 : 00000000; +6131 : 00000000; +6132 : 00000000; +6133 : 00000000; +6134 : 00000000; +6135 : 00000000; +6136 : 00000000; +6137 : 00000000; +6138 : 00000000; +6139 : 00000000; +613a : 00000000; +613b : 00000000; +613c : 00000000; +613d : 00000000; +613e : 00000000; +613f : 00000000; +6140 : 00000000; +6141 : 00000000; +6142 : 00000000; +6143 : 00000000; +6144 : 00000000; +6145 : 00000000; +6146 : 00000000; +6147 : 00000000; +6148 : 00000000; +6149 : 00000000; +614a : 00000000; +614b : 00000000; +614c : 00000000; +614d : 00000000; +614e : 00000000; +614f : 00000000; +6150 : 00000000; +6151 : 00000000; +6152 : 00000000; +6153 : 00000000; +6154 : 00000000; +6155 : 00000000; +6156 : 00000000; +6157 : 00000000; +6158 : 00000000; +6159 : 00000000; +615a : 00000000; +615b : 00000000; +615c : 00000000; +615d : 00000000; +615e : 00000000; +615f : 00000000; +6160 : 00000000; +6161 : 00000000; +6162 : 00000000; +6163 : 00000000; +6164 : 00000000; +6165 : 00000000; +6166 : 00000000; +6167 : 00000000; +6168 : 00000000; +6169 : 00000000; +616a : 00000000; +616b : 00000000; +616c : 00000000; +616d : 00000000; +616e : 00000000; +616f : 00000000; +6170 : 00000000; +6171 : 00000000; +6172 : 00000000; +6173 : 00000000; +6174 : 00000000; +6175 : 00000000; +6176 : 00000000; +6177 : 00000000; +6178 : 00000000; +6179 : 00000000; +617a : 00000000; +617b : 00000000; +617c : 00000000; +617d : 00000000; +617e : 00000000; +617f : 00000000; +6180 : 00000000; +6181 : 00000000; +6182 : 00000000; +6183 : 00000000; +6184 : 00000000; +6185 : 00000000; +6186 : 00000000; +6187 : 00000000; +6188 : 00000000; +6189 : 00000000; +618a : 00000000; +618b : 00000000; +618c : 00000000; +618d : 00000000; +618e : 00000000; +618f : 00000000; +6190 : 00000000; +6191 : 00000000; +6192 : 00000000; +6193 : 00000000; +6194 : 00000000; +6195 : 00000000; +6196 : 00000000; +6197 : 00000000; +6198 : 00000000; +6199 : 00000000; +619a : 00000000; +619b : 00000000; +619c : 00000000; +619d : 00000000; +619e : 00000000; +619f : 00000000; +61a0 : 00000000; +61a1 : 00000000; +61a2 : 00000000; +61a3 : 00000000; +61a4 : 00000000; +61a5 : 00000000; +61a6 : 00000000; +61a7 : 00000000; +61a8 : 00000000; +61a9 : 00000000; +61aa : 00000000; +61ab : 00000000; +61ac : 00000000; +61ad : 00000000; +61ae : 00000000; +61af : 00000000; +61b0 : 00000000; +61b1 : 00000000; +61b2 : 00000000; +61b3 : 00000000; +61b4 : 00000000; +61b5 : 00000000; +61b6 : 00000000; +61b7 : 00000000; +61b8 : 00000000; +61b9 : 00000000; +61ba : 00000000; +61bb : 00000000; +61bc : 00000000; +61bd : 00000000; +61be : 00000000; +61bf : 00000000; +61c0 : 00000000; +61c1 : 00000000; +61c2 : 00000000; +61c3 : 00000000; +61c4 : 00000000; +61c5 : 00000000; +61c6 : 00000000; +61c7 : 00000000; +61c8 : 00000000; +61c9 : 00000000; +61ca : 00000000; +61cb : 00000000; +61cc : 00000000; +61cd : 00000000; +61ce : 00000000; +61cf : 00000000; +61d0 : 00000000; +61d1 : 00000000; +61d2 : 00000000; +61d3 : 00000000; +61d4 : 00000000; +61d5 : 00000000; +61d6 : 00000000; +61d7 : 00000000; +61d8 : 00000000; +61d9 : 00000000; +61da : 00000000; +61db : 00000000; +61dc : 00000000; +61dd : 00000000; +61de : 00000000; +61df : 00000000; +61e0 : 00000000; +61e1 : 00000000; +61e2 : 00000000; +61e3 : 00000000; +61e4 : 00000000; +61e5 : 00000000; +61e6 : 00000000; +61e7 : 00000000; +61e8 : 00000000; +61e9 : 00000000; +61ea : 00000000; +61eb : 00000000; +61ec : 00000000; +61ed : 00000000; +61ee : 00000000; +61ef : 00000000; +61f0 : 00000000; +61f1 : 00000000; +61f2 : 00000000; +61f3 : 00000000; +61f4 : 00000000; +61f5 : 00000000; +61f6 : 00000000; +61f7 : 00000000; +61f8 : 00000000; +61f9 : 00000000; +61fa : 00000000; +61fb : 00000000; +61fc : 00000000; +61fd : 00000000; +61fe : 00000000; +61ff : 00000000; +6200 : 00000000; +6201 : 00000000; +6202 : 00000000; +6203 : 00000000; +6204 : 00000000; +6205 : 00000000; +6206 : 00000000; +6207 : 00000000; +6208 : 00000000; +6209 : 00000000; +620a : 00000000; +620b : 00000000; +620c : 00000000; +620d : 00000000; +620e : 00000000; +620f : 00000000; +6210 : 00000000; +6211 : 00000000; +6212 : 00000000; +6213 : 00000000; +6214 : 00000000; +6215 : 00000000; +6216 : 00000000; +6217 : 00000000; +6218 : 00000000; +6219 : 00000000; +621a : 00000000; +621b : 00000000; +621c : 00000000; +621d : 00000000; +621e : 00000000; +621f : 00000000; +6220 : 00000000; +6221 : 00000000; +6222 : 00000000; +6223 : 00000000; +6224 : 00000000; +6225 : 00000000; +6226 : 00000000; +6227 : 00000000; +6228 : 00000000; +6229 : 00000000; +622a : 00000000; +622b : 00000000; +622c : 00000000; +622d : 00000000; +622e : 00000000; +622f : 00000000; +6230 : 00000000; +6231 : 00000000; +6232 : 00000000; +6233 : 00000000; +6234 : 00000000; +6235 : 00000000; +6236 : 00000000; +6237 : 00000000; +6238 : 00000000; +6239 : 00000000; +623a : 00000000; +623b : 00000000; +623c : 00000000; +623d : 00000000; +623e : 00000000; +623f : 00000000; +6240 : 00000000; +6241 : 00000000; +6242 : 00000000; +6243 : 00000000; +6244 : 00000000; +6245 : 00000000; +6246 : 00000000; +6247 : 00000000; +6248 : 00000000; +6249 : 00000000; +624a : 00000000; +624b : 00000000; +624c : 00000000; +624d : 00000000; +624e : 00000000; +624f : 00000000; +6250 : 00000000; +6251 : 00000000; +6252 : 00000000; +6253 : 00000000; +6254 : 00000000; +6255 : 00000000; +6256 : 00000000; +6257 : 00000000; +6258 : 00000000; +6259 : 00000000; +625a : 00000000; +625b : 00000000; +625c : 00000000; +625d : 00000000; +625e : 00000000; +625f : 00000000; +6260 : 00000000; +6261 : 00000000; +6262 : 00000000; +6263 : 00000000; +6264 : 00000000; +6265 : 00000000; +6266 : 00000000; +6267 : 00000000; +6268 : 00000000; +6269 : 00000000; +626a : 00000000; +626b : 00000000; +626c : 00000000; +626d : 00000000; +626e : 00000000; +626f : 00000000; +6270 : 00000000; +6271 : 00000000; +6272 : 00000000; +6273 : 00000000; +6274 : 00000000; +6275 : 00000000; +6276 : 00000000; +6277 : 00000000; +6278 : 00000000; +6279 : 00000000; +627a : 00000000; +627b : 00000000; +627c : 00000000; +627d : 00000000; +627e : 00000000; +627f : 00000000; +6280 : 00000000; +6281 : 00000000; +6282 : 00000000; +6283 : 00000000; +6284 : 00000000; +6285 : 00000000; +6286 : 00000000; +6287 : 00000000; +6288 : 00000000; +6289 : 00000000; +628a : 00000000; +628b : 00000000; +628c : 00000000; +628d : 00000000; +628e : 00000000; +628f : 00000000; +6290 : 00000000; +6291 : 00000000; +6292 : 00000000; +6293 : 00000000; +6294 : 00000000; +6295 : 00000000; +6296 : 00000000; +6297 : 00000000; +6298 : 00000000; +6299 : 00000000; +629a : 00000000; +629b : 00000000; +629c : 00000000; +629d : 00000000; +629e : 00000000; +629f : 00000000; +62a0 : 00000000; +62a1 : 00000000; +62a2 : 00000000; +62a3 : 00000000; +62a4 : 00000000; +62a5 : 00000000; +62a6 : 00000000; +62a7 : 00000000; +62a8 : 00000000; +62a9 : 00000000; +62aa : 00000000; +62ab : 00000000; +62ac : 00000000; +62ad : 00000000; +62ae : 00000000; +62af : 00000000; +62b0 : 00000000; +62b1 : 00000000; +62b2 : 00000000; +62b3 : 00000000; +62b4 : 00000000; +62b5 : 00000000; +62b6 : 00000000; +62b7 : 00000000; +62b8 : 00000000; +62b9 : 00000000; +62ba : 00000000; +62bb : 00000000; +62bc : 00000000; +62bd : 00000000; +62be : 00000000; +62bf : 00000000; +62c0 : 00000000; +62c1 : 00000000; +62c2 : 00000000; +62c3 : 00000000; +62c4 : 00000000; +62c5 : 00000000; +62c6 : 00000000; +62c7 : 00000000; +62c8 : 00000000; +62c9 : 00000000; +62ca : 00000000; +62cb : 00000000; +62cc : 00000000; +62cd : 00000000; +62ce : 00000000; +62cf : 00000000; +62d0 : 00000000; +62d1 : 00000000; +62d2 : 00000000; +62d3 : 00000000; +62d4 : 00000000; +62d5 : 00000000; +62d6 : 00000000; +62d7 : 00000000; +62d8 : 00000000; +62d9 : 00000000; +62da : 00000000; +62db : 00000000; +62dc : 00000000; +62dd : 00000000; +62de : 00000000; +62df : 00000000; +62e0 : 00000000; +62e1 : 00000000; +62e2 : 00000000; +62e3 : 00000000; +62e4 : 00000000; +62e5 : 00000000; +62e6 : 00000000; +62e7 : 00000000; +62e8 : 00000000; +62e9 : 00000000; +62ea : 00000000; +62eb : 00000000; +62ec : 00000000; +62ed : 00000000; +62ee : 00000000; +62ef : 00000000; +62f0 : 00000000; +62f1 : 00000000; +62f2 : 00000000; +62f3 : 00000000; +62f4 : 00000000; +62f5 : 00000000; +62f6 : 00000000; +62f7 : 00000000; +62f8 : 00000000; +62f9 : 00000000; +62fa : 00000000; +62fb : 00000000; +62fc : 00000000; +62fd : 00000000; +62fe : 00000000; +62ff : 00000000; +6300 : 00000000; +6301 : 00000000; +6302 : 00000000; +6303 : 00000000; +6304 : 00000000; +6305 : 00000000; +6306 : 00000000; +6307 : 00000000; +6308 : 00000000; +6309 : 00000000; +630a : 00000000; +630b : 00000000; +630c : 00000000; +630d : 00000000; +630e : 00000000; +630f : 00000000; +6310 : 00000000; +6311 : 00000000; +6312 : 00000000; +6313 : 00000000; +6314 : 00000000; +6315 : 00000000; +6316 : 00000000; +6317 : 00000000; +6318 : 00000000; +6319 : 00000000; +631a : 00000000; +631b : 00000000; +631c : 00000000; +631d : 00000000; +631e : 00000000; +631f : 00000000; +6320 : 00000000; +6321 : 00000000; +6322 : 00000000; +6323 : 00000000; +6324 : 00000000; +6325 : 00000000; +6326 : 00000000; +6327 : 00000000; +6328 : 00000000; +6329 : 00000000; +632a : 00000000; +632b : 00000000; +632c : 00000000; +632d : 00000000; +632e : 00000000; +632f : 00000000; +6330 : 00000000; +6331 : 00000000; +6332 : 00000000; +6333 : 00000000; +6334 : 00000000; +6335 : 00000000; +6336 : 00000000; +6337 : 00000000; +6338 : 00000000; +6339 : 00000000; +633a : 00000000; +633b : 00000000; +633c : 00000000; +633d : 00000000; +633e : 00000000; +633f : 00000000; +6340 : 00000000; +6341 : 00000000; +6342 : 00000000; +6343 : 00000000; +6344 : 00000000; +6345 : 00000000; +6346 : 00000000; +6347 : 00000000; +6348 : 00000000; +6349 : 00000000; +634a : 00000000; +634b : 00000000; +634c : 00000000; +634d : 00000000; +634e : 00000000; +634f : 00000000; +6350 : 00000000; +6351 : 00000000; +6352 : 00000000; +6353 : 00000000; +6354 : 00000000; +6355 : 00000000; +6356 : 00000000; +6357 : 00000000; +6358 : 00000000; +6359 : 00000000; +635a : 00000000; +635b : 00000000; +635c : 00000000; +635d : 00000000; +635e : 00000000; +635f : 00000000; +6360 : 00000000; +6361 : 00000000; +6362 : 00000000; +6363 : 00000000; +6364 : 00000000; +6365 : 00000000; +6366 : 00000000; +6367 : 00000000; +6368 : 00000000; +6369 : 00000000; +636a : 00000000; +636b : 00000000; +636c : 00000000; +636d : 00000000; +636e : 00000000; +636f : 00000000; +6370 : 00000000; +6371 : 00000000; +6372 : 00000000; +6373 : 00000000; +6374 : 00000000; +6375 : 00000000; +6376 : 00000000; +6377 : 00000000; +6378 : 00000000; +6379 : 00000000; +637a : 00000000; +637b : 00000000; +637c : 00000000; +637d : 00000000; +637e : 00000000; +637f : 00000000; +6380 : 00000000; +6381 : 00000000; +6382 : 00000000; +6383 : 00000000; +6384 : 00000000; +6385 : 00000000; +6386 : 00000000; +6387 : 00000000; +6388 : 00000000; +6389 : 00000000; +638a : 00000000; +638b : 00000000; +638c : 00000000; +638d : 00000000; +638e : 00000000; +638f : 00000000; +6390 : 00000000; +6391 : 00000000; +6392 : 00000000; +6393 : 00000000; +6394 : 00000000; +6395 : 00000000; +6396 : 00000000; +6397 : 00000000; +6398 : 00000000; +6399 : 00000000; +639a : 00000000; +639b : 00000000; +639c : 00000000; +639d : 00000000; +639e : 00000000; +639f : 00000000; +63a0 : 00000000; +63a1 : 00000000; +63a2 : 00000000; +63a3 : 00000000; +63a4 : 00000000; +63a5 : 00000000; +63a6 : 00000000; +63a7 : 00000000; +63a8 : 00000000; +63a9 : 00000000; +63aa : 00000000; +63ab : 00000000; +63ac : 00000000; +63ad : 00000000; +63ae : 00000000; +63af : 00000000; +63b0 : 00000000; +63b1 : 00000000; +63b2 : 00000000; +63b3 : 00000000; +63b4 : 00000000; +63b5 : 00000000; +63b6 : 00000000; +63b7 : 00000000; +63b8 : 00000000; +63b9 : 00000000; +63ba : 00000000; +63bb : 00000000; +63bc : 00000000; +63bd : 00000000; +63be : 00000000; +63bf : 00000000; +63c0 : 00000000; +63c1 : 00000000; +63c2 : 00000000; +63c3 : 00000000; +63c4 : 00000000; +63c5 : 00000000; +63c6 : 00000000; +63c7 : 00000000; +63c8 : 00000000; +63c9 : 00000000; +63ca : 00000000; +63cb : 00000000; +63cc : 00000000; +63cd : 00000000; +63ce : 00000000; +63cf : 00000000; +63d0 : 00000000; +63d1 : 00000000; +63d2 : 00000000; +63d3 : 00000000; +63d4 : 00000000; +63d5 : 00000000; +63d6 : 00000000; +63d7 : 00000000; +63d8 : 00000000; +63d9 : 00000000; +63da : 00000000; +63db : 00000000; +63dc : 00000000; +63dd : 00000000; +63de : 00000000; +63df : 00000000; +63e0 : 00000000; +63e1 : 00000000; +63e2 : 00000000; +63e3 : 00000000; +63e4 : 00000000; +63e5 : 00000000; +63e6 : 00000000; +63e7 : 00000000; +63e8 : 00000000; +63e9 : 00000000; +63ea : 00000000; +63eb : 00000000; +63ec : 00000000; +63ed : 00000000; +63ee : 00000000; +63ef : 00000000; +63f0 : 00000000; +63f1 : 00000000; +63f2 : 00000000; +63f3 : 00000000; +63f4 : 00000000; +63f5 : 00000000; +63f6 : 00000000; +63f7 : 00000000; +63f8 : 00000000; +63f9 : 00000000; +63fa : 00000000; +63fb : 00000000; +63fc : 00000000; +63fd : 00000000; +63fe : 00000000; +63ff : 00000000; +6400 : 00000000; +6401 : 00000000; +6402 : 00000000; +6403 : 00000000; +6404 : 00000000; +6405 : 00000000; +6406 : 00000000; +6407 : 00000000; +6408 : 00000000; +6409 : 00000000; +640a : 00000000; +640b : 00000000; +640c : 00000000; +640d : 00000000; +640e : 00000000; +640f : 00000000; +6410 : 00000000; +6411 : 00000000; +6412 : 00000000; +6413 : 00000000; +6414 : 00000000; +6415 : 00000000; +6416 : 00000000; +6417 : 00000000; +6418 : 00000000; +6419 : 00000000; +641a : 00000000; +641b : 00000000; +641c : 00000000; +641d : 00000000; +641e : 00000000; +641f : 00000000; +6420 : 00000000; +6421 : 00000000; +6422 : 00000000; +6423 : 00000000; +6424 : 00000000; +6425 : 00000000; +6426 : 00000000; +6427 : 00000000; +6428 : 00000000; +6429 : 00000000; +642a : 00000000; +642b : 00000000; +642c : 00000000; +642d : 00000000; +642e : 00000000; +642f : 00000000; +6430 : 00000000; +6431 : 00000000; +6432 : 00000000; +6433 : 00000000; +6434 : 00000000; +6435 : 00000000; +6436 : 00000000; +6437 : 00000000; +6438 : 00000000; +6439 : 00000000; +643a : 00000000; +643b : 00000000; +643c : 00000000; +643d : 00000000; +643e : 00000000; +643f : 00000000; +6440 : 00000000; +6441 : 00000000; +6442 : 00000000; +6443 : 00000000; +6444 : 00000000; +6445 : 00000000; +6446 : 00000000; +6447 : 00000000; +6448 : 00000000; +6449 : 00000000; +644a : 00000000; +644b : 00000000; +644c : 00000000; +644d : 00000000; +644e : 00000000; +644f : 00000000; +6450 : 00000000; +6451 : 00000000; +6452 : 00000000; +6453 : 00000000; +6454 : 00000000; +6455 : 00000000; +6456 : 00000000; +6457 : 00000000; +6458 : 00000000; +6459 : 00000000; +645a : 00000000; +645b : 00000000; +645c : 00000000; +645d : 00000000; +645e : 00000000; +645f : 00000000; +6460 : 00000000; +6461 : 00000000; +6462 : 00000000; +6463 : 00000000; +6464 : 00000000; +6465 : 00000000; +6466 : 00000000; +6467 : 00000000; +6468 : 00000000; +6469 : 00000000; +646a : 00000000; +646b : 00000000; +646c : 00000000; +646d : 00000000; +646e : 00000000; +646f : 00000000; +6470 : 00000000; +6471 : 00000000; +6472 : 00000000; +6473 : 00000000; +6474 : 00000000; +6475 : 00000000; +6476 : 00000000; +6477 : 00000000; +6478 : 00000000; +6479 : 00000000; +647a : 00000000; +647b : 00000000; +647c : 00000000; +647d : 00000000; +647e : 00000000; +647f : 00000000; +6480 : 00000000; +6481 : 00000000; +6482 : 00000000; +6483 : 00000000; +6484 : 00000000; +6485 : 00000000; +6486 : 00000000; +6487 : 00000000; +6488 : 00000000; +6489 : 00000000; +648a : 00000000; +648b : 00000000; +648c : 00000000; +648d : 00000000; +648e : 00000000; +648f : 00000000; +6490 : 00000000; +6491 : 00000000; +6492 : 00000000; +6493 : 00000000; +6494 : 00000000; +6495 : 00000000; +6496 : 00000000; +6497 : 00000000; +6498 : 00000000; +6499 : 00000000; +649a : 00000000; +649b : 00000000; +649c : 00000000; +649d : 00000000; +649e : 00000000; +649f : 00000000; +64a0 : 00000000; +64a1 : 00000000; +64a2 : 00000000; +64a3 : 00000000; +64a4 : 00000000; +64a5 : 00000000; +64a6 : 00000000; +64a7 : 00000000; +64a8 : 00000000; +64a9 : 00000000; +64aa : 00000000; +64ab : 00000000; +64ac : 00000000; +64ad : 00000000; +64ae : 00000000; +64af : 00000000; +64b0 : 00000000; +64b1 : 00000000; +64b2 : 00000000; +64b3 : 00000000; +64b4 : 00000000; +64b5 : 00000000; +64b6 : 00000000; +64b7 : 00000000; +64b8 : 00000000; +64b9 : 00000000; +64ba : 00000000; +64bb : 00000000; +64bc : 00000000; +64bd : 00000000; +64be : 00000000; +64bf : 00000000; +64c0 : 00000000; +64c1 : 00000000; +64c2 : 00000000; +64c3 : 00000000; +64c4 : 00000000; +64c5 : 00000000; +64c6 : 00000000; +64c7 : 00000000; +64c8 : 00000000; +64c9 : 00000000; +64ca : 00000000; +64cb : 00000000; +64cc : 00000000; +64cd : 00000000; +64ce : 00000000; +64cf : 00000000; +64d0 : 00000000; +64d1 : 00000000; +64d2 : 00000000; +64d3 : 00000000; +64d4 : 00000000; +64d5 : 00000000; +64d6 : 00000000; +64d7 : 00000000; +64d8 : 00000000; +64d9 : 00000000; +64da : 00000000; +64db : 00000000; +64dc : 00000000; +64dd : 00000000; +64de : 00000000; +64df : 00000000; +64e0 : 00000000; +64e1 : 00000000; +64e2 : 00000000; +64e3 : 00000000; +64e4 : 00000000; +64e5 : 00000000; +64e6 : 00000000; +64e7 : 00000000; +64e8 : 00000000; +64e9 : 00000000; +64ea : 00000000; +64eb : 00000000; +64ec : 00000000; +64ed : 00000000; +64ee : 00000000; +64ef : 00000000; +64f0 : 00000000; +64f1 : 00000000; +64f2 : 00000000; +64f3 : 00000000; +64f4 : 00000000; +64f5 : 00000000; +64f6 : 00000000; +64f7 : 00000000; +64f8 : 00000000; +64f9 : 00000000; +64fa : 00000000; +64fb : 00000000; +64fc : 00000000; +64fd : 00000000; +64fe : 00000000; +64ff : 00000000; +6500 : 00000000; +6501 : 00000000; +6502 : 00000000; +6503 : 00000000; +6504 : 00000000; +6505 : 00000000; +6506 : 00000000; +6507 : 00000000; +6508 : 00000000; +6509 : 00000000; +650a : 00000000; +650b : 00000000; +650c : 00000000; +650d : 00000000; +650e : 00000000; +650f : 00000000; +6510 : 00000000; +6511 : 00000000; +6512 : 00000000; +6513 : 00000000; +6514 : 00000000; +6515 : 00000000; +6516 : 00000000; +6517 : 00000000; +6518 : 00000000; +6519 : 00000000; +651a : 00000000; +651b : 00000000; +651c : 00000000; +651d : 00000000; +651e : 00000000; +651f : 00000000; +6520 : 00000000; +6521 : 00000000; +6522 : 00000000; +6523 : 00000000; +6524 : 00000000; +6525 : 00000000; +6526 : 00000000; +6527 : 00000000; +6528 : 00000000; +6529 : 00000000; +652a : 00000000; +652b : 00000000; +652c : 00000000; +652d : 00000000; +652e : 00000000; +652f : 00000000; +6530 : 00000000; +6531 : 00000000; +6532 : 00000000; +6533 : 00000000; +6534 : 00000000; +6535 : 00000000; +6536 : 00000000; +6537 : 00000000; +6538 : 00000000; +6539 : 00000000; +653a : 00000000; +653b : 00000000; +653c : 00000000; +653d : 00000000; +653e : 00000000; +653f : 00000000; +6540 : 00000000; +6541 : 00000000; +6542 : 00000000; +6543 : 00000000; +6544 : 00000000; +6545 : 00000000; +6546 : 00000000; +6547 : 00000000; +6548 : 00000000; +6549 : 00000000; +654a : 00000000; +654b : 00000000; +654c : 00000000; +654d : 00000000; +654e : 00000000; +654f : 00000000; +6550 : 00000000; +6551 : 00000000; +6552 : 00000000; +6553 : 00000000; +6554 : 00000000; +6555 : 00000000; +6556 : 00000000; +6557 : 00000000; +6558 : 00000000; +6559 : 00000000; +655a : 00000000; +655b : 00000000; +655c : 00000000; +655d : 00000000; +655e : 00000000; +655f : 00000000; +6560 : 00000000; +6561 : 00000000; +6562 : 00000000; +6563 : 00000000; +6564 : 00000000; +6565 : 00000000; +6566 : 00000000; +6567 : 00000000; +6568 : 00000000; +6569 : 00000000; +656a : 00000000; +656b : 00000000; +656c : 00000000; +656d : 00000000; +656e : 00000000; +656f : 00000000; +6570 : 00000000; +6571 : 00000000; +6572 : 00000000; +6573 : 00000000; +6574 : 00000000; +6575 : 00000000; +6576 : 00000000; +6577 : 00000000; +6578 : 00000000; +6579 : 00000000; +657a : 00000000; +657b : 00000000; +657c : 00000000; +657d : 00000000; +657e : 00000000; +657f : 00000000; +6580 : 00000000; +6581 : 00000000; +6582 : 00000000; +6583 : 00000000; +6584 : 00000000; +6585 : 00000000; +6586 : 00000000; +6587 : 00000000; +6588 : 00000000; +6589 : 00000000; +658a : 00000000; +658b : 00000000; +658c : 00000000; +658d : 00000000; +658e : 00000000; +658f : 00000000; +6590 : 00000000; +6591 : 00000000; +6592 : 00000000; +6593 : 00000000; +6594 : 00000000; +6595 : 00000000; +6596 : 00000000; +6597 : 00000000; +6598 : 00000000; +6599 : 00000000; +659a : 00000000; +659b : 00000000; +659c : 00000000; +659d : 00000000; +659e : 00000000; +659f : 00000000; +65a0 : 00000000; +65a1 : 00000000; +65a2 : 00000000; +65a3 : 00000000; +65a4 : 00000000; +65a5 : 00000000; +65a6 : 00000000; +65a7 : 00000000; +65a8 : 00000000; +65a9 : 00000000; +65aa : 00000000; +65ab : 00000000; +65ac : 00000000; +65ad : 00000000; +65ae : 00000000; +65af : 00000000; +65b0 : 00000000; +65b1 : 00000000; +65b2 : 00000000; +65b3 : 00000000; +65b4 : 00000000; +65b5 : 00000000; +65b6 : 00000000; +65b7 : 00000000; +65b8 : 00000000; +65b9 : 00000000; +65ba : 00000000; +65bb : 00000000; +65bc : 00000000; +65bd : 00000000; +65be : 00000000; +65bf : 00000000; +65c0 : 00000000; +65c1 : 00000000; +65c2 : 00000000; +65c3 : 00000000; +65c4 : 00000000; +65c5 : 00000000; +65c6 : 00000000; +65c7 : 00000000; +65c8 : 00000000; +65c9 : 00000000; +65ca : 00000000; +65cb : 00000000; +65cc : 00000000; +65cd : 00000000; +65ce : 00000000; +65cf : 00000000; +65d0 : 00000000; +65d1 : 00000000; +65d2 : 00000000; +65d3 : 00000000; +65d4 : 00000000; +65d5 : 00000000; +65d6 : 00000000; +65d7 : 00000000; +65d8 : 00000000; +65d9 : 00000000; +65da : 00000000; +65db : 00000000; +65dc : 00000000; +65dd : 00000000; +65de : 00000000; +65df : 00000000; +65e0 : 00000000; +65e1 : 00000000; +65e2 : 00000000; +65e3 : 00000000; +65e4 : 00000000; +65e5 : 00000000; +65e6 : 00000000; +65e7 : 00000000; +65e8 : 00000000; +65e9 : 00000000; +65ea : 00000000; +65eb : 00000000; +65ec : 00000000; +65ed : 00000000; +65ee : 00000000; +65ef : 00000000; +65f0 : 00000000; +65f1 : 00000000; +65f2 : 00000000; +65f3 : 00000000; +65f4 : 00000000; +65f5 : 00000000; +65f6 : 00000000; +65f7 : 00000000; +65f8 : 00000000; +65f9 : 00000000; +65fa : 00000000; +65fb : 00000000; +65fc : 00000000; +65fd : 00000000; +65fe : 00000000; +65ff : 00000000; +6600 : 00000000; +6601 : 00000000; +6602 : 00000000; +6603 : 00000000; +6604 : 00000000; +6605 : 00000000; +6606 : 00000000; +6607 : 00000000; +6608 : 00000000; +6609 : 00000000; +660a : 00000000; +660b : 00000000; +660c : 00000000; +660d : 00000000; +660e : 00000000; +660f : 00000000; +6610 : 00000000; +6611 : 00000000; +6612 : 00000000; +6613 : 00000000; +6614 : 00000000; +6615 : 00000000; +6616 : 00000000; +6617 : 00000000; +6618 : 00000000; +6619 : 00000000; +661a : 00000000; +661b : 00000000; +661c : 00000000; +661d : 00000000; +661e : 00000000; +661f : 00000000; +6620 : 00000000; +6621 : 00000000; +6622 : 00000000; +6623 : 00000000; +6624 : 00000000; +6625 : 00000000; +6626 : 00000000; +6627 : 00000000; +6628 : 00000000; +6629 : 00000000; +662a : 00000000; +662b : 00000000; +662c : 00000000; +662d : 00000000; +662e : 00000000; +662f : 00000000; +6630 : 00000000; +6631 : 00000000; +6632 : 00000000; +6633 : 00000000; +6634 : 00000000; +6635 : 00000000; +6636 : 00000000; +6637 : 00000000; +6638 : 00000000; +6639 : 00000000; +663a : 00000000; +663b : 00000000; +663c : 00000000; +663d : 00000000; +663e : 00000000; +663f : 00000000; +6640 : 00000000; +6641 : 00000000; +6642 : 00000000; +6643 : 00000000; +6644 : 00000000; +6645 : 00000000; +6646 : 00000000; +6647 : 00000000; +6648 : 00000000; +6649 : 00000000; +664a : 00000000; +664b : 00000000; +664c : 00000000; +664d : 00000000; +664e : 00000000; +664f : 00000000; +6650 : 00000000; +6651 : 00000000; +6652 : 00000000; +6653 : 00000000; +6654 : 00000000; +6655 : 00000000; +6656 : 00000000; +6657 : 00000000; +6658 : 00000000; +6659 : 00000000; +665a : 00000000; +665b : 00000000; +665c : 00000000; +665d : 00000000; +665e : 00000000; +665f : 00000000; +6660 : 00000000; +6661 : 00000000; +6662 : 00000000; +6663 : 00000000; +6664 : 00000000; +6665 : 00000000; +6666 : 00000000; +6667 : 00000000; +6668 : 00000000; +6669 : 00000000; +666a : 00000000; +666b : 00000000; +666c : 00000000; +666d : 00000000; +666e : 00000000; +666f : 00000000; +6670 : 00000000; +6671 : 00000000; +6672 : 00000000; +6673 : 00000000; +6674 : 00000000; +6675 : 00000000; +6676 : 00000000; +6677 : 00000000; +6678 : 00000000; +6679 : 00000000; +667a : 00000000; +667b : 00000000; +667c : 00000000; +667d : 00000000; +667e : 00000000; +667f : 00000000; +6680 : 00000000; +6681 : 00000000; +6682 : 00000000; +6683 : 00000000; +6684 : 00000000; +6685 : 00000000; +6686 : 00000000; +6687 : 00000000; +6688 : 00000000; +6689 : 00000000; +668a : 00000000; +668b : 00000000; +668c : 00000000; +668d : 00000000; +668e : 00000000; +668f : 00000000; +6690 : 00000000; +6691 : 00000000; +6692 : 00000000; +6693 : 00000000; +6694 : 00000000; +6695 : 00000000; +6696 : 00000000; +6697 : 00000000; +6698 : 00000000; +6699 : 00000000; +669a : 00000000; +669b : 00000000; +669c : 00000000; +669d : 00000000; +669e : 00000000; +669f : 00000000; +66a0 : 00000000; +66a1 : 00000000; +66a2 : 00000000; +66a3 : 00000000; +66a4 : 00000000; +66a5 : 00000000; +66a6 : 00000000; +66a7 : 00000000; +66a8 : 00000000; +66a9 : 00000000; +66aa : 00000000; +66ab : 00000000; +66ac : 00000000; +66ad : 00000000; +66ae : 00000000; +66af : 00000000; +66b0 : 00000000; +66b1 : 00000000; +66b2 : 00000000; +66b3 : 00000000; +66b4 : 00000000; +66b5 : 00000000; +66b6 : 00000000; +66b7 : 00000000; +66b8 : 00000000; +66b9 : 00000000; +66ba : 00000000; +66bb : 00000000; +66bc : 00000000; +66bd : 00000000; +66be : 00000000; +66bf : 00000000; +66c0 : 00000000; +66c1 : 00000000; +66c2 : 00000000; +66c3 : 00000000; +66c4 : 00000000; +66c5 : 00000000; +66c6 : 00000000; +66c7 : 00000000; +66c8 : 00000000; +66c9 : 00000000; +66ca : 00000000; +66cb : 00000000; +66cc : 00000000; +66cd : 00000000; +66ce : 00000000; +66cf : 00000000; +66d0 : 00000000; +66d1 : 00000000; +66d2 : 00000000; +66d3 : 00000000; +66d4 : 00000000; +66d5 : 00000000; +66d6 : 00000000; +66d7 : 00000000; +66d8 : 00000000; +66d9 : 00000000; +66da : 00000000; +66db : 00000000; +66dc : 00000000; +66dd : 00000000; +66de : 00000000; +66df : 00000000; +66e0 : 00000000; +66e1 : 00000000; +66e2 : 00000000; +66e3 : 00000000; +66e4 : 00000000; +66e5 : 00000000; +66e6 : 00000000; +66e7 : 00000000; +66e8 : 00000000; +66e9 : 00000000; +66ea : 00000000; +66eb : 00000000; +66ec : 00000000; +66ed : 00000000; +66ee : 00000000; +66ef : 00000000; +66f0 : 00000000; +66f1 : 00000000; +66f2 : 00000000; +66f3 : 00000000; +66f4 : 00000000; +66f5 : 00000000; +66f6 : 00000000; +66f7 : 00000000; +66f8 : 00000000; +66f9 : 00000000; +66fa : 00000000; +66fb : 00000000; +66fc : 00000000; +66fd : 00000000; +66fe : 00000000; +66ff : 00000000; +6700 : 00000000; +6701 : 00000000; +6702 : 00000000; +6703 : 00000000; +6704 : 00000000; +6705 : 00000000; +6706 : 00000000; +6707 : 00000000; +6708 : 00000000; +6709 : 00000000; +670a : 00000000; +670b : 00000000; +670c : 00000000; +670d : 00000000; +670e : 00000000; +670f : 00000000; +6710 : 00000000; +6711 : 00000000; +6712 : 00000000; +6713 : 00000000; +6714 : 00000000; +6715 : 00000000; +6716 : 00000000; +6717 : 00000000; +6718 : 00000000; +6719 : 00000000; +671a : 00000000; +671b : 00000000; +671c : 00000000; +671d : 00000000; +671e : 00000000; +671f : 00000000; +6720 : 00000000; +6721 : 00000000; +6722 : 00000000; +6723 : 00000000; +6724 : 00000000; +6725 : 00000000; +6726 : 00000000; +6727 : 00000000; +6728 : 00000000; +6729 : 00000000; +672a : 00000000; +672b : 00000000; +672c : 00000000; +672d : 00000000; +672e : 00000000; +672f : 00000000; +6730 : 00000000; +6731 : 00000000; +6732 : 00000000; +6733 : 00000000; +6734 : 00000000; +6735 : 00000000; +6736 : 00000000; +6737 : 00000000; +6738 : 00000000; +6739 : 00000000; +673a : 00000000; +673b : 00000000; +673c : 00000000; +673d : 00000000; +673e : 00000000; +673f : 00000000; +6740 : 00000000; +6741 : 00000000; +6742 : 00000000; +6743 : 00000000; +6744 : 00000000; +6745 : 00000000; +6746 : 00000000; +6747 : 00000000; +6748 : 00000000; +6749 : 00000000; +674a : 00000000; +674b : 00000000; +674c : 00000000; +674d : 00000000; +674e : 00000000; +674f : 00000000; +6750 : 00000000; +6751 : 00000000; +6752 : 00000000; +6753 : 00000000; +6754 : 00000000; +6755 : 00000000; +6756 : 00000000; +6757 : 00000000; +6758 : 00000000; +6759 : 00000000; +675a : 00000000; +675b : 00000000; +675c : 00000000; +675d : 00000000; +675e : 00000000; +675f : 00000000; +6760 : 00000000; +6761 : 00000000; +6762 : 00000000; +6763 : 00000000; +6764 : 00000000; +6765 : 00000000; +6766 : 00000000; +6767 : 00000000; +6768 : 00000000; +6769 : 00000000; +676a : 00000000; +676b : 00000000; +676c : 00000000; +676d : 00000000; +676e : 00000000; +676f : 00000000; +6770 : 00000000; +6771 : 00000000; +6772 : 00000000; +6773 : 00000000; +6774 : 00000000; +6775 : 00000000; +6776 : 00000000; +6777 : 00000000; +6778 : 00000000; +6779 : 00000000; +677a : 00000000; +677b : 00000000; +677c : 00000000; +677d : 00000000; +677e : 00000000; +677f : 00000000; +6780 : 00000000; +6781 : 00000000; +6782 : 00000000; +6783 : 00000000; +6784 : 00000000; +6785 : 00000000; +6786 : 00000000; +6787 : 00000000; +6788 : 00000000; +6789 : 00000000; +678a : 00000000; +678b : 00000000; +678c : 00000000; +678d : 00000000; +678e : 00000000; +678f : 00000000; +6790 : 00000000; +6791 : 00000000; +6792 : 00000000; +6793 : 00000000; +6794 : 00000000; +6795 : 00000000; +6796 : 00000000; +6797 : 00000000; +6798 : 00000000; +6799 : 00000000; +679a : 00000000; +679b : 00000000; +679c : 00000000; +679d : 00000000; +679e : 00000000; +679f : 00000000; +67a0 : 00000000; +67a1 : 00000000; +67a2 : 00000000; +67a3 : 00000000; +67a4 : 00000000; +67a5 : 00000000; +67a6 : 00000000; +67a7 : 00000000; +67a8 : 00000000; +67a9 : 00000000; +67aa : 00000000; +67ab : 00000000; +67ac : 00000000; +67ad : 00000000; +67ae : 00000000; +67af : 00000000; +67b0 : 00000000; +67b1 : 00000000; +67b2 : 00000000; +67b3 : 00000000; +67b4 : 00000000; +67b5 : 00000000; +67b6 : 00000000; +67b7 : 00000000; +67b8 : 00000000; +67b9 : 00000000; +67ba : 00000000; +67bb : 00000000; +67bc : 00000000; +67bd : 00000000; +67be : 00000000; +67bf : 00000000; +67c0 : 00000000; +67c1 : 00000000; +67c2 : 00000000; +67c3 : 00000000; +67c4 : 00000000; +67c5 : 00000000; +67c6 : 00000000; +67c7 : 00000000; +67c8 : 00000000; +67c9 : 00000000; +67ca : 00000000; +67cb : 00000000; +67cc : 00000000; +67cd : 00000000; +67ce : 00000000; +67cf : 00000000; +67d0 : 00000000; +67d1 : 00000000; +67d2 : 00000000; +67d3 : 00000000; +67d4 : 00000000; +67d5 : 00000000; +67d6 : 00000000; +67d7 : 00000000; +67d8 : 00000000; +67d9 : 00000000; +67da : 00000000; +67db : 00000000; +67dc : 00000000; +67dd : 00000000; +67de : 00000000; +67df : 00000000; +67e0 : 00000000; +67e1 : 00000000; +67e2 : 00000000; +67e3 : 00000000; +67e4 : 00000000; +67e5 : 00000000; +67e6 : 00000000; +67e7 : 00000000; +67e8 : 00000000; +67e9 : 00000000; +67ea : 00000000; +67eb : 00000000; +67ec : 00000000; +67ed : 00000000; +67ee : 00000000; +67ef : 00000000; +67f0 : 00000000; +67f1 : 00000000; +67f2 : 00000000; +67f3 : 00000000; +67f4 : 00000000; +67f5 : 00000000; +67f6 : 00000000; +67f7 : 00000000; +67f8 : 00000000; +67f9 : 00000000; +67fa : 00000000; +67fb : 00000000; +67fc : 00000000; +67fd : 00000000; +67fe : 00000000; +67ff : 00000000; +6800 : 00000000; +6801 : 00000000; +6802 : 00000000; +6803 : 00000000; +6804 : 00000000; +6805 : 00000000; +6806 : 00000000; +6807 : 00000000; +6808 : 00000000; +6809 : 00000000; +680a : 00000000; +680b : 00000000; +680c : 00000000; +680d : 00000000; +680e : 00000000; +680f : 00000000; +6810 : 00000000; +6811 : 00000000; +6812 : 00000000; +6813 : 00000000; +6814 : 00000000; +6815 : 00000000; +6816 : 00000000; +6817 : 00000000; +6818 : 00000000; +6819 : 00000000; +681a : 00000000; +681b : 00000000; +681c : 00000000; +681d : 00000000; +681e : 00000000; +681f : 00000000; +6820 : 00000000; +6821 : 00000000; +6822 : 00000000; +6823 : 00000000; +6824 : 00000000; +6825 : 00000000; +6826 : 00000000; +6827 : 00000000; +6828 : 00000000; +6829 : 00000000; +682a : 00000000; +682b : 00000000; +682c : 00000000; +682d : 00000000; +682e : 00000000; +682f : 00000000; +6830 : 00000000; +6831 : 00000000; +6832 : 00000000; +6833 : 00000000; +6834 : 00000000; +6835 : 00000000; +6836 : 00000000; +6837 : 00000000; +6838 : 00000000; +6839 : 00000000; +683a : 00000000; +683b : 00000000; +683c : 00000000; +683d : 00000000; +683e : 00000000; +683f : 00000000; +6840 : 00000000; +6841 : 00000000; +6842 : 00000000; +6843 : 00000000; +6844 : 00000000; +6845 : 00000000; +6846 : 00000000; +6847 : 00000000; +6848 : 00000000; +6849 : 00000000; +684a : 00000000; +684b : 00000000; +684c : 00000000; +684d : 00000000; +684e : 00000000; +684f : 00000000; +6850 : 00000000; +6851 : 00000000; +6852 : 00000000; +6853 : 00000000; +6854 : 00000000; +6855 : 00000000; +6856 : 00000000; +6857 : 00000000; +6858 : 00000000; +6859 : 00000000; +685a : 00000000; +685b : 00000000; +685c : 00000000; +685d : 00000000; +685e : 00000000; +685f : 00000000; +6860 : 00000000; +6861 : 00000000; +6862 : 00000000; +6863 : 00000000; +6864 : 00000000; +6865 : 00000000; +6866 : 00000000; +6867 : 00000000; +6868 : 00000000; +6869 : 00000000; +686a : 00000000; +686b : 00000000; +686c : 00000000; +686d : 00000000; +686e : 00000000; +686f : 00000000; +6870 : 00000000; +6871 : 00000000; +6872 : 00000000; +6873 : 00000000; +6874 : 00000000; +6875 : 00000000; +6876 : 00000000; +6877 : 00000000; +6878 : 00000000; +6879 : 00000000; +687a : 00000000; +687b : 00000000; +687c : 00000000; +687d : 00000000; +687e : 00000000; +687f : 00000000; +6880 : 00000000; +6881 : 00000000; +6882 : 00000000; +6883 : 00000000; +6884 : 00000000; +6885 : 00000000; +6886 : 00000000; +6887 : 00000000; +6888 : 00000000; +6889 : 00000000; +688a : 00000000; +688b : 00000000; +688c : 00000000; +688d : 00000000; +688e : 00000000; +688f : 00000000; +6890 : 00000000; +6891 : 00000000; +6892 : 00000000; +6893 : 00000000; +6894 : 00000000; +6895 : 00000000; +6896 : 00000000; +6897 : 00000000; +6898 : 00000000; +6899 : 00000000; +689a : 00000000; +689b : 00000000; +689c : 00000000; +689d : 00000000; +689e : 00000000; +689f : 00000000; +68a0 : 00000000; +68a1 : 00000000; +68a2 : 00000000; +68a3 : 00000000; +68a4 : 00000000; +68a5 : 00000000; +68a6 : 00000000; +68a7 : 00000000; +68a8 : 00000000; +68a9 : 00000000; +68aa : 00000000; +68ab : 00000000; +68ac : 00000000; +68ad : 00000000; +68ae : 00000000; +68af : 00000000; +68b0 : 00000000; +68b1 : 00000000; +68b2 : 00000000; +68b3 : 00000000; +68b4 : 00000000; +68b5 : 00000000; +68b6 : 00000000; +68b7 : 00000000; +68b8 : 00000000; +68b9 : 00000000; +68ba : 00000000; +68bb : 00000000; +68bc : 00000000; +68bd : 00000000; +68be : 00000000; +68bf : 00000000; +68c0 : 00000000; +68c1 : 00000000; +68c2 : 00000000; +68c3 : 00000000; +68c4 : 00000000; +68c5 : 00000000; +68c6 : 00000000; +68c7 : 00000000; +68c8 : 00000000; +68c9 : 00000000; +68ca : 00000000; +68cb : 00000000; +68cc : 00000000; +68cd : 00000000; +68ce : 00000000; +68cf : 00000000; +68d0 : 00000000; +68d1 : 00000000; +68d2 : 00000000; +68d3 : 00000000; +68d4 : 00000000; +68d5 : 00000000; +68d6 : 00000000; +68d7 : 00000000; +68d8 : 00000000; +68d9 : 00000000; +68da : 00000000; +68db : 00000000; +68dc : 00000000; +68dd : 00000000; +68de : 00000000; +68df : 00000000; +68e0 : 00000000; +68e1 : 00000000; +68e2 : 00000000; +68e3 : 00000000; +68e4 : 00000000; +68e5 : 00000000; +68e6 : 00000000; +68e7 : 00000000; +68e8 : 00000000; +68e9 : 00000000; +68ea : 00000000; +68eb : 00000000; +68ec : 00000000; +68ed : 00000000; +68ee : 00000000; +68ef : 00000000; +68f0 : 00000000; +68f1 : 00000000; +68f2 : 00000000; +68f3 : 00000000; +68f4 : 00000000; +68f5 : 00000000; +68f6 : 00000000; +68f7 : 00000000; +68f8 : 00000000; +68f9 : 00000000; +68fa : 00000000; +68fb : 00000000; +68fc : 00000000; +68fd : 00000000; +68fe : 00000000; +68ff : 00000000; +6900 : 00000000; +6901 : 00000000; +6902 : 00000000; +6903 : 00000000; +6904 : 00000000; +6905 : 00000000; +6906 : 00000000; +6907 : 00000000; +6908 : 00000000; +6909 : 00000000; +690a : 00000000; +690b : 00000000; +690c : 00000000; +690d : 00000000; +690e : 00000000; +690f : 00000000; +6910 : 00000000; +6911 : 00000000; +6912 : 00000000; +6913 : 00000000; +6914 : 00000000; +6915 : 00000000; +6916 : 00000000; +6917 : 00000000; +6918 : 00000000; +6919 : 00000000; +691a : 00000000; +691b : 00000000; +691c : 00000000; +691d : 00000000; +691e : 00000000; +691f : 00000000; +6920 : 00000000; +6921 : 00000000; +6922 : 00000000; +6923 : 00000000; +6924 : 00000000; +6925 : 00000000; +6926 : 00000000; +6927 : 00000000; +6928 : 00000000; +6929 : 00000000; +692a : 00000000; +692b : 00000000; +692c : 00000000; +692d : 00000000; +692e : 00000000; +692f : 00000000; +6930 : 00000000; +6931 : 00000000; +6932 : 00000000; +6933 : 00000000; +6934 : 00000000; +6935 : 00000000; +6936 : 00000000; +6937 : 00000000; +6938 : 00000000; +6939 : 00000000; +693a : 00000000; +693b : 00000000; +693c : 00000000; +693d : 00000000; +693e : 00000000; +693f : 00000000; +6940 : 00000000; +6941 : 00000000; +6942 : 00000000; +6943 : 00000000; +6944 : 00000000; +6945 : 00000000; +6946 : 00000000; +6947 : 00000000; +6948 : 00000000; +6949 : 00000000; +694a : 00000000; +694b : 00000000; +694c : 00000000; +694d : 00000000; +694e : 00000000; +694f : 00000000; +6950 : 00000000; +6951 : 00000000; +6952 : 00000000; +6953 : 00000000; +6954 : 00000000; +6955 : 00000000; +6956 : 00000000; +6957 : 00000000; +6958 : 00000000; +6959 : 00000000; +695a : 00000000; +695b : 00000000; +695c : 00000000; +695d : 00000000; +695e : 00000000; +695f : 00000000; +6960 : 00000000; +6961 : 00000000; +6962 : 00000000; +6963 : 00000000; +6964 : 00000000; +6965 : 00000000; +6966 : 00000000; +6967 : 00000000; +6968 : 00000000; +6969 : 00000000; +696a : 00000000; +696b : 00000000; +696c : 00000000; +696d : 00000000; +696e : 00000000; +696f : 00000000; +6970 : 00000000; +6971 : 00000000; +6972 : 00000000; +6973 : 00000000; +6974 : 00000000; +6975 : 00000000; +6976 : 00000000; +6977 : 00000000; +6978 : 00000000; +6979 : 00000000; +697a : 00000000; +697b : 00000000; +697c : 00000000; +697d : 00000000; +697e : 00000000; +697f : 00000000; +6980 : 00000000; +6981 : 00000000; +6982 : 00000000; +6983 : 00000000; +6984 : 00000000; +6985 : 00000000; +6986 : 00000000; +6987 : 00000000; +6988 : 00000000; +6989 : 00000000; +698a : 00000000; +698b : 00000000; +698c : 00000000; +698d : 00000000; +698e : 00000000; +698f : 00000000; +6990 : 00000000; +6991 : 00000000; +6992 : 00000000; +6993 : 00000000; +6994 : 00000000; +6995 : 00000000; +6996 : 00000000; +6997 : 00000000; +6998 : 00000000; +6999 : 00000000; +699a : 00000000; +699b : 00000000; +699c : 00000000; +699d : 00000000; +699e : 00000000; +699f : 00000000; +69a0 : 00000000; +69a1 : 00000000; +69a2 : 00000000; +69a3 : 00000000; +69a4 : 00000000; +69a5 : 00000000; +69a6 : 00000000; +69a7 : 00000000; +69a8 : 00000000; +69a9 : 00000000; +69aa : 00000000; +69ab : 00000000; +69ac : 00000000; +69ad : 00000000; +69ae : 00000000; +69af : 00000000; +69b0 : 00000000; +69b1 : 00000000; +69b2 : 00000000; +69b3 : 00000000; +69b4 : 00000000; +69b5 : 00000000; +69b6 : 00000000; +69b7 : 00000000; +69b8 : 00000000; +69b9 : 00000000; +69ba : 00000000; +69bb : 00000000; +69bc : 00000000; +69bd : 00000000; +69be : 00000000; +69bf : 00000000; +69c0 : 00000000; +69c1 : 00000000; +69c2 : 00000000; +69c3 : 00000000; +69c4 : 00000000; +69c5 : 00000000; +69c6 : 00000000; +69c7 : 00000000; +69c8 : 00000000; +69c9 : 00000000; +69ca : 00000000; +69cb : 00000000; +69cc : 00000000; +69cd : 00000000; +69ce : 00000000; +69cf : 00000000; +69d0 : 00000000; +69d1 : 00000000; +69d2 : 00000000; +69d3 : 00000000; +69d4 : 00000000; +69d5 : 00000000; +69d6 : 00000000; +69d7 : 00000000; +69d8 : 00000000; +69d9 : 00000000; +69da : 00000000; +69db : 00000000; +69dc : 00000000; +69dd : 00000000; +69de : 00000000; +69df : 00000000; +69e0 : 00000000; +69e1 : 00000000; +69e2 : 00000000; +69e3 : 00000000; +69e4 : 00000000; +69e5 : 00000000; +69e6 : 00000000; +69e7 : 00000000; +69e8 : 00000000; +69e9 : 00000000; +69ea : 00000000; +69eb : 00000000; +69ec : 00000000; +69ed : 00000000; +69ee : 00000000; +69ef : 00000000; +69f0 : 00000000; +69f1 : 00000000; +69f2 : 00000000; +69f3 : 00000000; +69f4 : 00000000; +69f5 : 00000000; +69f6 : 00000000; +69f7 : 00000000; +69f8 : 00000000; +69f9 : 00000000; +69fa : 00000000; +69fb : 00000000; +69fc : 00000000; +69fd : 00000000; +69fe : 00000000; +69ff : 00000000; +6a00 : 00000000; +6a01 : 00000000; +6a02 : 00000000; +6a03 : 00000000; +6a04 : 00000000; +6a05 : 00000000; +6a06 : 00000000; +6a07 : 00000000; +6a08 : 00000000; +6a09 : 00000000; +6a0a : 00000000; +6a0b : 00000000; +6a0c : 00000000; +6a0d : 00000000; +6a0e : 00000000; +6a0f : 00000000; +6a10 : 00000000; +6a11 : 00000000; +6a12 : 00000000; +6a13 : 00000000; +6a14 : 00000000; +6a15 : 00000000; +6a16 : 00000000; +6a17 : 00000000; +6a18 : 00000000; +6a19 : 00000000; +6a1a : 00000000; +6a1b : 00000000; +6a1c : 00000000; +6a1d : 00000000; +6a1e : 00000000; +6a1f : 00000000; +6a20 : 00000000; +6a21 : 00000000; +6a22 : 00000000; +6a23 : 00000000; +6a24 : 00000000; +6a25 : 00000000; +6a26 : 00000000; +6a27 : 00000000; +6a28 : 00000000; +6a29 : 00000000; +6a2a : 00000000; +6a2b : 00000000; +6a2c : 00000000; +6a2d : 00000000; +6a2e : 00000000; +6a2f : 00000000; +6a30 : 00000000; +6a31 : 00000000; +6a32 : 00000000; +6a33 : 00000000; +6a34 : 00000000; +6a35 : 00000000; +6a36 : 00000000; +6a37 : 00000000; +6a38 : 00000000; +6a39 : 00000000; +6a3a : 00000000; +6a3b : 00000000; +6a3c : 00000000; +6a3d : 00000000; +6a3e : 00000000; +6a3f : 00000000; +6a40 : 00000000; +6a41 : 00000000; +6a42 : 00000000; +6a43 : 00000000; +6a44 : 00000000; +6a45 : 00000000; +6a46 : 00000000; +6a47 : 00000000; +6a48 : 00000000; +6a49 : 00000000; +6a4a : 00000000; +6a4b : 00000000; +6a4c : 00000000; +6a4d : 00000000; +6a4e : 00000000; +6a4f : 00000000; +6a50 : 00000000; +6a51 : 00000000; +6a52 : 00000000; +6a53 : 00000000; +6a54 : 00000000; +6a55 : 00000000; +6a56 : 00000000; +6a57 : 00000000; +6a58 : 00000000; +6a59 : 00000000; +6a5a : 00000000; +6a5b : 00000000; +6a5c : 00000000; +6a5d : 00000000; +6a5e : 00000000; +6a5f : 00000000; +6a60 : 00000000; +6a61 : 00000000; +6a62 : 00000000; +6a63 : 00000000; +6a64 : 00000000; +6a65 : 00000000; +6a66 : 00000000; +6a67 : 00000000; +6a68 : 00000000; +6a69 : 00000000; +6a6a : 00000000; +6a6b : 00000000; +6a6c : 00000000; +6a6d : 00000000; +6a6e : 00000000; +6a6f : 00000000; +6a70 : 00000000; +6a71 : 00000000; +6a72 : 00000000; +6a73 : 00000000; +6a74 : 00000000; +6a75 : 00000000; +6a76 : 00000000; +6a77 : 00000000; +6a78 : 00000000; +6a79 : 00000000; +6a7a : 00000000; +6a7b : 00000000; +6a7c : 00000000; +6a7d : 00000000; +6a7e : 00000000; +6a7f : 00000000; +6a80 : 00000000; +6a81 : 00000000; +6a82 : 00000000; +6a83 : 00000000; +6a84 : 00000000; +6a85 : 00000000; +6a86 : 00000000; +6a87 : 00000000; +6a88 : 00000000; +6a89 : 00000000; +6a8a : 00000000; +6a8b : 00000000; +6a8c : 00000000; +6a8d : 00000000; +6a8e : 00000000; +6a8f : 00000000; +6a90 : 00000000; +6a91 : 00000000; +6a92 : 00000000; +6a93 : 00000000; +6a94 : 00000000; +6a95 : 00000000; +6a96 : 00000000; +6a97 : 00000000; +6a98 : 00000000; +6a99 : 00000000; +6a9a : 00000000; +6a9b : 00000000; +6a9c : 00000000; +6a9d : 00000000; +6a9e : 00000000; +6a9f : 00000000; +6aa0 : 00000000; +6aa1 : 00000000; +6aa2 : 00000000; +6aa3 : 00000000; +6aa4 : 00000000; +6aa5 : 00000000; +6aa6 : 00000000; +6aa7 : 00000000; +6aa8 : 00000000; +6aa9 : 00000000; +6aaa : 00000000; +6aab : 00000000; +6aac : 00000000; +6aad : 00000000; +6aae : 00000000; +6aaf : 00000000; +6ab0 : 00000000; +6ab1 : 00000000; +6ab2 : 00000000; +6ab3 : 00000000; +6ab4 : 00000000; +6ab5 : 00000000; +6ab6 : 00000000; +6ab7 : 00000000; +6ab8 : 00000000; +6ab9 : 00000000; +6aba : 00000000; +6abb : 00000000; +6abc : 00000000; +6abd : 00000000; +6abe : 00000000; +6abf : 00000000; +6ac0 : 00000000; +6ac1 : 00000000; +6ac2 : 00000000; +6ac3 : 00000000; +6ac4 : 00000000; +6ac5 : 00000000; +6ac6 : 00000000; +6ac7 : 00000000; +6ac8 : 00000000; +6ac9 : 00000000; +6aca : 00000000; +6acb : 00000000; +6acc : 00000000; +6acd : 00000000; +6ace : 00000000; +6acf : 00000000; +6ad0 : 00000000; +6ad1 : 00000000; +6ad2 : 00000000; +6ad3 : 00000000; +6ad4 : 00000000; +6ad5 : 00000000; +6ad6 : 00000000; +6ad7 : 00000000; +6ad8 : 00000000; +6ad9 : 00000000; +6ada : 00000000; +6adb : 00000000; +6adc : 00000000; +6add : 00000000; +6ade : 00000000; +6adf : 00000000; +6ae0 : 00000000; +6ae1 : 00000000; +6ae2 : 00000000; +6ae3 : 00000000; +6ae4 : 00000000; +6ae5 : 00000000; +6ae6 : 00000000; +6ae7 : 00000000; +6ae8 : 00000000; +6ae9 : 00000000; +6aea : 00000000; +6aeb : 00000000; +6aec : 00000000; +6aed : 00000000; +6aee : 00000000; +6aef : 00000000; +6af0 : 00000000; +6af1 : 00000000; +6af2 : 00000000; +6af3 : 00000000; +6af4 : 00000000; +6af5 : 00000000; +6af6 : 00000000; +6af7 : 00000000; +6af8 : 00000000; +6af9 : 00000000; +6afa : 00000000; +6afb : 00000000; +6afc : 00000000; +6afd : 00000000; +6afe : 00000000; +6aff : 00000000; +6b00 : 00000000; +6b01 : 00000000; +6b02 : 00000000; +6b03 : 00000000; +6b04 : 00000000; +6b05 : 00000000; +6b06 : 00000000; +6b07 : 00000000; +6b08 : 00000000; +6b09 : 00000000; +6b0a : 00000000; +6b0b : 00000000; +6b0c : 00000000; +6b0d : 00000000; +6b0e : 00000000; +6b0f : 00000000; +6b10 : 00000000; +6b11 : 00000000; +6b12 : 00000000; +6b13 : 00000000; +6b14 : 00000000; +6b15 : 00000000; +6b16 : 00000000; +6b17 : 00000000; +6b18 : 00000000; +6b19 : 00000000; +6b1a : 00000000; +6b1b : 00000000; +6b1c : 00000000; +6b1d : 00000000; +6b1e : 00000000; +6b1f : 00000000; +6b20 : 00000000; +6b21 : 00000000; +6b22 : 00000000; +6b23 : 00000000; +6b24 : 00000000; +6b25 : 00000000; +6b26 : 00000000; +6b27 : 00000000; +6b28 : 00000000; +6b29 : 00000000; +6b2a : 00000000; +6b2b : 00000000; +6b2c : 00000000; +6b2d : 00000000; +6b2e : 00000000; +6b2f : 00000000; +6b30 : 00000000; +6b31 : 00000000; +6b32 : 00000000; +6b33 : 00000000; +6b34 : 00000000; +6b35 : 00000000; +6b36 : 00000000; +6b37 : 00000000; +6b38 : 00000000; +6b39 : 00000000; +6b3a : 00000000; +6b3b : 00000000; +6b3c : 00000000; +6b3d : 00000000; +6b3e : 00000000; +6b3f : 00000000; +6b40 : 00000000; +6b41 : 00000000; +6b42 : 00000000; +6b43 : 00000000; +6b44 : 00000000; +6b45 : 00000000; +6b46 : 00000000; +6b47 : 00000000; +6b48 : 00000000; +6b49 : 00000000; +6b4a : 00000000; +6b4b : 00000000; +6b4c : 00000000; +6b4d : 00000000; +6b4e : 00000000; +6b4f : 00000000; +6b50 : 00000000; +6b51 : 00000000; +6b52 : 00000000; +6b53 : 00000000; +6b54 : 00000000; +6b55 : 00000000; +6b56 : 00000000; +6b57 : 00000000; +6b58 : 00000000; +6b59 : 00000000; +6b5a : 00000000; +6b5b : 00000000; +6b5c : 00000000; +6b5d : 00000000; +6b5e : 00000000; +6b5f : 00000000; +6b60 : 00000000; +6b61 : 00000000; +6b62 : 00000000; +6b63 : 00000000; +6b64 : 00000000; +6b65 : 00000000; +6b66 : 00000000; +6b67 : 00000000; +6b68 : 00000000; +6b69 : 00000000; +6b6a : 00000000; +6b6b : 00000000; +6b6c : 00000000; +6b6d : 00000000; +6b6e : 00000000; +6b6f : 00000000; +6b70 : 00000000; +6b71 : 00000000; +6b72 : 00000000; +6b73 : 00000000; +6b74 : 00000000; +6b75 : 00000000; +6b76 : 00000000; +6b77 : 00000000; +6b78 : 00000000; +6b79 : 00000000; +6b7a : 00000000; +6b7b : 00000000; +6b7c : 00000000; +6b7d : 00000000; +6b7e : 00000000; +6b7f : 00000000; +6b80 : 00000000; +6b81 : 00000000; +6b82 : 00000000; +6b83 : 00000000; +6b84 : 00000000; +6b85 : 00000000; +6b86 : 00000000; +6b87 : 00000000; +6b88 : 00000000; +6b89 : 00000000; +6b8a : 00000000; +6b8b : 00000000; +6b8c : 00000000; +6b8d : 00000000; +6b8e : 00000000; +6b8f : 00000000; +6b90 : 00000000; +6b91 : 00000000; +6b92 : 00000000; +6b93 : 00000000; +6b94 : 00000000; +6b95 : 00000000; +6b96 : 00000000; +6b97 : 00000000; +6b98 : 00000000; +6b99 : 00000000; +6b9a : 00000000; +6b9b : 00000000; +6b9c : 00000000; +6b9d : 00000000; +6b9e : 00000000; +6b9f : 00000000; +6ba0 : 00000000; +6ba1 : 00000000; +6ba2 : 00000000; +6ba3 : 00000000; +6ba4 : 00000000; +6ba5 : 00000000; +6ba6 : 00000000; +6ba7 : 00000000; +6ba8 : 00000000; +6ba9 : 00000000; +6baa : 00000000; +6bab : 00000000; +6bac : 00000000; +6bad : 00000000; +6bae : 00000000; +6baf : 00000000; +6bb0 : 00000000; +6bb1 : 00000000; +6bb2 : 00000000; +6bb3 : 00000000; +6bb4 : 00000000; +6bb5 : 00000000; +6bb6 : 00000000; +6bb7 : 00000000; +6bb8 : 00000000; +6bb9 : 00000000; +6bba : 00000000; +6bbb : 00000000; +6bbc : 00000000; +6bbd : 00000000; +6bbe : 00000000; +6bbf : 00000000; +6bc0 : 00000000; +6bc1 : 00000000; +6bc2 : 00000000; +6bc3 : 00000000; +6bc4 : 00000000; +6bc5 : 00000000; +6bc6 : 00000000; +6bc7 : 00000000; +6bc8 : 00000000; +6bc9 : 00000000; +6bca : 00000000; +6bcb : 00000000; +6bcc : 00000000; +6bcd : 00000000; +6bce : 00000000; +6bcf : 00000000; +6bd0 : 00000000; +6bd1 : 00000000; +6bd2 : 00000000; +6bd3 : 00000000; +6bd4 : 00000000; +6bd5 : 00000000; +6bd6 : 00000000; +6bd7 : 00000000; +6bd8 : 00000000; +6bd9 : 00000000; +6bda : 00000000; +6bdb : 00000000; +6bdc : 00000000; +6bdd : 00000000; +6bde : 00000000; +6bdf : 00000000; +6be0 : 00000000; +6be1 : 00000000; +6be2 : 00000000; +6be3 : 00000000; +6be4 : 00000000; +6be5 : 00000000; +6be6 : 00000000; +6be7 : 00000000; +6be8 : 00000000; +6be9 : 00000000; +6bea : 00000000; +6beb : 00000000; +6bec : 00000000; +6bed : 00000000; +6bee : 00000000; +6bef : 00000000; +6bf0 : 00000000; +6bf1 : 00000000; +6bf2 : 00000000; +6bf3 : 00000000; +6bf4 : 00000000; +6bf5 : 00000000; +6bf6 : 00000000; +6bf7 : 00000000; +6bf8 : 00000000; +6bf9 : 00000000; +6bfa : 00000000; +6bfb : 00000000; +6bfc : 00000000; +6bfd : 00000000; +6bfe : 00000000; +6bff : 00000000; +6c00 : 00000000; +6c01 : 00000000; +6c02 : 00000000; +6c03 : 00000000; +6c04 : 00000000; +6c05 : 00000000; +6c06 : 00000000; +6c07 : 00000000; +6c08 : 00000000; +6c09 : 00000000; +6c0a : 00000000; +6c0b : 00000000; +6c0c : 00000000; +6c0d : 00000000; +6c0e : 00000000; +6c0f : 00000000; +6c10 : 00000000; +6c11 : 00000000; +6c12 : 00000000; +6c13 : 00000000; +6c14 : 00000000; +6c15 : 00000000; +6c16 : 00000000; +6c17 : 00000000; +6c18 : 00000000; +6c19 : 00000000; +6c1a : 00000000; +6c1b : 00000000; +6c1c : 00000000; +6c1d : 00000000; +6c1e : 00000000; +6c1f : 00000000; +6c20 : 00000000; +6c21 : 00000000; +6c22 : 00000000; +6c23 : 00000000; +6c24 : 00000000; +6c25 : 00000000; +6c26 : 00000000; +6c27 : 00000000; +6c28 : 00000000; +6c29 : 00000000; +6c2a : 00000000; +6c2b : 00000000; +6c2c : 00000000; +6c2d : 00000000; +6c2e : 00000000; +6c2f : 00000000; +6c30 : 00000000; +6c31 : 00000000; +6c32 : 00000000; +6c33 : 00000000; +6c34 : 00000000; +6c35 : 00000000; +6c36 : 00000000; +6c37 : 00000000; +6c38 : 00000000; +6c39 : 00000000; +6c3a : 00000000; +6c3b : 00000000; +6c3c : 00000000; +6c3d : 00000000; +6c3e : 00000000; +6c3f : 00000000; +6c40 : 00000000; +6c41 : 00000000; +6c42 : 00000000; +6c43 : 00000000; +6c44 : 00000000; +6c45 : 00000000; +6c46 : 00000000; +6c47 : 00000000; +6c48 : 00000000; +6c49 : 00000000; +6c4a : 00000000; +6c4b : 00000000; +6c4c : 00000000; +6c4d : 00000000; +6c4e : 00000000; +6c4f : 00000000; +6c50 : 00000000; +6c51 : 00000000; +6c52 : 00000000; +6c53 : 00000000; +6c54 : 00000000; +6c55 : 00000000; +6c56 : 00000000; +6c57 : 00000000; +6c58 : 00000000; +6c59 : 00000000; +6c5a : 00000000; +6c5b : 00000000; +6c5c : 00000000; +6c5d : 00000000; +6c5e : 00000000; +6c5f : 00000000; +6c60 : 00000000; +6c61 : 00000000; +6c62 : 00000000; +6c63 : 00000000; +6c64 : 00000000; +6c65 : 00000000; +6c66 : 00000000; +6c67 : 00000000; +6c68 : 00000000; +6c69 : 00000000; +6c6a : 00000000; +6c6b : 00000000; +6c6c : 00000000; +6c6d : 00000000; +6c6e : 00000000; +6c6f : 00000000; +6c70 : 00000000; +6c71 : 00000000; +6c72 : 00000000; +6c73 : 00000000; +6c74 : 00000000; +6c75 : 00000000; +6c76 : 00000000; +6c77 : 00000000; +6c78 : 00000000; +6c79 : 00000000; +6c7a : 00000000; +6c7b : 00000000; +6c7c : 00000000; +6c7d : 00000000; +6c7e : 00000000; +6c7f : 00000000; +6c80 : 00000000; +6c81 : 00000000; +6c82 : 00000000; +6c83 : 00000000; +6c84 : 00000000; +6c85 : 00000000; +6c86 : 00000000; +6c87 : 00000000; +6c88 : 00000000; +6c89 : 00000000; +6c8a : 00000000; +6c8b : 00000000; +6c8c : 00000000; +6c8d : 00000000; +6c8e : 00000000; +6c8f : 00000000; +6c90 : 00000000; +6c91 : 00000000; +6c92 : 00000000; +6c93 : 00000000; +6c94 : 00000000; +6c95 : 00000000; +6c96 : 00000000; +6c97 : 00000000; +6c98 : 00000000; +6c99 : 00000000; +6c9a : 00000000; +6c9b : 00000000; +6c9c : 00000000; +6c9d : 00000000; +6c9e : 00000000; +6c9f : 00000000; +6ca0 : 00000000; +6ca1 : 00000000; +6ca2 : 00000000; +6ca3 : 00000000; +6ca4 : 00000000; +6ca5 : 00000000; +6ca6 : 00000000; +6ca7 : 00000000; +6ca8 : 00000000; +6ca9 : 00000000; +6caa : 00000000; +6cab : 00000000; +6cac : 00000000; +6cad : 00000000; +6cae : 00000000; +6caf : 00000000; +6cb0 : 00000000; +6cb1 : 00000000; +6cb2 : 00000000; +6cb3 : 00000000; +6cb4 : 00000000; +6cb5 : 00000000; +6cb6 : 00000000; +6cb7 : 00000000; +6cb8 : 00000000; +6cb9 : 00000000; +6cba : 00000000; +6cbb : 00000000; +6cbc : 00000000; +6cbd : 00000000; +6cbe : 00000000; +6cbf : 00000000; +6cc0 : 00000000; +6cc1 : 00000000; +6cc2 : 00000000; +6cc3 : 00000000; +6cc4 : 00000000; +6cc5 : 00000000; +6cc6 : 00000000; +6cc7 : 00000000; +6cc8 : 00000000; +6cc9 : 00000000; +6cca : 00000000; +6ccb : 00000000; +6ccc : 00000000; +6ccd : 00000000; +6cce : 00000000; +6ccf : 00000000; +6cd0 : 00000000; +6cd1 : 00000000; +6cd2 : 00000000; +6cd3 : 00000000; +6cd4 : 00000000; +6cd5 : 00000000; +6cd6 : 00000000; +6cd7 : 00000000; +6cd8 : 00000000; +6cd9 : 00000000; +6cda : 00000000; +6cdb : 00000000; +6cdc : 00000000; +6cdd : 00000000; +6cde : 00000000; +6cdf : 00000000; +6ce0 : 00000000; +6ce1 : 00000000; +6ce2 : 00000000; +6ce3 : 00000000; +6ce4 : 00000000; +6ce5 : 00000000; +6ce6 : 00000000; +6ce7 : 00000000; +6ce8 : 00000000; +6ce9 : 00000000; +6cea : 00000000; +6ceb : 00000000; +6cec : 00000000; +6ced : 00000000; +6cee : 00000000; +6cef : 00000000; +6cf0 : 00000000; +6cf1 : 00000000; +6cf2 : 00000000; +6cf3 : 00000000; +6cf4 : 00000000; +6cf5 : 00000000; +6cf6 : 00000000; +6cf7 : 00000000; +6cf8 : 00000000; +6cf9 : 00000000; +6cfa : 00000000; +6cfb : 00000000; +6cfc : 00000000; +6cfd : 00000000; +6cfe : 00000000; +6cff : 00000000; +6d00 : 00000000; +6d01 : 00000000; +6d02 : 00000000; +6d03 : 00000000; +6d04 : 00000000; +6d05 : 00000000; +6d06 : 00000000; +6d07 : 00000000; +6d08 : 00000000; +6d09 : 00000000; +6d0a : 00000000; +6d0b : 00000000; +6d0c : 00000000; +6d0d : 00000000; +6d0e : 00000000; +6d0f : 00000000; +6d10 : 00000000; +6d11 : 00000000; +6d12 : 00000000; +6d13 : 00000000; +6d14 : 00000000; +6d15 : 00000000; +6d16 : 00000000; +6d17 : 00000000; +6d18 : 00000000; +6d19 : 00000000; +6d1a : 00000000; +6d1b : 00000000; +6d1c : 00000000; +6d1d : 00000000; +6d1e : 00000000; +6d1f : 00000000; +6d20 : 00000000; +6d21 : 00000000; +6d22 : 00000000; +6d23 : 00000000; +6d24 : 00000000; +6d25 : 00000000; +6d26 : 00000000; +6d27 : 00000000; +6d28 : 00000000; +6d29 : 00000000; +6d2a : 00000000; +6d2b : 00000000; +6d2c : 00000000; +6d2d : 00000000; +6d2e : 00000000; +6d2f : 00000000; +6d30 : 00000000; +6d31 : 00000000; +6d32 : 00000000; +6d33 : 00000000; +6d34 : 00000000; +6d35 : 00000000; +6d36 : 00000000; +6d37 : 00000000; +6d38 : 00000000; +6d39 : 00000000; +6d3a : 00000000; +6d3b : 00000000; +6d3c : 00000000; +6d3d : 00000000; +6d3e : 00000000; +6d3f : 00000000; +6d40 : 00000000; +6d41 : 00000000; +6d42 : 00000000; +6d43 : 00000000; +6d44 : 00000000; +6d45 : 00000000; +6d46 : 00000000; +6d47 : 00000000; +6d48 : 00000000; +6d49 : 00000000; +6d4a : 00000000; +6d4b : 00000000; +6d4c : 00000000; +6d4d : 00000000; +6d4e : 00000000; +6d4f : 00000000; +6d50 : 00000000; +6d51 : 00000000; +6d52 : 00000000; +6d53 : 00000000; +6d54 : 00000000; +6d55 : 00000000; +6d56 : 00000000; +6d57 : 00000000; +6d58 : 00000000; +6d59 : 00000000; +6d5a : 00000000; +6d5b : 00000000; +6d5c : 00000000; +6d5d : 00000000; +6d5e : 00000000; +6d5f : 00000000; +6d60 : 00000000; +6d61 : 00000000; +6d62 : 00000000; +6d63 : 00000000; +6d64 : 00000000; +6d65 : 00000000; +6d66 : 00000000; +6d67 : 00000000; +6d68 : 00000000; +6d69 : 00000000; +6d6a : 00000000; +6d6b : 00000000; +6d6c : 00000000; +6d6d : 00000000; +6d6e : 00000000; +6d6f : 00000000; +6d70 : 00000000; +6d71 : 00000000; +6d72 : 00000000; +6d73 : 00000000; +6d74 : 00000000; +6d75 : 00000000; +6d76 : 00000000; +6d77 : 00000000; +6d78 : 00000000; +6d79 : 00000000; +6d7a : 00000000; +6d7b : 00000000; +6d7c : 00000000; +6d7d : 00000000; +6d7e : 00000000; +6d7f : 00000000; +6d80 : 00000000; +6d81 : 00000000; +6d82 : 00000000; +6d83 : 00000000; +6d84 : 00000000; +6d85 : 00000000; +6d86 : 00000000; +6d87 : 00000000; +6d88 : 00000000; +6d89 : 00000000; +6d8a : 00000000; +6d8b : 00000000; +6d8c : 00000000; +6d8d : 00000000; +6d8e : 00000000; +6d8f : 00000000; +6d90 : 00000000; +6d91 : 00000000; +6d92 : 00000000; +6d93 : 00000000; +6d94 : 00000000; +6d95 : 00000000; +6d96 : 00000000; +6d97 : 00000000; +6d98 : 00000000; +6d99 : 00000000; +6d9a : 00000000; +6d9b : 00000000; +6d9c : 00000000; +6d9d : 00000000; +6d9e : 00000000; +6d9f : 00000000; +6da0 : 00000000; +6da1 : 00000000; +6da2 : 00000000; +6da3 : 00000000; +6da4 : 00000000; +6da5 : 00000000; +6da6 : 00000000; +6da7 : 00000000; +6da8 : 00000000; +6da9 : 00000000; +6daa : 00000000; +6dab : 00000000; +6dac : 00000000; +6dad : 00000000; +6dae : 00000000; +6daf : 00000000; +6db0 : 00000000; +6db1 : 00000000; +6db2 : 00000000; +6db3 : 00000000; +6db4 : 00000000; +6db5 : 00000000; +6db6 : 00000000; +6db7 : 00000000; +6db8 : 00000000; +6db9 : 00000000; +6dba : 00000000; +6dbb : 00000000; +6dbc : 00000000; +6dbd : 00000000; +6dbe : 00000000; +6dbf : 00000000; +6dc0 : 00000000; +6dc1 : 00000000; +6dc2 : 00000000; +6dc3 : 00000000; +6dc4 : 00000000; +6dc5 : 00000000; +6dc6 : 00000000; +6dc7 : 00000000; +6dc8 : 00000000; +6dc9 : 00000000; +6dca : 00000000; +6dcb : 00000000; +6dcc : 00000000; +6dcd : 00000000; +6dce : 00000000; +6dcf : 00000000; +6dd0 : 00000000; +6dd1 : 00000000; +6dd2 : 00000000; +6dd3 : 00000000; +6dd4 : 00000000; +6dd5 : 00000000; +6dd6 : 00000000; +6dd7 : 00000000; +6dd8 : 00000000; +6dd9 : 00000000; +6dda : 00000000; +6ddb : 00000000; +6ddc : 00000000; +6ddd : 00000000; +6dde : 00000000; +6ddf : 00000000; +6de0 : 00000000; +6de1 : 00000000; +6de2 : 00000000; +6de3 : 00000000; +6de4 : 00000000; +6de5 : 00000000; +6de6 : 00000000; +6de7 : 00000000; +6de8 : 00000000; +6de9 : 00000000; +6dea : 00000000; +6deb : 00000000; +6dec : 00000000; +6ded : 00000000; +6dee : 00000000; +6def : 00000000; +6df0 : 00000000; +6df1 : 00000000; +6df2 : 00000000; +6df3 : 00000000; +6df4 : 00000000; +6df5 : 00000000; +6df6 : 00000000; +6df7 : 00000000; +6df8 : 00000000; +6df9 : 00000000; +6dfa : 00000000; +6dfb : 00000000; +6dfc : 00000000; +6dfd : 00000000; +6dfe : 00000000; +6dff : 00000000; +6e00 : 00000000; +6e01 : 00000000; +6e02 : 00000000; +6e03 : 00000000; +6e04 : 00000000; +6e05 : 00000000; +6e06 : 00000000; +6e07 : 00000000; +6e08 : 00000000; +6e09 : 00000000; +6e0a : 00000000; +6e0b : 00000000; +6e0c : 00000000; +6e0d : 00000000; +6e0e : 00000000; +6e0f : 00000000; +6e10 : 00000000; +6e11 : 00000000; +6e12 : 00000000; +6e13 : 00000000; +6e14 : 00000000; +6e15 : 00000000; +6e16 : 00000000; +6e17 : 00000000; +6e18 : 00000000; +6e19 : 00000000; +6e1a : 00000000; +6e1b : 00000000; +6e1c : 00000000; +6e1d : 00000000; +6e1e : 00000000; +6e1f : 00000000; +6e20 : 00000000; +6e21 : 00000000; +6e22 : 00000000; +6e23 : 00000000; +6e24 : 00000000; +6e25 : 00000000; +6e26 : 00000000; +6e27 : 00000000; +6e28 : 00000000; +6e29 : 00000000; +6e2a : 00000000; +6e2b : 00000000; +6e2c : 00000000; +6e2d : 00000000; +6e2e : 00000000; +6e2f : 00000000; +6e30 : 00000000; +6e31 : 00000000; +6e32 : 00000000; +6e33 : 00000000; +6e34 : 00000000; +6e35 : 00000000; +6e36 : 00000000; +6e37 : 00000000; +6e38 : 00000000; +6e39 : 00000000; +6e3a : 00000000; +6e3b : 00000000; +6e3c : 00000000; +6e3d : 00000000; +6e3e : 00000000; +6e3f : 00000000; +6e40 : 00000000; +6e41 : 00000000; +6e42 : 00000000; +6e43 : 00000000; +6e44 : 00000000; +6e45 : 00000000; +6e46 : 00000000; +6e47 : 00000000; +6e48 : 00000000; +6e49 : 00000000; +6e4a : 00000000; +6e4b : 00000000; +6e4c : 00000000; +6e4d : 00000000; +6e4e : 00000000; +6e4f : 00000000; +6e50 : 00000000; +6e51 : 00000000; +6e52 : 00000000; +6e53 : 00000000; +6e54 : 00000000; +6e55 : 00000000; +6e56 : 00000000; +6e57 : 00000000; +6e58 : 00000000; +6e59 : 00000000; +6e5a : 00000000; +6e5b : 00000000; +6e5c : 00000000; +6e5d : 00000000; +6e5e : 00000000; +6e5f : 00000000; +6e60 : 00000000; +6e61 : 00000000; +6e62 : 00000000; +6e63 : 00000000; +6e64 : 00000000; +6e65 : 00000000; +6e66 : 00000000; +6e67 : 00000000; +6e68 : 00000000; +6e69 : 00000000; +6e6a : 00000000; +6e6b : 00000000; +6e6c : 00000000; +6e6d : 00000000; +6e6e : 00000000; +6e6f : 00000000; +6e70 : 00000000; +6e71 : 00000000; +6e72 : 00000000; +6e73 : 00000000; +6e74 : 00000000; +6e75 : 00000000; +6e76 : 00000000; +6e77 : 00000000; +6e78 : 00000000; +6e79 : 00000000; +6e7a : 00000000; +6e7b : 00000000; +6e7c : 00000000; +6e7d : 00000000; +6e7e : 00000000; +6e7f : 00000000; +6e80 : 00000000; +6e81 : 00000000; +6e82 : 00000000; +6e83 : 00000000; +6e84 : 00000000; +6e85 : 00000000; +6e86 : 00000000; +6e87 : 00000000; +6e88 : 00000000; +6e89 : 00000000; +6e8a : 00000000; +6e8b : 00000000; +6e8c : 00000000; +6e8d : 00000000; +6e8e : 00000000; +6e8f : 00000000; +6e90 : 00000000; +6e91 : 00000000; +6e92 : 00000000; +6e93 : 00000000; +6e94 : 00000000; +6e95 : 00000000; +6e96 : 00000000; +6e97 : 00000000; +6e98 : 00000000; +6e99 : 00000000; +6e9a : 00000000; +6e9b : 00000000; +6e9c : 00000000; +6e9d : 00000000; +6e9e : 00000000; +6e9f : 00000000; +6ea0 : 00000000; +6ea1 : 00000000; +6ea2 : 00000000; +6ea3 : 00000000; +6ea4 : 00000000; +6ea5 : 00000000; +6ea6 : 00000000; +6ea7 : 00000000; +6ea8 : 00000000; +6ea9 : 00000000; +6eaa : 00000000; +6eab : 00000000; +6eac : 00000000; +6ead : 00000000; +6eae : 00000000; +6eaf : 00000000; +6eb0 : 00000000; +6eb1 : 00000000; +6eb2 : 00000000; +6eb3 : 00000000; +6eb4 : 00000000; +6eb5 : 00000000; +6eb6 : 00000000; +6eb7 : 00000000; +6eb8 : 00000000; +6eb9 : 00000000; +6eba : 00000000; +6ebb : 00000000; +6ebc : 00000000; +6ebd : 00000000; +6ebe : 00000000; +6ebf : 00000000; +6ec0 : 00000000; +6ec1 : 00000000; +6ec2 : 00000000; +6ec3 : 00000000; +6ec4 : 00000000; +6ec5 : 00000000; +6ec6 : 00000000; +6ec7 : 00000000; +6ec8 : 00000000; +6ec9 : 00000000; +6eca : 00000000; +6ecb : 00000000; +6ecc : 00000000; +6ecd : 00000000; +6ece : 00000000; +6ecf : 00000000; +6ed0 : 00000000; +6ed1 : 00000000; +6ed2 : 00000000; +6ed3 : 00000000; +6ed4 : 00000000; +6ed5 : 00000000; +6ed6 : 00000000; +6ed7 : 00000000; +6ed8 : 00000000; +6ed9 : 00000000; +6eda : 00000000; +6edb : 00000000; +6edc : 00000000; +6edd : 00000000; +6ede : 00000000; +6edf : 00000000; +6ee0 : 00000000; +6ee1 : 00000000; +6ee2 : 00000000; +6ee3 : 00000000; +6ee4 : 00000000; +6ee5 : 00000000; +6ee6 : 00000000; +6ee7 : 00000000; +6ee8 : 00000000; +6ee9 : 00000000; +6eea : 00000000; +6eeb : 00000000; +6eec : 00000000; +6eed : 00000000; +6eee : 00000000; +6eef : 00000000; +6ef0 : 00000000; +6ef1 : 00000000; +6ef2 : 00000000; +6ef3 : 00000000; +6ef4 : 00000000; +6ef5 : 00000000; +6ef6 : 00000000; +6ef7 : 00000000; +6ef8 : 00000000; +6ef9 : 00000000; +6efa : 00000000; +6efb : 00000000; +6efc : 00000000; +6efd : 00000000; +6efe : 00000000; +6eff : 00000000; +6f00 : 00000000; +6f01 : 00000000; +6f02 : 00000000; +6f03 : 00000000; +6f04 : 00000000; +6f05 : 00000000; +6f06 : 00000000; +6f07 : 00000000; +6f08 : 00000000; +6f09 : 00000000; +6f0a : 00000000; +6f0b : 00000000; +6f0c : 00000000; +6f0d : 00000000; +6f0e : 00000000; +6f0f : 00000000; +6f10 : 00000000; +6f11 : 00000000; +6f12 : 00000000; +6f13 : 00000000; +6f14 : 00000000; +6f15 : 00000000; +6f16 : 00000000; +6f17 : 00000000; +6f18 : 00000000; +6f19 : 00000000; +6f1a : 00000000; +6f1b : 00000000; +6f1c : 00000000; +6f1d : 00000000; +6f1e : 00000000; +6f1f : 00000000; +6f20 : 00000000; +6f21 : 00000000; +6f22 : 00000000; +6f23 : 00000000; +6f24 : 00000000; +6f25 : 00000000; +6f26 : 00000000; +6f27 : 00000000; +6f28 : 00000000; +6f29 : 00000000; +6f2a : 00000000; +6f2b : 00000000; +6f2c : 00000000; +6f2d : 00000000; +6f2e : 00000000; +6f2f : 00000000; +6f30 : 00000000; +6f31 : 00000000; +6f32 : 00000000; +6f33 : 00000000; +6f34 : 00000000; +6f35 : 00000000; +6f36 : 00000000; +6f37 : 00000000; +6f38 : 00000000; +6f39 : 00000000; +6f3a : 00000000; +6f3b : 00000000; +6f3c : 00000000; +6f3d : 00000000; +6f3e : 00000000; +6f3f : 00000000; +6f40 : 00000000; +6f41 : 00000000; +6f42 : 00000000; +6f43 : 00000000; +6f44 : 00000000; +6f45 : 00000000; +6f46 : 00000000; +6f47 : 00000000; +6f48 : 00000000; +6f49 : 00000000; +6f4a : 00000000; +6f4b : 00000000; +6f4c : 00000000; +6f4d : 00000000; +6f4e : 00000000; +6f4f : 00000000; +6f50 : 00000000; +6f51 : 00000000; +6f52 : 00000000; +6f53 : 00000000; +6f54 : 00000000; +6f55 : 00000000; +6f56 : 00000000; +6f57 : 00000000; +6f58 : 00000000; +6f59 : 00000000; +6f5a : 00000000; +6f5b : 00000000; +6f5c : 00000000; +6f5d : 00000000; +6f5e : 00000000; +6f5f : 00000000; +6f60 : 00000000; +6f61 : 00000000; +6f62 : 00000000; +6f63 : 00000000; +6f64 : 00000000; +6f65 : 00000000; +6f66 : 00000000; +6f67 : 00000000; +6f68 : 00000000; +6f69 : 00000000; +6f6a : 00000000; +6f6b : 00000000; +6f6c : 00000000; +6f6d : 00000000; +6f6e : 00000000; +6f6f : 00000000; +6f70 : 00000000; +6f71 : 00000000; +6f72 : 00000000; +6f73 : 00000000; +6f74 : 00000000; +6f75 : 00000000; +6f76 : 00000000; +6f77 : 00000000; +6f78 : 00000000; +6f79 : 00000000; +6f7a : 00000000; +6f7b : 00000000; +6f7c : 00000000; +6f7d : 00000000; +6f7e : 00000000; +6f7f : 00000000; +6f80 : 00000000; +6f81 : 00000000; +6f82 : 00000000; +6f83 : 00000000; +6f84 : 00000000; +6f85 : 00000000; +6f86 : 00000000; +6f87 : 00000000; +6f88 : 00000000; +6f89 : 00000000; +6f8a : 00000000; +6f8b : 00000000; +6f8c : 00000000; +6f8d : 00000000; +6f8e : 00000000; +6f8f : 00000000; +6f90 : 00000000; +6f91 : 00000000; +6f92 : 00000000; +6f93 : 00000000; +6f94 : 00000000; +6f95 : 00000000; +6f96 : 00000000; +6f97 : 00000000; +6f98 : 00000000; +6f99 : 00000000; +6f9a : 00000000; +6f9b : 00000000; +6f9c : 00000000; +6f9d : 00000000; +6f9e : 00000000; +6f9f : 00000000; +6fa0 : 00000000; +6fa1 : 00000000; +6fa2 : 00000000; +6fa3 : 00000000; +6fa4 : 00000000; +6fa5 : 00000000; +6fa6 : 00000000; +6fa7 : 00000000; +6fa8 : 00000000; +6fa9 : 00000000; +6faa : 00000000; +6fab : 00000000; +6fac : 00000000; +6fad : 00000000; +6fae : 00000000; +6faf : 00000000; +6fb0 : 00000000; +6fb1 : 00000000; +6fb2 : 00000000; +6fb3 : 00000000; +6fb4 : 00000000; +6fb5 : 00000000; +6fb6 : 00000000; +6fb7 : 00000000; +6fb8 : 00000000; +6fb9 : 00000000; +6fba : 00000000; +6fbb : 00000000; +6fbc : 00000000; +6fbd : 00000000; +6fbe : 00000000; +6fbf : 00000000; +6fc0 : 00000000; +6fc1 : 00000000; +6fc2 : 00000000; +6fc3 : 00000000; +6fc4 : 00000000; +6fc5 : 00000000; +6fc6 : 00000000; +6fc7 : 00000000; +6fc8 : 00000000; +6fc9 : 00000000; +6fca : 00000000; +6fcb : 00000000; +6fcc : 00000000; +6fcd : 00000000; +6fce : 00000000; +6fcf : 00000000; +6fd0 : 00000000; +6fd1 : 00000000; +6fd2 : 00000000; +6fd3 : 00000000; +6fd4 : 00000000; +6fd5 : 00000000; +6fd6 : 00000000; +6fd7 : 00000000; +6fd8 : 00000000; +6fd9 : 00000000; +6fda : 00000000; +6fdb : 00000000; +6fdc : 00000000; +6fdd : 00000000; +6fde : 00000000; +6fdf : 00000000; +6fe0 : 00000000; +6fe1 : 00000000; +6fe2 : 00000000; +6fe3 : 00000000; +6fe4 : 00000000; +6fe5 : 00000000; +6fe6 : 00000000; +6fe7 : 00000000; +6fe8 : 00000000; +6fe9 : 00000000; +6fea : 00000000; +6feb : 00000000; +6fec : 00000000; +6fed : 00000000; +6fee : 00000000; +6fef : 00000000; +6ff0 : 00000000; +6ff1 : 00000000; +6ff2 : 00000000; +6ff3 : 00000000; +6ff4 : 00000000; +6ff5 : 00000000; +6ff6 : 00000000; +6ff7 : 00000000; +6ff8 : 00000000; +6ff9 : 00000000; +6ffa : 00000000; +6ffb : 00000000; +6ffc : 00000000; +6ffd : 00000000; +6ffe : 00000000; +6fff : 00000000; +7000 : 00000000; +7001 : 00000000; +7002 : 00000000; +7003 : 00000000; +7004 : 00000000; +7005 : 00000000; +7006 : 00000000; +7007 : 00000000; +7008 : 00000000; +7009 : 00000000; +700a : 00000000; +700b : 00000000; +700c : 00000000; +700d : 00000000; +700e : 00000000; +700f : 00000000; +7010 : 00000000; +7011 : 00000000; +7012 : 00000000; +7013 : 00000000; +7014 : 00000000; +7015 : 00000000; +7016 : 00000000; +7017 : 00000000; +7018 : 00000000; +7019 : 00000000; +701a : 00000000; +701b : 00000000; +701c : 00000000; +701d : 00000000; +701e : 00000000; +701f : 00000000; +7020 : 00000000; +7021 : 00000000; +7022 : 00000000; +7023 : 00000000; +7024 : 00000000; +7025 : 00000000; +7026 : 00000000; +7027 : 00000000; +7028 : 00000000; +7029 : 00000000; +702a : 00000000; +702b : 00000000; +702c : 00000000; +702d : 00000000; +702e : 00000000; +702f : 00000000; +7030 : 00000000; +7031 : 00000000; +7032 : 00000000; +7033 : 00000000; +7034 : 00000000; +7035 : 00000000; +7036 : 00000000; +7037 : 00000000; +7038 : 00000000; +7039 : 00000000; +703a : 00000000; +703b : 00000000; +703c : 00000000; +703d : 00000000; +703e : 00000000; +703f : 00000000; +7040 : 00000000; +7041 : 00000000; +7042 : 00000000; +7043 : 00000000; +7044 : 00000000; +7045 : 00000000; +7046 : 00000000; +7047 : 00000000; +7048 : 00000000; +7049 : 00000000; +704a : 00000000; +704b : 00000000; +704c : 00000000; +704d : 00000000; +704e : 00000000; +704f : 00000000; +7050 : 00000000; +7051 : 00000000; +7052 : 00000000; +7053 : 00000000; +7054 : 00000000; +7055 : 00000000; +7056 : 00000000; +7057 : 00000000; +7058 : 00000000; +7059 : 00000000; +705a : 00000000; +705b : 00000000; +705c : 00000000; +705d : 00000000; +705e : 00000000; +705f : 00000000; +7060 : 00000000; +7061 : 00000000; +7062 : 00000000; +7063 : 00000000; +7064 : 00000000; +7065 : 00000000; +7066 : 00000000; +7067 : 00000000; +7068 : 00000000; +7069 : 00000000; +706a : 00000000; +706b : 00000000; +706c : 00000000; +706d : 00000000; +706e : 00000000; +706f : 00000000; +7070 : 00000000; +7071 : 00000000; +7072 : 00000000; +7073 : 00000000; +7074 : 00000000; +7075 : 00000000; +7076 : 00000000; +7077 : 00000000; +7078 : 00000000; +7079 : 00000000; +707a : 00000000; +707b : 00000000; +707c : 00000000; +707d : 00000000; +707e : 00000000; +707f : 00000000; +7080 : 00000000; +7081 : 00000000; +7082 : 00000000; +7083 : 00000000; +7084 : 00000000; +7085 : 00000000; +7086 : 00000000; +7087 : 00000000; +7088 : 00000000; +7089 : 00000000; +708a : 00000000; +708b : 00000000; +708c : 00000000; +708d : 00000000; +708e : 00000000; +708f : 00000000; +7090 : 00000000; +7091 : 00000000; +7092 : 00000000; +7093 : 00000000; +7094 : 00000000; +7095 : 00000000; +7096 : 00000000; +7097 : 00000000; +7098 : 00000000; +7099 : 00000000; +709a : 00000000; +709b : 00000000; +709c : 00000000; +709d : 00000000; +709e : 00000000; +709f : 00000000; +70a0 : 00000000; +70a1 : 00000000; +70a2 : 00000000; +70a3 : 00000000; +70a4 : 00000000; +70a5 : 00000000; +70a6 : 00000000; +70a7 : 00000000; +70a8 : 00000000; +70a9 : 00000000; +70aa : 00000000; +70ab : 00000000; +70ac : 00000000; +70ad : 00000000; +70ae : 00000000; +70af : 00000000; +70b0 : 00000000; +70b1 : 00000000; +70b2 : 00000000; +70b3 : 00000000; +70b4 : 00000000; +70b5 : 00000000; +70b6 : 00000000; +70b7 : 00000000; +70b8 : 00000000; +70b9 : 00000000; +70ba : 00000000; +70bb : 00000000; +70bc : 00000000; +70bd : 00000000; +70be : 00000000; +70bf : 00000000; +70c0 : 00000000; +70c1 : 00000000; +70c2 : 00000000; +70c3 : 00000000; +70c4 : 00000000; +70c5 : 00000000; +70c6 : 00000000; +70c7 : 00000000; +70c8 : 00000000; +70c9 : 00000000; +70ca : 00000000; +70cb : 00000000; +70cc : 00000000; +70cd : 00000000; +70ce : 00000000; +70cf : 00000000; +70d0 : 00000000; +70d1 : 00000000; +70d2 : 00000000; +70d3 : 00000000; +70d4 : 00000000; +70d5 : 00000000; +70d6 : 00000000; +70d7 : 00000000; +70d8 : 00000000; +70d9 : 00000000; +70da : 00000000; +70db : 00000000; +70dc : 00000000; +70dd : 00000000; +70de : 00000000; +70df : 00000000; +70e0 : 00000000; +70e1 : 00000000; +70e2 : 00000000; +70e3 : 00000000; +70e4 : 00000000; +70e5 : 00000000; +70e6 : 00000000; +70e7 : 00000000; +70e8 : 00000000; +70e9 : 00000000; +70ea : 00000000; +70eb : 00000000; +70ec : 00000000; +70ed : 00000000; +70ee : 00000000; +70ef : 00000000; +70f0 : 00000000; +70f1 : 00000000; +70f2 : 00000000; +70f3 : 00000000; +70f4 : 00000000; +70f5 : 00000000; +70f6 : 00000000; +70f7 : 00000000; +70f8 : 00000000; +70f9 : 00000000; +70fa : 00000000; +70fb : 00000000; +70fc : 00000000; +70fd : 00000000; +70fe : 00000000; +70ff : 00000000; +7100 : 00000000; +7101 : 00000000; +7102 : 00000000; +7103 : 00000000; +7104 : 00000000; +7105 : 00000000; +7106 : 00000000; +7107 : 00000000; +7108 : 00000000; +7109 : 00000000; +710a : 00000000; +710b : 00000000; +710c : 00000000; +710d : 00000000; +710e : 00000000; +710f : 00000000; +7110 : 00000000; +7111 : 00000000; +7112 : 00000000; +7113 : 00000000; +7114 : 00000000; +7115 : 00000000; +7116 : 00000000; +7117 : 00000000; +7118 : 00000000; +7119 : 00000000; +711a : 00000000; +711b : 00000000; +711c : 00000000; +711d : 00000000; +711e : 00000000; +711f : 00000000; +7120 : 00000000; +7121 : 00000000; +7122 : 00000000; +7123 : 00000000; +7124 : 00000000; +7125 : 00000000; +7126 : 00000000; +7127 : 00000000; +7128 : 00000000; +7129 : 00000000; +712a : 00000000; +712b : 00000000; +712c : 00000000; +712d : 00000000; +712e : 00000000; +712f : 00000000; +7130 : 00000000; +7131 : 00000000; +7132 : 00000000; +7133 : 00000000; +7134 : 00000000; +7135 : 00000000; +7136 : 00000000; +7137 : 00000000; +7138 : 00000000; +7139 : 00000000; +713a : 00000000; +713b : 00000000; +713c : 00000000; +713d : 00000000; +713e : 00000000; +713f : 00000000; +7140 : 00000000; +7141 : 00000000; +7142 : 00000000; +7143 : 00000000; +7144 : 00000000; +7145 : 00000000; +7146 : 00000000; +7147 : 00000000; +7148 : 00000000; +7149 : 00000000; +714a : 00000000; +714b : 00000000; +714c : 00000000; +714d : 00000000; +714e : 00000000; +714f : 00000000; +7150 : 00000000; +7151 : 00000000; +7152 : 00000000; +7153 : 00000000; +7154 : 00000000; +7155 : 00000000; +7156 : 00000000; +7157 : 00000000; +7158 : 00000000; +7159 : 00000000; +715a : 00000000; +715b : 00000000; +715c : 00000000; +715d : 00000000; +715e : 00000000; +715f : 00000000; +7160 : 00000000; +7161 : 00000000; +7162 : 00000000; +7163 : 00000000; +7164 : 00000000; +7165 : 00000000; +7166 : 00000000; +7167 : 00000000; +7168 : 00000000; +7169 : 00000000; +716a : 00000000; +716b : 00000000; +716c : 00000000; +716d : 00000000; +716e : 00000000; +716f : 00000000; +7170 : 00000000; +7171 : 00000000; +7172 : 00000000; +7173 : 00000000; +7174 : 00000000; +7175 : 00000000; +7176 : 00000000; +7177 : 00000000; +7178 : 00000000; +7179 : 00000000; +717a : 00000000; +717b : 00000000; +717c : 00000000; +717d : 00000000; +717e : 00000000; +717f : 00000000; +7180 : 00000000; +7181 : 00000000; +7182 : 00000000; +7183 : 00000000; +7184 : 00000000; +7185 : 00000000; +7186 : 00000000; +7187 : 00000000; +7188 : 00000000; +7189 : 00000000; +718a : 00000000; +718b : 00000000; +718c : 00000000; +718d : 00000000; +718e : 00000000; +718f : 00000000; +7190 : 00000000; +7191 : 00000000; +7192 : 00000000; +7193 : 00000000; +7194 : 00000000; +7195 : 00000000; +7196 : 00000000; +7197 : 00000000; +7198 : 00000000; +7199 : 00000000; +719a : 00000000; +719b : 00000000; +719c : 00000000; +719d : 00000000; +719e : 00000000; +719f : 00000000; +71a0 : 00000000; +71a1 : 00000000; +71a2 : 00000000; +71a3 : 00000000; +71a4 : 00000000; +71a5 : 00000000; +71a6 : 00000000; +71a7 : 00000000; +71a8 : 00000000; +71a9 : 00000000; +71aa : 00000000; +71ab : 00000000; +71ac : 00000000; +71ad : 00000000; +71ae : 00000000; +71af : 00000000; +71b0 : 00000000; +71b1 : 00000000; +71b2 : 00000000; +71b3 : 00000000; +71b4 : 00000000; +71b5 : 00000000; +71b6 : 00000000; +71b7 : 00000000; +71b8 : 00000000; +71b9 : 00000000; +71ba : 00000000; +71bb : 00000000; +71bc : 00000000; +71bd : 00000000; +71be : 00000000; +71bf : 00000000; +71c0 : 00000000; +71c1 : 00000000; +71c2 : 00000000; +71c3 : 00000000; +71c4 : 00000000; +71c5 : 00000000; +71c6 : 00000000; +71c7 : 00000000; +71c8 : 00000000; +71c9 : 00000000; +71ca : 00000000; +71cb : 00000000; +71cc : 00000000; +71cd : 00000000; +71ce : 00000000; +71cf : 00000000; +71d0 : 00000000; +71d1 : 00000000; +71d2 : 00000000; +71d3 : 00000000; +71d4 : 00000000; +71d5 : 00000000; +71d6 : 00000000; +71d7 : 00000000; +71d8 : 00000000; +71d9 : 00000000; +71da : 00000000; +71db : 00000000; +71dc : 00000000; +71dd : 00000000; +71de : 00000000; +71df : 00000000; +71e0 : 00000000; +71e1 : 00000000; +71e2 : 00000000; +71e3 : 00000000; +71e4 : 00000000; +71e5 : 00000000; +71e6 : 00000000; +71e7 : 00000000; +71e8 : 00000000; +71e9 : 00000000; +71ea : 00000000; +71eb : 00000000; +71ec : 00000000; +71ed : 00000000; +71ee : 00000000; +71ef : 00000000; +71f0 : 00000000; +71f1 : 00000000; +71f2 : 00000000; +71f3 : 00000000; +71f4 : 00000000; +71f5 : 00000000; +71f6 : 00000000; +71f7 : 00000000; +71f8 : 00000000; +71f9 : 00000000; +71fa : 00000000; +71fb : 00000000; +71fc : 00000000; +71fd : 00000000; +71fe : 00000000; +71ff : 00000000; +7200 : 00000000; +7201 : 00000000; +7202 : 00000000; +7203 : 00000000; +7204 : 00000000; +7205 : 00000000; +7206 : 00000000; +7207 : 00000000; +7208 : 00000000; +7209 : 00000000; +720a : 00000000; +720b : 00000000; +720c : 00000000; +720d : 00000000; +720e : 00000000; +720f : 00000000; +7210 : 00000000; +7211 : 00000000; +7212 : 00000000; +7213 : 00000000; +7214 : 00000000; +7215 : 00000000; +7216 : 00000000; +7217 : 00000000; +7218 : 00000000; +7219 : 00000000; +721a : 00000000; +721b : 00000000; +721c : 00000000; +721d : 00000000; +721e : 00000000; +721f : 00000000; +7220 : 00000000; +7221 : 00000000; +7222 : 00000000; +7223 : 00000000; +7224 : 00000000; +7225 : 00000000; +7226 : 00000000; +7227 : 00000000; +7228 : 00000000; +7229 : 00000000; +722a : 00000000; +722b : 00000000; +722c : 00000000; +722d : 00000000; +722e : 00000000; +722f : 00000000; +7230 : 00000000; +7231 : 00000000; +7232 : 00000000; +7233 : 00000000; +7234 : 00000000; +7235 : 00000000; +7236 : 00000000; +7237 : 00000000; +7238 : 00000000; +7239 : 00000000; +723a : 00000000; +723b : 00000000; +723c : 00000000; +723d : 00000000; +723e : 00000000; +723f : 00000000; +7240 : 00000000; +7241 : 00000000; +7242 : 00000000; +7243 : 00000000; +7244 : 00000000; +7245 : 00000000; +7246 : 00000000; +7247 : 00000000; +7248 : 00000000; +7249 : 00000000; +724a : 00000000; +724b : 00000000; +724c : 00000000; +724d : 00000000; +724e : 00000000; +724f : 00000000; +7250 : 00000000; +7251 : 00000000; +7252 : 00000000; +7253 : 00000000; +7254 : 00000000; +7255 : 00000000; +7256 : 00000000; +7257 : 00000000; +7258 : 00000000; +7259 : 00000000; +725a : 00000000; +725b : 00000000; +725c : 00000000; +725d : 00000000; +725e : 00000000; +725f : 00000000; +7260 : 00000000; +7261 : 00000000; +7262 : 00000000; +7263 : 00000000; +7264 : 00000000; +7265 : 00000000; +7266 : 00000000; +7267 : 00000000; +7268 : 00000000; +7269 : 00000000; +726a : 00000000; +726b : 00000000; +726c : 00000000; +726d : 00000000; +726e : 00000000; +726f : 00000000; +7270 : 00000000; +7271 : 00000000; +7272 : 00000000; +7273 : 00000000; +7274 : 00000000; +7275 : 00000000; +7276 : 00000000; +7277 : 00000000; +7278 : 00000000; +7279 : 00000000; +727a : 00000000; +727b : 00000000; +727c : 00000000; +727d : 00000000; +727e : 00000000; +727f : 00000000; +7280 : 00000000; +7281 : 00000000; +7282 : 00000000; +7283 : 00000000; +7284 : 00000000; +7285 : 00000000; +7286 : 00000000; +7287 : 00000000; +7288 : 00000000; +7289 : 00000000; +728a : 00000000; +728b : 00000000; +728c : 00000000; +728d : 00000000; +728e : 00000000; +728f : 00000000; +7290 : 00000000; +7291 : 00000000; +7292 : 00000000; +7293 : 00000000; +7294 : 00000000; +7295 : 00000000; +7296 : 00000000; +7297 : 00000000; +7298 : 00000000; +7299 : 00000000; +729a : 00000000; +729b : 00000000; +729c : 00000000; +729d : 00000000; +729e : 00000000; +729f : 00000000; +72a0 : 00000000; +72a1 : 00000000; +72a2 : 00000000; +72a3 : 00000000; +72a4 : 00000000; +72a5 : 00000000; +72a6 : 00000000; +72a7 : 00000000; +72a8 : 00000000; +72a9 : 00000000; +72aa : 00000000; +72ab : 00000000; +72ac : 00000000; +72ad : 00000000; +72ae : 00000000; +72af : 00000000; +72b0 : 00000000; +72b1 : 00000000; +72b2 : 00000000; +72b3 : 00000000; +72b4 : 00000000; +72b5 : 00000000; +72b6 : 00000000; +72b7 : 00000000; +72b8 : 00000000; +72b9 : 00000000; +72ba : 00000000; +72bb : 00000000; +72bc : 00000000; +72bd : 00000000; +72be : 00000000; +72bf : 00000000; +72c0 : 00000000; +72c1 : 00000000; +72c2 : 00000000; +72c3 : 00000000; +72c4 : 00000000; +72c5 : 00000000; +72c6 : 00000000; +72c7 : 00000000; +72c8 : 00000000; +72c9 : 00000000; +72ca : 00000000; +72cb : 00000000; +72cc : 00000000; +72cd : 00000000; +72ce : 00000000; +72cf : 00000000; +72d0 : 00000000; +72d1 : 00000000; +72d2 : 00000000; +72d3 : 00000000; +72d4 : 00000000; +72d5 : 00000000; +72d6 : 00000000; +72d7 : 00000000; +72d8 : 00000000; +72d9 : 00000000; +72da : 00000000; +72db : 00000000; +72dc : 00000000; +72dd : 00000000; +72de : 00000000; +72df : 00000000; +72e0 : 00000000; +72e1 : 00000000; +72e2 : 00000000; +72e3 : 00000000; +72e4 : 00000000; +72e5 : 00000000; +72e6 : 00000000; +72e7 : 00000000; +72e8 : 00000000; +72e9 : 00000000; +72ea : 00000000; +72eb : 00000000; +72ec : 00000000; +72ed : 00000000; +72ee : 00000000; +72ef : 00000000; +72f0 : 00000000; +72f1 : 00000000; +72f2 : 00000000; +72f3 : 00000000; +72f4 : 00000000; +72f5 : 00000000; +72f6 : 00000000; +72f7 : 00000000; +72f8 : 00000000; +72f9 : 00000000; +72fa : 00000000; +72fb : 00000000; +72fc : 00000000; +72fd : 00000000; +72fe : 00000000; +72ff : 00000000; +7300 : 00000000; +7301 : 00000000; +7302 : 00000000; +7303 : 00000000; +7304 : 00000000; +7305 : 00000000; +7306 : 00000000; +7307 : 00000000; +7308 : 00000000; +7309 : 00000000; +730a : 00000000; +730b : 00000000; +730c : 00000000; +730d : 00000000; +730e : 00000000; +730f : 00000000; +7310 : 00000000; +7311 : 00000000; +7312 : 00000000; +7313 : 00000000; +7314 : 00000000; +7315 : 00000000; +7316 : 00000000; +7317 : 00000000; +7318 : 00000000; +7319 : 00000000; +731a : 00000000; +731b : 00000000; +731c : 00000000; +731d : 00000000; +731e : 00000000; +731f : 00000000; +7320 : 00000000; +7321 : 00000000; +7322 : 00000000; +7323 : 00000000; +7324 : 00000000; +7325 : 00000000; +7326 : 00000000; +7327 : 00000000; +7328 : 00000000; +7329 : 00000000; +732a : 00000000; +732b : 00000000; +732c : 00000000; +732d : 00000000; +732e : 00000000; +732f : 00000000; +7330 : 00000000; +7331 : 00000000; +7332 : 00000000; +7333 : 00000000; +7334 : 00000000; +7335 : 00000000; +7336 : 00000000; +7337 : 00000000; +7338 : 00000000; +7339 : 00000000; +733a : 00000000; +733b : 00000000; +733c : 00000000; +733d : 00000000; +733e : 00000000; +733f : 00000000; +7340 : 00000000; +7341 : 00000000; +7342 : 00000000; +7343 : 00000000; +7344 : 00000000; +7345 : 00000000; +7346 : 00000000; +7347 : 00000000; +7348 : 00000000; +7349 : 00000000; +734a : 00000000; +734b : 00000000; +734c : 00000000; +734d : 00000000; +734e : 00000000; +734f : 00000000; +7350 : 00000000; +7351 : 00000000; +7352 : 00000000; +7353 : 00000000; +7354 : 00000000; +7355 : 00000000; +7356 : 00000000; +7357 : 00000000; +7358 : 00000000; +7359 : 00000000; +735a : 00000000; +735b : 00000000; +735c : 00000000; +735d : 00000000; +735e : 00000000; +735f : 00000000; +7360 : 00000000; +7361 : 00000000; +7362 : 00000000; +7363 : 00000000; +7364 : 00000000; +7365 : 00000000; +7366 : 00000000; +7367 : 00000000; +7368 : 00000000; +7369 : 00000000; +736a : 00000000; +736b : 00000000; +736c : 00000000; +736d : 00000000; +736e : 00000000; +736f : 00000000; +7370 : 00000000; +7371 : 00000000; +7372 : 00000000; +7373 : 00000000; +7374 : 00000000; +7375 : 00000000; +7376 : 00000000; +7377 : 00000000; +7378 : 00000000; +7379 : 00000000; +737a : 00000000; +737b : 00000000; +737c : 00000000; +737d : 00000000; +737e : 00000000; +737f : 00000000; +7380 : 00000000; +7381 : 00000000; +7382 : 00000000; +7383 : 00000000; +7384 : 00000000; +7385 : 00000000; +7386 : 00000000; +7387 : 00000000; +7388 : 00000000; +7389 : 00000000; +738a : 00000000; +738b : 00000000; +738c : 00000000; +738d : 00000000; +738e : 00000000; +738f : 00000000; +7390 : 00000000; +7391 : 00000000; +7392 : 00000000; +7393 : 00000000; +7394 : 00000000; +7395 : 00000000; +7396 : 00000000; +7397 : 00000000; +7398 : 00000000; +7399 : 00000000; +739a : 00000000; +739b : 00000000; +739c : 00000000; +739d : 00000000; +739e : 00000000; +739f : 00000000; +73a0 : 00000000; +73a1 : 00000000; +73a2 : 00000000; +73a3 : 00000000; +73a4 : 00000000; +73a5 : 00000000; +73a6 : 00000000; +73a7 : 00000000; +73a8 : 00000000; +73a9 : 00000000; +73aa : 00000000; +73ab : 00000000; +73ac : 00000000; +73ad : 00000000; +73ae : 00000000; +73af : 00000000; +73b0 : 00000000; +73b1 : 00000000; +73b2 : 00000000; +73b3 : 00000000; +73b4 : 00000000; +73b5 : 00000000; +73b6 : 00000000; +73b7 : 00000000; +73b8 : 00000000; +73b9 : 00000000; +73ba : 00000000; +73bb : 00000000; +73bc : 00000000; +73bd : 00000000; +73be : 00000000; +73bf : 00000000; +73c0 : 00000000; +73c1 : 00000000; +73c2 : 00000000; +73c3 : 00000000; +73c4 : 00000000; +73c5 : 00000000; +73c6 : 00000000; +73c7 : 00000000; +73c8 : 00000000; +73c9 : 00000000; +73ca : 00000000; +73cb : 00000000; +73cc : 00000000; +73cd : 00000000; +73ce : 00000000; +73cf : 00000000; +73d0 : 00000000; +73d1 : 00000000; +73d2 : 00000000; +73d3 : 00000000; +73d4 : 00000000; +73d5 : 00000000; +73d6 : 00000000; +73d7 : 00000000; +73d8 : 00000000; +73d9 : 00000000; +73da : 00000000; +73db : 00000000; +73dc : 00000000; +73dd : 00000000; +73de : 00000000; +73df : 00000000; +73e0 : 00000000; +73e1 : 00000000; +73e2 : 00000000; +73e3 : 00000000; +73e4 : 00000000; +73e5 : 00000000; +73e6 : 00000000; +73e7 : 00000000; +73e8 : 00000000; +73e9 : 00000000; +73ea : 00000000; +73eb : 00000000; +73ec : 00000000; +73ed : 00000000; +73ee : 00000000; +73ef : 00000000; +73f0 : 00000000; +73f1 : 00000000; +73f2 : 00000000; +73f3 : 00000000; +73f4 : 00000000; +73f5 : 00000000; +73f6 : 00000000; +73f7 : 00000000; +73f8 : 00000000; +73f9 : 00000000; +73fa : 00000000; +73fb : 00000000; +73fc : 00000000; +73fd : 00000000; +73fe : 00000000; +73ff : 00000000; +7400 : 00000000; +7401 : 00000000; +7402 : 00000000; +7403 : 00000000; +7404 : 00000000; +7405 : 00000000; +7406 : 00000000; +7407 : 00000000; +7408 : 00000000; +7409 : 00000000; +740a : 00000000; +740b : 00000000; +740c : 00000000; +740d : 00000000; +740e : 00000000; +740f : 00000000; +7410 : 00000000; +7411 : 00000000; +7412 : 00000000; +7413 : 00000000; +7414 : 00000000; +7415 : 00000000; +7416 : 00000000; +7417 : 00000000; +7418 : 00000000; +7419 : 00000000; +741a : 00000000; +741b : 00000000; +741c : 00000000; +741d : 00000000; +741e : 00000000; +741f : 00000000; +7420 : 00000000; +7421 : 00000000; +7422 : 00000000; +7423 : 00000000; +7424 : 00000000; +7425 : 00000000; +7426 : 00000000; +7427 : 00000000; +7428 : 00000000; +7429 : 00000000; +742a : 00000000; +742b : 00000000; +742c : 00000000; +742d : 00000000; +742e : 00000000; +742f : 00000000; +7430 : 00000000; +7431 : 00000000; +7432 : 00000000; +7433 : 00000000; +7434 : 00000000; +7435 : 00000000; +7436 : 00000000; +7437 : 00000000; +7438 : 00000000; +7439 : 00000000; +743a : 00000000; +743b : 00000000; +743c : 00000000; +743d : 00000000; +743e : 00000000; +743f : 00000000; +7440 : 00000000; +7441 : 00000000; +7442 : 00000000; +7443 : 00000000; +7444 : 00000000; +7445 : 00000000; +7446 : 00000000; +7447 : 00000000; +7448 : 00000000; +7449 : 00000000; +744a : 00000000; +744b : 00000000; +744c : 00000000; +744d : 00000000; +744e : 00000000; +744f : 00000000; +7450 : 00000000; +7451 : 00000000; +7452 : 00000000; +7453 : 00000000; +7454 : 00000000; +7455 : 00000000; +7456 : 00000000; +7457 : 00000000; +7458 : 00000000; +7459 : 00000000; +745a : 00000000; +745b : 00000000; +745c : 00000000; +745d : 00000000; +745e : 00000000; +745f : 00000000; +7460 : 00000000; +7461 : 00000000; +7462 : 00000000; +7463 : 00000000; +7464 : 00000000; +7465 : 00000000; +7466 : 00000000; +7467 : 00000000; +7468 : 00000000; +7469 : 00000000; +746a : 00000000; +746b : 00000000; +746c : 00000000; +746d : 00000000; +746e : 00000000; +746f : 00000000; +7470 : 00000000; +7471 : 00000000; +7472 : 00000000; +7473 : 00000000; +7474 : 00000000; +7475 : 00000000; +7476 : 00000000; +7477 : 00000000; +7478 : 00000000; +7479 : 00000000; +747a : 00000000; +747b : 00000000; +747c : 00000000; +747d : 00000000; +747e : 00000000; +747f : 00000000; +7480 : 00000000; +7481 : 00000000; +7482 : 00000000; +7483 : 00000000; +7484 : 00000000; +7485 : 00000000; +7486 : 00000000; +7487 : 00000000; +7488 : 00000000; +7489 : 00000000; +748a : 00000000; +748b : 00000000; +748c : 00000000; +748d : 00000000; +748e : 00000000; +748f : 00000000; +7490 : 00000000; +7491 : 00000000; +7492 : 00000000; +7493 : 00000000; +7494 : 00000000; +7495 : 00000000; +7496 : 00000000; +7497 : 00000000; +7498 : 00000000; +7499 : 00000000; +749a : 00000000; +749b : 00000000; +749c : 00000000; +749d : 00000000; +749e : 00000000; +749f : 00000000; +74a0 : 00000000; +74a1 : 00000000; +74a2 : 00000000; +74a3 : 00000000; +74a4 : 00000000; +74a5 : 00000000; +74a6 : 00000000; +74a7 : 00000000; +74a8 : 00000000; +74a9 : 00000000; +74aa : 00000000; +74ab : 00000000; +74ac : 00000000; +74ad : 00000000; +74ae : 00000000; +74af : 00000000; +74b0 : 00000000; +74b1 : 00000000; +74b2 : 00000000; +74b3 : 00000000; +74b4 : 00000000; +74b5 : 00000000; +74b6 : 00000000; +74b7 : 00000000; +74b8 : 00000000; +74b9 : 00000000; +74ba : 00000000; +74bb : 00000000; +74bc : 00000000; +74bd : 00000000; +74be : 00000000; +74bf : 00000000; +74c0 : 00000000; +74c1 : 00000000; +74c2 : 00000000; +74c3 : 00000000; +74c4 : 00000000; +74c5 : 00000000; +74c6 : 00000000; +74c7 : 00000000; +74c8 : 00000000; +74c9 : 00000000; +74ca : 00000000; +74cb : 00000000; +74cc : 00000000; +74cd : 00000000; +74ce : 00000000; +74cf : 00000000; +74d0 : 00000000; +74d1 : 00000000; +74d2 : 00000000; +74d3 : 00000000; +74d4 : 00000000; +74d5 : 00000000; +74d6 : 00000000; +74d7 : 00000000; +74d8 : 00000000; +74d9 : 00000000; +74da : 00000000; +74db : 00000000; +74dc : 00000000; +74dd : 00000000; +74de : 00000000; +74df : 00000000; +74e0 : 00000000; +74e1 : 00000000; +74e2 : 00000000; +74e3 : 00000000; +74e4 : 00000000; +74e5 : 00000000; +74e6 : 00000000; +74e7 : 00000000; +74e8 : 00000000; +74e9 : 00000000; +74ea : 00000000; +74eb : 00000000; +74ec : 00000000; +74ed : 00000000; +74ee : 00000000; +74ef : 00000000; +74f0 : 00000000; +74f1 : 00000000; +74f2 : 00000000; +74f3 : 00000000; +74f4 : 00000000; +74f5 : 00000000; +74f6 : 00000000; +74f7 : 00000000; +74f8 : 00000000; +74f9 : 00000000; +74fa : 00000000; +74fb : 00000000; +74fc : 00000000; +74fd : 00000000; +74fe : 00000000; +74ff : 00000000; +7500 : 00000000; +7501 : 00000000; +7502 : 00000000; +7503 : 00000000; +7504 : 00000000; +7505 : 00000000; +7506 : 00000000; +7507 : 00000000; +7508 : 00000000; +7509 : 00000000; +750a : 00000000; +750b : 00000000; +750c : 00000000; +750d : 00000000; +750e : 00000000; +750f : 00000000; +7510 : 00000000; +7511 : 00000000; +7512 : 00000000; +7513 : 00000000; +7514 : 00000000; +7515 : 00000000; +7516 : 00000000; +7517 : 00000000; +7518 : 00000000; +7519 : 00000000; +751a : 00000000; +751b : 00000000; +751c : 00000000; +751d : 00000000; +751e : 00000000; +751f : 00000000; +7520 : 00000000; +7521 : 00000000; +7522 : 00000000; +7523 : 00000000; +7524 : 00000000; +7525 : 00000000; +7526 : 00000000; +7527 : 00000000; +7528 : 00000000; +7529 : 00000000; +752a : 00000000; +752b : 00000000; +752c : 00000000; +752d : 00000000; +752e : 00000000; +752f : 00000000; +7530 : 00000000; +7531 : 00000000; +7532 : 00000000; +7533 : 00000000; +7534 : 00000000; +7535 : 00000000; +7536 : 00000000; +7537 : 00000000; +7538 : 00000000; +7539 : 00000000; +753a : 00000000; +753b : 00000000; +753c : 00000000; +753d : 00000000; +753e : 00000000; +753f : 00000000; +7540 : 00000000; +7541 : 00000000; +7542 : 00000000; +7543 : 00000000; +7544 : 00000000; +7545 : 00000000; +7546 : 00000000; +7547 : 00000000; +7548 : 00000000; +7549 : 00000000; +754a : 00000000; +754b : 00000000; +754c : 00000000; +754d : 00000000; +754e : 00000000; +754f : 00000000; +7550 : 00000000; +7551 : 00000000; +7552 : 00000000; +7553 : 00000000; +7554 : 00000000; +7555 : 00000000; +7556 : 00000000; +7557 : 00000000; +7558 : 00000000; +7559 : 00000000; +755a : 00000000; +755b : 00000000; +755c : 00000000; +755d : 00000000; +755e : 00000000; +755f : 00000000; +7560 : 00000000; +7561 : 00000000; +7562 : 00000000; +7563 : 00000000; +7564 : 00000000; +7565 : 00000000; +7566 : 00000000; +7567 : 00000000; +7568 : 00000000; +7569 : 00000000; +756a : 00000000; +756b : 00000000; +756c : 00000000; +756d : 00000000; +756e : 00000000; +756f : 00000000; +7570 : 00000000; +7571 : 00000000; +7572 : 00000000; +7573 : 00000000; +7574 : 00000000; +7575 : 00000000; +7576 : 00000000; +7577 : 00000000; +7578 : 00000000; +7579 : 00000000; +757a : 00000000; +757b : 00000000; +757c : 00000000; +757d : 00000000; +757e : 00000000; +757f : 00000000; +7580 : 00000000; +7581 : 00000000; +7582 : 00000000; +7583 : 00000000; +7584 : 00000000; +7585 : 00000000; +7586 : 00000000; +7587 : 00000000; +7588 : 00000000; +7589 : 00000000; +758a : 00000000; +758b : 00000000; +758c : 00000000; +758d : 00000000; +758e : 00000000; +758f : 00000000; +7590 : 00000000; +7591 : 00000000; +7592 : 00000000; +7593 : 00000000; +7594 : 00000000; +7595 : 00000000; +7596 : 00000000; +7597 : 00000000; +7598 : 00000000; +7599 : 00000000; +759a : 00000000; +759b : 00000000; +759c : 00000000; +759d : 00000000; +759e : 00000000; +759f : 00000000; +75a0 : 00000000; +75a1 : 00000000; +75a2 : 00000000; +75a3 : 00000000; +75a4 : 00000000; +75a5 : 00000000; +75a6 : 00000000; +75a7 : 00000000; +75a8 : 00000000; +75a9 : 00000000; +75aa : 00000000; +75ab : 00000000; +75ac : 00000000; +75ad : 00000000; +75ae : 00000000; +75af : 00000000; +75b0 : 00000000; +75b1 : 00000000; +75b2 : 00000000; +75b3 : 00000000; +75b4 : 00000000; +75b5 : 00000000; +75b6 : 00000000; +75b7 : 00000000; +75b8 : 00000000; +75b9 : 00000000; +75ba : 00000000; +75bb : 00000000; +75bc : 00000000; +75bd : 00000000; +75be : 00000000; +75bf : 00000000; +75c0 : 00000000; +75c1 : 00000000; +75c2 : 00000000; +75c3 : 00000000; +75c4 : 00000000; +75c5 : 00000000; +75c6 : 00000000; +75c7 : 00000000; +75c8 : 00000000; +75c9 : 00000000; +75ca : 00000000; +75cb : 00000000; +75cc : 00000000; +75cd : 00000000; +75ce : 00000000; +75cf : 00000000; +75d0 : 00000000; +75d1 : 00000000; +75d2 : 00000000; +75d3 : 00000000; +75d4 : 00000000; +75d5 : 00000000; +75d6 : 00000000; +75d7 : 00000000; +75d8 : 00000000; +75d9 : 00000000; +75da : 00000000; +75db : 00000000; +75dc : 00000000; +75dd : 00000000; +75de : 00000000; +75df : 00000000; +75e0 : 00000000; +75e1 : 00000000; +75e2 : 00000000; +75e3 : 00000000; +75e4 : 00000000; +75e5 : 00000000; +75e6 : 00000000; +75e7 : 00000000; +75e8 : 00000000; +75e9 : 00000000; +75ea : 00000000; +75eb : 00000000; +75ec : 00000000; +75ed : 00000000; +75ee : 00000000; +75ef : 00000000; +75f0 : 00000000; +75f1 : 00000000; +75f2 : 00000000; +75f3 : 00000000; +75f4 : 00000000; +75f5 : 00000000; +75f6 : 00000000; +75f7 : 00000000; +75f8 : 00000000; +75f9 : 00000000; +75fa : 00000000; +75fb : 00000000; +75fc : 00000000; +75fd : 00000000; +75fe : 00000000; +75ff : 00000000; +7600 : 00000000; +7601 : 00000000; +7602 : 00000000; +7603 : 00000000; +7604 : 00000000; +7605 : 00000000; +7606 : 00000000; +7607 : 00000000; +7608 : 00000000; +7609 : 00000000; +760a : 00000000; +760b : 00000000; +760c : 00000000; +760d : 00000000; +760e : 00000000; +760f : 00000000; +7610 : 00000000; +7611 : 00000000; +7612 : 00000000; +7613 : 00000000; +7614 : 00000000; +7615 : 00000000; +7616 : 00000000; +7617 : 00000000; +7618 : 00000000; +7619 : 00000000; +761a : 00000000; +761b : 00000000; +761c : 00000000; +761d : 00000000; +761e : 00000000; +761f : 00000000; +7620 : 00000000; +7621 : 00000000; +7622 : 00000000; +7623 : 00000000; +7624 : 00000000; +7625 : 00000000; +7626 : 00000000; +7627 : 00000000; +7628 : 00000000; +7629 : 00000000; +762a : 00000000; +762b : 00000000; +762c : 00000000; +762d : 00000000; +762e : 00000000; +762f : 00000000; +7630 : 00000000; +7631 : 00000000; +7632 : 00000000; +7633 : 00000000; +7634 : 00000000; +7635 : 00000000; +7636 : 00000000; +7637 : 00000000; +7638 : 00000000; +7639 : 00000000; +763a : 00000000; +763b : 00000000; +763c : 00000000; +763d : 00000000; +763e : 00000000; +763f : 00000000; +7640 : 00000000; +7641 : 00000000; +7642 : 00000000; +7643 : 00000000; +7644 : 00000000; +7645 : 00000000; +7646 : 00000000; +7647 : 00000000; +7648 : 00000000; +7649 : 00000000; +764a : 00000000; +764b : 00000000; +764c : 00000000; +764d : 00000000; +764e : 00000000; +764f : 00000000; +7650 : 00000000; +7651 : 00000000; +7652 : 00000000; +7653 : 00000000; +7654 : 00000000; +7655 : 00000000; +7656 : 00000000; +7657 : 00000000; +7658 : 00000000; +7659 : 00000000; +765a : 00000000; +765b : 00000000; +765c : 00000000; +765d : 00000000; +765e : 00000000; +765f : 00000000; +7660 : 00000000; +7661 : 00000000; +7662 : 00000000; +7663 : 00000000; +7664 : 00000000; +7665 : 00000000; +7666 : 00000000; +7667 : 00000000; +7668 : 00000000; +7669 : 00000000; +766a : 00000000; +766b : 00000000; +766c : 00000000; +766d : 00000000; +766e : 00000000; +766f : 00000000; +7670 : 00000000; +7671 : 00000000; +7672 : 00000000; +7673 : 00000000; +7674 : 00000000; +7675 : 00000000; +7676 : 00000000; +7677 : 00000000; +7678 : 00000000; +7679 : 00000000; +767a : 00000000; +767b : 00000000; +767c : 00000000; +767d : 00000000; +767e : 00000000; +767f : 00000000; +7680 : 00000000; +7681 : 00000000; +7682 : 00000000; +7683 : 00000000; +7684 : 00000000; +7685 : 00000000; +7686 : 00000000; +7687 : 00000000; +7688 : 00000000; +7689 : 00000000; +768a : 00000000; +768b : 00000000; +768c : 00000000; +768d : 00000000; +768e : 00000000; +768f : 00000000; +7690 : 00000000; +7691 : 00000000; +7692 : 00000000; +7693 : 00000000; +7694 : 00000000; +7695 : 00000000; +7696 : 00000000; +7697 : 00000000; +7698 : 00000000; +7699 : 00000000; +769a : 00000000; +769b : 00000000; +769c : 00000000; +769d : 00000000; +769e : 00000000; +769f : 00000000; +76a0 : 00000000; +76a1 : 00000000; +76a2 : 00000000; +76a3 : 00000000; +76a4 : 00000000; +76a5 : 00000000; +76a6 : 00000000; +76a7 : 00000000; +76a8 : 00000000; +76a9 : 00000000; +76aa : 00000000; +76ab : 00000000; +76ac : 00000000; +76ad : 00000000; +76ae : 00000000; +76af : 00000000; +76b0 : 00000000; +76b1 : 00000000; +76b2 : 00000000; +76b3 : 00000000; +76b4 : 00000000; +76b5 : 00000000; +76b6 : 00000000; +76b7 : 00000000; +76b8 : 00000000; +76b9 : 00000000; +76ba : 00000000; +76bb : 00000000; +76bc : 00000000; +76bd : 00000000; +76be : 00000000; +76bf : 00000000; +76c0 : 00000000; +76c1 : 00000000; +76c2 : 00000000; +76c3 : 00000000; +76c4 : 00000000; +76c5 : 00000000; +76c6 : 00000000; +76c7 : 00000000; +76c8 : 00000000; +76c9 : 00000000; +76ca : 00000000; +76cb : 00000000; +76cc : 00000000; +76cd : 00000000; +76ce : 00000000; +76cf : 00000000; +76d0 : 00000000; +76d1 : 00000000; +76d2 : 00000000; +76d3 : 00000000; +76d4 : 00000000; +76d5 : 00000000; +76d6 : 00000000; +76d7 : 00000000; +76d8 : 00000000; +76d9 : 00000000; +76da : 00000000; +76db : 00000000; +76dc : 00000000; +76dd : 00000000; +76de : 00000000; +76df : 00000000; +76e0 : 00000000; +76e1 : 00000000; +76e2 : 00000000; +76e3 : 00000000; +76e4 : 00000000; +76e5 : 00000000; +76e6 : 00000000; +76e7 : 00000000; +76e8 : 00000000; +76e9 : 00000000; +76ea : 00000000; +76eb : 00000000; +76ec : 00000000; +76ed : 00000000; +76ee : 00000000; +76ef : 00000000; +76f0 : 00000000; +76f1 : 00000000; +76f2 : 00000000; +76f3 : 00000000; +76f4 : 00000000; +76f5 : 00000000; +76f6 : 00000000; +76f7 : 00000000; +76f8 : 00000000; +76f9 : 00000000; +76fa : 00000000; +76fb : 00000000; +76fc : 00000000; +76fd : 00000000; +76fe : 00000000; +76ff : 00000000; +7700 : 00000000; +7701 : 00000000; +7702 : 00000000; +7703 : 00000000; +7704 : 00000000; +7705 : 00000000; +7706 : 00000000; +7707 : 00000000; +7708 : 00000000; +7709 : 00000000; +770a : 00000000; +770b : 00000000; +770c : 00000000; +770d : 00000000; +770e : 00000000; +770f : 00000000; +7710 : 00000000; +7711 : 00000000; +7712 : 00000000; +7713 : 00000000; +7714 : 00000000; +7715 : 00000000; +7716 : 00000000; +7717 : 00000000; +7718 : 00000000; +7719 : 00000000; +771a : 00000000; +771b : 00000000; +771c : 00000000; +771d : 00000000; +771e : 00000000; +771f : 00000000; +7720 : 00000000; +7721 : 00000000; +7722 : 00000000; +7723 : 00000000; +7724 : 00000000; +7725 : 00000000; +7726 : 00000000; +7727 : 00000000; +7728 : 00000000; +7729 : 00000000; +772a : 00000000; +772b : 00000000; +772c : 00000000; +772d : 00000000; +772e : 00000000; +772f : 00000000; +7730 : 00000000; +7731 : 00000000; +7732 : 00000000; +7733 : 00000000; +7734 : 00000000; +7735 : 00000000; +7736 : 00000000; +7737 : 00000000; +7738 : 00000000; +7739 : 00000000; +773a : 00000000; +773b : 00000000; +773c : 00000000; +773d : 00000000; +773e : 00000000; +773f : 00000000; +7740 : 00000000; +7741 : 00000000; +7742 : 00000000; +7743 : 00000000; +7744 : 00000000; +7745 : 00000000; +7746 : 00000000; +7747 : 00000000; +7748 : 00000000; +7749 : 00000000; +774a : 00000000; +774b : 00000000; +774c : 00000000; +774d : 00000000; +774e : 00000000; +774f : 00000000; +7750 : 00000000; +7751 : 00000000; +7752 : 00000000; +7753 : 00000000; +7754 : 00000000; +7755 : 00000000; +7756 : 00000000; +7757 : 00000000; +7758 : 00000000; +7759 : 00000000; +775a : 00000000; +775b : 00000000; +775c : 00000000; +775d : 00000000; +775e : 00000000; +775f : 00000000; +7760 : 00000000; +7761 : 00000000; +7762 : 00000000; +7763 : 00000000; +7764 : 00000000; +7765 : 00000000; +7766 : 00000000; +7767 : 00000000; +7768 : 00000000; +7769 : 00000000; +776a : 00000000; +776b : 00000000; +776c : 00000000; +776d : 00000000; +776e : 00000000; +776f : 00000000; +7770 : 00000000; +7771 : 00000000; +7772 : 00000000; +7773 : 00000000; +7774 : 00000000; +7775 : 00000000; +7776 : 00000000; +7777 : 00000000; +7778 : 00000000; +7779 : 00000000; +777a : 00000000; +777b : 00000000; +777c : 00000000; +777d : 00000000; +777e : 00000000; +777f : 00000000; +7780 : 00000000; +7781 : 00000000; +7782 : 00000000; +7783 : 00000000; +7784 : 00000000; +7785 : 00000000; +7786 : 00000000; +7787 : 00000000; +7788 : 00000000; +7789 : 00000000; +778a : 00000000; +778b : 00000000; +778c : 00000000; +778d : 00000000; +778e : 00000000; +778f : 00000000; +7790 : 00000000; +7791 : 00000000; +7792 : 00000000; +7793 : 00000000; +7794 : 00000000; +7795 : 00000000; +7796 : 00000000; +7797 : 00000000; +7798 : 00000000; +7799 : 00000000; +779a : 00000000; +779b : 00000000; +779c : 00000000; +779d : 00000000; +779e : 00000000; +779f : 00000000; +77a0 : 00000000; +77a1 : 00000000; +77a2 : 00000000; +77a3 : 00000000; +77a4 : 00000000; +77a5 : 00000000; +77a6 : 00000000; +77a7 : 00000000; +77a8 : 00000000; +77a9 : 00000000; +77aa : 00000000; +77ab : 00000000; +77ac : 00000000; +77ad : 00000000; +77ae : 00000000; +77af : 00000000; +77b0 : 00000000; +77b1 : 00000000; +77b2 : 00000000; +77b3 : 00000000; +77b4 : 00000000; +77b5 : 00000000; +77b6 : 00000000; +77b7 : 00000000; +77b8 : 00000000; +77b9 : 00000000; +77ba : 00000000; +77bb : 00000000; +77bc : 00000000; +77bd : 00000000; +77be : 00000000; +77bf : 00000000; +77c0 : 00000000; +77c1 : 00000000; +77c2 : 00000000; +77c3 : 00000000; +77c4 : 00000000; +77c5 : 00000000; +77c6 : 00000000; +77c7 : 00000000; +77c8 : 00000000; +77c9 : 00000000; +77ca : 00000000; +77cb : 00000000; +77cc : 00000000; +77cd : 00000000; +77ce : 00000000; +77cf : 00000000; +77d0 : 00000000; +77d1 : 00000000; +77d2 : 00000000; +77d3 : 00000000; +77d4 : 00000000; +77d5 : 00000000; +77d6 : 00000000; +77d7 : 00000000; +77d8 : 00000000; +77d9 : 00000000; +77da : 00000000; +77db : 00000000; +77dc : 00000000; +77dd : 00000000; +77de : 00000000; +77df : 00000000; +77e0 : 00000000; +77e1 : 00000000; +77e2 : 00000000; +77e3 : 00000000; +77e4 : 00000000; +77e5 : 00000000; +77e6 : 00000000; +77e7 : 00000000; +77e8 : 00000000; +77e9 : 00000000; +77ea : 00000000; +77eb : 00000000; +77ec : 00000000; +77ed : 00000000; +77ee : 00000000; +77ef : 00000000; +77f0 : 00000000; +77f1 : 00000000; +77f2 : 00000000; +77f3 : 00000000; +77f4 : 00000000; +77f5 : 00000000; +77f6 : 00000000; +77f7 : 00000000; +77f8 : 00000000; +77f9 : 00000000; +77fa : 00000000; +77fb : 00000000; +77fc : 00000000; +77fd : 00000000; +77fe : 00000000; +77ff : 00000000; +7800 : 00000000; +7801 : 00000000; +7802 : 00000000; +7803 : 00000000; +7804 : 00000000; +7805 : 00000000; +7806 : 00000000; +7807 : 00000000; +7808 : 00000000; +7809 : 00000000; +780a : 00000000; +780b : 00000000; +780c : 00000000; +780d : 00000000; +780e : 00000000; +780f : 00000000; +7810 : 00000000; +7811 : 00000000; +7812 : 00000000; +7813 : 00000000; +7814 : 00000000; +7815 : 00000000; +7816 : 00000000; +7817 : 00000000; +7818 : 00000000; +7819 : 00000000; +781a : 00000000; +781b : 00000000; +781c : 00000000; +781d : 00000000; +781e : 00000000; +781f : 00000000; +7820 : 00000000; +7821 : 00000000; +7822 : 00000000; +7823 : 00000000; +7824 : 00000000; +7825 : 00000000; +7826 : 00000000; +7827 : 00000000; +7828 : 00000000; +7829 : 00000000; +782a : 00000000; +782b : 00000000; +782c : 00000000; +782d : 00000000; +782e : 00000000; +782f : 00000000; +7830 : 00000000; +7831 : 00000000; +7832 : 00000000; +7833 : 00000000; +7834 : 00000000; +7835 : 00000000; +7836 : 00000000; +7837 : 00000000; +7838 : 00000000; +7839 : 00000000; +783a : 00000000; +783b : 00000000; +783c : 00000000; +783d : 00000000; +783e : 00000000; +783f : 00000000; +7840 : 00000000; +7841 : 00000000; +7842 : 00000000; +7843 : 00000000; +7844 : 00000000; +7845 : 00000000; +7846 : 00000000; +7847 : 00000000; +7848 : 00000000; +7849 : 00000000; +784a : 00000000; +784b : 00000000; +784c : 00000000; +784d : 00000000; +784e : 00000000; +784f : 00000000; +7850 : 00000000; +7851 : 00000000; +7852 : 00000000; +7853 : 00000000; +7854 : 00000000; +7855 : 00000000; +7856 : 00000000; +7857 : 00000000; +7858 : 00000000; +7859 : 00000000; +785a : 00000000; +785b : 00000000; +785c : 00000000; +785d : 00000000; +785e : 00000000; +785f : 00000000; +7860 : 00000000; +7861 : 00000000; +7862 : 00000000; +7863 : 00000000; +7864 : 00000000; +7865 : 00000000; +7866 : 00000000; +7867 : 00000000; +7868 : 00000000; +7869 : 00000000; +786a : 00000000; +786b : 00000000; +786c : 00000000; +786d : 00000000; +786e : 00000000; +786f : 00000000; +7870 : 00000000; +7871 : 00000000; +7872 : 00000000; +7873 : 00000000; +7874 : 00000000; +7875 : 00000000; +7876 : 00000000; +7877 : 00000000; +7878 : 00000000; +7879 : 00000000; +787a : 00000000; +787b : 00000000; +787c : 00000000; +787d : 00000000; +787e : 00000000; +787f : 00000000; +7880 : 00000000; +7881 : 00000000; +7882 : 00000000; +7883 : 00000000; +7884 : 00000000; +7885 : 00000000; +7886 : 00000000; +7887 : 00000000; +7888 : 00000000; +7889 : 00000000; +788a : 00000000; +788b : 00000000; +788c : 00000000; +788d : 00000000; +788e : 00000000; +788f : 00000000; +7890 : 00000000; +7891 : 00000000; +7892 : 00000000; +7893 : 00000000; +7894 : 00000000; +7895 : 00000000; +7896 : 00000000; +7897 : 00000000; +7898 : 00000000; +7899 : 00000000; +789a : 00000000; +789b : 00000000; +789c : 00000000; +789d : 00000000; +789e : 00000000; +789f : 00000000; +78a0 : 00000000; +78a1 : 00000000; +78a2 : 00000000; +78a3 : 00000000; +78a4 : 00000000; +78a5 : 00000000; +78a6 : 00000000; +78a7 : 00000000; +78a8 : 00000000; +78a9 : 00000000; +78aa : 00000000; +78ab : 00000000; +78ac : 00000000; +78ad : 00000000; +78ae : 00000000; +78af : 00000000; +78b0 : 00000000; +78b1 : 00000000; +78b2 : 00000000; +78b3 : 00000000; +78b4 : 00000000; +78b5 : 00000000; +78b6 : 00000000; +78b7 : 00000000; +78b8 : 00000000; +78b9 : 00000000; +78ba : 00000000; +78bb : 00000000; +78bc : 00000000; +78bd : 00000000; +78be : 00000000; +78bf : 00000000; +78c0 : 00000000; +78c1 : 00000000; +78c2 : 00000000; +78c3 : 00000000; +78c4 : 00000000; +78c5 : 00000000; +78c6 : 00000000; +78c7 : 00000000; +78c8 : 00000000; +78c9 : 00000000; +78ca : 00000000; +78cb : 00000000; +78cc : 00000000; +78cd : 00000000; +78ce : 00000000; +78cf : 00000000; +78d0 : 00000000; +78d1 : 00000000; +78d2 : 00000000; +78d3 : 00000000; +78d4 : 00000000; +78d5 : 00000000; +78d6 : 00000000; +78d7 : 00000000; +78d8 : 00000000; +78d9 : 00000000; +78da : 00000000; +78db : 00000000; +78dc : 00000000; +78dd : 00000000; +78de : 00000000; +78df : 00000000; +78e0 : 00000000; +78e1 : 00000000; +78e2 : 00000000; +78e3 : 00000000; +78e4 : 00000000; +78e5 : 00000000; +78e6 : 00000000; +78e7 : 00000000; +78e8 : 00000000; +78e9 : 00000000; +78ea : 00000000; +78eb : 00000000; +78ec : 00000000; +78ed : 00000000; +78ee : 00000000; +78ef : 00000000; +78f0 : 00000000; +78f1 : 00000000; +78f2 : 00000000; +78f3 : 00000000; +78f4 : 00000000; +78f5 : 00000000; +78f6 : 00000000; +78f7 : 00000000; +78f8 : 00000000; +78f9 : 00000000; +78fa : 00000000; +78fb : 00000000; +78fc : 00000000; +78fd : 00000000; +78fe : 00000000; +78ff : 00000000; +7900 : 00000000; +7901 : 00000000; +7902 : 00000000; +7903 : 00000000; +7904 : 00000000; +7905 : 00000000; +7906 : 00000000; +7907 : 00000000; +7908 : 00000000; +7909 : 00000000; +790a : 00000000; +790b : 00000000; +790c : 00000000; +790d : 00000000; +790e : 00000000; +790f : 00000000; +7910 : 00000000; +7911 : 00000000; +7912 : 00000000; +7913 : 00000000; +7914 : 00000000; +7915 : 00000000; +7916 : 00000000; +7917 : 00000000; +7918 : 00000000; +7919 : 00000000; +791a : 00000000; +791b : 00000000; +791c : 00000000; +791d : 00000000; +791e : 00000000; +791f : 00000000; +7920 : 00000000; +7921 : 00000000; +7922 : 00000000; +7923 : 00000000; +7924 : 00000000; +7925 : 00000000; +7926 : 00000000; +7927 : 00000000; +7928 : 00000000; +7929 : 00000000; +792a : 00000000; +792b : 00000000; +792c : 00000000; +792d : 00000000; +792e : 00000000; +792f : 00000000; +7930 : 00000000; +7931 : 00000000; +7932 : 00000000; +7933 : 00000000; +7934 : 00000000; +7935 : 00000000; +7936 : 00000000; +7937 : 00000000; +7938 : 00000000; +7939 : 00000000; +793a : 00000000; +793b : 00000000; +793c : 00000000; +793d : 00000000; +793e : 00000000; +793f : 00000000; +7940 : 00000000; +7941 : 00000000; +7942 : 00000000; +7943 : 00000000; +7944 : 00000000; +7945 : 00000000; +7946 : 00000000; +7947 : 00000000; +7948 : 00000000; +7949 : 00000000; +794a : 00000000; +794b : 00000000; +794c : 00000000; +794d : 00000000; +794e : 00000000; +794f : 00000000; +7950 : 00000000; +7951 : 00000000; +7952 : 00000000; +7953 : 00000000; +7954 : 00000000; +7955 : 00000000; +7956 : 00000000; +7957 : 00000000; +7958 : 00000000; +7959 : 00000000; +795a : 00000000; +795b : 00000000; +795c : 00000000; +795d : 00000000; +795e : 00000000; +795f : 00000000; +7960 : 00000000; +7961 : 00000000; +7962 : 00000000; +7963 : 00000000; +7964 : 00000000; +7965 : 00000000; +7966 : 00000000; +7967 : 00000000; +7968 : 00000000; +7969 : 00000000; +796a : 00000000; +796b : 00000000; +796c : 00000000; +796d : 00000000; +796e : 00000000; +796f : 00000000; +7970 : 00000000; +7971 : 00000000; +7972 : 00000000; +7973 : 00000000; +7974 : 00000000; +7975 : 00000000; +7976 : 00000000; +7977 : 00000000; +7978 : 00000000; +7979 : 00000000; +797a : 00000000; +797b : 00000000; +797c : 00000000; +797d : 00000000; +797e : 00000000; +797f : 00000000; +7980 : 00000000; +7981 : 00000000; +7982 : 00000000; +7983 : 00000000; +7984 : 00000000; +7985 : 00000000; +7986 : 00000000; +7987 : 00000000; +7988 : 00000000; +7989 : 00000000; +798a : 00000000; +798b : 00000000; +798c : 00000000; +798d : 00000000; +798e : 00000000; +798f : 00000000; +7990 : 00000000; +7991 : 00000000; +7992 : 00000000; +7993 : 00000000; +7994 : 00000000; +7995 : 00000000; +7996 : 00000000; +7997 : 00000000; +7998 : 00000000; +7999 : 00000000; +799a : 00000000; +799b : 00000000; +799c : 00000000; +799d : 00000000; +799e : 00000000; +799f : 00000000; +79a0 : 00000000; +79a1 : 00000000; +79a2 : 00000000; +79a3 : 00000000; +79a4 : 00000000; +79a5 : 00000000; +79a6 : 00000000; +79a7 : 00000000; +79a8 : 00000000; +79a9 : 00000000; +79aa : 00000000; +79ab : 00000000; +79ac : 00000000; +79ad : 00000000; +79ae : 00000000; +79af : 00000000; +79b0 : 00000000; +79b1 : 00000000; +79b2 : 00000000; +79b3 : 00000000; +79b4 : 00000000; +79b5 : 00000000; +79b6 : 00000000; +79b7 : 00000000; +79b8 : 00000000; +79b9 : 00000000; +79ba : 00000000; +79bb : 00000000; +79bc : 00000000; +79bd : 00000000; +79be : 00000000; +79bf : 00000000; +79c0 : 00000000; +79c1 : 00000000; +79c2 : 00000000; +79c3 : 00000000; +79c4 : 00000000; +79c5 : 00000000; +79c6 : 00000000; +79c7 : 00000000; +79c8 : 00000000; +79c9 : 00000000; +79ca : 00000000; +79cb : 00000000; +79cc : 00000000; +79cd : 00000000; +79ce : 00000000; +79cf : 00000000; +79d0 : 00000000; +79d1 : 00000000; +79d2 : 00000000; +79d3 : 00000000; +79d4 : 00000000; +79d5 : 00000000; +79d6 : 00000000; +79d7 : 00000000; +79d8 : 00000000; +79d9 : 00000000; +79da : 00000000; +79db : 00000000; +79dc : 00000000; +79dd : 00000000; +79de : 00000000; +79df : 00000000; +79e0 : 00000000; +79e1 : 00000000; +79e2 : 00000000; +79e3 : 00000000; +79e4 : 00000000; +79e5 : 00000000; +79e6 : 00000000; +79e7 : 00000000; +79e8 : 00000000; +79e9 : 00000000; +79ea : 00000000; +79eb : 00000000; +79ec : 00000000; +79ed : 00000000; +79ee : 00000000; +79ef : 00000000; +79f0 : 00000000; +79f1 : 00000000; +79f2 : 00000000; +79f3 : 00000000; +79f4 : 00000000; +79f5 : 00000000; +79f6 : 00000000; +79f7 : 00000000; +79f8 : 00000000; +79f9 : 00000000; +79fa : 00000000; +79fb : 00000000; +79fc : 00000000; +79fd : 00000000; +79fe : 00000000; +79ff : 00000000; +7a00 : 00000000; +7a01 : 00000000; +7a02 : 00000000; +7a03 : 00000000; +7a04 : 00000000; +7a05 : 00000000; +7a06 : 00000000; +7a07 : 00000000; +7a08 : 00000000; +7a09 : 00000000; +7a0a : 00000000; +7a0b : 00000000; +7a0c : 00000000; +7a0d : 00000000; +7a0e : 00000000; +7a0f : 00000000; +7a10 : 00000000; +7a11 : 00000000; +7a12 : 00000000; +7a13 : 00000000; +7a14 : 00000000; +7a15 : 00000000; +7a16 : 00000000; +7a17 : 00000000; +7a18 : 00000000; +7a19 : 00000000; +7a1a : 00000000; +7a1b : 00000000; +7a1c : 00000000; +7a1d : 00000000; +7a1e : 00000000; +7a1f : 00000000; +7a20 : 00000000; +7a21 : 00000000; +7a22 : 00000000; +7a23 : 00000000; +7a24 : 00000000; +7a25 : 00000000; +7a26 : 00000000; +7a27 : 00000000; +7a28 : 00000000; +7a29 : 00000000; +7a2a : 00000000; +7a2b : 00000000; +7a2c : 00000000; +7a2d : 00000000; +7a2e : 00000000; +7a2f : 00000000; +7a30 : 00000000; +7a31 : 00000000; +7a32 : 00000000; +7a33 : 00000000; +7a34 : 00000000; +7a35 : 00000000; +7a36 : 00000000; +7a37 : 00000000; +7a38 : 00000000; +7a39 : 00000000; +7a3a : 00000000; +7a3b : 00000000; +7a3c : 00000000; +7a3d : 00000000; +7a3e : 00000000; +7a3f : 00000000; +7a40 : 00000000; +7a41 : 00000000; +7a42 : 00000000; +7a43 : 00000000; +7a44 : 00000000; +7a45 : 00000000; +7a46 : 00000000; +7a47 : 00000000; +7a48 : 00000000; +7a49 : 00000000; +7a4a : 00000000; +7a4b : 00000000; +7a4c : 00000000; +7a4d : 00000000; +7a4e : 00000000; +7a4f : 00000000; +7a50 : 00000000; +7a51 : 00000000; +7a52 : 00000000; +7a53 : 00000000; +7a54 : 00000000; +7a55 : 00000000; +7a56 : 00000000; +7a57 : 00000000; +7a58 : 00000000; +7a59 : 00000000; +7a5a : 00000000; +7a5b : 00000000; +7a5c : 00000000; +7a5d : 00000000; +7a5e : 00000000; +7a5f : 00000000; +7a60 : 00000000; +7a61 : 00000000; +7a62 : 00000000; +7a63 : 00000000; +7a64 : 00000000; +7a65 : 00000000; +7a66 : 00000000; +7a67 : 00000000; +7a68 : 00000000; +7a69 : 00000000; +7a6a : 00000000; +7a6b : 00000000; +7a6c : 00000000; +7a6d : 00000000; +7a6e : 00000000; +7a6f : 00000000; +7a70 : 00000000; +7a71 : 00000000; +7a72 : 00000000; +7a73 : 00000000; +7a74 : 00000000; +7a75 : 00000000; +7a76 : 00000000; +7a77 : 00000000; +7a78 : 00000000; +7a79 : 00000000; +7a7a : 00000000; +7a7b : 00000000; +7a7c : 00000000; +7a7d : 00000000; +7a7e : 00000000; +7a7f : 00000000; +7a80 : 00000000; +7a81 : 00000000; +7a82 : 00000000; +7a83 : 00000000; +7a84 : 00000000; +7a85 : 00000000; +7a86 : 00000000; +7a87 : 00000000; +7a88 : 00000000; +7a89 : 00000000; +7a8a : 00000000; +7a8b : 00000000; +7a8c : 00000000; +7a8d : 00000000; +7a8e : 00000000; +7a8f : 00000000; +7a90 : 00000000; +7a91 : 00000000; +7a92 : 00000000; +7a93 : 00000000; +7a94 : 00000000; +7a95 : 00000000; +7a96 : 00000000; +7a97 : 00000000; +7a98 : 00000000; +7a99 : 00000000; +7a9a : 00000000; +7a9b : 00000000; +7a9c : 00000000; +7a9d : 00000000; +7a9e : 00000000; +7a9f : 00000000; +7aa0 : 00000000; +7aa1 : 00000000; +7aa2 : 00000000; +7aa3 : 00000000; +7aa4 : 00000000; +7aa5 : 00000000; +7aa6 : 00000000; +7aa7 : 00000000; +7aa8 : 00000000; +7aa9 : 00000000; +7aaa : 00000000; +7aab : 00000000; +7aac : 00000000; +7aad : 00000000; +7aae : 00000000; +7aaf : 00000000; +7ab0 : 00000000; +7ab1 : 00000000; +7ab2 : 00000000; +7ab3 : 00000000; +7ab4 : 00000000; +7ab5 : 00000000; +7ab6 : 00000000; +7ab7 : 00000000; +7ab8 : 00000000; +7ab9 : 00000000; +7aba : 00000000; +7abb : 00000000; +7abc : 00000000; +7abd : 00000000; +7abe : 00000000; +7abf : 00000000; +7ac0 : 00000000; +7ac1 : 00000000; +7ac2 : 00000000; +7ac3 : 00000000; +7ac4 : 00000000; +7ac5 : 00000000; +7ac6 : 00000000; +7ac7 : 00000000; +7ac8 : 00000000; +7ac9 : 00000000; +7aca : 00000000; +7acb : 00000000; +7acc : 00000000; +7acd : 00000000; +7ace : 00000000; +7acf : 00000000; +7ad0 : 00000000; +7ad1 : 00000000; +7ad2 : 00000000; +7ad3 : 00000000; +7ad4 : 00000000; +7ad5 : 00000000; +7ad6 : 00000000; +7ad7 : 00000000; +7ad8 : 00000000; +7ad9 : 00000000; +7ada : 00000000; +7adb : 00000000; +7adc : 00000000; +7add : 00000000; +7ade : 00000000; +7adf : 00000000; +7ae0 : 00000000; +7ae1 : 00000000; +7ae2 : 00000000; +7ae3 : 00000000; +7ae4 : 00000000; +7ae5 : 00000000; +7ae6 : 00000000; +7ae7 : 00000000; +7ae8 : 00000000; +7ae9 : 00000000; +7aea : 00000000; +7aeb : 00000000; +7aec : 00000000; +7aed : 00000000; +7aee : 00000000; +7aef : 00000000; +7af0 : 00000000; +7af1 : 00000000; +7af2 : 00000000; +7af3 : 00000000; +7af4 : 00000000; +7af5 : 00000000; +7af6 : 00000000; +7af7 : 00000000; +7af8 : 00000000; +7af9 : 00000000; +7afa : 00000000; +7afb : 00000000; +7afc : 00000000; +7afd : 00000000; +7afe : 00000000; +7aff : 00000000; +7b00 : 00000000; +7b01 : 00000000; +7b02 : 00000000; +7b03 : 00000000; +7b04 : 00000000; +7b05 : 00000000; +7b06 : 00000000; +7b07 : 00000000; +7b08 : 00000000; +7b09 : 00000000; +7b0a : 00000000; +7b0b : 00000000; +7b0c : 00000000; +7b0d : 00000000; +7b0e : 00000000; +7b0f : 00000000; +7b10 : 00000000; +7b11 : 00000000; +7b12 : 00000000; +7b13 : 00000000; +7b14 : 00000000; +7b15 : 00000000; +7b16 : 00000000; +7b17 : 00000000; +7b18 : 00000000; +7b19 : 00000000; +7b1a : 00000000; +7b1b : 00000000; +7b1c : 00000000; +7b1d : 00000000; +7b1e : 00000000; +7b1f : 00000000; +7b20 : 00000000; +7b21 : 00000000; +7b22 : 00000000; +7b23 : 00000000; +7b24 : 00000000; +7b25 : 00000000; +7b26 : 00000000; +7b27 : 00000000; +7b28 : 00000000; +7b29 : 00000000; +7b2a : 00000000; +7b2b : 00000000; +7b2c : 00000000; +7b2d : 00000000; +7b2e : 00000000; +7b2f : 00000000; +7b30 : 00000000; +7b31 : 00000000; +7b32 : 00000000; +7b33 : 00000000; +7b34 : 00000000; +7b35 : 00000000; +7b36 : 00000000; +7b37 : 00000000; +7b38 : 00000000; +7b39 : 00000000; +7b3a : 00000000; +7b3b : 00000000; +7b3c : 00000000; +7b3d : 00000000; +7b3e : 00000000; +7b3f : 00000000; +7b40 : 00000000; +7b41 : 00000000; +7b42 : 00000000; +7b43 : 00000000; +7b44 : 00000000; +7b45 : 00000000; +7b46 : 00000000; +7b47 : 00000000; +7b48 : 00000000; +7b49 : 00000000; +7b4a : 00000000; +7b4b : 00000000; +7b4c : 00000000; +7b4d : 00000000; +7b4e : 00000000; +7b4f : 00000000; +7b50 : 00000000; +7b51 : 00000000; +7b52 : 00000000; +7b53 : 00000000; +7b54 : 00000000; +7b55 : 00000000; +7b56 : 00000000; +7b57 : 00000000; +7b58 : 00000000; +7b59 : 00000000; +7b5a : 00000000; +7b5b : 00000000; +7b5c : 00000000; +7b5d : 00000000; +7b5e : 00000000; +7b5f : 00000000; +7b60 : 00000000; +7b61 : 00000000; +7b62 : 00000000; +7b63 : 00000000; +7b64 : 00000000; +7b65 : 00000000; +7b66 : 00000000; +7b67 : 00000000; +7b68 : 00000000; +7b69 : 00000000; +7b6a : 00000000; +7b6b : 00000000; +7b6c : 00000000; +7b6d : 00000000; +7b6e : 00000000; +7b6f : 00000000; +7b70 : 00000000; +7b71 : 00000000; +7b72 : 00000000; +7b73 : 00000000; +7b74 : 00000000; +7b75 : 00000000; +7b76 : 00000000; +7b77 : 00000000; +7b78 : 00000000; +7b79 : 00000000; +7b7a : 00000000; +7b7b : 00000000; +7b7c : 00000000; +7b7d : 00000000; +7b7e : 00000000; +7b7f : 00000000; +7b80 : 00000000; +7b81 : 00000000; +7b82 : 00000000; +7b83 : 00000000; +7b84 : 00000000; +7b85 : 00000000; +7b86 : 00000000; +7b87 : 00000000; +7b88 : 00000000; +7b89 : 00000000; +7b8a : 00000000; +7b8b : 00000000; +7b8c : 00000000; +7b8d : 00000000; +7b8e : 00000000; +7b8f : 00000000; +7b90 : 00000000; +7b91 : 00000000; +7b92 : 00000000; +7b93 : 00000000; +7b94 : 00000000; +7b95 : 00000000; +7b96 : 00000000; +7b97 : 00000000; +7b98 : 00000000; +7b99 : 00000000; +7b9a : 00000000; +7b9b : 00000000; +7b9c : 00000000; +7b9d : 00000000; +7b9e : 00000000; +7b9f : 00000000; +7ba0 : 00000000; +7ba1 : 00000000; +7ba2 : 00000000; +7ba3 : 00000000; +7ba4 : 00000000; +7ba5 : 00000000; +7ba6 : 00000000; +7ba7 : 00000000; +7ba8 : 00000000; +7ba9 : 00000000; +7baa : 00000000; +7bab : 00000000; +7bac : 00000000; +7bad : 00000000; +7bae : 00000000; +7baf : 00000000; +7bb0 : 00000000; +7bb1 : 00000000; +7bb2 : 00000000; +7bb3 : 00000000; +7bb4 : 00000000; +7bb5 : 00000000; +7bb6 : 00000000; +7bb7 : 00000000; +7bb8 : 00000000; +7bb9 : 00000000; +7bba : 00000000; +7bbb : 00000000; +7bbc : 00000000; +7bbd : 00000000; +7bbe : 00000000; +7bbf : 00000000; +7bc0 : 00000000; +7bc1 : 00000000; +7bc2 : 00000000; +7bc3 : 00000000; +7bc4 : 00000000; +7bc5 : 00000000; +7bc6 : 00000000; +7bc7 : 00000000; +7bc8 : 00000000; +7bc9 : 00000000; +7bca : 00000000; +7bcb : 00000000; +7bcc : 00000000; +7bcd : 00000000; +7bce : 00000000; +7bcf : 00000000; +7bd0 : 00000000; +7bd1 : 00000000; +7bd2 : 00000000; +7bd3 : 00000000; +7bd4 : 00000000; +7bd5 : 00000000; +7bd6 : 00000000; +7bd7 : 00000000; +7bd8 : 00000000; +7bd9 : 00000000; +7bda : 00000000; +7bdb : 00000000; +7bdc : 00000000; +7bdd : 00000000; +7bde : 00000000; +7bdf : 00000000; +7be0 : 00000000; +7be1 : 00000000; +7be2 : 00000000; +7be3 : 00000000; +7be4 : 00000000; +7be5 : 00000000; +7be6 : 00000000; +7be7 : 00000000; +7be8 : 00000000; +7be9 : 00000000; +7bea : 00000000; +7beb : 00000000; +7bec : 00000000; +7bed : 00000000; +7bee : 00000000; +7bef : 00000000; +7bf0 : 00000000; +7bf1 : 00000000; +7bf2 : 00000000; +7bf3 : 00000000; +7bf4 : 00000000; +7bf5 : 00000000; +7bf6 : 00000000; +7bf7 : 00000000; +7bf8 : 00000000; +7bf9 : 00000000; +7bfa : 00000000; +7bfb : 00000000; +7bfc : 00000000; +7bfd : 00000000; +7bfe : 00000000; +7bff : 00000000; +7c00 : 00000000; +7c01 : 00000000; +7c02 : 00000000; +7c03 : 00000000; +7c04 : 00000000; +7c05 : 00000000; +7c06 : 00000000; +7c07 : 00000000; +7c08 : 00000000; +7c09 : 00000000; +7c0a : 00000000; +7c0b : 00000000; +7c0c : 00000000; +7c0d : 00000000; +7c0e : 00000000; +7c0f : 00000000; +7c10 : 00000000; +7c11 : 00000000; +7c12 : 00000000; +7c13 : 00000000; +7c14 : 00000000; +7c15 : 00000000; +7c16 : 00000000; +7c17 : 00000000; +7c18 : 00000000; +7c19 : 00000000; +7c1a : 00000000; +7c1b : 00000000; +7c1c : 00000000; +7c1d : 00000000; +7c1e : 00000000; +7c1f : 00000000; +7c20 : 00000000; +7c21 : 00000000; +7c22 : 00000000; +7c23 : 00000000; +7c24 : 00000000; +7c25 : 00000000; +7c26 : 00000000; +7c27 : 00000000; +7c28 : 00000000; +7c29 : 00000000; +7c2a : 00000000; +7c2b : 00000000; +7c2c : 00000000; +7c2d : 00000000; +7c2e : 00000000; +7c2f : 00000000; +7c30 : 00000000; +7c31 : 00000000; +7c32 : 00000000; +7c33 : 00000000; +7c34 : 00000000; +7c35 : 00000000; +7c36 : 00000000; +7c37 : 00000000; +7c38 : 00000000; +7c39 : 00000000; +7c3a : 00000000; +7c3b : 00000000; +7c3c : 00000000; +7c3d : 00000000; +7c3e : 00000000; +7c3f : 00000000; +7c40 : 00000000; +7c41 : 00000000; +7c42 : 00000000; +7c43 : 00000000; +7c44 : 00000000; +7c45 : 00000000; +7c46 : 00000000; +7c47 : 00000000; +7c48 : 00000000; +7c49 : 00000000; +7c4a : 00000000; +7c4b : 00000000; +7c4c : 00000000; +7c4d : 00000000; +7c4e : 00000000; +7c4f : 00000000; +7c50 : 00000000; +7c51 : 00000000; +7c52 : 00000000; +7c53 : 00000000; +7c54 : 00000000; +7c55 : 00000000; +7c56 : 00000000; +7c57 : 00000000; +7c58 : 00000000; +7c59 : 00000000; +7c5a : 00000000; +7c5b : 00000000; +7c5c : 00000000; +7c5d : 00000000; +7c5e : 00000000; +7c5f : 00000000; +7c60 : 00000000; +7c61 : 00000000; +7c62 : 00000000; +7c63 : 00000000; +7c64 : 00000000; +7c65 : 00000000; +7c66 : 00000000; +7c67 : 00000000; +7c68 : 00000000; +7c69 : 00000000; +7c6a : 00000000; +7c6b : 00000000; +7c6c : 00000000; +7c6d : 00000000; +7c6e : 00000000; +7c6f : 00000000; +7c70 : 00000000; +7c71 : 00000000; +7c72 : 00000000; +7c73 : 00000000; +7c74 : 00000000; +7c75 : 00000000; +7c76 : 00000000; +7c77 : 00000000; +7c78 : 00000000; +7c79 : 00000000; +7c7a : 00000000; +7c7b : 00000000; +7c7c : 00000000; +7c7d : 00000000; +7c7e : 00000000; +7c7f : 00000000; +7c80 : 00000000; +7c81 : 00000000; +7c82 : 00000000; +7c83 : 00000000; +7c84 : 00000000; +7c85 : 00000000; +7c86 : 00000000; +7c87 : 00000000; +7c88 : 00000000; +7c89 : 00000000; +7c8a : 00000000; +7c8b : 00000000; +7c8c : 00000000; +7c8d : 00000000; +7c8e : 00000000; +7c8f : 00000000; +7c90 : 00000000; +7c91 : 00000000; +7c92 : 00000000; +7c93 : 00000000; +7c94 : 00000000; +7c95 : 00000000; +7c96 : 00000000; +7c97 : 00000000; +7c98 : 00000000; +7c99 : 00000000; +7c9a : 00000000; +7c9b : 00000000; +7c9c : 00000000; +7c9d : 00000000; +7c9e : 00000000; +7c9f : 00000000; +7ca0 : 00000000; +7ca1 : 00000000; +7ca2 : 00000000; +7ca3 : 00000000; +7ca4 : 00000000; +7ca5 : 00000000; +7ca6 : 00000000; +7ca7 : 00000000; +7ca8 : 00000000; +7ca9 : 00000000; +7caa : 00000000; +7cab : 00000000; +7cac : 00000000; +7cad : 00000000; +7cae : 00000000; +7caf : 00000000; +7cb0 : 00000000; +7cb1 : 00000000; +7cb2 : 00000000; +7cb3 : 00000000; +7cb4 : 00000000; +7cb5 : 00000000; +7cb6 : 00000000; +7cb7 : 00000000; +7cb8 : 00000000; +7cb9 : 00000000; +7cba : 00000000; +7cbb : 00000000; +7cbc : 00000000; +7cbd : 00000000; +7cbe : 00000000; +7cbf : 00000000; +7cc0 : 00000000; +7cc1 : 00000000; +7cc2 : 00000000; +7cc3 : 00000000; +7cc4 : 00000000; +7cc5 : 00000000; +7cc6 : 00000000; +7cc7 : 00000000; +7cc8 : 00000000; +7cc9 : 00000000; +7cca : 00000000; +7ccb : 00000000; +7ccc : 00000000; +7ccd : 00000000; +7cce : 00000000; +7ccf : 00000000; +7cd0 : 00000000; +7cd1 : 00000000; +7cd2 : 00000000; +7cd3 : 00000000; +7cd4 : 00000000; +7cd5 : 00000000; +7cd6 : 00000000; +7cd7 : 00000000; +7cd8 : 00000000; +7cd9 : 00000000; +7cda : 00000000; +7cdb : 00000000; +7cdc : 00000000; +7cdd : 00000000; +7cde : 00000000; +7cdf : 00000000; +7ce0 : 00000000; +7ce1 : 00000000; +7ce2 : 00000000; +7ce3 : 00000000; +7ce4 : 00000000; +7ce5 : 00000000; +7ce6 : 00000000; +7ce7 : 00000000; +7ce8 : 00000000; +7ce9 : 00000000; +7cea : 00000000; +7ceb : 00000000; +7cec : 00000000; +7ced : 00000000; +7cee : 00000000; +7cef : 00000000; +7cf0 : 00000000; +7cf1 : 00000000; +7cf2 : 00000000; +7cf3 : 00000000; +7cf4 : 00000000; +7cf5 : 00000000; +7cf6 : 00000000; +7cf7 : 00000000; +7cf8 : 00000000; +7cf9 : 00000000; +7cfa : 00000000; +7cfb : 00000000; +7cfc : 00000000; +7cfd : 00000000; +7cfe : 00000000; +7cff : 00000000; +7d00 : 00000000; +7d01 : 00000000; +7d02 : 00000000; +7d03 : 00000000; +7d04 : 00000000; +7d05 : 00000000; +7d06 : 00000000; +7d07 : 00000000; +7d08 : 00000000; +7d09 : 00000000; +7d0a : 00000000; +7d0b : 00000000; +7d0c : 00000000; +7d0d : 00000000; +7d0e : 00000000; +7d0f : 00000000; +7d10 : 00000000; +7d11 : 00000000; +7d12 : 00000000; +7d13 : 00000000; +7d14 : 00000000; +7d15 : 00000000; +7d16 : 00000000; +7d17 : 00000000; +7d18 : 00000000; +7d19 : 00000000; +7d1a : 00000000; +7d1b : 00000000; +7d1c : 00000000; +7d1d : 00000000; +7d1e : 00000000; +7d1f : 00000000; +7d20 : 00000000; +7d21 : 00000000; +7d22 : 00000000; +7d23 : 00000000; +7d24 : 00000000; +7d25 : 00000000; +7d26 : 00000000; +7d27 : 00000000; +7d28 : 00000000; +7d29 : 00000000; +7d2a : 00000000; +7d2b : 00000000; +7d2c : 00000000; +7d2d : 00000000; +7d2e : 00000000; +7d2f : 00000000; +7d30 : 00000000; +7d31 : 00000000; +7d32 : 00000000; +7d33 : 00000000; +7d34 : 00000000; +7d35 : 00000000; +7d36 : 00000000; +7d37 : 00000000; +7d38 : 00000000; +7d39 : 00000000; +7d3a : 00000000; +7d3b : 00000000; +7d3c : 00000000; +7d3d : 00000000; +7d3e : 00000000; +7d3f : 00000000; +7d40 : 00000000; +7d41 : 00000000; +7d42 : 00000000; +7d43 : 00000000; +7d44 : 00000000; +7d45 : 00000000; +7d46 : 00000000; +7d47 : 00000000; +7d48 : 00000000; +7d49 : 00000000; +7d4a : 00000000; +7d4b : 00000000; +7d4c : 00000000; +7d4d : 00000000; +7d4e : 00000000; +7d4f : 00000000; +7d50 : 00000000; +7d51 : 00000000; +7d52 : 00000000; +7d53 : 00000000; +7d54 : 00000000; +7d55 : 00000000; +7d56 : 00000000; +7d57 : 00000000; +7d58 : 00000000; +7d59 : 00000000; +7d5a : 00000000; +7d5b : 00000000; +7d5c : 00000000; +7d5d : 00000000; +7d5e : 00000000; +7d5f : 00000000; +7d60 : 00000000; +7d61 : 00000000; +7d62 : 00000000; +7d63 : 00000000; +7d64 : 00000000; +7d65 : 00000000; +7d66 : 00000000; +7d67 : 00000000; +7d68 : 00000000; +7d69 : 00000000; +7d6a : 00000000; +7d6b : 00000000; +7d6c : 00000000; +7d6d : 00000000; +7d6e : 00000000; +7d6f : 00000000; +7d70 : 00000000; +7d71 : 00000000; +7d72 : 00000000; +7d73 : 00000000; +7d74 : 00000000; +7d75 : 00000000; +7d76 : 00000000; +7d77 : 00000000; +7d78 : 00000000; +7d79 : 00000000; +7d7a : 00000000; +7d7b : 00000000; +7d7c : 00000000; +7d7d : 00000000; +7d7e : 00000000; +7d7f : 00000000; +7d80 : 00000000; +7d81 : 00000000; +7d82 : 00000000; +7d83 : 00000000; +7d84 : 00000000; +7d85 : 00000000; +7d86 : 00000000; +7d87 : 00000000; +7d88 : 00000000; +7d89 : 00000000; +7d8a : 00000000; +7d8b : 00000000; +7d8c : 00000000; +7d8d : 00000000; +7d8e : 00000000; +7d8f : 00000000; +7d90 : 00000000; +7d91 : 00000000; +7d92 : 00000000; +7d93 : 00000000; +7d94 : 00000000; +7d95 : 00000000; +7d96 : 00000000; +7d97 : 00000000; +7d98 : 00000000; +7d99 : 00000000; +7d9a : 00000000; +7d9b : 00000000; +7d9c : 00000000; +7d9d : 00000000; +7d9e : 00000000; +7d9f : 00000000; +7da0 : 00000000; +7da1 : 00000000; +7da2 : 00000000; +7da3 : 00000000; +7da4 : 00000000; +7da5 : 00000000; +7da6 : 00000000; +7da7 : 00000000; +7da8 : 00000000; +7da9 : 00000000; +7daa : 00000000; +7dab : 00000000; +7dac : 00000000; +7dad : 00000000; +7dae : 00000000; +7daf : 00000000; +7db0 : 00000000; +7db1 : 00000000; +7db2 : 00000000; +7db3 : 00000000; +7db4 : 00000000; +7db5 : 00000000; +7db6 : 00000000; +7db7 : 00000000; +7db8 : 00000000; +7db9 : 00000000; +7dba : 00000000; +7dbb : 00000000; +7dbc : 00000000; +7dbd : 00000000; +7dbe : 00000000; +7dbf : 00000000; +7dc0 : 00000000; +7dc1 : 00000000; +7dc2 : 00000000; +7dc3 : 00000000; +7dc4 : 00000000; +7dc5 : 00000000; +7dc6 : 00000000; +7dc7 : 00000000; +7dc8 : 00000000; +7dc9 : 00000000; +7dca : 00000000; +7dcb : 00000000; +7dcc : 00000000; +7dcd : 00000000; +7dce : 00000000; +7dcf : 00000000; +7dd0 : 00000000; +7dd1 : 00000000; +7dd2 : 00000000; +7dd3 : 00000000; +7dd4 : 00000000; +7dd5 : 00000000; +7dd6 : 00000000; +7dd7 : 00000000; +7dd8 : 00000000; +7dd9 : 00000000; +7dda : 00000000; +7ddb : 00000000; +7ddc : 00000000; +7ddd : 00000000; +7dde : 00000000; +7ddf : 00000000; +7de0 : 00000000; +7de1 : 00000000; +7de2 : 00000000; +7de3 : 00000000; +7de4 : 00000000; +7de5 : 00000000; +7de6 : 00000000; +7de7 : 00000000; +7de8 : 00000000; +7de9 : 00000000; +7dea : 00000000; +7deb : 00000000; +7dec : 00000000; +7ded : 00000000; +7dee : 00000000; +7def : 00000000; +7df0 : 00000000; +7df1 : 00000000; +7df2 : 00000000; +7df3 : 00000000; +7df4 : 00000000; +7df5 : 00000000; +7df6 : 00000000; +7df7 : 00000000; +7df8 : 00000000; +7df9 : 00000000; +7dfa : 00000000; +7dfb : 00000000; +7dfc : 00000000; +7dfd : 00000000; +7dfe : 00000000; +7dff : 00000000; +7e00 : 00000000; +7e01 : 00000000; +7e02 : 00000000; +7e03 : 00000000; +7e04 : 00000000; +7e05 : 00000000; +7e06 : 00000000; +7e07 : 00000000; +7e08 : 00000000; +7e09 : 00000000; +7e0a : 00000000; +7e0b : 00000000; +7e0c : 00000000; +7e0d : 00000000; +7e0e : 00000000; +7e0f : 00000000; +7e10 : 00000000; +7e11 : 00000000; +7e12 : 00000000; +7e13 : 00000000; +7e14 : 00000000; +7e15 : 00000000; +7e16 : 00000000; +7e17 : 00000000; +7e18 : 00000000; +7e19 : 00000000; +7e1a : 00000000; +7e1b : 00000000; +7e1c : 00000000; +7e1d : 00000000; +7e1e : 00000000; +7e1f : 00000000; +7e20 : 00000000; +7e21 : 00000000; +7e22 : 00000000; +7e23 : 00000000; +7e24 : 00000000; +7e25 : 00000000; +7e26 : 00000000; +7e27 : 00000000; +7e28 : 00000000; +7e29 : 00000000; +7e2a : 00000000; +7e2b : 00000000; +7e2c : 00000000; +7e2d : 00000000; +7e2e : 00000000; +7e2f : 00000000; +7e30 : 00000000; +7e31 : 00000000; +7e32 : 00000000; +7e33 : 00000000; +7e34 : 00000000; +7e35 : 00000000; +7e36 : 00000000; +7e37 : 00000000; +7e38 : 00000000; +7e39 : 00000000; +7e3a : 00000000; +7e3b : 00000000; +7e3c : 00000000; +7e3d : 00000000; +7e3e : 00000000; +7e3f : 00000000; +7e40 : 00000000; +7e41 : 00000000; +7e42 : 00000000; +7e43 : 00000000; +7e44 : 00000000; +7e45 : 00000000; +7e46 : 00000000; +7e47 : 00000000; +7e48 : 00000000; +7e49 : 00000000; +7e4a : 00000000; +7e4b : 00000000; +7e4c : 00000000; +7e4d : 00000000; +7e4e : 00000000; +7e4f : 00000000; +7e50 : 00000000; +7e51 : 00000000; +7e52 : 00000000; +7e53 : 00000000; +7e54 : 00000000; +7e55 : 00000000; +7e56 : 00000000; +7e57 : 00000000; +7e58 : 00000000; +7e59 : 00000000; +7e5a : 00000000; +7e5b : 00000000; +7e5c : 00000000; +7e5d : 00000000; +7e5e : 00000000; +7e5f : 00000000; +7e60 : 00000000; +7e61 : 00000000; +7e62 : 00000000; +7e63 : 00000000; +7e64 : 00000000; +7e65 : 00000000; +7e66 : 00000000; +7e67 : 00000000; +7e68 : 00000000; +7e69 : 00000000; +7e6a : 00000000; +7e6b : 00000000; +7e6c : 00000000; +7e6d : 00000000; +7e6e : 00000000; +7e6f : 00000000; +7e70 : 00000000; +7e71 : 00000000; +7e72 : 00000000; +7e73 : 00000000; +7e74 : 00000000; +7e75 : 00000000; +7e76 : 00000000; +7e77 : 00000000; +7e78 : 00000000; +7e79 : 00000000; +7e7a : 00000000; +7e7b : 00000000; +7e7c : 00000000; +7e7d : 00000000; +7e7e : 00000000; +7e7f : 00000000; +7e80 : 00000000; +7e81 : 00000000; +7e82 : 00000000; +7e83 : 00000000; +7e84 : 00000000; +7e85 : 00000000; +7e86 : 00000000; +7e87 : 00000000; +7e88 : 00000000; +7e89 : 00000000; +7e8a : 00000000; +7e8b : 00000000; +7e8c : 00000000; +7e8d : 00000000; +7e8e : 00000000; +7e8f : 00000000; +7e90 : 00000000; +7e91 : 00000000; +7e92 : 00000000; +7e93 : 00000000; +7e94 : 00000000; +7e95 : 00000000; +7e96 : 00000000; +7e97 : 00000000; +7e98 : 00000000; +7e99 : 00000000; +7e9a : 00000000; +7e9b : 00000000; +7e9c : 00000000; +7e9d : 00000000; +7e9e : 00000000; +7e9f : 00000000; +7ea0 : 00000000; +7ea1 : 00000000; +7ea2 : 00000000; +7ea3 : 00000000; +7ea4 : 00000000; +7ea5 : 00000000; +7ea6 : 00000000; +7ea7 : 00000000; +7ea8 : 00000000; +7ea9 : 00000000; +7eaa : 00000000; +7eab : 00000000; +7eac : 00000000; +7ead : 00000000; +7eae : 00000000; +7eaf : 00000000; +7eb0 : 00000000; +7eb1 : 00000000; +7eb2 : 00000000; +7eb3 : 00000000; +7eb4 : 00000000; +7eb5 : 00000000; +7eb6 : 00000000; +7eb7 : 00000000; +7eb8 : 00000000; +7eb9 : 00000000; +7eba : 00000000; +7ebb : 00000000; +7ebc : 00000000; +7ebd : 00000000; +7ebe : 00000000; +7ebf : 00000000; +7ec0 : 00000000; +7ec1 : 00000000; +7ec2 : 00000000; +7ec3 : 00000000; +7ec4 : 00000000; +7ec5 : 00000000; +7ec6 : 00000000; +7ec7 : 00000000; +7ec8 : 00000000; +7ec9 : 00000000; +7eca : 00000000; +7ecb : 00000000; +7ecc : 00000000; +7ecd : 00000000; +7ece : 00000000; +7ecf : 00000000; +7ed0 : 00000000; +7ed1 : 00000000; +7ed2 : 00000000; +7ed3 : 00000000; +7ed4 : 00000000; +7ed5 : 00000000; +7ed6 : 00000000; +7ed7 : 00000000; +7ed8 : 00000000; +7ed9 : 00000000; +7eda : 00000000; +7edb : 00000000; +7edc : 00000000; +7edd : 00000000; +7ede : 00000000; +7edf : 00000000; +7ee0 : 00000000; +7ee1 : 00000000; +7ee2 : 00000000; +7ee3 : 00000000; +7ee4 : 00000000; +7ee5 : 00000000; +7ee6 : 00000000; +7ee7 : 00000000; +7ee8 : 00000000; +7ee9 : 00000000; +7eea : 00000000; +7eeb : 00000000; +7eec : 00000000; +7eed : 00000000; +7eee : 00000000; +7eef : 00000000; +7ef0 : 00000000; +7ef1 : 00000000; +7ef2 : 00000000; +7ef3 : 00000000; +7ef4 : 00000000; +7ef5 : 00000000; +7ef6 : 00000000; +7ef7 : 00000000; +7ef8 : 00000000; +7ef9 : 00000000; +7efa : 00000000; +7efb : 00000000; +7efc : 00000000; +7efd : 00000000; +7efe : 00000000; +7eff : 00000000; +7f00 : 00000000; +7f01 : 00000000; +7f02 : 00000000; +7f03 : 00000000; +7f04 : 00000000; +7f05 : 00000000; +7f06 : 00000000; +7f07 : 00000000; +7f08 : 00000000; +7f09 : 00000000; +7f0a : 00000000; +7f0b : 00000000; +7f0c : 00000000; +7f0d : 00000000; +7f0e : 00000000; +7f0f : 00000000; +7f10 : 00000000; +7f11 : 00000000; +7f12 : 00000000; +7f13 : 00000000; +7f14 : 00000000; +7f15 : 00000000; +7f16 : 00000000; +7f17 : 00000000; +7f18 : 00000000; +7f19 : 00000000; +7f1a : 00000000; +7f1b : 00000000; +7f1c : 00000000; +7f1d : 00000000; +7f1e : 00000000; +7f1f : 00000000; +7f20 : 00000000; +7f21 : 00000000; +7f22 : 00000000; +7f23 : 00000000; +7f24 : 00000000; +7f25 : 00000000; +7f26 : 00000000; +7f27 : 00000000; +7f28 : 00000000; +7f29 : 00000000; +7f2a : 00000000; +7f2b : 00000000; +7f2c : 00000000; +7f2d : 00000000; +7f2e : 00000000; +7f2f : 00000000; +7f30 : 00000000; +7f31 : 00000000; +7f32 : 00000000; +7f33 : 00000000; +7f34 : 00000000; +7f35 : 00000000; +7f36 : 00000000; +7f37 : 00000000; +7f38 : 00000000; +7f39 : 00000000; +7f3a : 00000000; +7f3b : 00000000; +7f3c : 00000000; +7f3d : 00000000; +7f3e : 00000000; +7f3f : 00000000; +7f40 : 00000000; +7f41 : 00000000; +7f42 : 00000000; +7f43 : 00000000; +7f44 : 00000000; +7f45 : 00000000; +7f46 : 00000000; +7f47 : 00000000; +7f48 : 00000000; +7f49 : 00000000; +7f4a : 00000000; +7f4b : 00000000; +7f4c : 00000000; +7f4d : 00000000; +7f4e : 00000000; +7f4f : 00000000; +7f50 : 00000000; +7f51 : 00000000; +7f52 : 00000000; +7f53 : 00000000; +7f54 : 00000000; +7f55 : 00000000; +7f56 : 00000000; +7f57 : 00000000; +7f58 : 00000000; +7f59 : 00000000; +7f5a : 00000000; +7f5b : 00000000; +7f5c : 00000000; +7f5d : 00000000; +7f5e : 00000000; +7f5f : 00000000; +7f60 : 00000000; +7f61 : 00000000; +7f62 : 00000000; +7f63 : 00000000; +7f64 : 00000000; +7f65 : 00000000; +7f66 : 00000000; +7f67 : 00000000; +7f68 : 00000000; +7f69 : 00000000; +7f6a : 00000000; +7f6b : 00000000; +7f6c : 00000000; +7f6d : 00000000; +7f6e : 00000000; +7f6f : 00000000; +7f70 : 00000000; +7f71 : 00000000; +7f72 : 00000000; +7f73 : 00000000; +7f74 : 00000000; +7f75 : 00000000; +7f76 : 00000000; +7f77 : 00000000; +7f78 : 00000000; +7f79 : 00000000; +7f7a : 00000000; +7f7b : 00000000; +7f7c : 00000000; +7f7d : 00000000; +7f7e : 00000000; +7f7f : 00000000; +7f80 : 00000000; +7f81 : 00000000; +7f82 : 00000000; +7f83 : 00000000; +7f84 : 00000000; +7f85 : 00000000; +7f86 : 00000000; +7f87 : 00000000; +7f88 : 00000000; +7f89 : 00000000; +7f8a : 00000000; +7f8b : 00000000; +7f8c : 00000000; +7f8d : 00000000; +7f8e : 00000000; +7f8f : 00000000; +7f90 : 00000000; +7f91 : 00000000; +7f92 : 00000000; +7f93 : 00000000; +7f94 : 00000000; +7f95 : 00000000; +7f96 : 00000000; +7f97 : 00000000; +7f98 : 00000000; +7f99 : 00000000; +7f9a : 00000000; +7f9b : 00000000; +7f9c : 00000000; +7f9d : 00000000; +7f9e : 00000000; +7f9f : 00000000; +7fa0 : 00000000; +7fa1 : 00000000; +7fa2 : 00000000; +7fa3 : 00000000; +7fa4 : 00000000; +7fa5 : 00000000; +7fa6 : 00000000; +7fa7 : 00000000; +7fa8 : 00000000; +7fa9 : 00000000; +7faa : 00000000; +7fab : 00000000; +7fac : 00000000; +7fad : 00000000; +7fae : 00000000; +7faf : 00000000; +7fb0 : 00000000; +7fb1 : 00000000; +7fb2 : 00000000; +7fb3 : 00000000; +7fb4 : 00000000; +7fb5 : 00000000; +7fb6 : 00000000; +7fb7 : 00000000; +7fb8 : 00000000; +7fb9 : 00000000; +7fba : 00000000; +7fbb : 00000000; +7fbc : 00000000; +7fbd : 00000000; +7fbe : 00000000; +7fbf : 00000000; +7fc0 : 00000000; +7fc1 : 00000000; +7fc2 : 00000000; +7fc3 : 00000000; +7fc4 : 00000000; +7fc5 : 00000000; +7fc6 : 00000000; +7fc7 : 00000000; +7fc8 : 00000000; +7fc9 : 00000000; +7fca : 00000000; +7fcb : 00000000; +7fcc : 00000000; +7fcd : 00000000; +7fce : 00000000; +7fcf : 00000000; +7fd0 : 00000000; +7fd1 : 00000000; +7fd2 : 00000000; +7fd3 : 00000000; +7fd4 : 00000000; +7fd5 : 00000000; +7fd6 : 00000000; +7fd7 : 00000000; +7fd8 : 00000000; +7fd9 : 00000000; +7fda : 00000000; +7fdb : 00000000; +7fdc : 00000000; +7fdd : 00000000; +7fde : 00000000; +7fdf : 00000000; +7fe0 : 00000000; +7fe1 : 00000000; +7fe2 : 00000000; +7fe3 : 00000000; +7fe4 : 00000000; +7fe5 : 00000000; +7fe6 : 00000000; +7fe7 : 00000000; +7fe8 : 00000000; +7fe9 : 00000000; +7fea : 00000000; +7feb : 00000000; +7fec : 00000000; +7fed : 00000000; +7fee : 00000000; +7fef : 00000000; +7ff0 : 00000000; +7ff1 : 00000000; +7ff2 : 00000000; +7ff3 : 00000000; +7ff4 : 00000000; +7ff5 : 00000000; +7ff6 : 00000000; +7ff7 : 00000000; +7ff8 : 00000000; +7ff9 : 00000000; +7ffa : 00000000; +7ffb : 00000000; +7ffc : 00000000; +7ffd : 00000000; +7ffe : 00000000; +7fff : 00000000; +END; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/common/wr_board_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/common/wr_board_pkg.vhd new file mode 100644 index 000000000..81a61a583 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/common/wr_board_pkg.vhd @@ -0,0 +1,359 @@ +------------------------------------------------------------------------------- +-- Title : Common WRPC Wrapper package +-- Project : WR PTP Core +-- URL : http://www.ohwr.org/projects/wr-cores/wiki/Wrpc_core +------------------------------------------------------------------------------- +-- File : xwrc_board_common.vhd +-- Company : CERN (BE-CO-HT) +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2017 CERN +-- +-- GNU LESSER GENERAL PUBLIC LICENSE +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +library work; +use work.wishbone_pkg.all; +use work.wr_fabric_pkg.all; +use work.endpoint_pkg.all; +use work.wrcore_pkg.all; +use work.streamers_pkg.all; + +package wr_board_pkg is + + type t_board_fabric_iface is (PLAIN, STREAMERS, ETHERBONE, always_last_invalid); + + -- TODO: using these default paths requires absolute path. If relative path is used, + -- they work only for reference designs by chance. Once we figure out how to + -- automatically figure out absolute path of /bin/wrpc, we + -- will be able to use this concept in f_find_default_lm32_firmware() + constant dpram_initf_default_altera_phy8 : string := ""; + constant dpram_initf_default_xilinx_phy8 : string := ""; + constant dpram_initf_default_altera_phy8_sim : string := ""; + constant dpram_initf_default_xilinx_phy8_sim : string := ""; + + procedure f_check_fabric_iface_type ( + constant iface_type : in t_board_fabric_iface); + + procedure f_check_diag_id ( + constant diag_id, diag_ver : in integer); + + function f_str2iface_type ( + constant iface_str : string(1 to 9)) + return t_board_fabric_iface; + + function f_pick_diag_val ( + iface : t_board_fabric_iface; + streamers_val : integer; + application_val : integer + ) return integer; + + function f_pick_diag_size ( + iface : t_board_fabric_iface; + streamers_size : integer; + application_size : integer + ) return integer; + + function f_vectorize_diag ( + diag_in : t_generic_word_array; + diag_vector_size : integer) + return std_logic_vector; + + function f_de_vectorize_diag ( + diag_in : std_logic_vector; + diag_vector_size : integer) + return t_generic_word_array; + + function f_find_default_lm32_firmware ( + dpram_initf : string; + simulation : integer; + pcs_16_bit : boolean) + return string; + + component xwrc_board_common is + generic ( + g_simulation : integer := 0; + g_with_external_clock_input : boolean := TRUE; + g_board_name : string := "NA "; + g_flash_secsz_kb : integer := 256; -- default for M25P128 + g_flash_sdbfs_baddr : integer := 16#600000#; -- default for M25P128 + g_phys_uart : boolean := TRUE; + g_virtual_uart : boolean := TRUE; + g_aux_clks : integer := 0; + g_ep_rxbuf_size : integer := 1024; + g_tx_runt_padding : boolean := TRUE; + g_dpram_initf : string := ""; + g_dpram_size : integer := 131072/4; + g_interface_mode : t_wishbone_interface_mode := PIPELINED; + g_address_granularity : t_wishbone_address_granularity := BYTE; + g_aux_sdb : t_sdb_device := c_wrc_periph3_sdb; + g_softpll_enable_debugger : boolean := FALSE; + g_vuart_fifo_size : integer := 1024; + g_pcs_16bit : boolean := FALSE; + g_diag_id : integer := 0; + g_diag_ver : integer := 0; + g_diag_ro_size : integer := 0; + g_diag_rw_size : integer := 0; + g_streamers_op_mode : t_streamers_op_mode := TX_AND_RX; + g_tx_streamer_params : t_tx_streamer_params := c_tx_streamer_params_defaut; + g_rx_streamer_params : t_rx_streamer_params := c_rx_streamer_params_defaut; + g_fabric_iface : t_board_fabric_iface := PLAIN); + port ( + clk_sys_i : in std_logic; + clk_dmtd_i : in std_logic; + clk_ref_i : in std_logic; + clk_aux_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0'); + clk_10m_ext_i : in std_logic := '0'; + clk_ext_mul_i : in std_logic := '0'; + clk_ext_mul_locked_i : in std_logic := '1'; + clk_ext_stopped_i : in std_logic := '0'; + clk_ext_rst_o : out std_logic; + pps_ext_i : in std_logic := '0'; + rst_n_i : in std_logic; + dac_hpll_load_p1_o : out std_logic; + dac_hpll_data_o : out std_logic_vector(15 downto 0); + dac_dpll_load_p1_o : out std_logic; + dac_dpll_data_o : out std_logic_vector(15 downto 0); + phy8_o : out t_phy_8bits_from_wrc; + phy8_i : in t_phy_8bits_to_wrc := c_dummy_phy8_to_wrc; + phy16_o : out t_phy_16bits_from_wrc; + phy16_i : in t_phy_16bits_to_wrc := c_dummy_phy16_to_wrc; + scl_o : out std_logic; + scl_i : in std_logic := '1'; + sda_o : out std_logic; + sda_i : in std_logic := '1'; + sfp_scl_o : out std_logic; + sfp_scl_i : in std_logic := '1'; + sfp_sda_o : out std_logic; + sfp_sda_i : in std_logic := '1'; + sfp_det_i : in std_logic; + spi_sclk_o : out std_logic; + spi_ncs_o : out std_logic; + spi_mosi_o : out std_logic; + spi_miso_i : in std_logic := '0'; + uart_rxd_i : in std_logic := '0'; + uart_txd_o : out std_logic; + owr_pwren_o : out std_logic_vector(1 downto 0); + owr_en_o : out std_logic_vector(1 downto 0); + owr_i : in std_logic_vector(1 downto 0) := (others => '1'); + wb_slave_i : in t_wishbone_slave_in := cc_dummy_slave_in; + wb_slave_o : out t_wishbone_slave_out; + aux_master_o : out t_wishbone_master_out; + aux_master_i : in t_wishbone_master_in := cc_dummy_master_in; + wrf_src_o : out t_wrf_source_out; + wrf_src_i : in t_wrf_source_in := c_dummy_src_in; + wrf_snk_o : out t_wrf_sink_out; + wrf_snk_i : in t_wrf_sink_in := c_dummy_snk_in; + wrs_tx_data_i : in std_logic_vector(g_tx_streamer_params.data_width-1 downto 0) := (others => '0'); + wrs_tx_valid_i : in std_logic := '0'; + wrs_tx_dreq_o : out std_logic; + wrs_tx_last_i : in std_logic := '1'; + wrs_tx_flush_i : in std_logic := '0'; + wrs_rx_first_o : out std_logic; + wrs_rx_last_o : out std_logic; + wrs_rx_data_o : out std_logic_vector(g_rx_streamer_params.data_width-1 downto 0); + wrs_rx_valid_o : out std_logic; + wrs_rx_dreq_i : in std_logic := '0'; + wrs_tx_cfg_i : in t_tx_streamer_cfg := c_tx_streamer_cfg_default; + wrs_rx_cfg_i : in t_rx_streamer_cfg := c_rx_streamer_cfg_default; + wb_eth_master_o : out t_wishbone_master_out; + wb_eth_master_i : in t_wishbone_master_in := cc_dummy_master_in; + aux_diag_i : in t_generic_word_array(g_diag_ro_size-1 downto 0) := (others => (others => '0')); + aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0); + tm_dac_value_o : out std_logic_vector(23 downto 0); + tm_dac_wr_o : out std_logic_vector(g_aux_clks-1 downto 0); + tm_clk_aux_lock_en_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0'); + tm_clk_aux_locked_o : out std_logic_vector(g_aux_clks-1 downto 0); + timestamps_o : out t_txtsu_timestamp; + timestamps_ack_i : in std_logic := '1'; + abscal_txts_o : out std_logic; + abscal_rxts_o : out std_logic; + fc_tx_pause_req_i : in std_logic := '0'; + fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000"; + fc_tx_pause_ready_o : out std_logic; + tm_link_up_o : out std_logic; + tm_time_valid_o : out std_logic; + tm_tai_o : out std_logic_vector(39 downto 0); + tm_cycles_o : out std_logic_vector(27 downto 0); + led_act_o : out std_logic; + led_link_o : out std_logic; + btn1_i : in std_logic := '1'; + btn2_i : in std_logic := '1'; + pps_csync_o : out std_logic; + pps_p_o : out std_logic; + pps_led_o : out std_logic; + link_ok_o : out std_logic); + end component xwrc_board_common; + +end wr_board_pkg; + +package body wr_board_pkg is + + procedure f_check_fabric_iface_type ( + constant iface_type : in t_board_fabric_iface) is + begin + if iface_type >= always_last_invalid then + assert FALSE + report "WR PTP core fabric interface [" & t_board_fabric_iface'image(iface_type) & "] is not supported" + severity FAILURE; + end if; + end procedure f_check_fabric_iface_type; + + procedure f_check_diag_id ( + constant diag_id, diag_ver : in integer) is + begin + assert (diag_id /= 1) report + "g_diag_id=1 is reserved for wr_streamers and cannot be set by users" + severity FAILURE; + + assert (not (diag_id /= 0 and diag_ver = 0)) report + "If diag_id is set by the user (diag_id > 1), g_diag_ver must be at least 1" + severity FAILURE; + end procedure f_check_diag_id; + + function f_str2iface_type ( + constant iface_str : string(1 to 9)) + return t_board_fabric_iface is + variable result : t_board_fabric_iface; + begin + case iface_str is + when "PLAINFBRC" => result := PLAIN; + when "STREAMERS" => result := STREAMERS; + when "ETHERBONE" => result := ETHERBONE; + when others => result := always_last_invalid; + end case; + return result; + end function f_str2iface_type; + + -- this function decides what is the diag_id/ver used in the WRPC and MIB for access + -- via SNMP + function f_pick_diag_val ( + iface : t_board_fabric_iface; + streamers_val : integer; + application_val : integer + ) return integer is + begin + -- streamers are enabled and application/user does nto use diags (no vector specified), + -- use default streamer's id/ver + if(iface = STREAMERS and application_val = 0) then + return streamers_val; + else -- otherwise, use id/ver specified by the user/application. This is the case also + -- when streamers are used. + return application_val; + end if; + end f_pick_diag_val; + + -- provide the size of the final diag array. + function f_pick_diag_size ( + iface : t_board_fabric_iface; + streamers_size : integer; + application_size : integer + ) return integer is + begin + -- when streamers are used, concatenate the array of streamers and application/user + if(iface = STREAMERS) then + return (streamers_size+application_size); + else -- otherwise, only the size provided by the application/user + return application_size; + end if; + end f_pick_diag_size; + + function f_vectorize_diag ( + diag_in : t_generic_word_array; + diag_vector_size : integer) + return std_logic_vector is + variable result : std_logic_vector(diag_vector_size-1 downto 0); + begin + assert (diag_vector_size mod 32 = 0) report + "g_diag_ro/w_vector_width must have value that is a mutiple of 32" + severity FAILURE; + for i in 0 to diag_vector_size/32-1 loop + result(i*32-31 downto i*32) := diag_in(i); + end loop; + return result; + end function f_vectorize_diag; + + function f_de_vectorize_diag ( + diag_in : std_logic_vector; + diag_vector_size : integer) + return t_generic_word_array is + variable result : t_generic_word_array(diag_vector_size/32-1 downto 0); + begin + assert (diag_vector_size mod 32 = 0) report + "g_diag_ro/w_vector_width must have value that is a mutiple of 32" + severity FAILURE; + for i in 0 to diag_vector_size/32-1 loop + result(i) := diag_in(i*32-31 downto i*32); + end loop; + return result; + end function f_de_vectorize_diag; + + function f_find_default_lm32_firmware ( + dpram_initf : string; + simulation : integer; + pcs_16_bit : boolean) + return string is + begin + if((dpram_initf = "default_altera" or dpram_initf = "default_xilinx") and + pcs_16_bit = TRUE) then + assert FALSE + report "[Board:Software for LM32 in WR Core] No release binary for " & + "pcs_16_bit." severity FAILURE; + return ""; + elsif (dpram_initf /= "default_altera" and dpram_initf /= "default_xilinx") then + report "[Board:Software for LM32 in WR Core] Using user-provided LM32 " & + "firmware ("&dpram_initf&")." severity NOTE; + return dpram_initf; + elsif (simulation = 0 and dpram_initf = "default_altera" and pcs_16_bit = FALSE and + dpram_initf_default_altera_phy8 /= "") then + report "[Board:Software for LM32 in WR Core] Using release LM32 firmware " & + "(altera, phy8)." severity NOTE; + return dpram_initf_default_altera_phy8; + elsif (simulation = 0 and dpram_initf = "default_xilinx" and pcs_16_bit = FALSE and + dpram_initf_default_xilinx_phy8 /= "") then + report "[Board:Software for LM32 in WR Core] Using release LM32 firmware " & + "(xilnix, phy8)" severity NOTE; + return dpram_initf_default_xilinx_phy8; + elsif (simulation = 1 and dpram_initf = "default_altera" and pcs_16_bit = FALSE and + dpram_initf_default_altera_phy8_sim /= "") then + report "Board:[Software for LM32 in WR Core] Using release LM32 firmware " & + "(altera, phy8, sim)." severity NOTE; + return dpram_initf_default_altera_phy8_sim; + elsif (simulation = 1 and dpram_initf = "default_xilinx" and pcs_16_bit = FALSE and + dpram_initf_default_xilinx_phy8_sim /= "") then + report "[Board:Software for LM32 in WR Core] Using release LM32 firmware " & + "(xilinx, phy8, sim)." severity NOTE; + return dpram_initf_default_xilinx_phy8_sim; + else + assert FALSE + report "[Board:Software for LM32 in WR Core] Default inclussion of LM32" & + "binary with software is not supported yet. In your instantiation" & + "of the board (xwrc_board_{spec,svec,vfchd} set g_dpram_initf to the" & + "correct path, i.e." & + "/bin/wrpc/wrc_phy8_sim.{bram, mif} " severity FAILURE; + return ""; + end if; + end function; + +end package body wr_board_pkg; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/common/xwrc_board_common.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/common/xwrc_board_common.vhd new file mode 100644 index 000000000..1ec195920 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/common/xwrc_board_common.vhd @@ -0,0 +1,552 @@ +------------------------------------------------------------------------------- +-- Title : Common WRPC Wrapper +-- Project : WR PTP Core +-- URL : http://www.ohwr.org/projects/wr-cores/wiki/Wrpc_core +------------------------------------------------------------------------------- +-- File : xwrc_board_common.vhd +-- Company : CERN (BE-CO-HT) +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Wrapper for WR PTP core with common features shared between +-- the various supported boards. These include the core itself, as well as +-- a selection of fabric interfaces between the core and the application. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2017 CERN +-- +-- GNU LESSER GENERAL PUBLIC LICENSE +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +library work; +use work.gencores_pkg.all; +use work.wrcore_pkg.all; +use work.wishbone_pkg.all; +use work.etherbone_pkg.all; +use work.wr_fabric_pkg.all; +use work.endpoint_pkg.all; +use work.streamers_pkg.all; +use work.wr_board_pkg.all; + +entity xwrc_board_common is + generic( + g_simulation : integer := 0; + g_with_external_clock_input : boolean := TRUE; + g_board_name : string := "NA "; + g_flash_secsz_kb : integer := 256; -- default for M25P128 + g_flash_sdbfs_baddr : integer := 16#600000#; -- default for M25P128 + g_phys_uart : boolean := TRUE; + g_virtual_uart : boolean := TRUE; + g_aux_clks : integer := 0; + g_ep_rxbuf_size : integer := 1024; + g_tx_runt_padding : boolean := TRUE; + g_dpram_initf : string := ""; + g_dpram_size : integer := 131072/4; + g_interface_mode : t_wishbone_interface_mode := PIPELINED; + g_address_granularity : t_wishbone_address_granularity := BYTE; + g_aux_sdb : t_sdb_device := c_wrc_periph3_sdb; + g_softpll_enable_debugger : boolean := FALSE; + g_vuart_fifo_size : integer := 1024; + g_pcs_16bit : boolean := FALSE; + g_diag_id : integer := 0; + g_diag_ver : integer := 0; + g_diag_ro_size : integer := 0; + g_diag_rw_size : integer := 0; + g_streamers_op_mode : t_streamers_op_mode := TX_AND_RX; + g_tx_streamer_params : t_tx_streamer_params := c_tx_streamer_params_defaut; + g_rx_streamer_params : t_rx_streamer_params := c_rx_streamer_params_defaut; + g_fabric_iface : t_board_fabric_iface := PLAIN); + port( + --------------------------------------------------------------------------- + -- Clocks/resets + --------------------------------------------------------------------------- + -- system reference clock (any frequency <= f(clk_ref_i)) + clk_sys_i : in std_logic; + + -- DDMTD offset clock (125.x MHz) + clk_dmtd_i : in std_logic; + + -- Timing reference (125 MHz) + clk_ref_i : in std_logic; + + -- Aux clock (i.e. the FMC clock), which can be disciplined by the WR Core + clk_aux_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0'); + + -- External 10 MHz reference (cesium, GPSDO, etc.), used in Grandmaster mode + clk_10m_ext_i : in std_logic := '0'; + + clk_ext_mul_i : in std_logic := '0'; + clk_ext_mul_locked_i : in std_logic := '1'; + clk_ext_stopped_i : in std_logic := '0'; + clk_ext_rst_o : out std_logic; + + -- External PPS input (cesium, GPSDO, etc.), used in Grandmaster mode + pps_ext_i : in std_logic := '0'; + + rst_n_i : in std_logic; + + --------------------------------------------------------------------------- + --Timing system + --------------------------------------------------------------------------- + dac_hpll_load_p1_o : out std_logic; + dac_hpll_data_o : out std_logic_vector(15 downto 0); + + dac_dpll_load_p1_o : out std_logic; + dac_dpll_data_o : out std_logic_vector(15 downto 0); + + --------------------------------------------------------------------------- + -- PHY I/f + --------------------------------------------------------------------------- + phy8_o : out t_phy_8bits_from_wrc; + phy8_i : in t_phy_8bits_to_wrc := c_dummy_phy8_to_wrc; + phy16_o : out t_phy_16bits_from_wrc; + phy16_i : in t_phy_16bits_to_wrc := c_dummy_phy16_to_wrc; + + --------------------------------------------------------------------------- + -- I2C EEPROM + --------------------------------------------------------------------------- + scl_o : out std_logic; + scl_i : in std_logic := '1'; + sda_o : out std_logic; + sda_i : in std_logic := '1'; + + --------------------------------------------------------------------------- + -- SFP management info + --------------------------------------------------------------------------- + sfp_scl_o : out std_logic; + sfp_scl_i : in std_logic := '1'; + sfp_sda_o : out std_logic; + sfp_sda_i : in std_logic := '1'; + sfp_det_i : in std_logic; + + --------------------------------------------------------------------------- + -- Flash memory SPI interface + --------------------------------------------------------------------------- + spi_sclk_o : out std_logic; + spi_ncs_o : out std_logic; + spi_mosi_o : out std_logic; + spi_miso_i : in std_logic := '0'; + + --------------------------------------------------------------------------- + --UART + --------------------------------------------------------------------------- + uart_rxd_i : in std_logic := '0'; + uart_txd_o : out std_logic; + + --------------------------------------------------------------------------- + -- 1-wire + --------------------------------------------------------------------------- + owr_pwren_o : out std_logic_vector(1 downto 0); + owr_en_o : out std_logic_vector(1 downto 0); + owr_i : in std_logic_vector(1 downto 0) := (others => '1'); + + --------------------------------------------------------------------------- + --External WB interface + --------------------------------------------------------------------------- + wb_slave_i : in t_wishbone_slave_in := cc_dummy_slave_in; + wb_slave_o : out t_wishbone_slave_out; + + aux_master_o : out t_wishbone_master_out; + aux_master_i : in t_wishbone_master_in := cc_dummy_master_in; + + --------------------------------------------------------------------------- + -- External Fabric I/F (when g_fabric_iface = PLAIN) + --------------------------------------------------------------------------- + wrf_src_o : out t_wrf_source_out; + wrf_src_i : in t_wrf_source_in := c_dummy_src_in; + wrf_snk_o : out t_wrf_sink_out; + wrf_snk_i : in t_wrf_sink_in := c_dummy_snk_in; + + --------------------------------------------------------------------------- + -- WR streamers (when g_fabric_iface = STREAMERS) + --------------------------------------------------------------------------- + wrs_tx_data_i : in std_logic_vector(g_tx_streamer_params.data_width-1 downto 0) := (others => '0'); + wrs_tx_valid_i : in std_logic := '0'; + wrs_tx_dreq_o : out std_logic; + wrs_tx_last_i : in std_logic := '1'; + wrs_tx_flush_i : in std_logic := '0'; + wrs_rx_first_o : out std_logic; + wrs_rx_last_o : out std_logic; + wrs_rx_data_o : out std_logic_vector(g_rx_streamer_params.data_width-1 downto 0); + wrs_rx_valid_o : out std_logic; + wrs_rx_dreq_i : in std_logic := '0'; + wrs_tx_cfg_i : in t_tx_streamer_cfg := c_tx_streamer_cfg_default; + wrs_rx_cfg_i : in t_rx_streamer_cfg := c_rx_streamer_cfg_default; + --------------------------------------------------------------------------- + -- Etherbone WB master interface (when g_fabric_iface = ETHERBONE) + --------------------------------------------------------------------------- + wb_eth_master_o : out t_wishbone_master_out; + wb_eth_master_i : in t_wishbone_master_in := cc_dummy_master_in; + + --------------------------------------------------------------------------- + -- Generic diagnostics interface (access from WRPC via SNMP or uart console + --------------------------------------------------------------------------- + aux_diag_i : in t_generic_word_array(g_diag_ro_size-1 downto 0) := (others => (others => '0')); + aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0); + + --------------------------------------------------------------------------- + -- Aux clocks control + --------------------------------------------------------------------------- + tm_dac_value_o : out std_logic_vector(23 downto 0); + tm_dac_wr_o : out std_logic_vector(g_aux_clks-1 downto 0); + tm_clk_aux_lock_en_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0'); + tm_clk_aux_locked_o : out std_logic_vector(g_aux_clks-1 downto 0); + + --------------------------------------------------------------------------- + -- External Tx Timestamping I/F + --------------------------------------------------------------------------- + timestamps_o : out t_txtsu_timestamp; + timestamps_ack_i : in std_logic := '1'; + + ----------------------------------------- + -- Timestamp helper signals, used for Absolute Calibration + ----------------------------------------- + abscal_txts_o : out std_logic; + abscal_rxts_o : out std_logic; + + --------------------------------------------------------------------------- + -- Pause Frame Control + --------------------------------------------------------------------------- + fc_tx_pause_req_i : in std_logic := '0'; + fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000"; + fc_tx_pause_ready_o : out std_logic; + + --------------------------------------------------------------------------- + -- Timecode I/F + --------------------------------------------------------------------------- + tm_link_up_o : out std_logic; + tm_time_valid_o : out std_logic; + tm_tai_o : out std_logic_vector(39 downto 0); + tm_cycles_o : out std_logic_vector(27 downto 0); + + --------------------------------------------------------------------------- + -- Buttons, LEDs and PPS output + --------------------------------------------------------------------------- + led_act_o : out std_logic; + led_link_o : out std_logic; + btn1_i : in std_logic := '1'; + btn2_i : in std_logic := '1'; + -- 1PPS output + pps_csync_o : out std_logic; + pps_p_o : out std_logic; + pps_led_o : out std_logic; + -- Link ok indication + link_ok_o : out std_logic + ); + +end entity xwrc_board_common; + + +architecture struct of xwrc_board_common is + + ----------------------------------------------------------------------------- + -- Signals + ----------------------------------------------------------------------------- + + -- Timecode interface + signal tm_time_valid : std_logic; + signal tm_tai : std_logic_vector(39 downto 0); + signal tm_cycles : std_logic_vector(27 downto 0); + + -- WR fabric interface + signal wrf_src_out : t_wrf_source_out; + signal wrf_src_in : t_wrf_source_in; + signal wrf_snk_out : t_wrf_sink_out; + signal wrf_snk_in : t_wrf_sink_in; + + -- Aux WB interface + signal aux_master_out : t_wishbone_master_out; + signal aux_master_in : t_wishbone_master_in; + signal aux_rst_n : std_logic; + + -- Aux diagnostics: + -- 1) streamers have their own ID not to be used by the users + -- 2) regardless whether streamers are enabled nor not, application can use diagnostics + -- 3) if application uses diagnostics, it must specify diag_id > 1, diag_ver should start + -- with 1. + -- Application diagnostic words are added after streamer's diagnostics in the array that + -- goes to/from WRPC + + constant c_streamers_diag_id : integer := 1; -- id reserved for streamers + constant c_streamers_diag_ver : integer := 2; -- version that will be probably increased + -- when more diagnostics is added to streamers + + -- final values that go to WRPC generics (depend on configuration) + constant c_diag_id : integer := f_pick_diag_val(g_fabric_iface, c_streamers_diag_id, g_diag_id); + constant c_diag_ver : integer := f_pick_diag_val(g_fabric_iface, c_streamers_diag_ver, g_diag_id); + + constant c_diag_ro_size : integer := f_pick_diag_size(g_fabric_iface, c_WR_STREAMERS_ARR_SIZE_OUT, g_diag_ro_size); + constant c_diag_rw_size : integer := f_pick_diag_size(g_fabric_iface, c_WR_STREAMERS_ARR_SIZE_IN, g_diag_rw_size); + + -- WR SNMP + signal aux_diag_in : t_generic_word_array(c_diag_ro_size-1 downto 0); + signal aux_diag_out : t_generic_word_array(c_diag_rw_size-1 downto 0); + + -- link state + signal link_ok : std_logic; + +begin -- architecture struct + + -- Check for unsupported fabric interface type + f_check_fabric_iface_type(g_fabric_iface); + + -- check whether diag id and version are correct, i.e.: + -- * diag_id =1 is reserved for wr_streamers and cannot be used + -- * diag_ver values should start with 1 + f_check_diag_id(g_diag_id, g_diag_ver); + + ----------------------------------------------------------------------------- + -- The WR PTP core itself + ----------------------------------------------------------------------------- + + cmp_xwr_core : xwr_core + generic map ( + g_simulation => g_simulation, + g_with_external_clock_input => g_with_external_clock_input, + g_board_name => g_board_name, + g_flash_secsz_kb => g_flash_secsz_kb, + g_flash_sdbfs_baddr => g_flash_sdbfs_baddr, + g_phys_uart => g_phys_uart, + g_virtual_uart => g_virtual_uart, + g_aux_clks => g_aux_clks, + g_ep_rxbuf_size => g_ep_rxbuf_size, + g_tx_runt_padding => g_tx_runt_padding, + g_dpram_initf => f_find_default_lm32_firmware(g_dpram_initf, g_simulation, g_pcs_16bit), + g_dpram_size => g_dpram_size, + g_interface_mode => g_interface_mode, + g_address_granularity => g_address_granularity, + g_aux_sdb => g_aux_sdb, + g_softpll_enable_debugger => g_softpll_enable_debugger, + g_vuart_fifo_size => g_vuart_fifo_size, + g_pcs_16bit => g_pcs_16bit, + g_records_for_phy => TRUE, + g_diag_id => c_diag_id, + g_diag_ver => c_diag_ver, + g_diag_ro_size => c_diag_ro_size, + g_diag_rw_size => c_diag_rw_size) + port map ( + clk_sys_i => clk_sys_i, + clk_dmtd_i => clk_dmtd_i, + clk_ref_i => clk_ref_i, + clk_aux_i => clk_aux_i, + clk_ext_i => clk_10m_ext_i, + clk_ext_mul_i => clk_ext_mul_i, + clk_ext_mul_locked_i => clk_ext_mul_locked_i, + clk_ext_stopped_i => clk_ext_stopped_i, + clk_ext_rst_o => clk_ext_rst_o, + pps_ext_i => pps_ext_i, + rst_n_i => rst_n_i, + dac_hpll_load_p1_o => dac_hpll_load_p1_o, + dac_hpll_data_o => dac_hpll_data_o, + dac_dpll_load_p1_o => dac_dpll_load_p1_o, + dac_dpll_data_o => dac_dpll_data_o, + phy_ref_clk_i => '0', + phy_tx_data_o => open, + phy_tx_k_o => open, + phy_tx_disparity_i => '0', + phy_tx_enc_err_i => '0', + phy_rx_data_i => (others => '0'), + phy_rx_rbclk_i => '0', + phy_rx_k_i => (others => '0'), + phy_rx_enc_err_i => '0', + phy_rx_bitslide_i => (others => '0'), + phy_rst_o => open, + phy_rdy_i => '1', + phy_loopen_o => open, + phy_loopen_vec_o => open, + phy_tx_prbs_sel_o => open, + phy_sfp_tx_fault_i => '0', + phy_sfp_los_i => '0', + phy_sfp_tx_disable_o => open, + phy8_o => phy8_o, + phy8_i => phy8_i, + phy16_o => phy16_o, + phy16_i => phy16_i, + led_act_o => led_act_o, + led_link_o => led_link_o, + scl_o => scl_o, + scl_i => scl_i, + sda_o => sda_o, + sda_i => sda_i, + sfp_scl_o => sfp_scl_o, + sfp_scl_i => sfp_scl_i, + sfp_sda_o => sfp_sda_o, + sfp_sda_i => sfp_sda_i, + sfp_det_i => sfp_det_i, + btn1_i => btn1_i, + btn2_i => btn2_i, + spi_sclk_o => spi_sclk_o, + spi_ncs_o => spi_ncs_o, + spi_mosi_o => spi_mosi_o, + spi_miso_i => spi_miso_i, + uart_rxd_i => uart_rxd_i, + uart_txd_o => uart_txd_o, + owr_pwren_o => owr_pwren_o, + owr_en_o => owr_en_o, + owr_i => owr_i, + slave_i => wb_slave_i, + slave_o => wb_slave_o, + aux_master_o => aux_master_out, + aux_master_i => aux_master_in, + wrf_src_o => wrf_src_out, + wrf_src_i => wrf_src_in, + wrf_snk_o => wrf_snk_out, + wrf_snk_i => wrf_snk_in, + timestamps_o => timestamps_o, + timestamps_ack_i => timestamps_ack_i, + abscal_txts_o => abscal_txts_o, + abscal_rxts_o => abscal_rxts_o, + fc_tx_pause_req_i => fc_tx_pause_req_i, + fc_tx_pause_delay_i => fc_tx_pause_delay_i, + fc_tx_pause_ready_o => fc_tx_pause_ready_o, + tm_link_up_o => tm_link_up_o, + tm_dac_value_o => tm_dac_value_o, + tm_dac_wr_o => tm_dac_wr_o, + tm_clk_aux_lock_en_i => tm_clk_aux_lock_en_i, + tm_clk_aux_locked_o => tm_clk_aux_locked_o, + tm_time_valid_o => tm_time_valid, + tm_tai_o => tm_tai, + tm_cycles_o => tm_cycles, + pps_csync_o => pps_csync_o, + pps_p_o => pps_p_o, + pps_led_o => pps_led_o, + rst_aux_n_o => aux_rst_n, + aux_diag_i => aux_diag_in, + aux_diag_o => aux_diag_out, + link_ok_o => link_ok); + + link_ok_o <= link_ok; + tm_time_valid_o <= tm_time_valid; + tm_tai_o <= tm_tai; + tm_cycles_o <= tm_cycles; + + gen_wr_streamers : if (g_fabric_iface = STREAMERS) generate + + cmp_xwr_streamers : xwr_streamers + generic map ( + g_streamers_op_mode => g_streamers_op_mode, + g_tx_streamer_params => g_tx_streamer_params, + g_rx_streamer_params => g_rx_streamer_params, + g_simulation => g_simulation) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + src_i => wrf_snk_out, + src_o => wrf_snk_in, + snk_i => wrf_src_out, + snk_o => wrf_src_in, + tx_data_i => wrs_tx_data_i, + tx_valid_i => wrs_tx_valid_i, + tx_dreq_o => wrs_tx_dreq_o, + tx_last_p1_i => wrs_tx_last_i, + tx_flush_p1_i => wrs_tx_flush_i, + rx_first_p1_o => wrs_rx_first_o, + rx_last_p1_o => wrs_rx_last_o, + rx_data_o => wrs_rx_data_o, + rx_valid_o => wrs_rx_valid_o, + rx_dreq_i => wrs_rx_dreq_i, + clk_ref_i => clk_ref_i, + tm_time_valid_i => tm_time_valid, + tm_tai_i => tm_tai, + tm_cycles_i => tm_cycles, + link_ok_i => link_ok, + wb_slave_i => aux_master_out, + wb_slave_o => aux_master_in, + snmp_array_o => aux_diag_in(c_WR_STREAMERS_ARR_SIZE_OUT-1 downto 0), + snmp_array_i => aux_diag_out(c_WR_STREAMERS_ARR_SIZE_IN-1 downto 0), + tx_streamer_cfg_i=> wrs_tx_cfg_i, + rx_streamer_cfg_i=> wrs_rx_cfg_i); + + -- unused output ports + wrf_src_o <= c_dummy_snk_in; + wrf_snk_o <= c_dummy_src_in; + + aux_master_o <= cc_dummy_master_out; + wb_eth_master_o <= cc_dummy_master_out; + + aux_diag_in(c_diag_ro_size-1 downto c_WR_STREAMERS_ARR_SIZE_OUT) <= aux_diag_i; + aux_diag_o <= aux_diag_out(c_diag_rw_size-1 downto c_WR_STREAMERS_ARR_SIZE_IN); + + end generate gen_wr_streamers; + + gen_etherbone : if (g_fabric_iface = ETHERBONE) generate + + cmp_eb_ethernet_slave : eb_ethernet_slave + generic map ( + g_sdb_address => x"0000000000030000") + port map ( + clk_i => clk_sys_i, + nRst_i => aux_rst_n, + src_o => wrf_snk_in, + src_i => wrf_snk_out, + snk_o => wrf_src_in, + snk_i => wrf_src_out, + cfg_slave_o => aux_master_in, + cfg_slave_i => aux_master_out, + master_o => wb_eth_master_o, + master_i => wb_eth_master_i); + + -- unused output ports + wrf_src_o <= c_dummy_snk_in; + wrf_snk_o <= c_dummy_src_in; + + wrs_tx_dreq_o <= '0'; + wrs_rx_first_o <= '0'; + wrs_rx_last_o <= '0'; + wrs_rx_valid_o <= '0'; + wrs_rx_data_o <= (others => '0'); + + aux_master_o <= cc_dummy_master_out; + + -- unused inputs to WR PTP core + aux_diag_in <= aux_diag_i; + aux_diag_o <= aux_diag_out; + + end generate gen_etherbone; + + gen_wr_fabric : if (g_fabric_iface = PLAIN) generate + + wrf_src_o <= wrf_src_out; + wrf_snk_o <= wrf_snk_out; + + wrf_src_in <= wrf_src_i; + wrf_snk_in <= wrf_snk_i; + + -- unused output ports + wrs_tx_dreq_o <= '0'; + wrs_rx_first_o <= '0'; + wrs_rx_last_o <= '0'; + wrs_rx_valid_o <= '0'; + wrs_rx_data_o <= (others => '0'); + + wb_eth_master_o <= cc_dummy_master_out; + + aux_master_in <= aux_master_i; + aux_master_o <= aux_master_out; + + -- unused inputs to WR PTP core + aux_diag_in <= aux_diag_i; + aux_diag_o <= aux_diag_out; + + end generate gen_wr_fabric; + +end architecture struct; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/eeprom/sfp_eeprom.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/eeprom/sfp_eeprom.vhd new file mode 100644 index 000000000..673b361d2 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/eeprom/sfp_eeprom.vhd @@ -0,0 +1,161 @@ +------------------------------------------------------------------------------- +-- +-- File: sfp_eeprom.vhd +-- Author: National Instruments +-- Original Project: N310 +-- Date: 22 February 2018 +-- +------------------------------------------------------------------------------- +-- Copyright 2018 Ettus Research, A National Instruments Company +-- SPDX-License-Identifier: LGPL-3.0 +------------------------------------------------------------------------------- +-- +-- Purpose: +-- +-- Responds to I2C reads from the WRC to pretend to be an AXGE SFP module. +-- +------------------------------------------------------------------------------- + +library IEEE; + +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + + +entity sfp_eeprom is + + port ( + -- clock & reset + clk_i : in std_logic; + sfp_scl : in std_logic; + sfp_sda_i : in std_logic; + sfp_sda_o : out std_logic + ); +end sfp_eeprom; + + +architecture syn of sfp_eeprom is + + signal SfpSdaIn_ms : std_logic := '0'; + signal SfpSdaIn : std_logic := '0'; + signal SfpSdaInDel : std_logic := '0'; + signal SfpScl_ms : std_logic := '0'; + signal SfpScl : std_logic := '0'; + signal SfpSclDel : std_logic := '0'; + signal SfpSdaOut : std_logic := '1'; + + signal ClockRe : boolean := false; + signal ClockFe : boolean := false; + signal DataFe : boolean := false; + signal DataRe : boolean := false; + signal Running : boolean := false; + signal ReadSel : boolean := false; + + signal BitCount : integer range -1 to 7 := 7; + signal AddrCount : unsigned(4 downto 0) := (others=>'0'); + signal ByteCount : integer range 0 to 143; + + type Eeprom_t is array(0 to 143) of std_logic_vector(7 downto 0); + signal Eeprom : Eeprom_t := ( + X"03", X"04", X"07", X"00", X"00", X"00", X"40", X"00", X"00", X"00", X"00", X"01", X"0d", X"00", X"0a", X"64", + X"00", X"00", X"00", X"00", X"41", X"78", X"63", X"65", X"6e", X"20", X"50", X"68", X"6f", X"74", X"6f", X"6e", + X"69", X"63", X"73", X"20", X"00", X"00", X"17", X"2d", X"41", X"58", X"47", X"45", X"2d", X"31", X"32", X"35", + X"34", X"2d", X"30", X"35", X"33", X"31", X"20", X"20", X"56", X"31", X"2e", X"31", X"05", X"1e", X"00", X"51", + X"00", X"1a", X"00", X"00", X"41", X"58", X"31", X"36", X"35", X"30", X"30", X"30", X"30", X"36", X"37", X"36", + X"39", X"20", X"20", X"20", X"31", X"36", X"31", X"32", X"30", X"38", X"20", X"20", X"00", X"00", X"00", X"bd", + X"45", X"58", X"54", X"52", X"45", X"4d", X"45", X"4c", X"59", X"20", X"43", X"4f", X"4d", X"50", X"41", X"54", + X"49", X"42", X"4c", X"45", X"20", X"20", X"20", X"20", X"20", X"20", X"20", X"20", X"20", X"20", X"20", X"20", + X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF"); + + -- AXGE Optical + -- 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef + -- 00: 03 04 07 00 00 00 40 00 00 00 00 01 0d 00 0a 64 ???...@....??.?d + -- 10: 00 00 00 00 41 78 63 65 6e 20 50 68 6f 74 6f 6e ....Axcen Photon + -- 20: 69 63 73 20 00 00 17 2d 41 58 47 45 2d 31 32 35 ics ..?-AXGE-125 + -- 30: 34 2d 30 35 33 31 20 20 56 31 2e 31 05 1e 00 51 4-0531 V1.1??.Q + -- 40: 00 1a 00 00 41 58 31 36 35 30 30 30 30 36 37 36 .?..AX1650000676 + -- 50: 39 20 20 20 31 36 31 32 30 38 20 20 00 00 00 bd 9 161208 ...? + -- 60: 45 58 54 52 45 4d 45 4c 59 20 43 4f 4d 50 41 54 EXTREMELY COMPAT + -- 70: 49 42 4c 45 20 20 20 20 20 20 20 20 20 20 20 20 IBLE + -- 80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ + +begin + + sfp_sda_o <= SfpSdaOut; + + -- Double syncs on the I2C lines + process(clk_i) + begin + if rising_edge(clk_i) then + SfpSdaIn_ms <= sfp_sda_i; + SfpSdaIn <= SfpSdaIn_ms; + SfpSdaInDel <= SfpSdaIn; + + SfpScl_ms <= sfp_scl; + SfpScl <= SfpScl_ms; + SfpSclDel <= SfpScl; + end if; + end process; + + ClockRe <= SfpScl='1' and SfpSclDel='0'; + ClockFe <= SfpScl='0' and SfpSclDel='1'; + DataRe <= SfpSdaIn='1' and SfpSdaInDel='0'; + DataFe <= SfpSdaIn='0' and SfpSdaInDel='1'; + + process(clk_i) + begin + if rising_edge(clk_i) then + SfpSdaOut <= '1'; + if (DataFe and SfpScl='1') or not Running then -- detect start condition + BitCount <= 7; + AddrCount <= (others=>'0'); + --ByteCount <= 0; + Running <= true; + ReadSel <= false; + else -- if running, then start generating data + if DataRe and SfpScl='1' then -- detect stop condition + Running <= false; + elsif AddrCount<9 then + if ClockFe then + AddrCount <= AddrCOunt + 1; + if AddrCount=8 then + if SfpSdaIn='0' then -- reset byte count for write operation + ByteCount <= 0; + end if; + ReadSel <= SfpSdaIn='1'; + end if; + end if; + elsif AddrCount=9 then + SfpSdaOut <= '0'; -- output ACK and hold it for a clock tick + if ClockFe then + AddrCount <= AddrCOunt + 1; + end if; + else + if BitCount>=0 then -- shift out 8 bits if it's a read + if ReadSel then + SfpSdaOut <= Eeprom(ByteCount)(BitCount); + else + SfpSdaOut <= '1'; + end if; + if ClockFe then + BitCount <= BitCOunt - 1; + end if; + else -- ignore ACK, update byte counter + SfpSdaOut <= '0'; + if ClockFe then + if ReadSel then + if ByteCount<143 then + ByteCount <= ByteCount + 1; + else + ByteCount <= 143; -- play X"FF" for all remaining bytes + end if; + end if; + BitCount <= 7; + end if; + end if; + end if; + end if; -- Running + end if; + end process; + +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/eeprom/tb_sfp_eeprom.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/eeprom/tb_sfp_eeprom.vhd new file mode 100644 index 000000000..4eec0765c --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/eeprom/tb_sfp_eeprom.vhd @@ -0,0 +1,96 @@ +------------------------------------------------------------------------------- +-- +-- File: tb_sfp_eeprom.vhd +-- Author: National Instruments +-- Original Project: N310 +-- Date: 22 February 2018 +-- +------------------------------------------------------------------------------- +-- Copyright 2018 Ettus Research, A National Instruments Company +-- SPDX-License-Identifier: LGPL-3.0 +------------------------------------------------------------------------------- +-- +-- Purpose: +-- +-- Testbench for sfp_eeprom.vhd +-- +------------------------------------------------------------------------------- + +library ieee; + use ieee.std_logic_1164.all; + use ieee.numeric_std.all; + +entity tb_sfp_eeprom is +end tb_sfp_eeprom; + +architecture test of tb_sfp_eeprom is + + constant kHalfPeriod : time := 25 ns; + + signal clk_i : std_logic := '1'; + signal sfp_scl : std_logic := '1'; + signal sfp_sda_i : std_logic := '1'; + signal sfp_sda_o : std_logic := '1'; + + + signal StopSim : boolean := false; + + -- This procedure waits for X rising edges of Clk + procedure ClkWait (X : integer := 1) is + begin + for i in 1 to X loop + wait until rising_edge(clk_i); + end loop; + end procedure ClkWait; + + component sfp_eeprom + port ( + clk_i : in std_logic; + sfp_scl : in std_logic; + sfp_sda_i : in std_logic; + sfp_sda_o : out std_logic); + end component; + +begin + + -- Set up the clock(s) + clk_i <= not clk_i after kHalfPeriod when not StopSim else '0'; + + + DUT: sfp_eeprom + port map ( + clk_i => clk_i, + sfp_scl => sfp_scl, + sfp_sda_i => sfp_sda_i, + sfp_sda_o => sfp_sda_o ); + + + Sim: process + begin + for K in 0 to 1 loop + wait for 210 ns; + -- send start condition + sfp_sda_i <= '0'; + wait for 210 ns; + sfp_scl <= '0'; + wait for 210 ns; + for I in 0 to 150 loop + for J in 0 to 8 loop + sfp_scl <= '1'; + wait for 210 ns; + sfp_scl <= '0'; + wait for 210 ns; + end loop; + wait for 210 ns; + end loop; + sfp_scl <= '1'; + wait for 210 ns; + sfp_sda_i <= '1'; + wait for 210 ns; + end loop; + StopSim <= true; + wait; + end process Sim; + + +end test; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/wr_fasec_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/wr_fasec_pkg.vhd new file mode 100644 index 000000000..eeb3c81b9 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/wr_fasec_pkg.vhd @@ -0,0 +1,198 @@ +------------------------------------------------------------------------------- +-- Title : WRPC Wrapper for FASEC package +-- Project : WR PTP Core +-- URL : http://www.ohwr.org/projects/wr-cores/wiki/Wrpc_core +------------------------------------------------------------------------------- +-- File : wr_fasec_pkg.vhd +-- Author(s) : Grzegorz Daniluk +-- Company : CERN (BE-CO-HT) +-- Created : 2017-08-02 +-- Last update: 2017-09-07 +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2017 CERN +-- +-- GNU LESSER GENERAL PUBLIC LICENSE +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +library work; +use work.wishbone_pkg.all; +use work.wrcore_pkg.all; +use work.wr_fabric_pkg.all; +use work.endpoint_pkg.all; +use work.wr_board_pkg.all; +use work.streamers_pkg.all; + +package wr_fasec_pkg is + + component xwrc_board_fasec + generic( + g_simulation : integer := 0; + g_with_external_clock_input : boolean := TRUE; + g_aux_clks : integer := 0; + g_fabric_iface : t_board_fabric_iface := plain; + g_streamers_op_mode : t_streamers_op_mode := TX_AND_RX; + g_tx_streamer_params : t_tx_streamer_params := c_tx_streamer_params_defaut; + g_rx_streamer_params : t_rx_streamer_params := c_rx_streamer_params_defaut; + g_dpram_initf : string := "default_xilinx"; + g_diag_id : integer := 0; + g_diag_ver : integer := 0; + g_diag_ro_size : integer := 0; + g_diag_rw_size : integer := 0); + port ( + areset_n_i : in std_logic; + areset_edge_n_i : in std_logic := '1'; + clk_20m_vcxo_i : in std_logic; + clk_125m_pllref_p_i : in std_logic; + clk_125m_pllref_n_i : in std_logic; + clk_125m_gtp_n_i : in std_logic; + clk_125m_gtp_p_i : in std_logic; + clk_aux_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0'); + clk_10m_ext_i : in std_logic := '0'; + pps_ext_i : in std_logic := '0'; + clk_sys_62m5_o : out std_logic; + clk_ref_125m_o : out std_logic; + rst_sys_62m5_n_o : out std_logic; + rst_ref_125m_n_o : out std_logic; + + plldac_sclk_o : out std_logic; + plldac_din_o : out std_logic; + pll25dac_cs_n_o : out std_logic; + pll20dac_cs_n_o : out std_logic; + + sfp_txp_o : out std_logic; + sfp_txn_o : out std_logic; + sfp_rxp_i : in std_logic; + sfp_rxn_i : in std_logic; + sfp_det_i : in std_logic := '1'; + sfp_sda_i : in std_logic; + sfp_sda_o : out std_logic; + sfp_sda_t : out std_logic; + sfp_scl_i : in std_logic; + sfp_scl_o : out std_logic; + sfp_scl_t : out std_logic; + sfp_rate_select_o : out std_logic; + sfp_tx_fault_i : in std_logic := '0'; + sfp_tx_disable_o : out std_logic; + sfp_los_i : in std_logic := '0'; + + eeprom_sda_i : in std_logic; + eeprom_sda_o : out std_logic; + eeprom_sda_t : out std_logic; + eeprom_scl_i : in std_logic; + eeprom_scl_o : out std_logic; + eeprom_scl_t : out std_logic; + + thermo_id_i : in std_logic; + thermo_id_o : out std_logic; + thermo_id_t : out std_logic; + uart_rxd_i : in std_logic; + uart_txd_o : out std_logic; + + flash_sclk_o : out std_logic; + flash_ncs_o : out std_logic; + flash_mosi_o : out std_logic; + flash_miso_i : in std_logic := '0'; + + aux_master_o : out t_wishbone_master_out; + aux_master_i : in t_wishbone_master_in := cc_dummy_master_in; + + s00_axi_aclk_o : out std_logic; + s00_axi_aresetn : in std_logic; + s00_axi_awaddr : in std_logic_vector(31 downto 0); + s00_axi_awprot : in std_logic_vector(2 downto 0); + s00_axi_awvalid : in std_logic; + s00_axi_awready : out std_logic; + s00_axi_wdata : in std_logic_vector(31 downto 0); + s00_axi_wstrb : in std_logic_vector(3 downto 0); + s00_axi_wvalid : in std_logic; + s00_axi_wready : out std_logic; + s00_axi_bresp : out std_logic_vector(1 downto 0); + s00_axi_bvalid : out std_logic; + s00_axi_bready : in std_logic; + s00_axi_araddr : in std_logic_vector(31 downto 0); + s00_axi_arprot : in std_logic_vector(2 downto 0); + s00_axi_arvalid : in std_logic; + s00_axi_arready : out std_logic; + s00_axi_rdata : out std_logic_vector(31 downto 0); + s00_axi_rresp : out std_logic_vector(1 downto 0); + s00_axi_rvalid : out std_logic; + s00_axi_rready : in std_logic; + s00_axi_rlast : out std_logic; + axi_int_o : out std_logic; + + wrf_src_o : out t_wrf_source_out; + wrf_src_i : in t_wrf_source_in := c_dummy_src_in; + wrf_snk_o : out t_wrf_sink_out; + wrf_snk_i : in t_wrf_sink_in := c_dummy_snk_in; + + wrs_tx_data_i : in std_logic_vector(g_tx_streamer_params.data_width-1 downto 0) := (others => '0'); + wrs_tx_valid_i : in std_logic := '0'; + wrs_tx_dreq_o : out std_logic; + wrs_tx_last_i : in std_logic := '1'; + wrs_tx_flush_i : in std_logic := '0'; + wrs_tx_cfg_i : in t_tx_streamer_cfg := c_tx_streamer_cfg_default; + wrs_rx_first_o : out std_logic; + wrs_rx_last_o : out std_logic; + wrs_rx_data_o : out std_logic_vector(g_rx_streamer_params.data_width-1 downto 0); + wrs_rx_valid_o : out std_logic; + wrs_rx_dreq_i : in std_logic := '0'; + wrs_rx_cfg_i : in t_rx_streamer_cfg := c_rx_streamer_cfg_default; + + wb_eth_master_o : out t_wishbone_master_out; + wb_eth_master_i : in t_wishbone_master_in := cc_dummy_master_in; + + aux_diag_i : in t_generic_word_array(g_diag_ro_size-1 downto 0) := (others => (others => '0')); + aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0); + + tm_dac_value_o : out std_logic_vector(23 downto 0); + tm_dac_wr_o : out std_logic_vector(g_aux_clks-1 downto 0); + tm_clk_aux_lock_en_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0'); + tm_clk_aux_locked_o : out std_logic_vector(g_aux_clks-1 downto 0); + + timestamps_o : out t_txtsu_timestamp; + timestamps_ack_i : in std_logic := '1'; + + abscal_txts_o : out std_logic; + abscal_rxts_o : out std_logic; + + fc_tx_pause_req_i : in std_logic := '0'; + fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000"; + fc_tx_pause_ready_o : out std_logic; + + tm_link_up_o : out std_logic; + tm_time_valid_o : out std_logic; + tm_tai_o : out std_logic_vector(39 downto 0); + tm_cycles_o : out std_logic_vector(27 downto 0); + + led_act_o : out std_logic; + led_link_o : out std_logic; + btn1_i : in std_logic := '1'; + btn2_i : in std_logic := '1'; + pps_p_o : out std_logic; + pps_led_o : out std_logic; + link_ok_o : out std_logic); + end component xwrc_board_fasec; + +end wr_fasec_pkg; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/wrc_board_fasec.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/wrc_board_fasec.vhd new file mode 100644 index 000000000..3aeca64b7 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/wrc_board_fasec.vhd @@ -0,0 +1,599 @@ +------------------------------------------------------------------------------- +-- Title : WRPC Wrapper for FASEC +-- Project : WR PTP Core +-- URL : http://www.ohwr.org/projects/wr-cores/wiki/Wrpc_core +------------------------------------------------------------------------------- +-- File : wrc_board_fasec.vhd +-- Author(s) : Grzegorz Daniluk +-- Company : CERN (BE-CO-HT) +-- Created : 2017-08-02 +-- Last update: 2017-09-07 +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Top-level wrapper for WR PTP core including all the modules +-- needed to operate the core on the FASEC board. +-- Version with no VHDL records on the top-level (mainly for Verilog +-- instantiation). +-- http://www.ohwr.org/projects/fasec/ +------------------------------------------------------------------------------- +-- Copyright (c) 2017 CERN +------------------------------------------------------------------------------- +-- GNU LESSER GENERAL PUBLIC LICENSE +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +library work; +use work.gencores_pkg.all; +use work.wrcore_pkg.all; +use work.wishbone_pkg.all; +use work.etherbone_pkg.all; +use work.wr_fabric_pkg.all; +use work.endpoint_pkg.all; +use work.streamers_pkg.all; +use work.wr_xilinx_pkg.all; +use work.wr_board_pkg.all; +use work.wr_fasec_pkg.all; + +entity wrc_board_fasec is + generic( + -- set to 1 to speed up some initialization processes during simulation + g_simulation : integer := 0; + -- Select whether to include external ref clock input + g_with_external_clock_input : integer := 0; + -- Number of aux clocks syntonized by WRPC to WR timebase + g_aux_clks : integer := 0; + -- "plainfbrc" = expose WRC fabric interface + -- "streamers" = attach WRC streamers to fabric interface + -- "etherbone" = attach Etherbone slave to fabric interface + g_fabric_iface : string := "plainfbrc"; + -- parameters configuration when g_fabric_iface = "streamers" (otherwise ignored) + --g_streamers_op_mode : t_streamers_op_mode := TX_AND_RX; + --g_tx_streamer_params : t_tx_streamer_params := c_tx_streamer_params_defaut; + --g_rx_streamer_params : t_rx_streamer_params := c_rx_streamer_params_defaut; + -- memory initialisation file for embedded CPU + g_dpram_initf : string := "../../../../bin/wrpc/wrc_phy16.bram"; + -- identification (id and ver) of the layout of words in the generic diag interface + g_diag_id : integer := 0; + g_diag_ver : integer := 0; + -- size the generic diag interface + g_diag_ro_vector_width : integer := 0; + g_diag_rw_vector_width : integer := 0 + ); + port ( + --------------------------------------------------------------------------- + -- Clocks/resets + --------------------------------------------------------------------------- + -- Reset from system fpga + areset_n_i : in std_logic; + -- Optional reset input active low with rising edge detection. Does not + -- reset PLLs. + --areset_edge_n_i : in std_logic := '1'; + -- Clock inputs from the board + clk_20m_vcxo_i : in std_logic; + clk_125m_pllref_p_i : in std_logic; + clk_125m_pllref_n_i : in std_logic; + clk_125m_gtp_n_i : in std_logic; + clk_125m_gtp_p_i : in std_logic; + -- 10MHz ext ref clock input (g_with_external_clock_input = TRUE) + clk_10m_ext_i : in std_logic := '0'; + -- External PPS input (g_with_external_clock_input = TRUE) + pps_ext_i : in std_logic := '0'; + -- 62.5MHz sys clock output + clk_sys_62m5_o : out std_logic; + -- 125MHz ref clock output + clk_ref_125m_o : out std_logic; + -- active low reset outputs, synchronous to 62m5 and 125m clocks + rst_sys_62m5_n_o : out std_logic; + rst_ref_125m_n_o : out std_logic; + + --------------------------------------------------------------------------- + -- Shared SPI interface to DACs + --------------------------------------------------------------------------- + plldac_sclk_o : out std_logic; + plldac_din_o : out std_logic; + pll25dac_cs_n_o : out std_logic; + pll20dac_cs_n_o : out std_logic; + + --------------------------------------------------------------------------- + -- SFP I/O for transceiver and SFP management info + --------------------------------------------------------------------------- + sfp_tx_p_o : out std_logic; + sfp_tx_n_o : out std_logic; + sfp_rx_p_i : in std_logic; + sfp_rx_n_i : in std_logic; + sfp_det_i : in std_logic := '1'; + sfp_sda_i : in std_logic; + sfp_sda_o : out std_logic; + sfp_sda_t : out std_logic; + sfp_scl_i : in std_logic; + sfp_scl_o : out std_logic; + sfp_scl_t : out std_logic; + sfp_rate_select_o : out std_logic; + sfp_tx_fault_i : in std_logic := '0'; + sfp_tx_disable_o : out std_logic; + sfp_los_i : in std_logic := '0'; + + --------------------------------------------------------------------------- + -- I2C EEPROM + --------------------------------------------------------------------------- + eeprom_sda_i : in std_logic; + eeprom_sda_o : out std_logic; + eeprom_sda_t : out std_logic; + eeprom_scl_i : in std_logic; + eeprom_scl_o : out std_logic; + eeprom_scl_t : out std_logic; + + --------------------------------------------------------------------------- + -- Onewire interface + --------------------------------------------------------------------------- + thermo_id_i : in std_logic; + thermo_id_o : out std_logic; + thermo_id_t : out std_logic; + + --------------------------------------------------------------------------- + -- UART + --------------------------------------------------------------------------- + uart_rxd_i : in std_logic; + uart_txd_o : out std_logic; + + --------------------------------------------------------------------------- + -- Flash memory SPI interface + --------------------------------------------------------------------------- + --flash_sclk_o : out std_logic; + --flash_ncs_o : out std_logic; + --flash_mosi_o : out std_logic; + --flash_miso_i : in std_logic; + + --------------------------------------------------------------------------- + -- External WB interface + --------------------------------------------------------------------------- + --aux_master_adr_o : out std_logic_vector(c_wishbone_address_width-1 downto 0); + --aux_master_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + --aux_master_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0) := (others => '0'); + --aux_master_sel_o : out std_logic_vector(c_wishbone_address_width/8-1 downto 0); + --aux_master_we_o : out std_logic; + --aux_master_cyc_o : out std_logic; + --aux_master_stb_o : out std_logic; + --aux_master_ack_i : in std_logic := '0'; + --aux_master_int_i : in std_logic := '0'; + --aux_master_err_i : in std_logic := '0'; + --aux_master_rty_i : in std_logic := '0'; + --aux_master_stall_i : in std_logic := '0'; + + ------------------------------------------ + -- Axi Slave Bus Interface S00_AXI + ------------------------------------------ + s00_axi_aclk_o : out std_logic; + s00_axi_aresetn : in std_logic := '1'; + s00_axi_awaddr : in std_logic_vector(31 downto 0) := (others=>'0'); + --s00_axi_awprot : in std_logic_vector(2 downto 0); + s00_axi_awvalid : in std_logic := '0'; + s00_axi_awready : out std_logic; + s00_axi_wdata : in std_logic_vector(31 downto 0) := (others=>'0'); + s00_axi_wstrb : in std_logic_vector(3 downto 0) := (others=>'0'); + s00_axi_wvalid : in std_logic := '0'; + s00_axi_wready : out std_logic; + s00_axi_bresp : out std_logic_vector(1 downto 0); + s00_axi_bvalid : out std_logic; + s00_axi_bready : in std_logic := '0'; + s00_axi_araddr : in std_logic_vector(31 downto 0) := (others=>'0'); + --s00_axi_arprot : in std_logic_vector(2 downto 0); + s00_axi_arvalid : in std_logic := '0'; + s00_axi_arready : out std_logic; + s00_axi_rdata : out std_logic_vector(31 downto 0); + s00_axi_rresp : out std_logic_vector(1 downto 0); + s00_axi_rvalid : out std_logic; + s00_axi_rready : in std_logic := '0'; + s00_axi_rlast : out std_logic; + axi_int_o : out std_logic; + + --------------------------------------------------------------------------- + -- WR fabric interface (when g_fabric_iface = "plain") + --------------------------------------------------------------------------- + --wrf_src_adr_o : out std_logic_vector(1 downto 0); + --wrf_src_dat_o : out std_logic_vector(15 downto 0); + --wrf_src_cyc_o : out std_logic; + --wrf_src_stb_o : out std_logic; + --wrf_src_we_o : out std_logic; + --wrf_src_sel_o : out std_logic_vector(1 downto 0); + --wrf_src_ack_i : in std_logic; + --wrf_src_stall_i : in std_logic; + --wrf_src_err_i : in std_logic; + --wrf_src_rty_i : in std_logic; + --wrf_snk_adr_i : in std_logic_vector(1 downto 0); + --wrf_snk_dat_i : in std_logic_vector(15 downto 0); + --wrf_snk_cyc_i : in std_logic; + --wrf_snk_stb_i : in std_logic; + --wrf_snk_we_i : in std_logic; + --wrf_snk_sel_i : in std_logic_vector(1 downto 0); + --wrf_snk_ack_o : out std_logic; + --wrf_snk_stall_o : out std_logic; + --wrf_snk_err_o : out std_logic; + --wrf_snk_rty_o : out std_logic; + + --------------------------------------------------------------------------- + -- WR streamers (when g_fabric_iface = "streamers") + --------------------------------------------------------------------------- + ----wrs_tx_data_i : in std_logic_vector(c_tx_streamer_params_defaut.data_width-1 downto 0) := (others => '0'); + --wrs_tx_data_i : in std_logic_vector(31 downto 0) := (others => '0'); + --wrs_tx_valid_i : in std_logic := '0'; + --wrs_tx_dreq_o : out std_logic; + --wrs_tx_last_i : in std_logic := '1'; + --wrs_tx_flush_i : in std_logic := '0'; + --wrs_tx_cfg_mac_l_i : in std_logic_vector(47 downto 0) := x"000000000000"; + --wrs_tx_cfg_mac_t_i : in std_logic_vector(47 downto 0) := x"ffffffffffff"; + --wrs_tx_cfg_etype_i : in std_logic_vector(15 downto 0) := x"dbff"; + --wrs_rx_first_o : out std_logic; + --wrs_rx_last_o : out std_logic; + ----wrs_rx_data_o : out std_logic_vector(c_rx_streamer_params_defaut.data_width-1 downto 0); + --wrs_rx_data_o : out std_logic_vector(31 downto 0); + --wrs_rx_valid_o : out std_logic; + --wrs_rx_dreq_i : in std_logic := '0'; + --wrs_rx_cfg_mac_l_i : in std_logic_vector(47 downto 0) := x"000000000000"; + --wrs_rx_cfg_mac_r_i : in std_logic_vector(47 downto 0) := x"000000000000"; + --wrs_rx_cfg_etype_i : in std_logic_vector(15 downto 0) := x"dbff"; + --wrs_rx_cfg_acc_b_i : in std_logic := '1'; + --wrs_rx_cfg_flt_r_i : in std_logic := '0'; + --wrs_rx_cfg_fix_l_i : in std_logic_vector(27 downto 0) := x"0000000"; + --------------------------------------------------------------------------- + -- Etherbone WB master interface (when g_fabric_iface = "etherbone") + --------------------------------------------------------------------------- + --wb_eth_adr_o : out std_logic_vector(c_wishbone_address_width-1 downto 0); + --wb_eth_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + --wb_eth_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0) := (others => '0'); + --wb_eth_sel_o : out std_logic_vector(c_wishbone_address_width/8-1 downto 0); + --wb_eth_we_o : out std_logic; + --wb_eth_cyc_o : out std_logic; + --wb_eth_stb_o : out std_logic; + --wb_eth_ack_i : in std_logic := '0'; + --wb_eth_int_i : in std_logic := '0'; + --wb_eth_err_i : in std_logic := '0'; + --wb_eth_rty_i : in std_logic := '0'; + --wb_eth_stall_i : in std_logic := '0'; + + --------------------------------------------------------------------------- + -- Generic diagnostics interface (access from WRPC via SNMP or uart console + --------------------------------------------------------------------------- + --aux_diag_i : in std_logic_vector(g_diag_ro_vector_width - 1 downto 0) := (others => '0'); + --aux_diag_o : out std_logic_vector(g_diag_rw_vector_width - 1 downto 0) := (others => '0'); + + --------------------------------------------------------------------------- + -- Aux clocks control + --------------------------------------------------------------------------- + --tm_dac_value_o : out std_logic_vector(23 downto 0); + --tm_dac_wr_o : out std_logic_vector(g_aux_clks-1 downto 0); + --tm_clk_aux_lock_en_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0'); + --tm_clk_aux_locked_o : out std_logic_vector(g_aux_clks-1 downto 0); + + --------------------------------------------------------------------------- + -- External Tx Timestamping I/F + --------------------------------------------------------------------------- + --tstamps_stb_o : out std_logic; + --tstamps_tsval_o : out std_logic_vector(31 downto 0); + --tstamps_port_id_o : out std_logic_vector(5 downto 0); + --tstamps_frame_id_o : out std_logic_vector(15 downto 0); + --tstamps_incorrect_o : out std_logic; + --tstamps_ack_i : in std_logic := '1'; + + ----------------------------------------- + -- Timestamp helper signals, used for Absolute Calibration + ----------------------------------------- + --abscal_txts_o : out std_logic; + --abscal_rxts_o : out std_logic; + + --------------------------------------------------------------------------- + -- Pause Frame Control + --------------------------------------------------------------------------- + --fc_tx_pause_req_i : in std_logic := '0'; + --fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000"; + --fc_tx_pause_ready_o : out std_logic; + + --------------------------------------------------------------------------- + -- Timecode I/F + --------------------------------------------------------------------------- + --tm_link_up_o : out std_logic; + --tm_time_valid_o : out std_logic; + --tm_tai_o : out std_logic_vector(39 downto 0); + --tm_cycles_o : out std_logic_vector(27 downto 0); + + --------------------------------------------------------------------------- + -- Buttons, LEDs and PPS output + --------------------------------------------------------------------------- + led_act_o : out std_logic; + led_link_o : out std_logic; + --btn1_i : in std_logic := '1'; + --btn2_i : in std_logic := '1'; + -- 1PPS output + pps_p_o : out std_logic; + pps_led_o : out std_logic; + -- Link ok indication + link_ok_o : out std_logic + ); + +end entity wrc_board_fasec; + + +architecture std_wrapper of wrc_board_fasec is + + ----------------------------------------------------------------------------- + -- Signals + ----------------------------------------------------------------------------- + + -- WR fabric interface + signal wrf_src_out : t_wrf_source_out; + signal wrf_src_in : t_wrf_source_in; + signal wrf_snk_out : t_wrf_sink_out; + signal wrf_snk_in : t_wrf_sink_in; + + signal aux_master_out : t_wishbone_master_out; + signal aux_master_in : t_wishbone_master_in; + + -- Etherbone interface + signal wb_eth_master_out : t_wishbone_master_out; + signal wb_eth_master_in : t_wishbone_master_in; + + -- Aux diagnostics + constant c_diag_ro_size : integer := g_diag_ro_vector_width/32; + constant c_diag_rw_size : integer := g_diag_rw_vector_width/32; + + signal aux_diag_in : t_generic_word_array(c_diag_ro_size-1 downto 0); + signal aux_diag_out : t_generic_word_array(c_diag_rw_size-1 downto 0); + + -- External Tx Timestamping I/F + signal timestamps_out : t_txtsu_timestamp; + + -- streamers config + signal wrs_tx_cfg_in : t_tx_streamer_cfg; + signal wrs_rx_cfg_in : t_rx_streamer_cfg; + + -- axi signals + signal s_axi_araddr : std_logic_vector(31 downto 0); + signal s_axi_awaddr : std_logic_vector(31 downto 0); + +begin -- architecture struct + + -- Map top-level signals to internal records + --aux_master_adr_o <= aux_master_out.adr; + --aux_master_dat_o <= aux_master_out.dat; + --aux_master_cyc_o <= aux_master_out.cyc; + --aux_master_stb_o <= aux_master_out.stb; + --aux_master_sel_o <= aux_master_out.sel; + --aux_master_we_o <= aux_master_out.we; + + --aux_master_in.dat <= aux_master_dat_i; + --aux_master_in.ack <= aux_master_ack_i; + --aux_master_in.int <= aux_master_int_i; + --aux_master_in.err <= aux_master_err_i; + --aux_master_in.rty <= aux_master_rty_i; + --aux_master_in.stall <= aux_master_stall_i; + + --wrf_src_adr_o <= wrf_src_out.adr; + --wrf_src_dat_o <= wrf_src_out.dat; + --wrf_src_cyc_o <= wrf_src_out.cyc; + --wrf_src_stb_o <= wrf_src_out.stb; + --wrf_src_we_o <= wrf_src_out.we; + --wrf_src_sel_o <= wrf_src_out.sel; + --wrf_src_in.ack <= wrf_src_ack_i; + --wrf_src_in.stall <= wrf_src_stall_i; + --wrf_src_in.err <= wrf_src_err_i; + --wrf_src_in.rty <= wrf_src_rty_i; + + --wrf_snk_in.adr <= wrf_snk_adr_i; + --wrf_snk_in.dat <= wrf_snk_dat_i; + --wrf_snk_in.cyc <= wrf_snk_cyc_i; + --wrf_snk_in.stb <= wrf_snk_stb_i; + --wrf_snk_in.we <= wrf_snk_we_i; + --wrf_snk_in.sel <= wrf_snk_sel_i; + --wrf_snk_ack_o <= wrf_snk_out.ack; + --wrf_snk_stall_o <= wrf_snk_out.stall; + --wrf_snk_err_o <= wrf_snk_out.err; + --wrf_snk_rty_o <= wrf_snk_out.rty; + + + --wb_eth_adr_o <= wb_eth_master_out.adr; + --wb_eth_dat_o <= wb_eth_master_out.dat; + --wb_eth_cyc_o <= wb_eth_master_out.cyc; + --wb_eth_stb_o <= wb_eth_master_out.stb; + --wb_eth_sel_o <= wb_eth_master_out.sel; + --wb_eth_we_o <= wb_eth_master_out.we; + + --wb_eth_master_in.dat <= wb_eth_dat_i; + --wb_eth_master_in.ack <= wb_eth_ack_i; + --wb_eth_master_in.int <= wb_eth_int_i; + --wb_eth_master_in.err <= wb_eth_err_i; + --wb_eth_master_in.rty <= wb_eth_rty_i; + --wb_eth_master_in.stall <= wb_eth_stall_i; + + --aux_diag_in <= f_de_vectorize_diag(aux_diag_i, g_diag_ro_vector_width); + --aux_diag_o <= f_vectorize_diag(aux_diag_out, g_diag_rw_vector_width); + + --tstamps_stb_o <= timestamps_out.stb; + --tstamps_tsval_o <= timestamps_out.tsval; + --tstamps_port_id_o <= timestamps_out.port_id; + --tstamps_frame_id_o <= timestamps_out.frame_id; + + --wrs_tx_cfg_in.mac_local <= wrs_tx_cfg_mac_l_i; + --wrs_tx_cfg_in.mac_target <= wrs_tx_cfg_mac_t_i; + --wrs_tx_cfg_in.ethertype <= wrs_tx_cfg_etype_i; + + --wrs_rx_cfg_in.mac_local <= wrs_rx_cfg_mac_l_i; + --wrs_rx_cfg_in.mac_remote <= wrs_rx_cfg_mac_r_i; + --wrs_rx_cfg_in.ethertype <= wrs_rx_cfg_etype_i; + --wrs_rx_cfg_in.accept_broadcasts <= wrs_rx_cfg_acc_b_i; + --wrs_rx_cfg_in.filter_remote <= wrs_rx_cfg_flt_r_i; + --wrs_rx_cfg_in.fixed_latency <= wrs_rx_cfg_fix_l_i; + + -- axi supports word-addressing only, i.e. per 4 bytes; shift for wb-bridge + s_axi_araddr <= "00" & s00_axi_araddr(31 downto 2); + s_axi_awaddr <= "00" & s00_axi_awaddr(31 downto 2); + -- Instantiate the records-based module + cmp_xwrc_board_fasec : xwrc_board_fasec + generic map ( + g_simulation => g_simulation, + g_with_external_clock_input => f_int2bool(g_with_external_clock_input), + g_aux_clks => g_aux_clks, + g_fabric_iface => f_str2iface_type(g_fabric_iface), + g_streamers_op_mode => TX_AND_RX, + g_tx_streamer_params => c_tx_streamer_params_defaut, + g_rx_streamer_params => c_rx_streamer_params_defaut, + g_dpram_initf => g_dpram_initf, + g_diag_id => g_diag_id, + g_diag_ver => g_diag_ver, + g_diag_ro_size => c_diag_ro_size, + g_diag_rw_size => c_diag_rw_size) + port map ( + areset_n_i => areset_n_i, + --areset_edge_n_i => areset_edge_n_i, + clk_20m_vcxo_i => clk_20m_vcxo_i, + clk_125m_pllref_p_i => clk_125m_pllref_p_i, + clk_125m_pllref_n_i => clk_125m_pllref_n_i, + clk_125m_gtp_n_i => clk_125m_gtp_n_i, + clk_125m_gtp_p_i => clk_125m_gtp_p_i, + clk_10m_ext_i => clk_10m_ext_i, + pps_ext_i => pps_ext_i, + clk_sys_62m5_o => clk_sys_62m5_o, + clk_ref_125m_o => clk_ref_125m_o, + rst_sys_62m5_n_o => rst_sys_62m5_n_o, + rst_ref_125m_n_o => rst_ref_125m_n_o, + -- + plldac_sclk_o => plldac_sclk_o, + plldac_din_o => plldac_din_o, + pll25dac_cs_n_o => pll25dac_cs_n_o, + pll20dac_cs_n_o => pll20dac_cs_n_o, + -- + sfp_txp_o => sfp_tx_p_o, + sfp_txn_o => sfp_tx_n_o, + sfp_rxp_i => sfp_rx_p_i, + sfp_rxn_i => sfp_rx_n_i, + sfp_det_i => sfp_det_i, + sfp_sda_i => sfp_sda_i, + sfp_sda_o => sfp_sda_o, + sfp_sda_t => sfp_sda_t, + sfp_scl_i => sfp_scl_i, + sfp_scl_o => sfp_scl_o, + sfp_scl_t => sfp_scl_t, + sfp_rate_select_o => sfp_rate_select_o, + sfp_tx_fault_i => sfp_tx_fault_i, + sfp_tx_disable_o => sfp_tx_disable_o, + sfp_los_i => sfp_los_i, + -- + eeprom_sda_i => eeprom_sda_i, + eeprom_sda_o => eeprom_sda_o, + eeprom_sda_t => eeprom_sda_t, + eeprom_scl_i => eeprom_scl_i, + eeprom_scl_o => eeprom_scl_o, + eeprom_scl_t => eeprom_scl_t, + -- + thermo_id_i => thermo_id_i, + thermo_id_o => thermo_id_o, + thermo_id_t => thermo_id_t, + -- + uart_rxd_i => uart_rxd_i, + uart_txd_o => uart_txd_o, + -- + --flash_sclk_o => flash_sclk_o, + --flash_ncs_o => flash_ncs_o, + --flash_mosi_o => flash_mosi_o, + --flash_miso_i => flash_miso_i, + -- + --aux_master_o => aux_master_out, + --aux_master_i => aux_master_in, + -- + s00_axi_aclk_o => s00_axi_aclk_o, + s00_axi_aresetn => s00_axi_aresetn, + s00_axi_awaddr => s_axi_awaddr, + s00_axi_awprot => (others=>'0'), --s00_axi_awprot, + s00_axi_awvalid => s00_axi_awvalid, + s00_axi_awready => s00_axi_awready, + s00_axi_wdata => s00_axi_wdata, + s00_axi_wstrb => s00_axi_wstrb, + s00_axi_wvalid => s00_axi_wvalid, + s00_axi_wready => s00_axi_wready, + s00_axi_bresp => s00_axi_bresp, + s00_axi_bvalid => s00_axi_bvalid, + s00_axi_bready => s00_axi_bready, + s00_axi_araddr => s_axi_araddr, + s00_axi_arprot => (others=>'0'), --s00_axi_arprot, + s00_axi_arvalid => s00_axi_arvalid, + s00_axi_arready => s00_axi_arready, + s00_axi_rdata => s00_axi_rdata, + s00_axi_rresp => s00_axi_rresp, + s00_axi_rvalid => s00_axi_rvalid, + s00_axi_rready => s00_axi_rready, + s00_axi_rlast => s00_axi_rlast, + axi_int_o => axi_int_o, + -- + --wrf_src_o => wrf_src_out, + --wrf_src_i => wrf_src_in, + --wrf_snk_o => wrf_snk_out, + --wrf_snk_i => wrf_snk_in, + -- + --wrs_tx_data_i => wrs_tx_data_i, + --wrs_tx_valid_i => wrs_tx_valid_i, + --wrs_tx_dreq_o => wrs_tx_dreq_o, + --wrs_tx_last_i => wrs_tx_last_i, + --wrs_tx_flush_i => wrs_tx_flush_i, + --wrs_tx_cfg_i => wrs_tx_cfg_in, + --wrs_rx_first_o => wrs_rx_first_o, + --wrs_rx_last_o => wrs_rx_last_o, + --wrs_rx_data_o => wrs_rx_data_o, + --wrs_rx_valid_o => wrs_rx_valid_o, + --wrs_rx_dreq_i => wrs_rx_dreq_i, + --wrs_rx_cfg_i => wrs_rx_cfg_in, + -- + --wb_eth_master_o => wb_eth_master_out, + --wb_eth_master_i => wb_eth_master_in, + -- + --aux_diag_i => aux_diag_in, + --aux_diag_o => aux_diag_out, + -- + --tm_dac_value_o => tm_dac_value_o, + --tm_dac_wr_o => tm_dac_wr_o, + --tm_clk_aux_lock_en_i => tm_clk_aux_lock_en_i, + --tm_clk_aux_locked_o => tm_clk_aux_locked_o, + -- + --timestamps_o => timestamps_out, + --timestamps_ack_i => tstamps_ack_i, + -- + --abscal_txts_o => abscal_txts_o, + --abscal_rxts_o => abscal_rxts_o, + -- + --fc_tx_pause_req_i => fc_tx_pause_req_i, + --fc_tx_pause_delay_i => fc_tx_pause_delay_i, + --fc_tx_pause_ready_o => fc_tx_pause_ready_o, + -- + --tm_link_up_o => tm_link_up_o, + --tm_time_valid_o => tm_time_valid_o, + --tm_tai_o => tm_tai_o, + --tm_cycles_o => tm_cycles_o, + -- + led_act_o => led_act_o, + led_link_o => led_link_o, + --btn1_i => btn1_i, + --btn2_i => btn2_i, + -- + pps_p_o => pps_p_o, + pps_led_o => pps_led_o, + -- + link_ok_o => link_ok_o); + +end architecture std_wrapper; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/xwrc_board_fasec.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/xwrc_board_fasec.vhd new file mode 100644 index 000000000..30bc6f3ed --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/xwrc_board_fasec.vhd @@ -0,0 +1,623 @@ +------------------------------------------------------------------------------- +-- Title : WRPC Wrapper for FASEC +-- Project : WR PTP Core +-- URL : http://www.ohwr.org/projects/wr-cores/wiki/Wrpc_core +------------------------------------------------------------------------------- +-- File : xwrc_board_fasec.vhd +-- Author(s) : Grzegorz Daniluk +-- Company : CERN (BE-CO-HT) +-- Created : 2017-08-02 +-- Last update: 2017-08-02 +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Top-level wrapper for WR PTP core including all the modules +-- needed to operate the core on the FASEC board. +-- http://www.ohwr.org/projects/fasec/ +------------------------------------------------------------------------------- +-- Copyright (c) 2017 CERN +------------------------------------------------------------------------------- +-- GNU LESSER GENERAL PUBLIC LICENSE +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +library work; +use work.gencores_pkg.all; +use work.wrcore_pkg.all; +use work.wishbone_pkg.all; +use work.etherbone_pkg.all; +use work.wr_fabric_pkg.all; +use work.endpoint_pkg.all; +use work.streamers_pkg.all; +use work.wr_xilinx_pkg.all; +use work.wr_board_pkg.all; +use work.wr_fasec_pkg.all; +use work.axi4_pkg.all; + +library unisim; +use unisim.vcomponents.all; + +entity xwrc_board_fasec is + generic( + -- set to 1 to speed up some initialization processes during simulation + g_simulation : integer := 0; + -- Select whether to include external ref clock input + g_with_external_clock_input : boolean := TRUE; + -- Number of aux clocks syntonized by WRPC to WR timebase + g_aux_clks : integer := 0; + -- plain = expose WRC fabric interface + -- streamers = attach WRC streamers to fabric interface + -- etherbone = attach Etherbone slave to fabric interface + g_fabric_iface : t_board_fabric_iface := plain; + -- parameters configuration when g_fabric_iface = "streamers" (otherwise ignored) + g_streamers_op_mode : t_streamers_op_mode := TX_AND_RX; + g_tx_streamer_params : t_tx_streamer_params := c_tx_streamer_params_defaut; + g_rx_streamer_params : t_rx_streamer_params := c_rx_streamer_params_defaut; + -- memory initialisation file for embedded CPU + g_dpram_initf : string := "/home/greg/wr/wr-cores/bin/wrpc/wrc_phy16.bram"; + -- identification (id and ver) of the layout of words in the generic diag interface + g_diag_id : integer := 0; + g_diag_ver : integer := 0; + -- size the generic diag interface + g_diag_ro_size : integer := 0; + g_diag_rw_size : integer := 0 + ); + port ( + --------------------------------------------------------------------------- + -- Clocks/resets + --------------------------------------------------------------------------- + -- Reset input (active low, can be async) + areset_n_i : in std_logic; + -- Optional reset input active low with rising edge detection. Does not + -- reset PLLs. + areset_edge_n_i : in std_logic := '1'; + -- Clock inputs from the board + clk_20m_vcxo_i : in std_logic; + clk_125m_pllref_p_i : in std_logic; + clk_125m_pllref_n_i : in std_logic; + clk_125m_gtp_n_i : in std_logic; + clk_125m_gtp_p_i : in std_logic; + -- Aux clocks, which can be disciplined by the WR Core + clk_aux_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0'); + -- 10MHz ext ref clock input (g_with_external_clock_input = TRUE) + clk_10m_ext_i : in std_logic := '0'; + -- External PPS input (g_with_external_clock_input = TRUE) + pps_ext_i : in std_logic := '0'; + -- 62.5MHz sys clock output + clk_sys_62m5_o : out std_logic; + -- 125MHz ref clock output + clk_ref_125m_o : out std_logic; + -- active low reset outputs, synchronous to 62m5 and 125m clocks + rst_sys_62m5_n_o : out std_logic; + rst_ref_125m_n_o : out std_logic; + + --------------------------------------------------------------------------- + -- Shared SPI interface to DACs + --------------------------------------------------------------------------- + plldac_sclk_o : out std_logic; + plldac_din_o : out std_logic; + pll25dac_cs_n_o : out std_logic; + pll20dac_cs_n_o : out std_logic; + + --------------------------------------------------------------------------- + -- SFP I/O for transceiver and SFP management info + --------------------------------------------------------------------------- + sfp_txp_o : out std_logic; + sfp_txn_o : out std_logic; + sfp_rxp_i : in std_logic; + sfp_rxn_i : in std_logic; + sfp_det_i : in std_logic := '1'; + sfp_sda_i : in std_logic; + sfp_sda_o : out std_logic; + sfp_sda_t : out std_logic; + sfp_scl_i : in std_logic; + sfp_scl_o : out std_logic; + sfp_scl_t : out std_logic; + sfp_rate_select_o : out std_logic; + sfp_tx_fault_i : in std_logic := '0'; + sfp_tx_disable_o : out std_logic; + sfp_los_i : in std_logic := '0'; + + --------------------------------------------------------------------------- + -- I2C EEPROM + --------------------------------------------------------------------------- + eeprom_sda_i : in std_logic; + eeprom_sda_o : out std_logic; + eeprom_sda_t : out std_logic; + eeprom_scl_i : in std_logic; + eeprom_scl_o : out std_logic; + eeprom_scl_t : out std_logic; + + --------------------------------------------------------------------------- + -- Onewire interface + --------------------------------------------------------------------------- + thermo_id_i : in std_logic; + thermo_id_o : out std_logic; + thermo_id_t : out std_logic; + + --------------------------------------------------------------------------- + -- UART + --------------------------------------------------------------------------- + uart_rxd_i : in std_logic; + uart_txd_o : out std_logic; + + --------------------------------------------------------------------------- + -- Flash memory SPI interface + --------------------------------------------------------------------------- + flash_sclk_o : out std_logic; + flash_ncs_o : out std_logic; + flash_mosi_o : out std_logic; + flash_miso_i : in std_logic; + + --------------------------------------------------------------------------- + -- External WB interface + --------------------------------------------------------------------------- + aux_master_o : out t_wishbone_master_out; + aux_master_i : in t_wishbone_master_in := cc_dummy_master_in; + + ------------------------------------------ + -- Axi Slave Bus Interface S00_AXI + ------------------------------------------ + -- aclk provided by this IP, wire to master! + s00_axi_aclk_o : out std_logic; + s00_axi_aresetn : in std_logic; + s00_axi_awaddr : in std_logic_vector(31 downto 0); + s00_axi_awprot : in std_logic_vector(2 downto 0); + s00_axi_awvalid : in std_logic; + s00_axi_awready : out std_logic; + s00_axi_wdata : in std_logic_vector(31 downto 0); + s00_axi_wstrb : in std_logic_vector(3 downto 0); + s00_axi_wvalid : in std_logic; + s00_axi_wready : out std_logic; + s00_axi_bresp : out std_logic_vector(1 downto 0); + s00_axi_bvalid : out std_logic; + s00_axi_bready : in std_logic; + s00_axi_araddr : in std_logic_vector(31 downto 0); + s00_axi_arprot : in std_logic_vector(2 downto 0); + s00_axi_arvalid : in std_logic; + s00_axi_arready : out std_logic; + s00_axi_rdata : out std_logic_vector(31 downto 0); + s00_axi_rresp : out std_logic_vector(1 downto 0); + s00_axi_rvalid : out std_logic; + s00_axi_rready : in std_logic; + s00_axi_rlast : out std_logic; + axi_int_o : out std_logic; -- axi interrupt signal + + --------------------------------------------------------------------------- + -- WR fabric interface (when g_fabric_iface = "plainfbrc") + --------------------------------------------------------------------------- + wrf_src_o : out t_wrf_source_out; + wrf_src_i : in t_wrf_source_in := c_dummy_src_in; + wrf_snk_o : out t_wrf_sink_out; + wrf_snk_i : in t_wrf_sink_in := c_dummy_snk_in; + + --------------------------------------------------------------------------- + -- WR streamers (when g_fabric_iface = "streamers") + --------------------------------------------------------------------------- + wrs_tx_data_i : in std_logic_vector(g_tx_streamer_params.data_width-1 downto 0) := (others => '0'); + wrs_tx_valid_i : in std_logic := '0'; + wrs_tx_dreq_o : out std_logic; + wrs_tx_last_i : in std_logic := '1'; + wrs_tx_flush_i : in std_logic := '0'; + wrs_tx_cfg_i : in t_tx_streamer_cfg := c_tx_streamer_cfg_default; + wrs_rx_first_o : out std_logic; + wrs_rx_last_o : out std_logic; + wrs_rx_data_o : out std_logic_vector(g_rx_streamer_params.data_width-1 downto 0); + wrs_rx_valid_o : out std_logic; + wrs_rx_dreq_i : in std_logic := '0'; + wrs_rx_cfg_i : in t_rx_streamer_cfg := c_rx_streamer_cfg_default; + --------------------------------------------------------------------------- + -- Etherbone WB master interface (when g_fabric_iface = "etherbone") + --------------------------------------------------------------------------- + wb_eth_master_o : out t_wishbone_master_out; + wb_eth_master_i : in t_wishbone_master_in := cc_dummy_master_in; + + --------------------------------------------------------------------------- + -- Generic diagnostics interface (access from WRPC via SNMP or uart console + --------------------------------------------------------------------------- + aux_diag_i : in t_generic_word_array(g_diag_ro_size-1 downto 0) := (others => (others => '0')); + aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0); + + --------------------------------------------------------------------------- + -- Aux clocks control + --------------------------------------------------------------------------- + tm_dac_value_o : out std_logic_vector(23 downto 0); + tm_dac_wr_o : out std_logic_vector(g_aux_clks-1 downto 0); + tm_clk_aux_lock_en_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0'); + tm_clk_aux_locked_o : out std_logic_vector(g_aux_clks-1 downto 0); + + --------------------------------------------------------------------------- + -- External Tx Timestamping I/F + --------------------------------------------------------------------------- + timestamps_o : out t_txtsu_timestamp; + timestamps_ack_i : in std_logic := '1'; + + ----------------------------------------- + -- Timestamp helper signals, used for Absolute Calibration + ----------------------------------------- + abscal_txts_o : out std_logic; + abscal_rxts_o : out std_logic; + + --------------------------------------------------------------------------- + -- Pause Frame Control + --------------------------------------------------------------------------- + fc_tx_pause_req_i : in std_logic := '0'; + fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000"; + fc_tx_pause_ready_o : out std_logic; + + --------------------------------------------------------------------------- + -- Timecode I/F + --------------------------------------------------------------------------- + tm_link_up_o : out std_logic; + tm_time_valid_o : out std_logic; + tm_tai_o : out std_logic_vector(39 downto 0); + tm_cycles_o : out std_logic_vector(27 downto 0); + + --------------------------------------------------------------------------- + -- Buttons, LEDs and PPS output + --------------------------------------------------------------------------- + led_act_o : out std_logic; + led_link_o : out std_logic; + btn1_i : in std_logic := '1'; + btn2_i : in std_logic := '1'; + -- 1PPS output + pps_p_o : out std_logic; + pps_led_o : out std_logic; + -- Link ok indication + link_ok_o : out std_logic + ); + +end entity xwrc_board_fasec; + + +architecture struct of xwrc_board_fasec is + + ----------------------------------------------------------------------------- + -- Signals + ----------------------------------------------------------------------------- + + -- IBUFDS + signal clk_125m_pllref_buf : std_logic; + + -- PLLs, clocks + signal clk_pll_62m5 : std_logic; + signal clk_pll_125m : std_logic; + signal clk_pll_dmtd : std_logic; + signal pll_locked : std_logic; + signal clk_10m_ext : std_logic; + + -- Reset logic + signal areset_edge_ppulse : std_logic; + signal rst_62m5_n : std_logic; + signal rstlogic_arst_n : std_logic; + signal rstlogic_clk_in : std_logic_vector(1 downto 0); + signal rstlogic_rst_out : std_logic_vector(1 downto 0); + + -- PLL DAC ARB + signal dac_hpll_load_p1 : std_logic; + signal dac_hpll_data : std_logic_vector(15 downto 0); + signal dac_dpll_load_p1 : std_logic; + signal dac_dpll_data : std_logic_vector(15 downto 0); + + -- OneWire + signal onewire_in : std_logic_vector(1 downto 0); + signal onewire_en : std_logic_vector(1 downto 0); + + -- PHY + signal phy16_to_wrc : t_phy_16bits_to_wrc; + signal phy16_from_wrc : t_phy_16bits_from_wrc; + + -- External reference + signal ext_ref_mul : std_logic; + signal ext_ref_mul_locked : std_logic; + signal ext_ref_mul_stopped : std_logic; + signal ext_ref_rst : std_logic; + + -- WRC WB Slave interface + signal wb_slave_out : t_wishbone_slave_out; + signal wb_slave_in : t_wishbone_slave_in; + signal zero : std_logic; + +begin -- architecture struct + + ----------------------------------------------------------------------------- + -- Platform-dependent part (PHY, PLLs, buffers, etc) + ----------------------------------------------------------------------------- + + cmp_ibufgds_pllref : IBUFGDS + generic map ( + DIFF_TERM => TRUE, + IBUF_LOW_PWR => TRUE, + IOSTANDARD => "DEFAULT") + port map ( + O => clk_125m_pllref_buf, + I => clk_125m_pllref_p_i, + IB => clk_125m_pllref_n_i); + + cmp_xwrc_platform : xwrc_platform_xilinx + generic map ( + g_fpga_family => "kintex7", + g_with_external_clock_input => g_with_external_clock_input, + g_use_default_plls => TRUE, + g_simulation => g_simulation) + port map ( + areset_n_i => areset_n_i, + clk_10m_ext_i => clk_10m_ext_i, + clk_20m_vcxo_i => clk_20m_vcxo_i, + clk_125m_pllref_i => clk_125m_pllref_buf, + clk_125m_gtp_p_i => clk_125m_gtp_p_i, + clk_125m_gtp_n_i => clk_125m_gtp_n_i, + sfp_txn_o => sfp_txn_o, + sfp_txp_o => sfp_txp_o, + sfp_rxn_i => sfp_rxn_i, + sfp_rxp_i => sfp_rxp_i, + sfp_tx_fault_i => sfp_tx_fault_i, + sfp_los_i => sfp_los_i, + sfp_tx_disable_o => sfp_tx_disable_o, + clk_62m5_sys_o => clk_pll_62m5, + clk_125m_ref_o => clk_pll_125m, + clk_62m5_dmtd_o => clk_pll_dmtd, + pll_locked_o => pll_locked, + clk_10m_ext_o => clk_10m_ext, + phy16_o => phy16_to_wrc, + phy16_i => phy16_from_wrc, + ext_ref_mul_o => ext_ref_mul, + ext_ref_mul_locked_o => ext_ref_mul_locked, + ext_ref_mul_stopped_o => ext_ref_mul_stopped, + ext_ref_rst_i => ext_ref_rst); + + clk_sys_62m5_o <= clk_pll_62m5; + clk_ref_125m_o <= clk_pll_125m; + + ----------------------------------------------------------------------------- + -- Reset logic + ----------------------------------------------------------------------------- + -- Detect when areset_edge_n_i goes high (end of reset) and use this edge to + -- generate rstlogic_arst_n. This is needed to connect optional reset like PCIe + -- reset. When baord runs standalone, we need to ignore PCIe reset being + -- constantly low. + cmp_arst_edge: gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_pll_62m5, + rst_n_i => '1', + data_i => areset_edge_n_i, + ppulse_o => areset_edge_ppulse); + + -- logic AND of all async reset sources (active low) + rstlogic_arst_n <= pll_locked and areset_n_i and (not areset_edge_ppulse); + + -- concatenation of all clocks required to have synced resets + rstlogic_clk_in(0) <= clk_pll_62m5; + rstlogic_clk_in(1) <= clk_pll_125m; + + cmp_rstlogic_reset : gc_reset + generic map ( + g_clocks => 2, -- 62.5MHz, 125MHz + g_logdelay => 4, -- 16 clock cycles + g_syncdepth => 3) -- length of sync chains + port map ( + free_clk_i => clk_125m_pllref_buf, + locked_i => rstlogic_arst_n, + clks_i => rstlogic_clk_in, + rstn_o => rstlogic_rst_out); + + -- distribution of resets (already synchronized to their clock domains) + rst_62m5_n <= rstlogic_rst_out(0); + + rst_sys_62m5_n_o <= rst_62m5_n; + rst_ref_125m_n_o <= rstlogic_rst_out(1); + + ----------------------------------------------------------------------------- + -- 2x SPI DAC + ----------------------------------------------------------------------------- + + cmp_dac_arb : spec_serial_dac_arb + generic map ( + g_invert_sclk => FALSE, + g_num_extra_bits => 8) + port map ( + clk_i => clk_pll_62m5, + rst_n_i => rst_62m5_n, + val1_i => dac_dpll_data, + load1_i => dac_dpll_load_p1, + val2_i => dac_hpll_data, + load2_i => dac_hpll_load_p1, + dac_cs_n_o(0) => pll25dac_cs_n_o, + dac_cs_n_o(1) => pll20dac_cs_n_o, + dac_sclk_o => plldac_sclk_o, + dac_din_o => plldac_din_o); + + ----------------------------------------------------------------------------- + -- The WR PTP core with optional fabric interface attached + ----------------------------------------------------------------------------- + + cmp_board_common : xwrc_board_common + generic map ( + g_simulation => g_simulation, + g_with_external_clock_input => g_with_external_clock_input, + g_board_name => "FSEC", + g_phys_uart => TRUE, + g_virtual_uart => TRUE, + g_aux_clks => g_aux_clks, + g_ep_rxbuf_size => 1024, + g_tx_runt_padding => TRUE, + g_dpram_initf => g_dpram_initf, + g_dpram_size => 131072/4, + g_interface_mode => PIPELINED, + g_address_granularity => BYTE, + g_aux_sdb => c_wrc_periph3_sdb, + g_softpll_enable_debugger => FALSE, + g_vuart_fifo_size => 1024, + g_pcs_16bit => TRUE, + g_diag_id => g_diag_id, + g_diag_ver => g_diag_ver, + g_diag_ro_size => g_diag_ro_size, + g_diag_rw_size => g_diag_rw_size, + g_streamers_op_mode => g_streamers_op_mode, + g_tx_streamer_params => g_tx_streamer_params, + g_rx_streamer_params => g_rx_streamer_params, + g_fabric_iface => g_fabric_iface + ) + port map ( + clk_sys_i => clk_pll_62m5, + clk_dmtd_i => clk_pll_dmtd, + clk_ref_i => clk_pll_125m, + clk_aux_i => clk_aux_i, + clk_10m_ext_i => clk_10m_ext, + clk_ext_mul_i => ext_ref_mul, + clk_ext_mul_locked_i => ext_ref_mul_locked, + clk_ext_stopped_i => ext_ref_mul_stopped, + clk_ext_rst_o => ext_ref_rst, + pps_ext_i => pps_ext_i, + rst_n_i => rst_62m5_n, + dac_hpll_load_p1_o => dac_hpll_load_p1, + dac_hpll_data_o => dac_hpll_data, + dac_dpll_load_p1_o => dac_dpll_load_p1, + dac_dpll_data_o => dac_dpll_data, + phy16_o => phy16_from_wrc, + phy16_i => phy16_to_wrc, + scl_o => eeprom_scl_t, + scl_i => eeprom_scl_i, + sda_o => eeprom_sda_t, + sda_i => eeprom_sda_i, + sfp_scl_o => sfp_scl_t, + sfp_scl_i => sfp_scl_i, + sfp_sda_o => sfp_sda_t, + sfp_sda_i => sfp_sda_i, + sfp_det_i => sfp_det_i, + spi_sclk_o => flash_sclk_o, + spi_ncs_o => flash_ncs_o, + spi_mosi_o => flash_mosi_o, + spi_miso_i => flash_miso_i, + uart_rxd_i => uart_rxd_i, + uart_txd_o => uart_txd_o, + owr_pwren_o => open, + owr_en_o => onewire_en, + owr_i => onewire_in, + wb_slave_i => wb_slave_in, + wb_slave_o => wb_slave_out, + aux_master_o => aux_master_o, + aux_master_i => aux_master_i, + wrf_src_o => wrf_src_o, + wrf_src_i => wrf_src_i, + wrf_snk_o => wrf_snk_o, + wrf_snk_i => wrf_snk_i, + wrs_tx_data_i => wrs_tx_data_i, + wrs_tx_valid_i => wrs_tx_valid_i, + wrs_tx_dreq_o => wrs_tx_dreq_o, + wrs_tx_last_i => wrs_tx_last_i, + wrs_tx_flush_i => wrs_tx_flush_i, + wrs_tx_cfg_i => wrs_tx_cfg_i, + wrs_rx_first_o => wrs_rx_first_o, + wrs_rx_last_o => wrs_rx_last_o, + wrs_rx_data_o => wrs_rx_data_o, + wrs_rx_valid_o => wrs_rx_valid_o, + wrs_rx_dreq_i => wrs_rx_dreq_i, + wrs_rx_cfg_i => wrs_rx_cfg_i, + wb_eth_master_o => wb_eth_master_o, + wb_eth_master_i => wb_eth_master_i, + aux_diag_i => aux_diag_i, + aux_diag_o => aux_diag_o, + tm_dac_value_o => tm_dac_value_o, + tm_dac_wr_o => tm_dac_wr_o, + tm_clk_aux_lock_en_i => tm_clk_aux_lock_en_i, + tm_clk_aux_locked_o => tm_clk_aux_locked_o, + timestamps_o => timestamps_o, + timestamps_ack_i => timestamps_ack_i, + abscal_txts_o => abscal_txts_o, + abscal_rxts_o => abscal_rxts_o, + fc_tx_pause_req_i => fc_tx_pause_req_i, + fc_tx_pause_delay_i => fc_tx_pause_delay_i, + fc_tx_pause_ready_o => fc_tx_pause_ready_o, + tm_link_up_o => tm_link_up_o, + tm_time_valid_o => tm_time_valid_o, + tm_tai_o => tm_tai_o, + tm_cycles_o => tm_cycles_o, + led_act_o => led_act_o, + led_link_o => led_link_o, + btn1_i => btn1_i, + btn2_i => btn2_i, + pps_p_o => pps_p_o, + pps_led_o => pps_led_o, + link_ok_o => link_ok_o); + + sfp_rate_select_o <= '1'; + + --onewire_oen_o <= onewire_en(0); + --onewire_in(0) <= onewire_i; + --onewire_in(1) <= '1'; + + thermo_id_t <= '0' when onewire_en(0) = '1' else '1'; + thermo_id_o <= '0'; + onewire_in(0) <= thermo_id_i; + onewire_in(1) <= '1'; + + eeprom_sda_o <= '0'; + eeprom_scl_o <= '0'; + sfp_sda_o <= '0'; + sfp_scl_o <= '0'; + + s00_axi_aclk_o <= clk_pll_62m5; + + zero <= '0'; + cmp_axi4lite_wbm: wb_axi4lite_bridge + port map ( + clk_sys_i => clk_pll_62m5, + rst_n_i => s00_axi_aresetn, + + AWADDR => s00_axi_awaddr, + AWVALID => s00_axi_awvalid, + AWREADY => s00_axi_awready, + WDATA => s00_axi_wdata, + WSTRB => s00_axi_wstrb, + WVALID => s00_axi_wvalid, + WREADY => s00_axi_wready, + WLAST => zero, + BRESP => s00_axi_bresp, + BVALID => s00_axi_bvalid, + BREADY => s00_axi_bready, + ARADDR => s00_axi_araddr, + ARVALID => s00_axi_arvalid, + ARREADY => s00_axi_arready, + RDATA => s00_axi_rdata, + RRESP => s00_axi_rresp, + RVALID => s00_axi_rvalid, + RREADY => s00_axi_rready, + RLAST => s00_axi_rlast, + + wb_adr => wb_slave_in.adr, + wb_dat_m2s => wb_slave_in.dat, + wb_sel => wb_slave_in.sel, + wb_cyc => wb_slave_in.cyc, + wb_stb => wb_slave_in.stb, + wb_we => wb_slave_in.we, + + wb_dat_s2m => wb_slave_out.dat, + wb_err => wb_slave_out.err, + wb_rty => wb_slave_out.rty, + wb_ack => wb_slave_out.ack, + wb_stall => wb_slave_out.stall + ); + + +end architecture struct; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_cfg_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_cfg_fifo.vhd new file mode 100644 index 000000000..684633eba --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_cfg_fifo.vhd @@ -0,0 +1,177 @@ +------------------------------------------------------------------------------ +-- Title : Etherbone Config Master FIFO +-- Project : Etherbone Core +------------------------------------------------------------------------------ +-- File : eb_cfg_fifo.vhd +-- Author : Wesley W. Terpstra +-- Company : GSI +-- Created : 2013-04-08 +-- Last update: 2013-04-08 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Buffers Config space requests +------------------------------------------------------------------------------- +-- Copyright (c) 2013 GSI +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2013-04-08 1.0 terpstra Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.wishbone_pkg.all; +use work.eb_internals_pkg.all; + +entity eb_cfg_fifo is + generic( + g_sdb_address : t_wishbone_address); + port( + clk_i : in std_logic; + rstn_i : in std_logic; + + errreg_i : in std_logic_vector(63 downto 0); + + cfg_i : in t_wishbone_slave_in; + cfg_o : out t_wishbone_slave_out; + + fsm_stb_i : in std_logic; + fsm_adr_i : in t_wishbone_address; + fsm_full_o : out std_logic; + + mux_pop_i : in std_logic; + mux_dat_o : out t_wishbone_data; + mux_empty_o : out std_logic; + + my_mac_o : out std_logic_vector(47 downto 0); + my_ip_o : out std_logic_vector(31 downto 0); + my_port_o : out std_logic_vector(15 downto 0)); +end eb_cfg_fifo; + +architecture rtl of eb_cfg_fifo is + + constant c_pad : std_logic_vector(31 downto 16) := (others => '0'); + + signal r_mac : std_logic_vector(6*8-1 downto 0); + signal r_ip : std_logic_vector(4*8-1 downto 0); + signal r_port : std_logic_vector(2*8-1 downto 0); + + signal s_fsm_adr : std_logic_vector(2 downto 0); + signal s_fifo_adr : std_logic_vector(2 downto 0); + signal s_fifo_empty : std_logic; + signal s_fifo_pop : std_logic; + signal r_cache_empty : std_logic; + signal r_cache_adr : std_logic_vector(2 downto 0); + + impure function update(x : std_logic_vector) return std_logic_vector is + alias y : std_logic_vector(x'length-1 downto 0) is x; + variable o : std_logic_vector(x'length-1 downto 0); + begin + for i in (y'length/8)-1 downto 0 loop + if cfg_i.sel(i) = '1' then + o(i*8+7 downto i*8) := cfg_i.dat(i*8+7 downto i*8); + else + o(i*8+7 downto i*8) := y(i*8+7 downto i*8); + end if; + end loop; + + return o; + end update; + +begin + + cfg_o.int <= '0'; + cfg_o.err <= '0'; + cfg_o.rty <= '0'; + cfg_o.stall <= '0'; + + cfg_wbs : process(rstn_i, clk_i) is + begin + if rstn_i = '0' then + r_mac <= x"D15EA5EDBEEF"; + r_ip <= x"C0A80064"; + r_port <= x"EBD0"; + + cfg_o.ack <= '0'; + cfg_o.dat <= (others => '0'); + elsif rising_edge(clk_i) then + if cfg_i.cyc = '1' and cfg_i.stb = '1' and cfg_i.we = '1' then + case to_integer(unsigned(cfg_i.adr(4 downto 2))) is + when 4 => r_mac(47 downto 32) <= update(r_mac(47 downto 32)); + when 5 => r_mac(31 downto 0) <= update(r_mac(31 downto 0)); + when 6 => r_ip <= update(r_ip); + when 7 => r_port <= update(r_port); + when others => null; + end case; + end if; + + cfg_o.ack <= cfg_i.cyc and cfg_i.stb; + + case to_integer(unsigned(cfg_i.adr(4 downto 2))) is + when 0 => cfg_o.dat <= errreg_i(63 downto 32); + when 1 => cfg_o.dat <= errreg_i(31 downto 0); + when 2 => cfg_o.dat <= (others => '0'); + when 3 => cfg_o.dat <= g_sdb_address; + when 4 => cfg_o.dat <= c_pad & r_mac(47 downto 32); + when 5 => cfg_o.dat <= r_mac(31 downto 0); + when 6 => cfg_o.dat <= r_ip; + when others => cfg_o.dat <= c_pad & r_port; + end case; + + end if; + end process; + + -- Discard writes. + s_fsm_adr <= fsm_adr_i(4 downto 2); + + fifo : eb_fifo + generic map( + g_width => 3, + g_size => c_queue_depth) + port map( + clk_i => clk_i, + rstn_i => rstn_i, + w_full_o => fsm_full_o, + w_push_i => fsm_stb_i, + w_dat_i => s_fsm_adr, + r_empty_o => s_fifo_empty, + r_pop_i => s_fifo_pop, + r_dat_o => s_fifo_adr); + + s_fifo_pop <= not s_fifo_empty and (r_cache_empty or mux_pop_i); + + cache : process(rstn_i, clk_i) is + begin + if rstn_i = '0' then + r_cache_empty <= '1'; + r_cache_adr <= (others => '0'); + elsif rising_edge(clk_i) then + if r_cache_empty = '1' or mux_pop_i = '1' then + r_cache_empty <= s_fifo_empty; + r_cache_adr <= s_fifo_adr; + end if; + end if; + end process; + + mux_empty_o <= r_cache_empty; + + with r_cache_adr select + mux_dat_o <= + errreg_i(63 downto 32) when "000", + errreg_i(31 downto 0) when "001", + x"00000000" when "010", + g_sdb_address when "011", + c_pad & r_mac(47 downto 32) when "100", + r_mac(31 downto 0) when "101", + r_ip when "110", + c_pad & r_port when others; + + my_mac_o <= r_mac; + my_ip_o <= r_ip; + my_port_o <= r_port; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_checksum.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_checksum.vhd new file mode 100644 index 000000000..6eb2c9df2 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_checksum.vhd @@ -0,0 +1,101 @@ +--! @file eb_checksum.vhd +--! @brief IP checksum generator for EtherBone +--! +--! Copyright (C) 2011-2012 GSI Helmholtz Centre for Heavy Ion Research GmbH +--! +--! Important details about its implementation +--! should go in these comments. +--! +--! @author Mathias Kreider +--! +--! @bug No know bugs. +--! +-------------------------------------------------------------------------------- +--! This library is free software; you can redistribute it and/or +--! modify it under the terms of the GNU Lesser General Public +--! License as published by the Free Software Foundation; either +--! version 3 of the License, or (at your option) any later version. +--! +--! This library is distributed in the hope that it will be useful, +--! but WITHOUT ANY WARRANTY; without even the implied warranty of +--! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +--! Lesser General Public License for more details. +--! +--! You should have received a copy of the GNU Lesser General Public +--! License along with this library. If not, see . +--------------------------------------------------------------------------------- + +---! Standard library +library IEEE; +--! Standard packages +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +--! Additional library +library work; +--! Additional packages +use work.eb_hdr_pkg.all; + +entity eb_checksum is + port( + clk_i : in std_logic; + nRst_i : in std_logic; + en_i : in std_logic; + data_i : in std_logic_vector(15 downto 0); + done_o : out std_logic; + sum_o : out std_logic_vector(15 downto 0)); +end eb_checksum; + +architecture behavioral of eb_checksum is + constant c_width : natural := 28; + type t_state is (S_IDLE, S_ADDUP); + + signal state : t_state := S_IDLE; + signal sum : unsigned(c_width-1 downto 0); + + function f_wrap(sum : unsigned) return unsigned is + variable sum0, sum1 : unsigned(16 downto 0); + begin + sum0 := resize(sum(15 downto 0), 17) + resize(sum(c_width-1 downto 16), 17); + sum1 := resize(sum(15 downto 0), 17) + resize(sum(c_width-1 downto 16), 17) + 1; + if sum0(16) = '1' then + return sum1(15 downto 0); + else + return sum0(15 downto 0); + end if; + end f_wrap; + +begin + + sum_o <= std_logic_vector(sum(15 downto 0)); + + adder: process(clk_i, nRst_i) + begin + if nRst_i = '0' then + done_o <= '0'; + state <= S_IDLE; + sum <= (others => '0'); + elsif rising_edge(clk_i) then + case state is + + when S_IDLE => + done_o <= '0'; + if en_i = '1' then + state <= S_ADDUP; + sum <= resize(unsigned(data_i), c_width); + end if; + + when S_ADDUP => + if en_i = '0' then + sum <= resize(f_wrap(sum), c_width); + done_o <= '1'; + state <= S_IDLE; + else + sum <= sum + resize(unsigned(data_i), c_width); + end if; + + end case; + end if; + end process; + +end behavioral; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_commit_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_commit_fifo.vhd new file mode 100644 index 000000000..24bab963d --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_commit_fifo.vhd @@ -0,0 +1,123 @@ +------------------------------------------------------------------------------ +-- Title : Etherbone Commit FIFO +-- Project : Etherbone Core +------------------------------------------------------------------------------ +-- File : eb_fifo.vhd +-- Author : Wesley W. Terpstra +-- Company : GSI +-- Created : 2013-04-29 +-- Last update: 2013-04-29 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: A FIFO which can commit/abort a sequence of writes +------------------------------------------------------------------------------- +-- Copyright (c) 2013 GSI +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2013-04-08 1.0 terpstra Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.wishbone_pkg.all; +use work.eb_internals_pkg.all; +use work.genram_pkg.all; + +-- r_dat_o is valid when r_empty_o=0 (show ahead) +-- w_dat_i is valid when w_push_i =1 +-- r_pop_i affects r_empty_o on the next cycle +-- w_push_i affects w_full_o on the next cycle +entity eb_commit_fifo is + generic( + g_width : natural; + g_size : natural); + port( + clk_i : in std_logic; + rstn_i : in std_logic; + w_full_o : out std_logic; + w_push_i : in std_logic; + w_dat_i : in std_logic_vector(g_width-1 downto 0); + w_commit_i : in std_logic; + w_abort_i : in std_logic; + r_empty_o : out std_logic; + r_pop_i : in std_logic; + r_dat_o : out std_logic_vector(g_width-1 downto 0)); +end eb_commit_fifo; + +architecture rtl of eb_commit_fifo is + constant c_depth : natural := f_ceil_log2(g_size); + + signal r_idx : unsigned(c_depth downto 0); + signal w_idx : unsigned(c_depth downto 0); + signal e_idx : unsigned(c_depth downto 0); + signal r_idx1 : unsigned(c_depth downto 0); + signal w_idx1 : unsigned(c_depth downto 0); + + constant c_low : unsigned(c_depth-1 downto 0) := (others => '0'); + constant c_high : unsigned(c_depth downto 0) := '1' & c_low; + +begin + + ram : generic_simple_dpram + generic map( + g_data_width => g_width, + g_size => 2**c_depth, + g_dual_clock => false) + port map( + rst_n_i => rstn_i, + clka_i => clk_i, + bwea_i => (others => '1'), + wea_i => w_push_i, + aa_i => std_logic_vector(w_idx(c_depth-1 downto 0)), + da_i => w_dat_i, + clkb_i => clk_i, + ab_i => std_logic_vector(r_idx1(c_depth-1 downto 0)), + qb_o => r_dat_o); + + r_idx1 <= (r_idx+1) when r_pop_i ='1' else r_idx; + w_idx1 <= (w_idx+1) when w_push_i='1' else w_idx; + + main : process(rstn_i, clk_i) is + begin + if rstn_i = '0' then + r_idx <= (others => '0'); + e_idx <= (others => '0'); + w_idx <= (others => '0'); + w_full_o <= '0'; + r_empty_o <= '1'; + elsif rising_edge(clk_i) then + r_idx <= r_idx1; + + if w_commit_i = '1' then + e_idx <= w_idx1; + end if; + + if w_abort_i = '1' then + w_idx <= e_idx; + else + w_idx <= w_idx1; + end if; + + -- Compare the newest pointers + if (w_idx1 xor c_high) = r_idx1 then + w_full_o <= '1'; + else + w_full_o <= '0'; + end if; + + -- Use the OLD write pointer to prevent read-during-write + if e_idx = r_idx1 then + r_empty_o <= '1'; + else + r_empty_o <= '0'; + end if; + + end if; + end process; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_rx.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_rx.vhd new file mode 100644 index 000000000..e4e60e3dd --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_rx.vhd @@ -0,0 +1,183 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +library work; +use work.wishbone_pkg.all; +use work.wr_fabric_pkg.all; +use work.eb_hdr_pkg.all; + +entity eb_eth_rx is + generic( + g_mtu : natural); + port( + clk_i : in std_logic; + rst_n_i : in std_logic; + snk_i : in t_wrf_sink_in; + snk_o : out t_wrf_sink_out; + master_o : out t_wishbone_master_out; + master_i : in t_wishbone_master_in; + stb_o : out std_logic; + stall_i : in std_logic; + mac_o : out std_logic_vector(47 downto 0); + ip_o : out std_logic_vector(31 downto 0); + port_o : out std_logic_vector(15 downto 0); + length_o : out unsigned(15 downto 0)); +end eb_eth_rx; + +architecture rtl of eb_eth_rx is + subtype t_index is unsigned(f_ceil_log2(g_mtu)-1 downto 0); + + type t_state is (S_DROP, S_WAIT, S_ETHERNET, S_IP, S_UDP, S_STB); + + -- Two bytes at a time + constant c_step : natural := 2; + + signal r_state : t_state; + signal r_state_next : t_state; + signal r_count : t_index; + + signal r_ack : std_logic; + signal r_pass : std_logic; + signal r_shift : std_logic_vector(c_ip_len*8-1 downto 0); + signal r_stb : std_logic; + signal r_mac : std_logic_vector(47 downto 0); + signal r_ip : std_logic_vector(31 downto 0); + signal r_port : std_logic_vector(15 downto 0); + signal r_length : unsigned(15 downto 0); + + signal s_stall : std_logic; + signal s_eth_hdr : t_eth_hdr; + signal s_ip_hdr : t_ip_hdr; + signal s_udp_hdr : t_udp_hdr; + signal s_optlen : unsigned(3 downto 0); + signal s_shift : std_logic_vector(c_ip_len*8-1 downto 0); + + function f_step(x : natural) return t_index is + begin + return to_unsigned(x/2 - 1, t_index'length); + end function; +begin + + master_o.cyc <= snk_i.cyc; + master_o.stb <= (r_pass and snk_i.stb) when snk_i.adr = c_WRF_DATA else '0'; + master_o.adr <= (others => '0'); + master_o.sel <= "0011"; + master_o.we <= '1'; + master_o.dat(31 downto 16) <= (others => '0'); + master_o.dat(15 downto 0) <= snk_i.dat; + + snk_o.ack <= r_ack; + snk_o.err <= '0'; + snk_o.rty <= '0'; + snk_o.stall <= s_stall; + + stb_o <= r_stb; + mac_o <= r_mac; + ip_o <= r_ip; + port_o <= r_port; + length_o <= r_length; + + s_stall <= r_stb when r_state = S_UDP else (r_pass and master_i.stall); + + -- These are valid when header is fully shifted in + s_shift <= r_shift(r_shift'left-16 downto 0) & snk_i.dat; + s_eth_hdr <= f_parse_eth(s_shift); + s_ip_hdr <= f_parse_ip (s_shift); + s_udp_hdr <= f_parse_udp(s_shift); + + s_optlen <= unsigned(s_ip_hdr.ihl)-5; + + fsm : process(clk_i, rst_n_i) is + begin + if rst_n_i = '0' then + r_state <= S_WAIT; + r_state_next <= S_ETHERNET; + r_count <= f_step(c_eth_len); + + r_ack <= '0'; + r_pass <= '0'; + r_shift <= (others => '0'); + r_stb <= '0'; + r_mac <= (others => '0'); + r_ip <= (others => '0'); + r_port <= (others => '0'); + r_length <= (others => '0'); + elsif rising_edge(clk_i) then + r_ack <= snk_i.cyc and snk_i.stb and not s_stall; + r_stb <= r_stb and stall_i; + + if snk_i.cyc = '0' then + r_pass <= '0'; + r_state <= S_WAIT; + r_state_next <= S_ETHERNET; + r_count <= f_step(c_eth_len); + elsif snk_i.stb = '1' and s_stall = '0' and snk_i.adr = c_WRF_DATA then + + -- defaults + r_state <= S_WAIT; + r_state_next <= S_DROP; + r_count <= r_count - 1; + r_shift <= s_shift; + + case r_state is + -- special states + when S_DROP => + r_state <= S_DROP; + r_pass <= '0'; + + when S_WAIT => + r_state_next <= r_state_next; + if r_count = to_unsigned(1, r_count'length) then + r_state <= r_state_next; + end if; + + -- payload states + when S_ETHERNET => + r_mac <= s_eth_hdr.src; + + r_count <= f_step(c_ip_len); + if s_eth_hdr.typ = c_eth_typ_ip then + r_state_next <= S_IP; + else + r_state <= S_DROP; + end if; + + when S_IP => + r_ip <= s_ip_hdr.src; + + r_count <= f_step(to_integer(s_optlen)*4 + c_udp_len); + if s_ip_hdr.ver = x"4" and unsigned(s_ip_hdr.ihl) >= 5 and s_ip_hdr.pro = c_ip_typ_udp then + r_state_next <= S_UDP; + else + r_state <= S_DROP; + end if; + + when S_UDP => + r_port <= s_udp_hdr.src; + r_length <= unsigned(s_udp_hdr.len); + + -- Raise stb four bytes after fsm starts (=> fsm will TX) + r_count <= f_step(4); + + -- Enforce MTU and 4-byte alignment + if unsigned(s_udp_hdr.len) >= 12 and + unsigned(s_udp_hdr.len) <= g_mtu-c_ip_len and + s_udp_hdr.len(1 downto 0) = "00" then + r_pass <= '1'; -- Feed future bytes to etherbone fsm + r_state_next <= S_STB; + else + r_state <= S_DROP; + end if; + + when S_STB => + r_stb <= '1'; -- this must be 4 bytes after r_pass='1' + r_count <= f_step(to_integer(r_length)-c_udp_len-4); + r_state_next <= S_DROP; + + end case; + end if; + end if; + end process; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_tx.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_tx.vhd new file mode 100644 index 000000000..661c7712d --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_tx.vhd @@ -0,0 +1,332 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +library work; +use work.wishbone_pkg.all; +use work.wr_fabric_pkg.all; +use work.eb_internals_pkg.all; +use work.eb_hdr_pkg.all; + +entity eb_eth_tx is + generic( + g_mtu : natural); + port( + clk_i : in std_logic; + rst_n_i : in std_logic; + src_i : in t_wrf_source_in; + src_o : out t_wrf_source_out; + slave_o : out t_wishbone_slave_out; + slave_i : in t_wishbone_slave_in; + stb_i : in std_logic; + stall_o : out std_logic; + mac_i : in std_logic_vector(47 downto 0); + ip_i : in std_logic_vector(31 downto 0); + port_i : in std_logic_vector(15 downto 0); + length_i : in unsigned(15 downto 0); + skip_stb_i : in std_logic; + skip_stall_o : out std_logic; + my_mac_i : in std_logic_vector(47 downto 0); + my_ip_i : in std_logic_vector(31 downto 0); + my_port_i : in std_logic_vector(15 downto 0)); +end eb_eth_tx; + +architecture rtl of eb_eth_tx is + type t_state is (S_WRF_STATUS, S_ETHERNET, S_IP, S_UDP, S_DONE, S_WAIT, S_PAYLOAD, S_RUNT, S_LOWER, S_SKIP, S_PUSH); + type t_sum_state is (S_CONST, S_DST_HI, S_DST_LO, S_SRC_HI, S_SRC_LO, S_LENGTH, S_DONE); + + signal r_state : t_state; + signal r_staten : t_state; + signal r_count : unsigned(4 downto 0); + + signal r_ready : std_logic; + signal r_mac : std_logic_vector(47 downto 0); + signal r_ip : std_logic_vector(31 downto 0); + signal r_port : std_logic_vector(15 downto 0); + signal r_length : unsigned(15 downto 0); + + signal r_hdr_stb : std_logic; + signal r_shift : std_logic_vector(c_ip_len*8-1 downto 0); + signal r_ack : std_logic; + signal s_stall : std_logic; + + signal s_buf_stb : std_logic; + signal s_buf_full : std_logic; + signal s_buf_push : std_logic; + signal s_buf_commit : std_logic; + signal s_buf_abort : std_logic; + signal s_buf_cyc : std_logic; + signal s_buf_data : std_logic_vector(15 downto 0); + signal r_buf_typ : std_logic; + + signal r_tx_cyc : std_logic; + signal s_tx_empty : std_logic; + signal s_tx_pop : std_logic; + signal s_tx_cyc : std_logic; + signal s_tx_typ : std_logic; + signal s_tx_dat : std_logic_vector(15 downto 0); + + signal r_sum_state : t_sum_state; + signal r_sum_en : std_logic; + signal r_sum_data : std_logic_vector(15 downto 0); + signal s_sum_done : std_logic_vector(15 downto 0); + + constant c_hdr_len : natural := c_ip_len; + constant c_runt_min : natural := 46 - c_ip_len; + + function f_send_eth(dst, src : std_logic_vector(47 downto 0)) return std_logic_vector is + variable o : std_logic_vector(c_hdr_len*8-1 downto 0) := (others => '-'); + variable eth : t_eth_hdr := c_eth_init; + begin + eth.dst := dst; + eth.src := src; + o(o'left downto (c_hdr_len-c_eth_len)*8) := f_format_eth(eth); + return o; + end function; + + function f_send_ip(dst, src : std_logic_vector(31 downto 0); len : unsigned(15 downto 0); sum : std_logic_vector(15 downto 0)) return std_logic_vector is + variable o : std_logic_vector(c_hdr_len*8-1 downto 0) := (others => '-'); + variable ip : t_ip_hdr := c_ip_init; + begin + ip.tol := std_logic_vector(len+20); + ip.dst := dst; + ip.src := src; + ip.sum := not sum; + o(o'left downto (c_hdr_len-c_ip_len)*8) := f_format_ip(ip); + return o; + end function; + + function f_send_udp(dst, src : std_logic_vector(15 downto 0); len : unsigned(15 downto 0)) return std_logic_vector is + variable o : std_logic_vector(c_hdr_len*8-1 downto 0) := (others => '-'); + variable udp : t_udp_hdr := c_udp_init; + begin + udp.src := src; + udp.dst := dst; + udp.len := std_logic_vector(len); + o(o'left downto (c_hdr_len-c_udp_len)*8) := f_format_udp(udp); + return o; + end function; + + function f_step(x : natural) return unsigned is + begin + return to_unsigned(x/2 - 1, 5); + end function; + +begin + + tx : eb_commit_fifo + generic map( + g_width => 18, + g_size => (g_mtu+c_eth_len)/2) + port map( + clk_i => clk_i, + rstn_i => rst_n_i, + w_full_o => s_buf_full, + w_push_i => s_buf_push, + w_commit_i => s_buf_commit, + w_abort_i => s_buf_abort, + r_empty_o => s_tx_empty, + r_pop_i => s_tx_pop, + w_dat_i(17) => s_buf_cyc, + w_dat_i(16) => r_buf_typ, + w_dat_i(15 downto 0) => s_buf_data, + r_dat_o(17) => s_tx_cyc, + r_dat_o(16) => s_tx_typ, + r_dat_o(15 downto 0) => s_tx_dat); + + slave_o.ack <= r_ack; + slave_o.int <= '0'; + slave_o.rty <= '0'; + slave_o.err <= '0'; + slave_o.stall <= s_stall; + slave_o.dat <= (others => '0'); + + stall_o <= r_ready; -- already have params + + s_stall <= s_buf_full when r_state=S_PAYLOAD else '1'; + skip_stall_o <= '0' when r_state=S_SKIP else '1'; + s_buf_stb <= (slave_i.cyc and slave_i.stb) when r_state=S_PAYLOAD else r_hdr_stb; + s_buf_push <= s_buf_stb and not s_buf_full; + s_buf_abort <= '1' when r_state=S_SKIP else '0'; + s_buf_commit <= '1' when r_state=S_LOWER else '0'; + s_buf_cyc <= '0' when r_state=S_LOWER else '1'; + s_buf_data <= slave_i.dat(15 downto 0) when r_state=S_PAYLOAD else r_shift(r_shift'left downto r_shift'left-15); + + hdr : process(clk_i, rst_n_i) is + begin + if rst_n_i = '0' then + r_state <= S_WRF_STATUS; + r_staten <= S_WRF_STATUS; + r_count <= (others => '0'); + r_ready <= '0'; + r_mac <= (others => '0'); + r_ip <= (others => '0'); + r_port <= (others => '0'); + r_length <= (others => '0'); + r_hdr_stb <= '0'; + r_ack <= '0'; + r_shift <= (others => '-'); + r_tx_cyc <= '0'; + elsif rising_edge(clk_i) then + r_ack <= slave_i.cyc and slave_i.stb and not s_stall; + + if s_tx_empty = '0' then + r_tx_cyc <= s_tx_cyc; + end if; + + if stb_i = '1' and r_ready = '0' then + r_mac <= mac_i; + r_ip <= ip_i; + r_port <= port_i; + r_length <= length_i; + r_ready <= '1'; + end if; + + case r_state is + when S_WRF_STATUS => + if r_ready = '1' then + r_hdr_stb <= '1'; + r_buf_typ <= '1'; + r_shift <= (others => '0'); + r_state <= S_ETHERNET; + end if; + + when S_ETHERNET => + if s_buf_full = '0' then + r_buf_typ <= '0'; + r_shift <= f_send_eth(r_mac, my_mac_i); + r_count <= f_step(c_eth_len); + r_staten <= S_IP; + r_state <= S_PUSH; + end if; + + when S_IP => + if s_buf_full = '0' then + r_shift <= f_send_ip(r_ip, my_ip_i, r_length, s_sum_done); + r_count <= f_step(c_ip_len); + r_staten <= S_UDP; + r_state <= S_PUSH; + end if; + + when S_UDP => + if s_buf_full = '0' then + r_shift <= f_send_udp(r_port, my_port_i, r_length); + r_count <= f_step(c_udp_len); + r_staten <= S_DONE; + r_state <= S_PUSH; + end if; + + when S_DONE => + if s_buf_full = '0' then + r_ready <= '0'; -- can latch next header params + r_hdr_stb <= '0'; -- nothing more from the header side of things + + -- After payload, may need to add runt padding + r_shift <= (others => '0'); + + if r_length < c_runt_min then + r_staten <= S_RUNT; + r_count <= f_step(c_runt_min - to_integer(r_length)); + else + r_staten <= S_LOWER; + r_count <= (others => '-'); + end if; + + -- Make sure we don't skip the payload! + if slave_i.cyc = '1' then + r_state <= S_PAYLOAD; + elsif skip_stb_i = '1' then + r_state <= S_SKIP; + else + r_state <= S_WAIT; + end if; + end if; + + when S_WAIT => + if slave_i.cyc = '1' then + r_state <= S_PAYLOAD; + elsif skip_stb_i = '1' then + r_state <= S_SKIP; + end if; + + when S_PAYLOAD => + if slave_i.cyc = '0' then + r_hdr_stb <= '1'; + r_state <= r_staten; + end if; + + when S_RUNT => + if s_buf_full = '0' then + r_state <= S_PUSH; + r_staten <= S_LOWER; + end if; + + when S_LOWER => + if s_buf_full = '0' then + r_hdr_stb <= '0'; + r_state <= S_WRF_STATUS; + end if; + + when S_SKIP => + r_state <= S_WRF_STATUS; + + when S_PUSH => + if s_buf_full = '0' then + r_count <= r_count - 1; + r_shift <= r_shift(r_shift'left-16 downto 0) & x"0000"; + + if r_count = to_unsigned(1, r_count'length) then + r_state <= r_staten; + end if; + end if; + + end case; + end if; + end process; + + src_o.cyc <= s_tx_cyc when s_tx_empty='0' else r_tx_cyc; + src_o.stb <= not s_tx_empty; + src_o.adr <= c_WRF_STATUS when s_tx_typ='1' else c_WRF_DATA; + src_o.we <= '1'; + src_o.sel <= "11"; + src_o.dat <= s_tx_dat; + + s_tx_pop <= not s_tx_empty and not (s_tx_cyc and src_i.stall); + + sum : eb_checksum + port map( + clk_i => clk_i, + nRst_i => rst_n_i, + en_i => r_sum_en, + data_i => r_sum_data, + done_o => open, + sum_o => s_sum_done); + + sum_header : process(clk_i, rst_n_i) is + begin + if rst_n_i = '0' then + r_sum_state <= S_CONST; + r_sum_en <= '0'; + r_sum_data <= (others => '0'); + elsif rising_edge(clk_i) then + + case r_sum_state is + when S_CONST => + r_sum_data <= f_checksum(f_format_ip(c_ip_init)); + if stb_i = '1' and r_ready = '0' then + r_sum_en <= '1'; + r_sum_state <= S_DST_HI; + end if; + + when S_DST_HI => r_sum_state <= S_DST_LO; r_sum_data <= r_ip(31 downto 16); + when S_DST_LO => r_sum_state <= S_SRC_HI; r_sum_data <= r_ip(15 downto 0); + when S_SRC_HI => r_sum_state <= S_SRC_LO; r_sum_data <= my_ip_i(31 downto 16); + when S_SRC_LO => r_sum_state <= S_LENGTH; r_sum_data <= my_ip_i(15 downto 0); + when S_LENGTH => r_sum_state <= S_DONE; r_sum_data <= std_logic_vector(r_length+20); + when S_DONE => r_sum_state <= S_CONST; r_sum_en <= '0'; + end case; + + end if; + end process; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_ethernet_slave.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_ethernet_slave.vhd new file mode 100644 index 000000000..304333085 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_ethernet_slave.vhd @@ -0,0 +1,164 @@ +--! @file eb_ethernet_slave.vhd +--! @brief Top file for EtherBone core +--! +--! Copyright (C) 2011-2012 GSI Helmholtz Centre for Heavy Ion Research GmbH +--! +--! Important details about its implementation +--! should go in these comments. +--! +--! @author Mathias Kreider +--! @author Wesley W. Terpstra +--! +-------------------------------------------------------------------------------- +--! This library is free software; you can redistribute it and/or +--! modify it under the terms of the GNU Lesser General Public +--! License as published by the Free Software Foundation; either +--! version 3 of the License, or (at your option) any later version. +--! +--! This library is distributed in the hope that it will be useful, +--! but WITHOUT ANY WARRANTY; without even the implied warranty of +--! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +--! Lesser General Public License for more details. +--! +--! You should have received a copy of the GNU Lesser General Public +--! License along with this library. If not, see . +--------------------------------------------------------------------------------- + +--! Standard library +library IEEE; +--! Standard packages +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +library work; +use work.etherbone_pkg.all; +use work.eb_hdr_pkg.all; +use work.wishbone_pkg.all; +use work.wr_fabric_pkg.all; +use work.eb_internals_pkg.all; + +entity eb_ethernet_slave is + generic( + g_sdb_address : std_logic_vector(63 downto 0); + g_timeout_cycles : natural; + g_mtu : natural); + port( + clk_i : in std_logic; + nRst_i : in std_logic; + snk_i : in t_wrf_sink_in; + snk_o : out t_wrf_sink_out; + src_o : out t_wrf_source_out; + src_i : in t_wrf_source_in; + cfg_slave_o : out t_wishbone_slave_out; + cfg_slave_i : in t_wishbone_slave_in; + master_o : out t_wishbone_master_out; + master_i : in t_wishbone_master_in); +end eb_ethernet_slave; + + +architecture rtl of eb_ethernet_slave is + signal s_his_mac, s_my_mac : std_logic_vector(47 downto 0); + signal s_his_ip, s_my_ip : std_logic_vector(31 downto 0); + signal s_his_port, s_my_port : std_logic_vector(15 downto 0); + + signal s_tx_stb : std_logic; + signal s_tx_stall : std_logic; + signal s_skip_stb : std_logic; + signal s_skip_stall : std_logic; + signal s_length : unsigned(15 downto 0); -- of UDP in words + + signal s_rx2widen : t_wishbone_master_out; + signal s_widen2rx : t_wishbone_master_in; + signal s_widen2fsm : t_wishbone_master_out; + signal s_fsm2widen : t_wishbone_master_in; + signal s_fsm2narrow : t_wishbone_master_out; + signal s_narrow2fsm : t_wishbone_master_in; + signal s_narrow2tx : t_wishbone_master_out; + signal s_tx2narrow : t_wishbone_master_in; + +begin + rx : eb_eth_rx + generic map( + g_mtu => g_mtu) + port map( + clk_i => clk_i, + rst_n_i => nRst_i, + snk_i => snk_i, + snk_o => snk_o, + master_o => s_rx2widen, + master_i => s_widen2rx, + stb_o => s_tx_stb, + stall_i => s_tx_stall, + mac_o => s_his_mac, + ip_o => s_his_ip, + port_o => s_his_port, + length_o => s_length); + + widen : eb_stream_widen + generic map( + g_slave_width => 16, + g_master_width => 32) + port map( + clk_i => clk_i, + rst_n_i => nRst_i, + slave_i => s_rx2widen, + slave_o => s_widen2rx, + master_i => s_fsm2widen, + master_o => s_widen2fsm); + + eb : eb_slave_top + generic map( + g_sdb_address => g_sdb_address(31 downto 0), + g_timeout_cycles => g_timeout_cycles) + port map( + clk_i => clk_i, + nRst_i => nRst_i, + EB_RX_i => s_widen2fsm, + EB_RX_o => s_fsm2widen, + EB_TX_i => s_narrow2fsm, + EB_TX_o => s_fsm2narrow, + skip_stb_o => s_skip_stb, + skip_stall_i => s_skip_stall, + WB_config_i => cfg_slave_i, + WB_config_o => cfg_slave_o, + WB_master_i => master_i, + WB_master_o => master_o, + my_mac_o => s_my_mac, + my_ip_o => s_my_ip, + my_port_o => s_my_port); + + narrow : eb_stream_narrow + generic map( + g_slave_width => 32, + g_master_width => 16) + port map( + clk_i => clk_i, + rst_n_i => nRst_i, + slave_i => s_fsm2narrow, + slave_o => s_narrow2fsm, + master_i => s_tx2narrow, + master_o => s_narrow2tx); + + tx : eb_eth_tx + generic map( + g_mtu => g_mtu) + port map( + clk_i => clk_i, + rst_n_i => nRst_i, + src_i => src_i, + src_o => src_o, + slave_o => s_tx2narrow, + slave_i => s_narrow2tx, + stb_i => s_tx_stb, + stall_o => s_tx_stall, + mac_i => s_his_mac, + ip_i => s_his_ip, + port_i => s_his_port, + length_i => s_length, + skip_stb_i => s_skip_stb, + skip_stall_o => s_skip_stall, + my_mac_i => s_my_mac, + my_ip_i => s_my_ip, + my_port_i => s_my_port); + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_fifo.vhd new file mode 100644 index 000000000..22ac21364 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_fifo.vhd @@ -0,0 +1,112 @@ +------------------------------------------------------------------------------ +-- Title : Etherbone FIFO +-- Project : Etherbone Core +------------------------------------------------------------------------------ +-- File : eb_fifo.vhd +-- Author : Wesley W. Terpstra +-- Company : GSI +-- Created : 2013-04-08 +-- Last update: 2013-04-08 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: A convenience wrapper for FIFOs used in Etherbone +------------------------------------------------------------------------------- +-- Copyright (c) 2013 GSI +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2013-04-08 1.0 terpstra Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.wishbone_pkg.all; +use work.eb_internals_pkg.all; +use work.genram_pkg.all; + +-- r_dat_o is valid when r_empty_o=0 (show ahead) +-- w_dat_i is valid when w_push_i =1 +-- r_pop_i affects r_empty_o on the next cycle +-- w_push_i affects w_full_o on the next cycle +entity eb_fifo is + generic( + g_width : natural; + g_size : natural); + port( + clk_i : in std_logic; + rstn_i : in std_logic; + w_full_o : out std_logic; + w_push_i : in std_logic; + w_dat_i : in std_logic_vector(g_width-1 downto 0); + r_empty_o : out std_logic; + r_pop_i : in std_logic; + r_dat_o : out std_logic_vector(g_width-1 downto 0)); +end eb_fifo; + +architecture rtl of eb_fifo is + constant c_depth : natural := f_ceil_log2(g_size); + + signal r_idx : unsigned(c_depth downto 0); + signal w_idx : unsigned(c_depth downto 0); + signal r_idx1 : unsigned(c_depth downto 0); + signal w_idx1 : unsigned(c_depth downto 0); + + constant c_low : unsigned(c_depth-1 downto 0) := (others => '0'); + constant c_high : unsigned(c_depth downto 0) := '1' & c_low; + +begin + + ram : generic_simple_dpram + generic map( + g_data_width => g_width, + g_size => g_size, + g_dual_clock => false) + port map( + rst_n_i => rstn_i, + + clka_i => clk_i, + bwea_i => (others => '1'), + wea_i => w_push_i, + aa_i => std_logic_vector(w_idx(c_depth-1 downto 0)), + da_i => w_dat_i, + + clkb_i => clk_i, + ab_i => std_logic_vector(r_idx1(c_depth-1 downto 0)), + qb_o => r_dat_o); + + r_idx1 <= (r_idx+1) when r_pop_i ='1' else r_idx; + w_idx1 <= (w_idx+1) when w_push_i='1' else w_idx; + + main : process(rstn_i, clk_i) is + begin + if rstn_i = '0' then + r_idx <= (others => '0'); + w_idx <= (others => '0'); + w_full_o <= '0'; + r_empty_o <= '1'; + elsif rising_edge(clk_i) then + r_idx <= r_idx1; + w_idx <= w_idx1; + + -- Compare the newest pointers + if (w_idx1 xor c_high) = r_idx1 then + w_full_o <= '1'; + else + w_full_o <= '0'; + end if; + + -- Use the OLD write pointer to prevent read-during-write + if w_idx = r_idx1 then + r_empty_o <= '1'; + else + r_empty_o <= '0'; + end if; + + end if; + end process; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_hdr_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_hdr_pkg.vhd new file mode 100644 index 000000000..c7d40aa07 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_hdr_pkg.vhd @@ -0,0 +1,271 @@ +--! @file eb_hdr_pkg.vhd +--! @brief EtherBone Header definitions - Eth, IPV4, UDP, EB +--! +--! Copyright (C) 2011-2012 GSI Helmholtz Centre for Heavy Ion Research GmbH +--! +--! Important details about its implementation +--! should go in these comments. +--! +--! @author Mathias Kreider +--! @author Wesley W. Terpstra +--! +-------------------------------------------------------------------------------- +--! This library is free software; you can redistribute it and/or +--! modify it under the terms of the GNU Lesser General Public +--! License as published by the Free Software Foundation; either +--! version 3 of the License, or (at your option) any later version. +--! +--! This library is distributed in the hope that it will be useful, +--! but WITHOUT ANY WARRANTY; without even the implied warranty of +--! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +--! Lesser General Public License for more details. +--! +--! You should have received a copy of the GNU Lesser General Public +--! License along with this library. If not, see . +--------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +library work; +use work.wishbone_pkg.all; + +package eb_hdr_pkg is + + constant c_eth_typ_ip : std_logic_vector((2*8)-1 downto 0) := x"0800"; + type t_eth_hdr is record + dst : std_logic_vector((6*8)-1 downto 0); + src : std_logic_vector((6*8)-1 downto 0); + typ : std_logic_vector((2*8)-1 downto 0); + end record; + constant c_eth_len : natural := 14; + constant c_eth_init : t_eth_hdr := ( + dst => (others => '0'), -- set! + src => (others => '0'), -- set! + typ => c_eth_typ_ip); + + constant c_ip_typ_udp : std_logic_vector(7 downto 0) := x"11"; + type t_ip_hdr is record + ver : std_logic_vector(3 downto 0); + ihl : std_logic_vector(3 downto 0); + tos : std_logic_vector(7 downto 0); + tol : std_logic_vector(15 downto 0); + id : std_logic_vector(15 downto 0); + flg : std_logic_vector(2 downto 0); + fro : std_logic_vector(12 downto 0); + ttl : std_logic_vector(7 downto 0); + pro : std_logic_vector(7 downto 0); + sum : std_logic_vector(15 downto 0); + src : std_logic_vector(31 downto 0); + dst : std_logic_vector(31 downto 0); + end record; + constant c_ip_len : natural := 20; + constant c_ip_init : t_ip_hdr := ( + ver => x"4", + ihl => x"5", + tos => x"00", + tol => (others => '0'), -- set! + id => (others => '0'), + flg => "010", -- don't fragment + fro => (others => '0'), + ttl => x"3f", + pro => c_ip_typ_udp, + sum => (others => '0'), -- set! + src => (others => '0'), -- set! + dst => (others => '0')); -- set! + + type t_udp_hdr is record + src : std_logic_vector(15 downto 0); + dst : std_logic_vector(15 downto 0); + len : std_logic_vector(15 downto 0); + sum : std_logic_vector(15 downto 0); + end record; + constant c_udp_len : natural := 8; + constant c_udp_init : t_udp_hdr := ( + src => (others => '0'), -- set! + dst => (others => '0'), -- set! + len => (others => '0'), -- set! + sum => (others => '0')); + + constant c_eb_magic : std_logic_vector(15 downto 0) := x"4e6f"; + constant c_eb_ver : std_logic_vector(3 downto 0) := x"1"; + type t_eb_hdr is record + magic : std_logic_vector(15 downto 0); + ver : std_logic_vector(3 downto 0); + res1 : std_logic; + no_response : std_logic; + probe_res : std_logic; + probe : std_logic; + addr_size : std_logic_vector(3 downto 0); + data_size : std_logic_vector(3 downto 0); + end record; + constant c_eb_len : natural := 4; + constant c_eb_init : t_eb_hdr := ( + magic => c_eb_magic, + ver => c_eb_ver, + res1 => '0', + no_response => '1', + probe_res => '0', + probe => '0', + addr_size => x"4", -- 32-bit only + data_size => x"4"); + + type t_rec_hdr is record + bca_cfg : std_logic; + rca_cfg : std_logic; + rd_fifo : std_logic; + res1 : std_logic; + drop_cyc : std_logic; + wca_cfg : std_logic; + wr_fifo : std_logic; + res2 : std_logic; + sel : std_logic_vector(7 downto 0); + wr_cnt : unsigned(7 downto 0); + rd_cnt : unsigned(7 downto 0); + end record; + constant c_rec_len : natural := 4; + constant c_rec_init : t_rec_hdr := ( + bca_cfg => '0', + rca_cfg => '0', + rd_fifo => '0', + res1 => '0', + drop_cyc => '0', + wca_cfg => '0', + wr_fifo => '0', + res2 => '0', + sel => (others => '0'), + wr_cnt => (others => '0'), + rd_cnt => (others => '0')); + + function f_parse_eth(x : std_logic_vector) return t_eth_hdr; + function f_parse_ip (x : std_logic_vector) return t_ip_hdr; + function f_parse_udp(x : std_logic_vector) return t_udp_hdr; + function f_parse_eb (x : std_logic_vector) return t_eb_hdr; + function f_parse_rec(x : std_logic_vector) return t_rec_hdr; + + function f_format_eth(x : t_eth_hdr) return std_logic_vector; --(c_eth_len*8-1 downto 0); + function f_format_ip (x : t_ip_hdr) return std_logic_vector; --(c_ip_len *8-1 downto 0); + function f_format_udp(x : t_udp_hdr) return std_logic_vector; --(c_udp_len*8-1 downto 0); + function f_format_eb (x : t_eb_hdr) return std_logic_vector; --(c_eb_len *8-1 downto 0); + function f_format_rec(x : t_rec_hdr) return std_logic_vector; --(c_rec_len*8-1 downto 0); + + -- To be used only on constants! + function f_checksum(x : std_logic_vector) return std_logic_vector; + +end package; + +package body eb_hdr_pkg is + + function f_parse_eth(x : std_logic_vector) return t_eth_hdr is + variable o : t_eth_hdr; + begin + o.dst := x(111 downto 64); + o.src := x( 63 downto 16); + o.typ := x( 15 downto 0); + return o; + end function; + + function f_parse_ip(x : std_logic_vector) return t_ip_hdr is + variable o : t_ip_hdr; + begin + o.ver := x(159 downto 156); + o.ihl := x(155 downto 152); + o.tos := x(151 downto 144); + o.tol := x(143 downto 128); + o.id := x(127 downto 112); + o.flg := x(111 downto 109); + o.fro := x(108 downto 96); + o.ttl := x(95 downto 88); + o.pro := x(87 downto 80); + o.sum := x(79 downto 64); + o.src := x(63 downto 32); + o.dst := x(31 downto 0); + return o; + end function; + + function f_parse_udp(x : std_logic_vector) return t_udp_hdr is + variable o : t_udp_hdr; + begin + o.src := x(63 downto 48); + o.dst := x(47 downto 32); + o.len := x(31 downto 16); + o.sum := x(15 downto 0); + return o; + end function; + + function f_parse_eb(x : std_logic_vector) return t_eb_hdr is + variable o : t_eb_hdr; + begin + o.magic := x(31 downto 16); + o.ver := x(15 downto 12); + o.res1 := x(11); + o.no_response := x(10); + o.probe_res := x(9); + o.probe := x(8); + o.addr_size := x( 7 downto 4); + o.data_size := x( 3 downto 0); + return o; + end function; + + function f_parse_rec(x : std_logic_vector) return t_rec_hdr is + variable o : t_rec_hdr; + begin + o.bca_cfg := x(31); + o.rca_cfg := x(30); + o.rd_fifo := x(29); + o.res1 := x(28); + o.drop_cyc := x(27); + o.wca_cfg := x(26); + o.wr_fifo := x(25); + o.res2 := x(24); + o.sel := x(23 downto 16); + o.wr_cnt := unsigned(x(15 downto 8)); + o.rd_cnt := unsigned(x( 7 downto 0)); + return o; + end function; + + function f_format_eth(x : t_eth_hdr) return std_logic_vector is + begin + return x.dst & x.src & x.typ; + end function; + + function f_format_ip (x : t_ip_hdr) return std_logic_vector is + begin + return x.ver & x.ihl & x.tos & x.tol & x.id & x.flg & + x.fro & x.ttl & x.pro & x.sum & x.src & x.dst; + end function; + + function f_format_udp(x : t_udp_hdr) return std_logic_vector is + begin + return x.src & x.dst & x.len & x.sum; + end function; + + function f_format_eb (x : t_eb_hdr) return std_logic_vector is + begin + return x.magic & x.ver & x.res1 & x.no_response & x.probe_res & + x.probe & x.addr_size & x.data_size; + end function; + + function f_format_rec(x : t_rec_hdr) return std_logic_vector is + begin + return x.bca_cfg & x.rca_cfg & x.rd_fifo & x.res1 & + x.drop_cyc & x.wca_cfg & x.wr_fifo & x.res2 & + x.sel & std_logic_vector(x.wr_cnt) & std_logic_vector(x.rd_cnt); + end function; + + function f_checksum(x : std_logic_vector) return std_logic_vector is + alias y : std_logic_vector((x'length/16)*16-1 downto 0) is x; + variable o : unsigned(16 downto 0) := (others => '0'); + begin + for i in y'length/16-1 downto 0 loop + o := o + ('0' & unsigned(y(i*16+15 downto i*16))); + if o(16) = '1' then + o := o + 1; + o(16) := '0'; + end if; + end loop; + return std_logic_vector(o(15 downto 0)); + end function; + +end package body; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_internals_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_internals_pkg.vhd new file mode 100644 index 000000000..27fc5a893 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_internals_pkg.vhd @@ -0,0 +1,418 @@ +library IEEE; +--! Standard packages +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +--! Additional library +library work; +use work.wishbone_pkg.all; +use work.wr_fabric_pkg.all; +use work.eb_hdr_pkg.all; + +package eb_internals_pkg is + + subtype t_tag is std_logic_vector(2 downto 0); + + constant c_tag_drop_tx : t_tag := "000"; + constant c_tag_skip_tx : t_tag := "001"; + constant c_tag_pass_tx : t_tag := "010"; + constant c_tag_pass_on : t_tag := "011"; + constant c_tag_cfg_req : t_tag := "100"; + constant c_tag_cfg_ign : t_tag := "101"; + constant c_tag_wbm_req : t_tag := "110"; + constant c_tag_wbm_ign : t_tag := "111"; + + constant c_queue_depth : natural := 32; + + component eb_slave_top is + generic( + g_sdb_address : t_wishbone_address; + g_timeout_cycles : natural); + port( + clk_i : in std_logic; --! System Clk + nRst_i : in std_logic; --! active low sync reset + + EB_RX_i : in t_wishbone_slave_in; --! Streaming wishbone(record) sink from RX transport protocol block + EB_RX_o : out t_wishbone_slave_out; --! Streaming WB sink flow control to RX transport protocol block + EB_TX_i : in t_wishbone_master_in; --! Streaming WB src flow control from TX transport protocol block + EB_TX_o : out t_wishbone_master_out; --! Streaming WB src to TX transport protocol block + + skip_stb_o : out std_logic; --! Does a packet get discarded? + skip_stall_i: in std_logic; + + WB_config_i : in t_wishbone_slave_in; --! WB V4 interface to WB interconnect/device(s) + WB_config_o : out t_wishbone_slave_out; --! WB V4 interface to WB interconnect/device(s) + WB_master_i : in t_wishbone_master_in; --! WB V4 interface to WB interconnect/device(s) + WB_master_o : out t_wishbone_master_out; --! WB V4 interface to WB interconnect/device(s) + + my_mac_o : out std_logic_vector(47 downto 0); + my_ip_o : out std_logic_vector(31 downto 0); + my_port_o : out std_logic_vector(15 downto 0)); + end component; + + component eb_slave_fsm is + port( + clk_i : in std_logic; + rstn_i : in std_logic; + + rx_cyc_i : in std_logic; + rx_stb_i : in std_logic; + rx_dat_i : in t_wishbone_data; + rx_stall_o : out std_logic; + + tag_stb_o : out std_logic; + tag_dat_o : out t_tag; + tag_full_i : in std_logic; + + pass_stb_o : out std_logic; + pass_dat_o : out t_wishbone_data; + pass_full_i : in std_logic; + + cfg_stb_o : out std_logic; + cfg_adr_o : out t_wishbone_address; + cfg_full_i : in std_logic; + + wbm_stb_o : out std_logic; + wbm_full_i : in std_logic; + wbm_busy_i : in std_logic; + + master_o : out t_wishbone_master_out; + master_stall_i : in std_logic); + end component; + + component eb_fifo is + generic( + g_width : natural; + g_size : natural); + port( + clk_i : in std_logic; + rstn_i : in std_logic; + w_full_o : out std_logic; + w_push_i : in std_logic; + w_dat_i : in std_logic_vector(g_width-1 downto 0); + r_empty_o : out std_logic; + r_pop_i : in std_logic; + r_dat_o : out std_logic_vector(g_width-1 downto 0)); + end component; + + component eb_commit_fifo is + generic( + g_width : natural; + g_size : natural); + port( + clk_i : in std_logic; + rstn_i : in std_logic; + w_full_o : out std_logic; + w_push_i : in std_logic; + w_dat_i : in std_logic_vector(g_width-1 downto 0); + w_commit_i : in std_logic; + w_abort_i : in std_logic; + r_empty_o : out std_logic; + r_pop_i : in std_logic; + r_dat_o : out std_logic_vector(g_width-1 downto 0)); + end component; + + component eb_tx_mux is + port( + clk_i : in std_logic; + rstn_i : in std_logic; + + tag_pop_o : out std_logic; + tag_dat_i : in t_tag; + tag_empty_i : in std_logic; + + pass_pop_o : out std_logic; + pass_dat_i : in t_wishbone_data; + pass_empty_i : in std_logic; + + cfg_pop_o : out std_logic; + cfg_dat_i : in t_wishbone_data; + cfg_empty_i : in std_logic; + + wbm_pop_o : out std_logic; + wbm_dat_i : in t_wishbone_data; + wbm_empty_i : in std_logic; + + skip_stb_o : out std_logic; + skip_stall_i : in std_logic; + + tx_cyc_o : out std_logic; + tx_stb_o : out std_logic; + tx_dat_o : out t_wishbone_data; + tx_stall_i : in std_logic); + end component; + + component eb_tag_fifo is + port( + clk_i : in std_logic; + rstn_i : in std_logic; + + fsm_stb_i : in std_logic; + fsm_dat_i : in t_tag; + fsm_full_o : out std_logic; + + mux_pop_i : in std_logic; + mux_dat_o : out t_tag; + mux_empty_o : out std_logic); + end component; + + component eb_pass_fifo is + port( + clk_i : in std_logic; + rstn_i : in std_logic; + + fsm_stb_i : in std_logic; + fsm_dat_i : in t_wishbone_data; + fsm_full_o : out std_logic; + + mux_pop_i : in std_logic; + mux_dat_o : out t_wishbone_data; + mux_empty_o : out std_logic); + end component; + + component eb_cfg_fifo is + generic( + g_sdb_address : t_wishbone_address); + port( + clk_i : in std_logic; + rstn_i : in std_logic; + + errreg_i : in std_logic_vector(63 downto 0); + + cfg_i : in t_wishbone_slave_in; + cfg_o : out t_wishbone_slave_out; + + fsm_stb_i : in std_logic; + fsm_adr_i : in t_wishbone_address; + fsm_full_o : out std_logic; + + mux_pop_i : in std_logic; + mux_dat_o : out t_wishbone_data; + mux_empty_o : out std_logic; + + my_mac_o : out std_logic_vector(47 downto 0); + my_ip_o : out std_logic_vector(31 downto 0); + my_port_o : out std_logic_vector(15 downto 0)); + end component; + + component eb_wbm_fifo is + generic( + g_timeout_cycles : natural); + port( + clk_i : in std_logic; + rstn_i : in std_logic; + + errreg_o : out std_logic_vector(63 downto 0); + wb_i : in t_wishbone_master_in; + + fsm_stb_i : in std_logic; + fsm_full_o : out std_logic; + fsm_busy_o : out std_logic; + + mux_pop_i : in std_logic; + mux_dat_o : out t_wishbone_data; + mux_empty_o : out std_logic); + end component; + + component eb_stream_narrow is + generic( + g_slave_width : natural; + g_master_width : natural); + port( + clk_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + master_i : in t_wishbone_master_in; + master_o : out t_wishbone_master_out); + end component; + + component eb_stream_widen is + generic( + g_slave_width : natural; + g_master_width : natural); + port( + clk_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + master_i : in t_wishbone_master_in; + master_o : out t_wishbone_master_out); + end component; + + component eb_checksum is + port( + clk_i : in std_logic; + nRst_i : in std_logic; + en_i : in std_logic; + data_i : in std_logic_vector(15 downto 0); + done_o : out std_logic; + sum_o : out std_logic_vector(15 downto 0)); + end component; + + component eb_eth_rx is + generic( + g_mtu : natural); + port( + clk_i : in std_logic; + rst_n_i : in std_logic; + snk_i : in t_wrf_sink_in; + snk_o : out t_wrf_sink_out; + master_o : out t_wishbone_master_out; + master_i : in t_wishbone_master_in; + stb_o : out std_logic; + stall_i : in std_logic; + mac_o : out std_logic_vector(47 downto 0); + ip_o : out std_logic_vector(31 downto 0); + port_o : out std_logic_vector(15 downto 0); + length_o : out unsigned(15 downto 0)); + end component; + + component eb_eth_tx is + generic( + g_mtu : natural); + port( + clk_i : in std_logic; + rst_n_i : in std_logic; + src_i : in t_wrf_source_in; + src_o : out t_wrf_source_out; + slave_o : out t_wishbone_slave_out; + slave_i : in t_wishbone_slave_in; + stb_i : in std_logic; + stall_o : out std_logic; + mac_i : in std_logic_vector(47 downto 0); + ip_i : in std_logic_vector(31 downto 0); + port_i : in std_logic_vector(15 downto 0); + length_i : in unsigned(15 downto 0); + skip_stb_i : in std_logic; + skip_stall_o : out std_logic; + my_mac_i : in std_logic_vector(47 downto 0); + my_ip_i : in std_logic_vector(31 downto 0); + my_port_i : in std_logic_vector(15 downto 0)); + end component; + +----------------------------------------------------------------- +-- EB Master Stuff +----------------------------------------------------------------- + + + + component eb_master_wb_if is + generic(g_adr_bits_hi : natural; + g_mtu : natural); + port( + clk_i : in std_logic; + rst_n_i : in std_logic; + + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + + byte_cnt_i : in std_logic_vector(15 downto 0); + error_i : in std_logic_vector(0 downto 0); + + + clear_o : out std_logic; + flush_o : out std_logic; + + my_mac_o : out std_logic_vector(47 downto 0); + my_ip_o : out std_logic_vector(31 downto 0); + my_port_o : out std_logic_vector(15 downto 0); + + his_mac_o : out std_logic_vector(47 downto 0); + his_ip_o : out std_logic_vector(31 downto 0); + his_port_o : out std_logic_vector(15 downto 0); + length_o : out unsigned(15 downto 0); + max_ops_o : out unsigned(15 downto 0); + adr_hi_o : out std_logic_vector(g_adr_bits_hi-1 downto 0); + eb_opt_o : out t_rec_hdr; + + udp_raw_o : out std_logic; + udp_we_o : out std_logic; + udp_valid_i : in std_logic; + udp_data_o : out std_logic_vector(31 downto 0)); + end component; + + + component eb_framer is + port( + clk_i : in std_logic; -- WB Clock + rst_n_i : in std_logic; -- async reset + + slave_i : in t_wishbone_slave_in; -- WB op. -> not WB compliant, but the record format is convenient + slave_o : out t_wishbone_slave_out; -- flow control + master_o : out t_wishbone_master_out; + master_i : in t_wishbone_master_in; + + byte_cnt_o : out std_logic_vector(15 downto 0); + ovf_o : out std_logic; + + tx_send_now_i : in std_logic; + tx_flush_o : out std_logic; + max_ops_i : in unsigned(15 downto 0); + length_i : in unsigned(15 downto 0); + cfg_rec_hdr_i : in t_rec_hdr -- EB cfg information, eg read from cfg space etc + ); + end component; + + component eb_record_gen is + port( + clk_i : in std_logic; + rst_n_i : in std_logic; + + slave_i : in t_wishbone_slave_in; + slave_stall_o : out std_logic; + slave_ack_o : out std_logic; + + rec_valid_o : out std_logic; + rec_hdr_o : out t_rec_hdr; + rec_adr_rd_o : out t_wishbone_data; + rec_adr_wr_o : out t_wishbone_address; + rec_ack_i : in std_logic; + byte_cnt_o : out unsigned(15 downto 0); + cfg_rec_hdr_i : in t_rec_hdr); + end component ; + + component eb_master_eth_tx is + generic( + g_mtu : natural); + port( + clk_i : in std_logic; + rst_n_i : in std_logic; + src_i : in t_wrf_source_in; + src_o : out t_wrf_source_out; + slave_o : out t_wishbone_slave_out; + slave_i : in t_wishbone_slave_in; + stb_i : in std_logic; + stall_o : out std_logic; + mac_i : in std_logic_vector(47 downto 0); + ip_i : in std_logic_vector(31 downto 0); + port_i : in std_logic_vector(15 downto 0); + skip_stb_i : in std_logic; + skip_stall_o : out std_logic; + my_mac_i : in std_logic_vector(47 downto 0); + my_ip_i : in std_logic_vector(31 downto 0); + my_port_i : in std_logic_vector(15 downto 0) + ); + end component; + + component eb_commit_len_fifo is + generic( + g_width : natural; + g_size : natural); + port( + clk_i : in std_logic; + rstn_i : in std_logic; + w_cnt_o : out unsigned(f_ceil_log2(g_size) downto 0); + r_cnt_o : out unsigned(f_ceil_log2(g_size) downto 0); + w_full_o : out std_logic; + w_push_i : in std_logic; + w_dat_i : in std_logic_vector(g_width-1 downto 0); + w_commit_i : in std_logic; + w_abort_i : in std_logic; + r_empty_o : out std_logic; + r_pop_i : in std_logic; + r_dat_o : out std_logic_vector(g_width-1 downto 0) + ); + end component; + +end package; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_pass_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_pass_fifo.vhd new file mode 100644 index 000000000..df04798ff --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_pass_fifo.vhd @@ -0,0 +1,61 @@ +------------------------------------------------------------------------------ +-- Title : Etherbone Pass FIFO +-- Project : Etherbone Core +------------------------------------------------------------------------------ +-- File : eb_pass_fifo.vhd +-- Author : Wesley W. Terpstra +-- Company : GSI +-- Created : 2013-04-08 +-- Last update: 2013-04-08 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Records protocol data that should be put into response +------------------------------------------------------------------------------- +-- Copyright (c) 2013 GSI +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2013-04-08 1.0 terpstra Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.wishbone_pkg.all; +use work.eb_internals_pkg.all; + +entity eb_pass_fifo is + port( + clk_i : in std_logic; + rstn_i : in std_logic; + + fsm_stb_i : in std_logic; + fsm_dat_i : in t_wishbone_data; + fsm_full_o : out std_logic; + + mux_pop_i : in std_logic; + mux_dat_o : out t_wishbone_data; + mux_empty_o : out std_logic); +end eb_pass_fifo; + +architecture rtl of eb_pass_fifo is +begin + + fifo : eb_fifo + generic map( + g_width => c_wishbone_data_width, + g_size => c_queue_depth) + port map( + clk_i => clk_i, + rstn_i => rstn_i, + w_full_o => fsm_full_o, + w_push_i => fsm_stb_i, + w_dat_i => fsm_dat_i, + r_empty_o => mux_empty_o, + r_pop_i => mux_pop_i, + r_dat_o => mux_dat_o); + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_fsm.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_fsm.vhd new file mode 100644 index 000000000..9eb991a7c --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_fsm.vhd @@ -0,0 +1,353 @@ +library IEEE; +--! Standard packages +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +--! Additional library +library work; +--! Additional packages +use work.eb_internals_pkg.all; +use work.eb_hdr_pkg.all; +use work.wishbone_pkg.all; + +entity eb_slave_fsm is + port( + clk_i : in std_logic; + rstn_i : in std_logic; + + rx_cyc_i : in std_logic; + rx_stb_i : in std_logic; + rx_dat_i : in t_wishbone_data; + rx_stall_o : out std_logic; + + tag_stb_o : out std_logic; + tag_dat_o : out t_tag; + tag_full_i : in std_logic; + + pass_stb_o : out std_logic; + pass_dat_o : out t_wishbone_data; + pass_full_i : in std_logic; + + cfg_stb_o : out std_logic; + cfg_adr_o : out t_wishbone_address; + cfg_full_i : in std_logic; + + wbm_stb_o : out std_logic; + wbm_full_i : in std_logic; + wbm_busy_i : in std_logic; + + master_o : out t_wishbone_master_out; + master_stall_i : in std_logic); + +end entity; + +architecture behavioral of eb_slave_fsm is + + type t_state_RX is (S_EB_HDR, S_PROBE_DROP, S_PROBE_ID, S_CYC_HDR, S_WR_ADR, S_WRITE, S_RD_ADR, S_READ, S_DROP); + + signal r_tag_stb_o : std_logic; + signal r_tag_dat_o : t_tag; + signal r_pass_stb_o : std_logic; + signal r_pass_dat_o : t_wishbone_data; + signal r_cfg_stb_o : std_logic; + signal r_wbm_stb_o : std_logic; + signal r_master_cyc_o : std_logic; + signal r_master_stb_o : std_logic; + signal r_master_we_o : std_logic; + signal r_master_adr_o : t_wishbone_address; + signal r_master_dat_o : t_wishbone_data; + signal r_wr_adr : unsigned(t_wishbone_address'range); + signal r_rx_rec_hdr : t_rec_hdr; + signal r_tx_rec_hdr : t_rec_hdr; + signal r_rx_cyc : std_logic; + signal r_state : t_state_RX; + signal s_stall : std_logic; + signal s_wbm_busy : std_logic; + signal s_rx_eb_hdr : t_eb_hdr; + signal s_tx_eb_hdr : t_eb_hdr; + signal s_rx_rec_hdr : t_rec_hdr; + signal s_tx_rec_hdr : t_rec_hdr; + + function f_reply_eb(rx_eb_hdr : t_eb_hdr) return t_eb_hdr is + variable tx_eb_hdr : t_eb_hdr := c_eb_init; + begin + tx_eb_hdr.probe_res := rx_eb_hdr.probe; + return tx_eb_hdr; + end function; + + function f_reply_rec(rx_rec_hdr : t_rec_hdr) return t_rec_hdr is + variable tx_rec_hdr : t_rec_hdr := C_rec_init; + begin + tx_rec_hdr.WCA_CFG := rx_rec_hdr.BCA_CFG; + tx_rec_hdr.RD_FIFO := '0'; + tx_rec_hdr.RD_CNT := (others => '0'); + tx_rec_hdr.WR_FIFO := rx_rec_hdr.RD_FIFO; + tx_rec_hdr.WR_CNT := rx_rec_hdr.RD_CNT; + tx_rec_hdr.SEL := rx_rec_hdr.SEL; + tx_rec_hdr.DROP_CYC := rx_rec_hdr.DROP_CYC; + return tx_rec_hdr; + end function; + +begin + + rx_stall_o <= s_stall; + tag_stb_o <= r_tag_stb_o; + tag_dat_o <= r_tag_dat_o; + pass_stb_o <= r_pass_stb_o; + pass_dat_o <= r_pass_dat_o; + cfg_stb_o <= r_cfg_stb_o; + cfg_adr_o <= r_master_adr_o; + wbm_stb_o <= r_wbm_stb_o; + + s_wbm_busy <= wbm_busy_i or r_wbm_stb_o; -- cope with 1 cycle latency + master_o.cyc <= r_master_cyc_o or s_wbm_busy; + master_o.stb <= r_master_stb_o; + master_o.we <= r_master_we_o; + master_o.adr <= r_master_adr_o; + master_o.dat <= r_master_dat_o; + master_o.sel <= r_rx_rec_hdr.sel(master_o.sel'range); + + -- Stall the RX path if: + -- Any TX FIFO is full + -- We are pushing a strobe that is stalled + -- We are waiting to lower the cycle line + s_stall <= tag_full_i OR pass_full_i OR cfg_full_i OR wbm_full_i OR + (r_master_stb_o and master_stall_i) OR + (not r_master_cyc_o and s_wbm_busy); + + s_rx_eb_hdr <= f_parse_eb(rx_dat_i); + s_tx_eb_hdr <= f_reply_eb(s_rx_eb_hdr); + + s_rx_rec_hdr <= f_parse_rec(rx_dat_i); + s_tx_rec_hdr <= f_reply_rec(s_rx_rec_hdr); + + fsm : process(clk_i, rstn_i) is + begin + if (rstn_i = '0') then + r_tag_stb_o <= '0'; + r_tag_dat_o <= (others => '0'); + r_pass_stb_o <= '0'; + r_pass_dat_o <= (others => '0'); + r_cfg_stb_o <= '0'; + r_wbm_stb_o <= '0'; + r_master_cyc_o <= '0'; + r_master_stb_o <= '0'; + r_master_we_o <= '0'; + r_master_adr_o <= (others => '0'); + r_master_dat_o <= (others => '0'); + r_wr_adr <= (others => '0'); + r_rx_rec_hdr <= c_rec_init; + r_tx_rec_hdr <= c_rec_init; + r_rx_cyc <= '0'; + r_state <= S_EB_HDR; + elsif rising_edge(clk_i) then + + -- By default, write nowhere in particular + r_tag_stb_o <= '0'; + r_pass_stb_o <= '0'; + r_cfg_stb_o <= '0'; + r_wbm_stb_o <= '0'; + + -- Lower strobe line when it is queued + r_master_stb_o <= r_master_stb_o and master_stall_i; + + -- Register to enable detecting falling edge + r_rx_cyc <= rx_cyc_i; + + if(rx_cyc_i = '0') then + -- expect a new negotiation header + r_state <= S_EB_HDR; + -- guard against improperly terminated streams + r_master_cyc_o <= '0'; + + -- On falling edge of RX cycle line, push a tag to drop TX cycle + if r_rx_cyc = '1' then + r_tag_stb_o <= '1'; + r_tag_dat_o <= c_tag_drop_tx; + end if; + elsif(rx_stb_i = '1' and s_stall = '0') then + -- Every non-error state must write something + + case r_state is + when s_EB_HDR => + -- supported EB header? + if (s_rx_eb_hdr.magic = c_eb_magic and s_rx_eb_hdr.ver = c_eb_ver) then + -- Raise TX cycle line if this needs to be sent + if s_rx_eb_hdr.no_response = '1' then + r_tag_stb_o <= '1'; + r_tag_dat_o <= c_tag_skip_tx; + else + -- Write the header using pass fifo + r_tag_stb_o <= '1'; + r_tag_dat_o <= c_tag_pass_tx; + r_pass_stb_o <= '1'; + r_pass_dat_o <= f_format_eb(s_tx_eb_hdr); + end if; + + if s_rx_eb_hdr.probe = '1' then + if s_rx_eb_hdr.addr_size(2) = '1' and + s_rx_eb_hdr.data_size(2) = '1' then + -- Allow follow-up payload for stream channels + r_state <= S_PROBE_ID; + else + -- Does not support 32-bit? drop anything after probe id + r_state <= S_PROBE_DROP; + end if; + else -- not a probe + if s_rx_eb_hdr.addr_size = x"4" or + s_rx_eb_hdr.data_size = x"4" then + -- Must be the exactly right format if not a probe! + r_state <= S_CYC_HDR; + else + -- Do the best we can ... report proper EB header and pad with 0s + r_state <= S_DROP; + end if; + end if; + else --bad eb header. drop all til cycle line is lowered again + r_tag_stb_o <= '1'; + r_tag_dat_o <= c_tag_skip_tx; + r_state <= S_DROP; + end if; + + when S_PROBE_DROP => + -- Write the probe-id using pass fifo + r_tag_stb_o <= '1'; + r_tag_dat_o <= c_tag_pass_on; + r_pass_stb_o <= '1'; + r_pass_dat_o <= rx_dat_i; + + r_state <= s_DROP; + + when S_PROBE_ID => + -- Write the probe-id using pass fifo + r_tag_stb_o <= '1'; + r_tag_dat_o <= c_tag_pass_on; + r_pass_stb_o <= '1'; + r_pass_dat_o <= rx_dat_i; + + r_state <= s_CYC_HDR; + + when S_CYC_HDR => + r_tx_rec_hdr <= s_tx_rec_hdr; + r_rx_rec_hdr <= s_rx_rec_hdr; + + -- Write padding/header using pass fifo + r_tag_stb_o <= '1'; + r_tag_dat_o <= c_tag_pass_on; + r_pass_stb_o <= '1'; + + if (s_rx_rec_hdr.WR_CNT /= 0) then + --padding logic 1. insert padding instead of the header + r_pass_dat_o <= x"00000000"; + r_state <= S_WR_ADR; + elsif (s_rx_rec_hdr.RD_CNT /= 0) then + --no writes, no padding. insert the header + r_pass_dat_o <= f_format_rec(s_tx_rec_hdr); + r_state <= S_RD_ADR; + else + --no writes, no padding. insert the header + r_pass_dat_o <= f_format_rec(s_tx_rec_hdr); + + r_master_cyc_o <= r_master_cyc_o and not s_rx_rec_hdr.DROP_CYC; + r_state <= S_CYC_HDR; + end if; + + when S_WR_ADR => + r_wr_adr <= unsigned(rx_dat_i); + + -- Write padding using pass fifo + r_tag_stb_o <= '1'; + r_tag_dat_o <= c_tag_pass_on; + r_pass_stb_o <= '1'; + r_pass_dat_o <= x"00000000"; + + r_state <= S_WRITE; + + when S_WRITE => + r_master_we_o <= '1'; + r_master_adr_o <= std_logic_vector(r_wr_adr); + r_master_dat_o <= rx_dat_i; + + if(r_rx_rec_hdr.WR_FIFO = '0') then + r_wr_adr <= r_wr_adr + 4; + end if; + + -- Write padding/header using pass fifo + r_tag_stb_o <= '1'; + r_pass_stb_o <= '1'; + + -- Writes need their output discarded + if r_rx_rec_hdr.WCA_CFG = '1' then + r_cfg_stb_o <= '1'; + r_tag_dat_o <= c_tag_cfg_ign; + else + r_wbm_stb_o <= '1'; + r_tag_dat_o <= c_tag_wbm_ign; + r_master_cyc_o <= '1'; + r_master_stb_o <= '1'; + end if; + + if (r_rx_rec_hdr.WR_CNT /= 1) then + r_pass_dat_o <= x"00000000"; + else + r_pass_dat_o <= f_format_rec(r_tx_rec_hdr); + + if (r_rx_rec_hdr.RD_CNT /= 0) then + r_state <= S_RD_ADR; + else + r_master_cyc_o <= r_master_cyc_o and not r_rx_rec_hdr.DROP_CYC; + r_state <= S_CYC_HDR; + end if; + end if; + + r_rx_rec_hdr.WR_CNT <= r_rx_rec_hdr.WR_CNT - 1; + + when S_RD_ADR => + -- Copy address using pass fifo + r_tag_stb_o <= '1'; + r_tag_dat_o <= c_tag_pass_on; + r_pass_stb_o <= '1'; + r_pass_dat_o <= rx_dat_i; --pass the rx readback address as base write address to tx + + r_state <= S_READ; + + when S_READ => + r_master_we_o <= '0'; + r_master_adr_o <= rx_dat_i; + + -- Get data from either cfg or wbm fifos + r_tag_stb_o <= '1'; + + if r_rx_rec_hdr.RCA_CFG = '1' then + r_cfg_stb_o <= '1'; + r_tag_dat_o <= c_tag_cfg_req; + else + r_wbm_stb_o <= '1'; + r_tag_dat_o <= c_tag_wbm_req; + r_master_cyc_o <= '1'; + r_master_stb_o <= '1'; + end if; + + if(r_rx_rec_hdr.RD_CNT = 1) then + r_master_cyc_o <= r_master_cyc_o and not r_rx_rec_hdr.DROP_CYC; + r_state <= S_CYC_HDR; + end if; + + r_rx_rec_hdr.RD_CNT <= r_rx_rec_hdr.RD_CNT - 1; + + when S_DROP => + -- preserve packet length + r_tag_stb_o <= '1'; + r_tag_dat_o <= c_tag_pass_on; + r_pass_stb_o <= '1'; + r_pass_dat_o <= (others => '0'); + + when others => + r_state <= S_DROP; + + end case; + end if; --rx_stb_i + end if; --clk edge + end process; + +end architecture; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_top.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_top.vhd new file mode 100644 index 000000000..4003d37b5 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_top.vhd @@ -0,0 +1,205 @@ +------------------------------------------------------------------------------ +-- Title : Etherbone Slave +-- Project : Etherbone Core +------------------------------------------------------------------------------ +-- File : eb_slave.vhd +-- Author : Wesley W. Terpstra +-- Company : GSI +-- Created : 2013-04-08 +-- Last update: 2013-04-08 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Connect all the components of an Etherbone slave +------------------------------------------------------------------------------- +-- Copyright (c) 2013 GSI +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2013-04-08 1.0 terpstra Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.wishbone_pkg.all; +use work.eb_internals_pkg.all; + +entity eb_slave_top is + generic( + g_sdb_address : t_wishbone_address; + g_timeout_cycles : natural); + port( + clk_i : in std_logic; --! System Clk + nRst_i : in std_logic; --! active low sync reset + + EB_RX_i : in t_wishbone_slave_in; --! Streaming wishbone(record) sink from RX transport protocol block + EB_RX_o : out t_wishbone_slave_out; --! Streaming WB sink flow control to RX transport protocol block + EB_TX_i : in t_wishbone_master_in; --! Streaming WB src flow control from TX transport protocol block + EB_TX_o : out t_wishbone_master_out; --! Streaming WB src to TX transport protocol block + + skip_stb_o : out std_logic; --! Does a packet get discarded? + skip_stall_i: in std_logic; + + WB_config_i : in t_wishbone_slave_in; --! WB V4 interface to WB interconnect/device(s) + WB_config_o : out t_wishbone_slave_out; --! WB V4 interface to WB interconnect/device(s) + WB_master_i : in t_wishbone_master_in; --! WB V4 interface to WB interconnect/device(s) + WB_master_o : out t_wishbone_master_out; --! WB V4 interface to WB interconnect/device(s) + + my_mac_o : out std_logic_vector(47 downto 0); + my_ip_o : out std_logic_vector(31 downto 0); + my_port_o : out std_logic_vector(15 downto 0)); +end eb_slave_top; + +architecture rtl of eb_slave_top is + signal rstn_i : std_logic; + + signal errreg : std_logic_vector(63 downto 0); + signal rx_stall : std_logic; + + signal fsm_tag_stb : std_logic; + signal fsm_tag_dat : t_tag; + signal tag_fsm_full : std_logic; + signal fsm_pass_stb : std_logic; + signal fsm_pass_dat : t_wishbone_data; + signal pass_fsm_full : std_logic; + signal fsm_cfg_stb : std_logic; + signal fsm_cfg_adr : t_wishbone_address; + signal cfg_fsm_full : std_logic; + signal fsm_wbm_stb : std_logic; + signal wbm_fsm_full : std_logic; + signal wbm_fsm_busy : std_logic; + + signal mux_tag_pop : std_logic; + signal tag_mux_dat : t_tag; + signal tag_mux_empty : std_logic; + signal mux_pass_pop : std_logic; + signal pass_mux_dat : t_wishbone_data; + signal pass_mux_empty : std_logic; + signal mux_cfg_pop : std_logic; + signal cfg_mux_dat : t_wishbone_data; + signal cfg_mux_empty : std_logic; + signal mux_wbm_pop : std_logic; + signal wbm_mux_dat : t_wishbone_data; + signal wbm_mux_empty : std_logic; + +begin + + rstn_i <= nRst_i; + + EB_RX_o.ack <= EB_RX_i.cyc and EB_RX_i.stb and not rx_stall; + EB_RX_o.err <= '0'; + EB_RX_o.rty <= '0'; + EB_RX_o.int <= '0'; + EB_RX_o.stall <= rx_stall; + EB_RX_o.dat <= (others => '0'); + + fsm : eb_slave_fsm + port map( + clk_i => clk_i, + rstn_i => rstn_i, + rx_cyc_i => EB_RX_i.cyc, + rx_stb_i => EB_RX_i.stb, + rx_dat_i => EB_RX_i.dat, + rx_stall_o => rx_stall, + tag_stb_o => fsm_tag_stb, + tag_dat_o => fsm_tag_dat, + tag_full_i => tag_fsm_full, + pass_stb_o => fsm_pass_stb, + pass_dat_o => fsm_pass_dat, + pass_full_i => pass_fsm_full, + cfg_stb_o => fsm_cfg_stb, + cfg_adr_o => fsm_cfg_adr, + cfg_full_i => cfg_fsm_full, + wbm_stb_o => fsm_wbm_stb, + wbm_full_i => wbm_fsm_full, + wbm_busy_i => wbm_fsm_busy, + master_o => WB_master_o, + master_stall_i => WB_master_i.stall); + + EB_TX_o.we <= '1'; + EB_TX_o.sel <= (others => '1'); + EB_TX_o.adr <= (others => '0'); + + mux : eb_tx_mux + port map ( + clk_i => clk_i, + rstn_i => rstn_i, + tag_pop_o => mux_tag_pop, + tag_dat_i => tag_mux_dat, + tag_empty_i => tag_mux_empty, + pass_pop_o => mux_pass_pop, + pass_dat_i => pass_mux_dat, + pass_empty_i => pass_mux_empty, + cfg_pop_o => mux_cfg_pop, + cfg_dat_i => cfg_mux_dat, + cfg_empty_i => cfg_mux_empty, + wbm_pop_o => mux_wbm_pop, + wbm_dat_i => wbm_mux_dat, + wbm_empty_i => wbm_mux_empty, + skip_stb_o => skip_stb_o, + skip_stall_i => skip_stall_i, + tx_cyc_o => EB_TX_o.cyc, + tx_stb_o => EB_TX_o.stb, + tx_dat_o => EB_TX_o.dat, + tx_stall_i => EB_TX_i.stall); + + tag : eb_tag_fifo + port map( + clk_i => clk_i, + rstn_i => rstn_i, + fsm_stb_i => fsm_tag_stb, + fsm_dat_i => fsm_tag_dat, + fsm_full_o => tag_fsm_full, + mux_pop_i => mux_tag_pop, + mux_dat_o => tag_mux_dat, + mux_empty_o => tag_mux_empty); + + pass : eb_pass_fifo + port map( + clk_i => clk_i, + rstn_i => rstn_i, + fsm_stb_i => fsm_pass_stb, + fsm_dat_i => fsm_pass_dat, + fsm_full_o => pass_fsm_full, + mux_pop_i => mux_pass_pop, + mux_dat_o => pass_mux_dat, + mux_empty_o => pass_mux_empty); + + cfg : eb_cfg_fifo + generic map( + g_sdb_address => g_sdb_address) + port map( + clk_i => clk_i, + rstn_i => rstn_i, + errreg_i => errreg, + cfg_i => WB_config_i, + cfg_o => WB_config_o, + fsm_stb_i => fsm_cfg_stb, + fsm_adr_i => fsm_cfg_adr, + fsm_full_o => cfg_fsm_full, + mux_pop_i => mux_cfg_pop, + mux_dat_o => cfg_mux_dat, + mux_empty_o => cfg_mux_empty, + my_mac_o => my_mac_o, + my_ip_o => my_ip_o, + my_port_o => my_port_o); + + wbm : eb_wbm_fifo + generic map( + g_timeout_cycles => g_timeout_cycles) + port map( + clk_i => clk_i, + rstn_i => rstn_i, + errreg_o => errreg, + wb_i => WB_master_i, + fsm_stb_i => fsm_wbm_stb, + fsm_full_o => wbm_fsm_full, + fsm_busy_o => wbm_fsm_busy, + mux_pop_i => mux_wbm_pop, + mux_dat_o => wbm_mux_dat, + mux_empty_o => wbm_mux_empty); + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_narrow.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_narrow.vhd new file mode 100644 index 000000000..268c13ed1 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_narrow.vhd @@ -0,0 +1,150 @@ +--! @file eb_stream_narrow.vhd +--! @brief Adapts the width of a wishbone data stream. +--! +--! Copyright (C) 2013 GSI Helmholtz Centre for Heavy Ion Research GmbH +--! +--! Fairly simple state-machine +--! +--! @author Wesley W. Terpstra +--! +-------------------------------------------------------------------------------- +--! This library is free software; you can redistribute it and/or +--! modify it under the terms of the GNU Lesser General Public +--! License as published by the Free Software Foundation; either +--! version 3 of the License, or (at your option) any later version. +--! +--! This library is distributed in the hope that it will be useful, +--! but WITHOUT ANY WARRANTY; without even the implied warranty of +--! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +--! Lesser General Public License for more details. +--! +--! You should have received a copy of the GNU Lesser General Public +--! License along with this library. If not, see . +-------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.wishbone_pkg.all; +use work.eb_internals_pkg.all; +use work.genram_pkg.all; + +-- Completely breaks/ignores: adr, sel, we, ack, err +entity eb_stream_narrow is + generic( + g_slave_width : natural; + g_master_width : natural); + port( + clk_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + master_i : in t_wishbone_master_in; + master_o : out t_wishbone_master_out); +end eb_stream_narrow; + +architecture rtl of eb_stream_narrow is + + subtype t_index is unsigned(f_ceil_log2(g_slave_width/g_master_width)-1 downto 0); + constant c_max : t_index := to_unsigned(g_slave_width/g_master_width-1, t_index'length); + constant c_one : t_index := to_unsigned(1, t_index'length); + constant c_zero : t_index := (others => '0'); + + signal r_ack : std_logic; + signal r_cyc : std_logic; + signal r_drop : std_logic; -- need to report any cycle line drops + signal r_stb : std_logic; + signal r_last : std_logic; -- '1' when r_idx = 0 + signal r_idx : t_index; + signal r_dat : std_logic_vector(g_master_width-1 downto 0); + signal s_stall : std_logic; + signal s_cyc_cases : std_logic_vector(2 downto 0); + +begin + + assert (g_slave_width <= c_wishbone_data_width) + report "g_master_width can not exceed wishbone data width" + severity error; + + assert (g_slave_width mod g_master_width = 0) + report "g_master_width must divide g_slave_width" + severity error; + + assert (g_master_width < g_slave_width) + report "g_master_width must be < g_slave_width" + severity error; + + -- Outputs + slave_o.ack <= r_ack; + slave_o.err <= '0'; + slave_o.stall <= s_stall; + slave_o.dat <= (others => '0'); + + master_o.cyc <= r_cyc; + master_o.stb <= r_stb; + master_o.we <= '1'; + master_o.adr <= (others => '0'); + master_o.dat(c_wishbone_data_width-1 downto g_master_width) <= (others => '0'); + master_o.dat(g_master_width-1 downto 0) <= r_dat; + + output_sel : for i in t_wishbone_byte_select'range generate + master_o.sel(i) <= '1' when (i*8 < g_master_width) else '0'; + end generate; + + -- Actual logic + s_stall <= not r_last or master_i.stall or r_drop; + s_cyc_cases(2) <= r_drop; + s_cyc_cases(1) <= r_stb; + s_cyc_cases(0) <= slave_i.cyc; + + main : process(clk_i, rst_n_i) is + begin + if rst_n_i = '0' then + r_ack <= '0'; + r_cyc <= '0'; + r_drop <= '0'; + r_stb <= '0'; + r_last <= '0'; + r_idx <= c_max; + r_dat <= (others => '0'); + elsif rising_edge(clk_i) then + r_ack <= slave_i.cyc and slave_i.stb and not s_stall; + + -- Make sure we always report cycle line changes + case s_cyc_cases is + when "000" => r_cyc <= '0'; r_drop <= '0'; -- can end cycle immediately + when "001" => r_cyc <= '1'; r_drop <= '0'; -- start new cycle + when "010" => r_cyc <= '1'; r_drop <= '1'; -- report this! + when "011" => r_cyc <= '1'; r_drop <= '0'; -- operation in progress + when "100" => r_cyc <= '0'; r_drop <= '0'; -- reported! + when "101" => r_cyc <= '0'; r_drop <= '0'; -- reported! + when others => r_cyc <= '1'; r_drop <= '1'; -- wait for r_stb to fall + end case; + + -- When strobing and stalled the process is blocked + if (r_stb and master_i.stall) = '0' then + -- Steal data from the stalled request + r_dat <= slave_i.dat((to_integer(r_idx)+1)*g_master_width-1 downto to_integer(r_idx)*g_master_width); + -- If the slave has no new data for us, stop strobing + if r_idx = c_max and (slave_i.cyc and slave_i.stb and not r_drop) = '0' then + r_stb <= '0'; + else + r_stb <= '1'; + if r_idx = c_one then + r_last <= '1'; + else + r_last <= '0'; + end if; + if r_idx = c_zero then + r_idx <= c_max; + else + r_idx <= r_idx - 1; + end if; + end if; + end if; + end if; + end process; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_widen.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_widen.vhd new file mode 100644 index 000000000..049646600 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_widen.vhd @@ -0,0 +1,145 @@ +--! @file eb_stream_adapt.vhd +--! @brief Adapts the width of a wishbone data stream. +--! +--! Copyright (C) 2013 GSI Helmholtz Centre for Heavy Ion Research GmbH +--! +--! Fairly simple state-machine +--! +--! @author Wesley W. Terpstra +--! +-------------------------------------------------------------------------------- +--! This library is free software; you can redistribute it and/or +--! modify it under the terms of the GNU Lesser General Public +--! License as published by the Free Software Foundation; either +--! version 3 of the License, or (at your option) any later version. +--! +--! This library is distributed in the hope that it will be useful, +--! but WITHOUT ANY WARRANTY; without even the implied warranty of +--! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +--! Lesser General Public License for more details. +--! +--! You should have received a copy of the GNU Lesser General Public +--! License along with this library. If not, see . +-------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.wishbone_pkg.all; +use work.eb_internals_pkg.all; +use work.genram_pkg.all; + +-- Completely breaks/ignores: adr, sel, we, ack, err +entity eb_stream_widen is + generic( + g_slave_width : natural; + g_master_width : natural); + port( + clk_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + master_i : in t_wishbone_master_in; + master_o : out t_wishbone_master_out); +end eb_stream_widen; + +architecture rtl of eb_stream_widen is + + subtype t_index is unsigned(f_ceil_log2(g_master_width/g_slave_width)-1 downto 0); + constant c_max : t_index := to_unsigned(g_master_width/g_slave_width-1, t_index'length); + constant c_zero : t_index := (others => '0'); + + signal r_ack : std_logic; + signal r_cyc : std_logic; + signal r_drop : std_logic; -- need to report any cycle line drops + signal r_stb : std_logic; + signal r_idx : t_index; + signal r_dat : t_wishbone_data; + signal s_stall : std_logic; + signal s_cyc_cases : std_logic_vector(2 downto 0); + +begin + + assert (g_master_width <= c_wishbone_data_width) + report "g_master_width can not exceed wishbone data width" + severity error; + + assert (g_master_width mod g_slave_width = 0) + report "g_slave_width must divide g_master_width" + severity error; + + assert (g_master_width > g_slave_width) + report "g_slave_width must be < g_master_width" + severity error; + + -- Outputs + slave_o.ack <= r_ack; + slave_o.err <= '0'; + slave_o.stall <= s_stall; + slave_o.dat <= (others => '0'); + + master_o.cyc <= r_cyc; + master_o.stb <= r_stb; + master_o.we <= '1'; + master_o.adr <= (others => '0'); + master_o.dat <= r_dat; + + output_sel : for i in t_wishbone_byte_select'range generate + master_o.sel(i) <= '1' when (i*8 < g_master_width) else '0'; + end generate; + + -- Actual logic + s_stall <= (r_stb and master_i.stall) or r_drop; + s_cyc_cases(2) <= r_drop; + s_cyc_cases(1) <= r_stb; + s_cyc_cases(0) <= slave_i.cyc; + + main : process(clk_i, rst_n_i) is + begin + if rst_n_i = '0' then + r_ack <= '0'; + r_cyc <= '0'; + r_drop <= '0'; + r_stb <= '0'; + r_idx <= c_max; + r_dat <= (others => '0'); + elsif rising_edge(clk_i) then + r_ack <= slave_i.cyc and slave_i.stb and not s_stall; + + -- Make sure we always report cycle line changes + case s_cyc_cases is + when "000" => r_cyc <= '0'; r_drop <= '0'; -- can end cycle immediately + when "001" => r_cyc <= '1'; r_drop <= '0'; -- start new cycle + when "010" => r_cyc <= '1'; r_drop <= '1'; -- report this! + when "011" => r_cyc <= '1'; r_drop <= '0'; -- operation in progress + when "100" => r_cyc <= '0'; r_drop <= '0'; -- reported! + when "101" => r_cyc <= '0'; r_drop <= '0'; -- reported! + when others => r_cyc <= '1'; r_drop <= '1'; -- wait for r_stb to fall + end case; + + -- Transfer done? + if (r_stb and not master_i.stall) = '1' then + r_stb <= '0'; + end if; + + -- Did the slave push us data? + if slave_i.cyc = '0' then + r_idx <= c_max; -- reset counter to restore alignment + -- leave r_stb/r_dat unchanged! + elsif (slave_i.stb and not s_stall) = '1' then + r_dat(((to_integer(r_idx)+1)*g_slave_width)-1 downto to_integer(r_idx)*g_slave_width) <= + slave_i.dat(g_slave_width-1 downto 0); + if r_idx = c_zero then + r_idx <= c_max; + r_stb <= '1'; + else + r_idx <= r_idx - 1; + end if; + end if; + + end if; + end process; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_tag_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_tag_fifo.vhd new file mode 100644 index 000000000..015e32bb0 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_tag_fifo.vhd @@ -0,0 +1,61 @@ +------------------------------------------------------------------------------ +-- Title : Etherbone Tag FIFO +-- Project : Etherbone Core +------------------------------------------------------------------------------ +-- File : eb_tag_fifo.vhd +-- Author : Wesley W. Terpstra +-- Company : GSI +-- Created : 2013-04-08 +-- Last update: 2013-04-08 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Tracks which channel the MUX should pop next +------------------------------------------------------------------------------- +-- Copyright (c) 2013 GSI +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2013-04-08 1.0 terpstra Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.wishbone_pkg.all; +use work.eb_internals_pkg.all; + +entity eb_tag_fifo is + port( + clk_i : in std_logic; + rstn_i : in std_logic; + + fsm_stb_i : in std_logic; + fsm_dat_i : in t_tag; + fsm_full_o : out std_logic; + + mux_pop_i : in std_logic; + mux_dat_o : out t_tag; + mux_empty_o : out std_logic); +end eb_tag_fifo; + +architecture rtl of eb_tag_fifo is +begin + + fifo : eb_fifo + generic map( + g_width => t_tag'length, + g_size => c_queue_depth) + port map( + clk_i => clk_i, + rstn_i => rstn_i, + w_full_o => fsm_full_o, + w_push_i => fsm_stb_i, + w_dat_i => fsm_dat_i, + r_empty_o => mux_empty_o, + r_pop_i => mux_pop_i, + r_dat_o => mux_dat_o); + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_tx_mux.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_tx_mux.vhd new file mode 100644 index 000000000..2c2c4c345 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_tx_mux.vhd @@ -0,0 +1,170 @@ +------------------------------------------------------------------------------ +-- Title : Etherbone TX MUX +-- Project : Etherbone Core +------------------------------------------------------------------------------ +-- File : eb_tux_mux.vhd +-- Author : Wesley W. Terpstra +-- Company : GSI +-- Created : 2013-04-08 +-- Last update: 2013-04-08 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Combines output streams into a packet +------------------------------------------------------------------------------- +-- Copyright (c) 2013 GSI +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2013-04-08 1.0 terpstra Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.wishbone_pkg.all; +use work.eb_internals_pkg.all; + +entity eb_tx_mux is + port( + clk_i : in std_logic; + rstn_i : in std_logic; + + tag_pop_o : out std_logic; + tag_dat_i : in t_tag; + tag_empty_i : in std_logic; + + pass_pop_o : out std_logic; + pass_dat_i : in t_wishbone_data; + pass_empty_i : in std_logic; + + cfg_pop_o : out std_logic; + cfg_dat_i : in t_wishbone_data; + cfg_empty_i : in std_logic; + + wbm_pop_o : out std_logic; + wbm_dat_i : in t_wishbone_data; + wbm_empty_i : in std_logic; + + skip_stb_o : out std_logic; + skip_stall_i : in std_logic; + + tx_cyc_o : out std_logic; + tx_stb_o : out std_logic; + tx_dat_o : out t_wishbone_data; + tx_stall_i : in std_logic); +end eb_tx_mux; + +architecture rtl of eb_tx_mux is + + signal r_skip : std_logic; + signal r_tx_cyc : std_logic; + signal r_tx_stb : std_logic; + signal s_can_tx : std_logic; + signal s_dat_mux : t_wishbone_data; + signal s_tag_mux : std_logic; + signal s_pass_mux : std_logic; + signal s_cfg_mux : std_logic; + signal s_wbm_mux : std_logic; + signal s_tag_pop : std_logic; + signal r_tag_valid : std_logic; + signal r_tag_value : t_tag; + +begin + + -- We can write whenever TX is unstalled and/or not full + s_can_tx <= not ((r_tx_cyc and r_tx_stb and tx_stall_i) or (r_skip and skip_stall_i)); + + skip_stb_o <= r_skip; + tx_cyc_o <= r_tx_cyc; + tx_stb_o <= r_tx_stb; + + tx_out : process(rstn_i, clk_i) is + begin + if rstn_i = '0' then + r_skip <= '0'; + r_tx_cyc <= '0'; + r_tx_stb <= '0'; + tx_dat_o <= (others => '0'); + elsif rising_edge(clk_i) then + if s_can_tx = '1' then -- is prior operation complete? + r_tx_stb <= not s_tag_mux and r_tag_valid; + r_skip <= '0'; + tx_dat_o <= s_dat_mux; + -- Control the TX cycle line + if r_tag_valid = '1' then + case r_tag_value is + when c_tag_drop_tx => r_tx_cyc <= '0'; + when c_tag_pass_tx => r_tx_cyc <= '1'; + when c_tag_skip_tx => r_skip <= '1'; + when others => null; + end case; + end if; + end if; + end if; + end process; + + with r_tag_value select + s_dat_mux <= + pass_dat_i when c_tag_pass_tx, + pass_dat_i when c_tag_pass_on, + cfg_dat_i when c_tag_cfg_req, + pass_dat_i when c_tag_cfg_ign, + wbm_dat_i when c_tag_wbm_req, + pass_dat_i when c_tag_wbm_ign, + (others => '-') when others; -- c_tag_skip_tx, c_tag_drop_tx + + with r_tag_value select + s_tag_mux <= + pass_empty_i when c_tag_pass_tx, + pass_empty_i when c_tag_pass_on, + cfg_empty_i when c_tag_cfg_req, + (pass_empty_i or cfg_empty_i) when c_tag_cfg_ign, + wbm_empty_i when c_tag_wbm_req, + (pass_empty_i or wbm_empty_i) when c_tag_wbm_ign, + '0' when others; -- c_tag_skip_tx, c_tag_drop_tx + + with r_tag_value select + s_pass_mux <= + pass_empty_i when c_tag_pass_tx, + pass_empty_i when c_tag_pass_on, + (pass_empty_i or cfg_empty_i) when c_tag_cfg_ign, + (pass_empty_i or wbm_empty_i) when c_tag_wbm_ign, + '1' when others; -- c_tag_skip_tx, c_tag_drop_tx, c_tag_cfg_req, c_tag_wbm_req + + with r_tag_value select + s_cfg_mux <= + cfg_empty_i when c_tag_cfg_req, + (pass_empty_i or cfg_empty_i) when c_tag_cfg_ign, + '1' when others; + + with r_tag_value select + s_wbm_mux <= + wbm_empty_i when c_tag_wbm_req, + (pass_empty_i or wbm_empty_i) when c_tag_wbm_ign, + '1' when others; + + -- Pop the queue we fed into TX + pass_pop_o <= s_can_tx and r_tag_valid and not s_pass_mux; + cfg_pop_o <= s_can_tx and r_tag_valid and not s_cfg_mux; + wbm_pop_o <= s_can_tx and r_tag_valid and not s_wbm_mux; + s_tag_pop <= s_can_tx and r_tag_valid and not s_tag_mux; + + -- Pop the tag FIFO if the register is empty/emptied + tag_pop_o <= not tag_empty_i and (s_tag_pop or not r_tag_valid); + tag_in : process(rstn_i, clk_i) is + begin + if rstn_i = '0' then + r_tag_valid <= '0'; + r_tag_value <= c_tag_drop_tx; + elsif rising_edge(clk_i) then + if s_tag_pop = '1' or r_tag_valid = '0' then + r_tag_valid <= not tag_empty_i; + r_tag_value <= tag_dat_i; + end if; + end if; + end process; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_wbm_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_wbm_fifo.vhd new file mode 100644 index 000000000..245863e42 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_wbm_fifo.vhd @@ -0,0 +1,171 @@ +------------------------------------------------------------------------------ +-- Title : Etherbone Wishbone Master FIFO +-- Project : Etherbone Core +------------------------------------------------------------------------------ +-- File : eb_wbm_fifo.vhd +-- Author : Wesley W. Terpstra +-- Company : GSI +-- Created : 2013-04-08 +-- Last update: 2013-04-08 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Buffers Wishbone requests to resulting data +------------------------------------------------------------------------------- +-- Copyright (c) 2013 GSI +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2013-04-08 1.0 terpstra Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.wishbone_pkg.all; +use work.eb_internals_pkg.all; + +entity eb_wbm_fifo is + generic( + g_timeout_cycles : natural); + port( + clk_i : in std_logic; + rstn_i : in std_logic; + + errreg_o : out std_logic_vector(63 downto 0); + wb_i : in t_wishbone_master_in; + + fsm_stb_i : in std_logic; + fsm_busy_o : out std_logic; + fsm_full_o : out std_logic; + + mux_pop_i : in std_logic; + mux_dat_o : out t_wishbone_data; + mux_empty_o : out std_logic); +end eb_wbm_fifo; + +architecture rtl of eb_wbm_fifo is + + constant c_size : natural := c_queue_depth; + constant c_sbits : natural := f_ceil_log2(c_size); + constant c_tbits : natural := f_ceil_log2(g_timeout_cycles); + + signal s_wb_i_rdy : std_logic; -- 1 when a strobe ackd + signal r_inflight : unsigned(c_sbits-1 downto 0); -- # unacked strobes + signal r_busy : std_logic; -- 1 when r_inflight > 0 + signal r_queued : unsigned(c_sbits-1 downto 0); -- # unpoped strobes (>= r_inflight) + signal r_full : std_logic; -- 1 when r_queued > 0 + signal r_timeout : unsigned(c_tbits-1 downto 0); -- counts downto 0 between acks + signal r_kill_ack : std_logic; -- 1 when r_timeout expires + signal r_errreg : std_logic_vector(63 downto 0); -- shifts in ack when data pops + signal s_ack : std_logic; -- ack of ready data + +begin + + s_wb_i_rdy <= wb_i.ack or wb_i.err or wb_i.rty or r_kill_ack; + + fsm_busy_o <= r_busy; + busy : process(rstn_i, clk_i) is + begin + if rstn_i = '0' then + r_busy <= '0'; + r_inflight <= (others => '0'); + elsif rising_edge(clk_i) then + if fsm_stb_i = '1' then + if s_wb_i_rdy = '1' then -- push+pop + r_inflight <= r_inflight; + else -- push + r_busy <= '1'; + r_inflight <= r_inflight + 1; + end if; + else + if s_wb_i_rdy = '1' then -- pop + if r_inflight = 1 then + r_busy <= '0'; + end if; + r_inflight <= r_inflight - 1; + else -- noop + r_inflight <= r_inflight; + end if; + end if; + end if; + end process; + + fsm_full_o <= r_full; + full : process(rstn_i, clk_i) is + begin + if rstn_i = '0' then + r_full <= '0'; + r_queued <= (others => '0'); + elsif rising_edge(clk_i) then + if fsm_stb_i = '1' then + if mux_pop_i = '1' then -- push+pop + r_queued <= r_queued; + else -- push + if r_queued = c_size-1 then + r_full <= '1'; + end if; + r_queued <= r_queued + 1; + end if; + else + if mux_pop_i = '1' then -- pop + r_full <= '0'; + r_queued <= r_queued - 1; + else -- noop + r_queued <= r_queued; + end if; + end if; + end if; + end process; + + kill_ack : process(rstn_i, clk_i) is + begin + if rstn_i = '0' then + r_kill_ack <= '0'; + r_timeout <= to_unsigned(g_timeout_cycles, r_timeout'length); + elsif rising_edge(clk_i) then + if s_wb_i_rdy = '1' or r_busy = '0' then -- ackd? + r_kill_ack <= '0'; + r_timeout <= to_unsigned(g_timeout_cycles, r_timeout'length); + else + if r_timeout = 1 then + r_kill_ack <= '1'; -- causes s_wb_i_rdy next cycle + end if; + r_timeout <= r_timeout - 1; + end if; + end if; + end process; + + datfifo : eb_fifo + generic map( + g_width => c_wishbone_data_width+1, + g_size => c_size) + port map( + clk_i => clk_i, + rstn_i => rstn_i, + w_full_o => open, + w_push_i => s_wb_i_rdy, + w_dat_i(t_wishbone_data'range) => wb_i.dat, + w_dat_i(t_wishbone_data'length) => wb_i.ack, + r_empty_o => mux_empty_o, + r_pop_i => mux_pop_i, + r_dat_o(t_wishbone_data'range) => mux_dat_o, + r_dat_o(t_wishbone_data'length) => s_ack); + + -- Shift the error register during data pop + -- This ensures that it reflects state synchronous to the TX path + errreg_o <= r_errreg; + errreg : process(rstn_i, clk_i) is + begin + if rstn_i = '0' then + r_errreg <= (others => '0'); + elsif rising_edge(clk_i) then + if mux_pop_i = '1' then + r_errreg <= r_errreg(r_errreg'left-1 downto 0) & (not s_ack); + end if; + end if; + end process; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/etherbone_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/etherbone_pkg.vhd new file mode 100644 index 000000000..394b1e878 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/etherbone_pkg.vhd @@ -0,0 +1,168 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.wishbone_pkg.all; +use work.wr_fabric_pkg.all; + +package etherbone_pkg is + constant c_etherbone_sdb : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"01", + wbd_endian => c_sdb_endian_big, + wbd_width => x"4", --32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"00000000000000ff", + product => ( + vendor_id => x"0000000000000651", -- GSI + device_id => x"68202b22", + version => x"00000001", + date => x"20130211", + name => "Etherbone-Config "))); + + constant c_ebm_sdb : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"01", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"0000000000ffffff", + product => ( + vendor_id => x"0000000000000651", -- GSI + device_id => x"00000815", + version => x"00000002", + date => x"20140615", + name => "Etherbone_Master "))); + + function f_hi_adr_bits(ebm : t_sdb_device) return natural; + + + component eb_raw_slave is + generic( + g_sdb_address : std_logic_vector(63 downto 0); + g_timeout_cycles : natural := 6250000; -- 100 ms at 62.5MHz + g_bus_width : natural); + port( + clk_i : in std_logic; + nRst_i : in std_logic; + snk_i : in t_wishbone_slave_in; + snk_o : out t_wishbone_slave_out; + src_o : out t_wishbone_master_out; + src_i : in t_wishbone_master_in; + cfg_slave_o : out t_wishbone_slave_out; + cfg_slave_i : in t_wishbone_slave_in; + master_o : out t_wishbone_master_out; + master_i : in t_wishbone_master_in); + end component; + + component eb_master_slave_wrapper is + generic( + g_with_master : boolean := false; + + g_ebs_sdb_address : std_logic_vector(63 downto 0); + g_ebs_timeout_cycles : natural := 6250000; + g_ebs_mtu : natural := 1500; + + g_ebm_adr_bits_hi : natural := f_hi_adr_bits(c_ebm_sdb) + + ); + port( + clk_i : in std_logic; + nRst_i : in std_logic; + + --to wr core, ext wrf if + snk_i : in t_wrf_sink_in; + snk_o : out t_wrf_sink_out; + src_o : out t_wrf_source_out; + src_i : in t_wrf_source_in; + + --ebs + ebs_cfg_slave_o : out t_wishbone_slave_out; + ebs_cfg_slave_i : in t_wishbone_slave_in; + ebs_wb_master_o : out t_wishbone_master_out; + ebs_wb_master_i : in t_wishbone_master_in; + + --ebm (optional) + ebm_wb_slave_i : in t_wishbone_slave_in; + ebm_wb_slave_o : out t_wishbone_slave_out + + ); + end component; + + component eb_ethernet_slave is + generic( + g_sdb_address : std_logic_vector(63 downto 0); + g_timeout_cycles : natural := 6250000; -- 100 ms at 62.5MHz + g_mtu : natural := 1500); + port( + clk_i : in std_logic; + nRst_i : in std_logic; + snk_i : in t_wrf_sink_in; + snk_o : out t_wrf_sink_out; + src_o : out t_wrf_source_out; + src_i : in t_wrf_source_in; + cfg_slave_o : out t_wishbone_slave_out; + cfg_slave_i : in t_wishbone_slave_in; + master_o : out t_wishbone_master_out; + master_i : in t_wishbone_master_in); + end component; + + -- Backwards compatability component; use eb_ethernet_slave + component eb_slave_core is + generic( + g_sdb_address : std_logic_vector(63 downto 0); + g_timeout_cycles : natural := 6250000; -- 100 ms at 62.5MHz + g_mtu : natural := 1500); + port( + clk_i : in std_logic; + nRst_i : in std_logic; + snk_i : in t_wrf_sink_in; + snk_o : out t_wrf_sink_out; + src_o : out t_wrf_source_out; + src_i : in t_wrf_source_in; + cfg_slave_o : out t_wishbone_slave_out; + cfg_slave_i : in t_wishbone_slave_in; + master_o : out t_wishbone_master_out; + master_i : in t_wishbone_master_in); + end component; + + component eb_master_top is +generic(g_adr_bits_hi : natural := 8; + g_mtu : natural := 32); +port( + clk_i : in std_logic; + rst_n_i : in std_logic; + + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + + framer_in : out t_wishbone_slave_in; + framer_out : out t_wishbone_slave_out; + + src_i : in t_wrf_source_in; + src_o : out t_wrf_source_out +); +end component; + + + +end etherbone_pkg; + +package body etherbone_pkg is + + -- gets correct number of high address bits from ebm sdb + function f_hi_adr_bits(ebm : t_sdb_device) return natural is + variable ret : natural := 2; + variable len : natural; + begin + len := f_hot_to_bin(ebm.sdb_component.addr_last); + ret := c_wishbone_address_width - (len - 2); + return ret; + end f_hi_adr_bits; + +end etherbone_pkg; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_crc_gen.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_crc_gen.vhd new file mode 100644 index 000000000..e7d6b6665 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_crc_gen.vhd @@ -0,0 +1,280 @@ +---------------------------------------------------------------------- +---- ---- +---- Ultimate CRC. ---- +---- ---- +---- This file is part of the ultimate CRC projectt ---- +---- http://www.opencores.org/cores/ultimate_crc/ ---- +---- ---- +---- Description ---- +---- CRC generator/checker, parallel implementation. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Geir Drange, gedra@opencores.org ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2005 Authors and OPENCORES.ORG ---- +---- ---- +---- This source file may be used and distributed without ---- +---- restriction provided that this copyright statement is not ---- +---- removed from the file and that any derivative work contains ---- +---- the original copyright notice and the associated disclaimer. ---- +---- ---- +---- This source file is free software; you can redistribute it ---- +---- and/or modify it under the terms of the GNU General ---- +---- Public License as published by the Free Software Foundation; ---- +---- either version 2.0 of the License, or (at your option) any ---- +---- later version. ---- +---- ---- +---- This source is distributed in the hope that it will be ---- +---- useful, but WITHOUT ANY WARRANTY; without even the implied ---- +---- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ---- +---- PURPOSE. See the GNU General Public License for more details.---- +---- ---- +---- You should have received a copy of the GNU General ---- +---- Public License along with this source; if not, download it ---- +---- from http://www.gnu.org/licenses/gpl.txt ---- +---- ---- +---------------------------------------------------------------------- +-- +-- CVS Revision History +-- +-- $Log: ucrc_par.vhd,v $ +-- Revision 1.1 2005/05/09 15:58:38 gedra +-- Parallel implementation +-- +-- Modified by T.W. for use in GenCores library +-- + +library ieee; +use ieee.std_logic_1164.all; +use work.gencores_pkg.all; + +entity gc_crc_gen is + generic ( +-- polynomial of our CRC generator + g_polynomial : std_logic_vector := x"04C11DB7"; +-- initial (after-reset) value of CRC + g_init_value : std_logic_vector := x"ffffffff"; +-- residual value of CRC when matched + g_residue : std_logic_vector := x"38fb2284"; +-- width of full data input word + g_data_width : integer range 2 to 256 := 16; +-- width of smaller-than-full data input word + g_half_width : integer range 2 to 256 := 8; +-- use synchronous reset when 1 + g_sync_reset : integer range 0 to 1 := 0; +-- dual-width mode (g_data_width - wide input word when 1 and g_half_width input +-- word when 0) + g_dual_width : integer range 0 to 1 := 0; +-- if true, match_o output is registered, otherwise it's driven combinatorially + g_registered_match_output : boolean := true; + g_registered_crc_output : boolean := true); + port ( + clk_i : in std_logic; -- clock + rst_i : in std_logic; -- reset, active high + en_i : in std_logic; -- enable input, active high + half_i : in std_logic; -- 1: input word has g_half_width bits + -- 0: input word has g_data_width bits + + data_i : in std_logic_vector(g_data_width - 1 downto 0); -- data input + restart_i : in std_logic := '0'; + + match_o : out std_logic; -- CRC match flag: 1 - CRC matches + + crc_o : out std_logic_vector(g_polynomial'length - 1 downto 0)); -- CRC + -- output value +end gc_crc_gen; + +architecture rtl of gc_crc_gen is + + function f_reverse_vector (a : in std_logic_vector) + return std_logic_vector is + variable v_result : std_logic_vector(a'reverse_range); + begin + for i in a'range loop + v_result(i) := a(i); + end loop; + return v_result; + end; + + function f_reverse_bytes (a : in std_logic_vector) + return std_logic_vector is + variable tmp : std_logic_vector(a'length-1 downto 0); + variable v_result : std_logic_vector(a'length-1 downto 0); + begin + tmp := a; + for i in tmp'range loop + v_result(i) := tmp(((tmp'length/8-1) - i/8)*8 + (i mod 8)); + end loop; + return v_result; + end; + + + constant msb : integer := g_polynomial'length - 1; + constant init_msb : integer := g_init_value'length - 1; + constant p : std_logic_vector(msb downto 0) := g_polynomial; + constant dw : integer := g_data_width; + constant pw : integer := g_polynomial'length; + type fb_array is array (dw downto 1) of std_logic_vector(msb downto 0); + type dmsb_array is array (dw downto 1) of std_logic_vector(msb downto 1); + signal crca : fb_array; + signal da, ma : dmsb_array; + signal crc : std_logic_vector(msb downto 0); + signal arst, srst : std_logic; + + + signal data_i2 : std_logic_vector(g_data_width-1 downto 0); + signal en_d0 : std_logic; + signal crc_cur, crc_next : std_logic_vector(g_polynomial'length-1 downto 0); + + +begin + +-- Parameter checking: Invalid generics will abort simulation/synthesis + PCHK1 : if msb /= init_msb generate + process + begin + report "g_polynomial and g_init_value vectors must be equal length!" + severity failure; + wait; + end process; + end generate PCHK1; + + PCHK2 : if (msb < 3) or (msb > 31) generate + process + begin + report "g_polynomial must be of order 4 to 32!" + severity failure; + wait; + end process; + end generate PCHK2; + + PCHK3 : if p(0) /= '1' generate -- LSB must be 1 + process + begin + report "g_polynomial must have lsb set to 1!" + severity failure; + wait; + end process; + end generate PCHK3; + + data_i2 <= f_reverse_bytes(data_i); + + crc_cur <= g_init_value when restart_i = '1' else crc; + +-- Generate vector of each data bit + CA : for i in 1 to dw generate -- data bits + DAT : for j in 1 to msb generate + da(i)(j) <= data_i2(i - 1); + end generate DAT; + end generate CA; + +-- Generate vector of each CRC MSB + MS0 : for i in 1 to msb generate + ma(1)(i) <= crc_cur(msb); + end generate MS0; + MSP : for i in 2 to dw generate + MSU : for j in 1 to msb generate + ma(i)(j) <= crca(i - 1)(msb); + end generate MSU; + end generate MSP; + +-- Generate feedback matrix + crca(1)(0) <= da(1)(1) xor crc_cur(msb); + crca(1)(msb downto 1) <= crc_cur(msb - 1 downto 0) xor ((da(1) xor ma(1)) and p(msb downto 1)); + FB : for i in 2 to dw generate + crca(i)(0) <= da(i)(1) xor crca(i - 1)(msb); + crca(i)(msb downto 1) <= crca(i - 1)(msb - 1 downto 0) xor + ((da(i) xor ma(i)) and p(msb downto 1)); + end generate FB; + +-- Reset signal + SR : if g_sync_reset = 1 generate + srst <= rst_i; + arst <= '0'; + end generate SR; + AR : if g_sync_reset = 0 generate + srst <= '0'; + arst <= rst_i; + end generate AR; + + + CRCP : process (clk_i, arst) + begin + if arst = '1' then -- async. reset + crc <= g_init_value; + elsif rising_edge(clk_i) then + if srst = '1' then -- sync. reset + crc <= g_init_value; + elsif en_i = '1' then + + if(half_i = '1' and g_dual_width = 1) then + crc <= crca(g_half_width); + else + crc <= crca(g_data_width); + end if; + end if; + end if; + end process; + + p_crc_next : process(crc, half_i, crca) + begin + if(g_registered_crc_output) then + crc_next <= f_reverse_bytes(f_reverse_vector(not crc)); + else + if(half_i = '1' and g_dual_width = 1) then + crc_next <= f_reverse_bytes(f_reverse_vector(not crca(g_half_width))); + else + crc_next <= f_reverse_bytes(f_reverse_vector(not crca(g_data_width))); + end if; + end if; + end process; + + p_crc_output : process(crc_next, crc, en_i) + begin + if(g_registered_crc_output) then + crc_o <= crc_next; + elsif(en_i = '1') then + crc_o <= crc_next; + else + crc_o <= f_reverse_bytes(f_reverse_vector(not crc)); + end if; + end process; + + gen_reg_match_output : if(g_registered_match_output) generate + + match_gen : process (clk_i, arst) + begin + if arst = '1' then -- async. reset + match_o <= '0'; + en_d0 <= '0'; + elsif rising_edge(clk_i) then + if srst = '1' then -- sync. reset + match_o <= '0'; + en_d0 <= '0'; + else + en_d0 <= en_i; + + if(en_d0 = '1') then + if crc_next = g_residue then + match_o <= '1'; + else + match_o <= '0'; + end if; + end if; + end if; + end if; + end process; + + end generate gen_reg_match_output; + + gen_comb_match_output : if (not g_registered_match_output) generate + match_o <= '1' when crc_next = g_residue else '0'; + end generate gen_comb_match_output; +end rtl; + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_extend_pulse.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_extend_pulse.vhd new file mode 100644 index 000000000..939d516a4 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_extend_pulse.vhd @@ -0,0 +1,93 @@ +------------------------------------------------------------------------------- +-- Title : Pulse width extender +-- Project : General Cores library +------------------------------------------------------------------------------- +-- File : gc_extend_pulse.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN +-- Created : 2009-09-01 +-- Last update: 2012-06-19 +-- Platform : FPGA-generic +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- Description: +-- Synchronous pulse extender. Generates a pulse of programmable width upon +-- detection of a rising edge in the input. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2009-2011 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2009-09-01 0.9 twlostow Created +-- 2011-04-18 1.0 twlostow Added comments & header +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.NUMERIC_STD.all; + +library work; +use work.gencores_pkg.all; +use work.genram_pkg.all; + +entity gc_extend_pulse is + + generic ( + -- output pulse width in clk_i cycles + g_width : natural := 1000 + ); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + -- input pulse (synchronou to clk_i) + pulse_i : in std_logic; + -- extended output pulse + extended_o : out std_logic := '0'); +end gc_extend_pulse; + +architecture rtl of gc_extend_pulse is + + signal cntr : unsigned(f_log2_size(g_width)-1 downto 0); + signal extended_int : std_logic; + +begin -- rtl + + extend : process (clk_i, rst_n_i) + begin -- process extend + if rst_n_i = '0' then -- asynchronous reset (active low) + extended_int <= '0'; + cntr <= (others => '0'); + elsif clk_i'event and clk_i = '1' then -- rising clock edge + if(pulse_i = '1') then + extended_int <= '1'; + cntr <= to_unsigned(g_width - 2, cntr'length); + elsif cntr /= to_unsigned(0, cntr'length) then + cntr <= cntr - 1; + else + extended_int <= '0'; + end if; + end if; + end process extend; + + extended_o <= pulse_i or extended_int; + +end rtl; + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_frequency_meter.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_frequency_meter.vhd new file mode 100644 index 000000000..39b15afc7 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_frequency_meter.vhd @@ -0,0 +1,130 @@ +------------------------------------------------------------------------------- +-- Title : Frequency meter +-- Project : General Cores +------------------------------------------------------------------------------- +-- File : gc_frequency_meter.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN +-- Platform : FPGA-generics +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- Copyright (c) 2012-2015 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- + +library ieee; + +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.gencores_pkg.all; + +entity gc_frequency_meter is + generic( + g_with_internal_timebase : boolean := true; + g_clk_sys_freq : integer; + g_counter_bits : integer := 32); + + port( + clk_sys_i : in std_logic; + clk_in_i : in std_logic; + rst_n_i : in std_logic; + pps_p1_i : in std_logic; + freq_o : out std_logic_vector(g_counter_bits-1 downto 0); + freq_valid_o : out std_logic + ); + +end gc_frequency_meter; + + +architecture behavioral of gc_frequency_meter is + + signal gate_pulse, gate_pulse_synced : std_logic; + + signal cntr_gate : unsigned(g_counter_bits-1 downto 0); + signal cntr_meas : unsigned(g_counter_bits-1 downto 0); + signal freq_reg : std_logic_vector(g_counter_bits-1 downto 0); + +begin + + gen_internal_timebase : if(g_with_internal_timebase = true) generate + + p_gate_counter : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + cntr_gate <= (others => '0'); + gate_pulse <= '0'; + else + if(cntr_gate = g_clk_sys_freq-1) then + cntr_gate <= (others => '0'); + gate_pulse <= '1'; + else + cntr_gate <= cntr_gate + 1; + gate_pulse <= '0'; + end if; + end if; + end if; + end process; + + U_Sync_Gate : gc_pulse_synchronizer + port map ( + clk_in_i => clk_sys_i, + clk_out_i => clk_in_i, + rst_n_i => rst_n_i, + d_ready_o => freq_valid_o, + d_p_i => gate_pulse, + q_p_o => gate_pulse_synced); + + end generate gen_internal_timebase; + + gen_external_timebase : if(g_with_internal_timebase = false) generate + + U_Sync_Gate : gc_pulse_synchronizer + port map ( + clk_in_i => clk_sys_i, + clk_out_i => clk_in_i, + rst_n_i => rst_n_i, + d_ready_o => freq_valid_o, + d_p_i => pps_p1_i, + q_p_o => gate_pulse_synced); + + end generate gen_external_timebase; + + + p_freq_counter : process (clk_in_i, rst_n_i) + begin + if rst_n_i = '0' then -- asynchronous reset (active low) + cntr_meas <= (others => '0'); + freq_reg <= (others => '0'); + elsif rising_edge(clk_in_i) then + + if(gate_pulse_synced = '1') then + freq_reg <= std_logic_vector(cntr_meas); + cntr_meas <= (others => '0'); + else + cntr_meas <= cntr_meas + 1; + end if; + end if; + end process p_freq_counter; + + freq_o <= freq_reg; +end behavioral; + + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_pulse_synchronizer.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_pulse_synchronizer.vhd new file mode 100644 index 000000000..1707450d1 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_pulse_synchronizer.vhd @@ -0,0 +1,134 @@ +------------------------------------------------------------------------------- +-- Title : Pulse synchronizer +-- Project : General Cores Library +------------------------------------------------------------------------------- +-- File : gc_pulse_synchronizer.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2012-01-10 +-- Last update: 2012-08-29 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Full feedback pulse synchronizer (works independently of the +-- input/output clock domain frequency ratio) +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2012 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2012-01-12 1.0 twlostow Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +use work.gencores_pkg.all; + +entity gc_pulse_synchronizer is + + port ( + -- pulse input clock + clk_in_i : in std_logic; + -- pulse output clock + clk_out_i : in std_logic; + -- system reset (clk_in_i domain) + rst_n_i : in std_logic; + -- pulse input ready (clk_in_i domain). When HI, a pulse coming to d_p_i will be + -- correctly transferred to q_p_o. + d_ready_o : out std_logic; + -- pulse input (clk_in_i domain) + d_p_i : in std_logic; + -- pulse output (clk_out_i domain) + q_p_o : out std_logic); + +end gc_pulse_synchronizer; + +architecture rtl of gc_pulse_synchronizer is + + constant c_sync_stages : integer := 3; + + signal ready, d_p_d0 : std_logic; + + signal in_ext, out_ext : std_logic; + signal out_feedback : std_logic; + + signal d_in2out : std_logic_vector(c_sync_stages-1 downto 0); + signal d_out2in : std_logic_vector(c_sync_stages-1 downto 0); + +begin -- rtl + + process(clk_out_i, rst_n_i) + begin + if rst_n_i = '0' then + d_in2out <= (others => '0'); + out_ext <= '0'; + elsif rising_edge(clk_out_i) then + d_in2out <= d_in2out(c_sync_stages-2 downto 0) & in_ext; + out_ext <= d_in2out(c_sync_stages-1); + end if; + end process; + + + process(clk_in_i, rst_n_i) + begin + if rst_n_i = '0' then + d_out2in <= (others => '0'); + elsif rising_edge(clk_in_i) then + d_out2in <= d_out2in(c_sync_stages-2 downto 0) & out_ext; + end if; + end process; + + out_feedback <= d_out2in(c_sync_stages-1); + + p_input_ack : process(clk_in_i, rst_n_i) + begin + if rst_n_i = '0' then + ready <= '1'; + in_ext <= '0'; + d_p_d0 <= '0'; + elsif rising_edge(clk_in_i) then + + d_p_d0 <= d_p_i; + + if(ready = '1' and d_p_i = '1' and d_p_d0 = '0') then + in_ext <= '1'; + ready <= '0'; + elsif(in_ext = '1' and out_feedback = '1') then + in_ext <= '0'; + elsif(in_ext = '0' and out_feedback = '0') then + ready <= '1'; + end if; + end if; + end process; + + p_drive_output : process(clk_out_i, rst_n_i) + begin + if rst_n_i = '0' then + q_p_o <= '0'; + elsif rising_edge(clk_out_i) then + q_p_o <= not out_ext and d_in2out(c_sync_stages-1); + end if; + end process; + + d_ready_o <= ready; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_pulse_synchronizer2.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_pulse_synchronizer2.vhd new file mode 100644 index 000000000..280c72bd8 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_pulse_synchronizer2.vhd @@ -0,0 +1,132 @@ +------------------------------------------------------------------------------- +-- Title : Pulse synchronizer +-- Project : General Cores Library +------------------------------------------------------------------------------- +-- File : gc_pulse_synchronizer2.vhd +-- Author : Tomasz Wlostowski, Wesley Terpstra +-- Company : CERN BE-CO-HT +-- Created : 2012-01-10 +-- Last update: 2012-08-29 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Full feedback pulse synchronizer (works independently of the +-- input/output clock domain frequency ratio) +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2012 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2012-01-12 1.0 twlostow Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +use work.gencores_pkg.all; + +entity gc_pulse_synchronizer2 is + port ( + -- pulse input clock + clk_in_i : in std_logic; + rst_in_n_i : in std_logic; + -- pulse output clock + clk_out_i : in std_logic; + rst_out_n_i : in std_logic; + + -- pulse input ready (clk_in_i domain). When HI, a pulse coming to d_p_i will be + -- correctly transferred to q_p_o. + d_ready_o : out std_logic; + -- pulse input (clk_in_i domain) + d_p_i : in std_logic; + -- pulse output (clk_out_i domain) + q_p_o : out std_logic); + +end gc_pulse_synchronizer2; + +architecture rtl of gc_pulse_synchronizer2 is + + constant c_sync_stages : integer := 3; + + signal ready, d_p_d0 : std_logic; + + signal in_ext, out_ext : std_logic; + signal out_feedback : std_logic; + + signal d_in2out : std_logic_vector(c_sync_stages-1 downto 0); + signal d_out2in : std_logic_vector(c_sync_stages-1 downto 0); + +begin -- rtl + + process(clk_out_i, rst_out_n_i) + begin + if rst_out_n_i = '0' then + d_in2out <= (others => '0'); + out_ext <= '0'; + elsif rising_edge(clk_out_i) then + d_in2out <= d_in2out(c_sync_stages-2 downto 0) & in_ext; + out_ext <= d_in2out(c_sync_stages-1); + end if; + end process; + + + process(clk_in_i, rst_in_n_i) + begin + if rst_in_n_i = '0' then + d_out2in <= (others => '0'); + elsif rising_edge(clk_in_i) then + d_out2in <= d_out2in(c_sync_stages-2 downto 0) & out_ext; + end if; + end process; + + out_feedback <= d_out2in(c_sync_stages-1); + + p_input_ack : process(clk_in_i, rst_in_n_i) + begin + if rst_in_n_i = '0' then + ready <= '1'; + in_ext <= '0'; + d_p_d0 <= '0'; + elsif rising_edge(clk_in_i) then + + d_p_d0 <= d_p_i; + + if(ready = '1' and d_p_i = '1' and d_p_d0 = '0') then + in_ext <= not in_ext; + ready <= '0'; + elsif(in_ext = out_feedback) then + ready <= '1'; + end if; + end if; + end process; + + p_drive_output : process(clk_out_i, rst_out_n_i) + begin + if rst_out_n_i = '0' then + q_p_o <= '0'; + elsif rising_edge(clk_out_i) then + q_p_o <= out_ext xor d_in2out(c_sync_stages-1); + end if; + end process; + + d_ready_o <= ready; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_reset.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_reset.vhd new file mode 100644 index 000000000..e4fa0a493 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_reset.vhd @@ -0,0 +1,87 @@ +------------------------------------------------------------------------------- +-- Title : Reset synchronizer and generator +-- Project : General Cores +------------------------------------------------------------------------------- +-- File : gc_reset.vhd +-- Company : CERN +-- Platform : FPGA-generics +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- Copyright (c) 2012-2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +entity gc_reset is + generic( + g_clocks : natural := 1; + g_logdelay : natural := 10; + g_syncdepth : natural := 3); + port( + free_clk_i : in std_logic; + locked_i : in std_logic := '1'; -- All the PLL locked signals ANDed together + clks_i : in std_logic_vector(g_clocks-1 downto 0); + rstn_o : out std_logic_vector(g_clocks-1 downto 0)); +end gc_reset; + +architecture rtl of gc_reset is + subtype t_shifter is std_logic_vector(g_syncdepth-1 downto 0); + type t_shifters is array(natural range <>) of t_shifter; + + signal shifters : t_shifters(g_clocks-1 downto 0) := (others => (others => '0')); -- start reset + signal locked_count : unsigned(g_logdelay-1 downto 0) := (others => '0'); + signal master_rstn : std_logic := '0'; +begin + lock : process(free_clk_i, locked_i) + constant locked_done : unsigned(g_logdelay-1 downto 0) := (others => '1'); + begin + -- Asynchronous reset + if locked_i = '0' then + master_rstn <= '0'; + locked_count <= (others => '0'); + else + if rising_edge(free_clk_i) then + if locked_count = locked_done then + master_rstn <= '1'; + else + master_rstn <= '0'; + locked_count <= locked_count + 1; + end if; + end if; + end if; + end process; + + -- Generate the sync chains for each clock domain + syncs : for i in g_clocks-1 downto 0 generate + sync : process(clks_i(i)) + begin + if rising_edge(clks_i(i)) then + shifters(i) <= master_rstn & shifters(i)(g_syncdepth-1 downto 1); + end if; + end process; + end generate; + + -- Output the synchronized reset + rstn : for i in g_clocks-1 downto 0 generate + rstn_o(i) <= shifters(i)(0); + end generate; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_sync_ffs.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_sync_ffs.vhd new file mode 100644 index 000000000..6603c0297 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_sync_ffs.vhd @@ -0,0 +1,125 @@ +------------------------------------------------------------------------------- +-- Title : Synchronizer chain +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : gc_sync_ffs.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-Co-HT +-- Created : 2010-06-14 +-- Last update: 2017-02-03 +-- Platform : FPGA-generic +-- Standard : VHDL'87 +------------------------------------------------------------------------------- +-- Description: Synchronizer chain and edge detector. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2009 - 2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2010-06-14 1.0 twlostow Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +entity gc_sync_ffs is + generic( + g_sync_edge : string := "positive" + ); + port( + clk_i : in std_logic; -- clock from the destination clock domain + rst_n_i : in std_logic; -- reset + data_i : in std_logic; -- async input + synced_o : out std_logic; -- synchronized output + npulse_o : out std_logic; -- negative edge detect output (single-clock + -- pulse) + ppulse_o : out std_logic -- positive edge detect output (single-clock + -- pulse) + ); +end gc_sync_ffs; + +-- make Altera Quartus quiet regarding unknown attributes: +-- altera message_off 10335 + +architecture behavioral of gc_sync_ffs is + signal sync0, sync1, sync2 : std_logic; + + attribute shreg_extract : string; + attribute shreg_extract of sync0 : signal is "no"; + attribute shreg_extract of sync1 : signal is "no"; + attribute shreg_extract of sync2 : signal is "no"; + + attribute keep : string; + attribute keep of sync0 : signal is "true"; + attribute keep of sync1 : signal is "true"; + + -- synchronizer attribute for Vivado + attribute ASYNC_REG : string; + attribute ASYNC_REG of sync0 : signal is "true"; + attribute ASYNC_REG of sync1 : signal is "true"; + attribute ASYNC_REG of sync2 : signal is "true"; + +begin + + + sync_posedge : if (g_sync_edge = "positive") generate + process(clk_i, rst_n_i) + begin + if(rst_n_i = '0') then + sync0 <= '0'; + sync1 <= '0'; + sync2 <= '0'; + synced_o <= '0'; + npulse_o <= '0'; + ppulse_o <= '0'; + elsif rising_edge(clk_i) then + sync0 <= data_i; + sync1 <= sync0; + sync2 <= sync1; + synced_o <= sync1; + npulse_o <= sync2 and not sync1; + ppulse_o <= not sync2 and sync1; + end if; + end process; + end generate sync_posedge; + + sync_negedge : if(g_sync_edge = "negative") generate + process(clk_i, rst_n_i) + begin + if(rst_n_i = '0') then + sync0 <= '0'; + sync1 <= '0'; + sync2 <= '0'; + synced_o <= '0'; + npulse_o <= '0'; + ppulse_o <= '0'; + elsif falling_edge(clk_i) then + sync0 <= data_i; + sync1 <= sync0; + sync2 <= sync1; + synced_o <= sync1; + npulse_o <= sync2 and not sync1; + ppulse_o <= not sync2 and sync1; + end if; + end process; + end generate sync_negedge; + +end behavioral; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_sync_register.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_sync_register.vhd new file mode 100644 index 000000000..8d43ef443 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_sync_register.vhd @@ -0,0 +1,88 @@ +------------------------------------------------------------------------------- +-- Title : Parametrized synchronizer +-- Project : General Cores +------------------------------------------------------------------------------- +-- File : gc_sync_register.vhd +-- Company : CERN +-- Platform : FPGA-generics +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- Copyright (c) 2014-2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-- Modifications: +-- 2016-08-24: by Jan Pospisil (j.pospisil@cern.ch) +-- * added ASYNC_REG attribute for better timing analysis/simulation +-- in Xilinx tools +-------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +entity gc_sync_register is + generic ( + g_width : integer); + port ( + clk_i : in std_logic; + rst_n_a_i : in std_logic; + d_i : in std_logic_vector(g_width-1 downto 0); + q_o : out std_logic_vector(g_width-1 downto 0)); + +end gc_sync_register; + +-- make Altera Quartus quiet regarding unknown attributes: +-- altera message_off 10335 + +architecture rtl of gc_sync_register is + + signal gc_sync_register_in : std_logic_vector(g_width-1 downto 0); + signal sync0, sync1 : std_logic_vector(g_width-1 downto 0); + + attribute shreg_extract : string; + attribute shreg_extract of gc_sync_register_in : signal is "no"; + attribute shreg_extract of sync0 : signal is "no"; + attribute shreg_extract of sync1 : signal is "no"; + + attribute keep : string; + attribute keep of gc_sync_register_in : signal is "true"; + attribute keep of sync0 : signal is "true"; + attribute keep of sync1 : signal is "true"; + + attribute async_reg : string; + attribute async_reg of gc_sync_register_in : signal is "true"; + attribute async_reg of sync0 : signal is "true"; + attribute async_reg of sync1 : signal is "true"; + +begin + + process(clk_i, rst_n_a_i) + begin + if(rst_n_a_i = '0') then + sync1 <= (others => '0'); + sync0 <= (others => '0'); + elsif rising_edge(clk_i) then + sync0 <= gc_sync_register_in; + sync1 <= sync0; + end if; + end process; + + gc_sync_register_in <= d_i; + q_o <= sync1; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gencores_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gencores_pkg.vhd new file mode 100644 index 000000000..4e6d39fe7 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gencores_pkg.vhd @@ -0,0 +1,674 @@ +------------------------------------------------------------------------------- +-- Title : General cores VHDL package +-- Project : General Cores library +------------------------------------------------------------------------------- +-- File : gencores_pkg.vhd +-- Author : Tomasz Wlostowski +-- Theodor-Adrian Stana +-- Matthieu Cattin +-- Dimitrios Lampridis +-- Company : CERN +-- Created : 2009-09-01 +-- Last update: 2017-10-11 +-- Platform : FPGA-generic +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- Description: +-- Package incorporating simple VHDL modules and functions, which are used +-- in the WR and other OHWR projects. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2009-2016 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.genram_pkg.all; + +package gencores_pkg is + + --============================================================================ + -- Component instantiations + --============================================================================ + + ------------------------------------------------------------------------------ + -- Pulse extender + ------------------------------------------------------------------------------ + component gc_extend_pulse + generic ( + g_width : natural); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + pulse_i : in std_logic; + extended_o : out std_logic); + end component; + + ------------------------------------------------------------------------------ + -- CRC generator + ------------------------------------------------------------------------------ + component gc_crc_gen + generic ( + g_polynomial : std_logic_vector := x"04C11DB7"; + g_init_value : std_logic_vector := x"ffffffff"; + g_residue : std_logic_vector := x"38fb2284"; + g_data_width : integer range 2 to 256 := 16; + g_half_width : integer range 2 to 256 := 8; + g_sync_reset : integer range 0 to 1 := 1; + g_dual_width : integer range 0 to 1 := 0; + g_registered_match_output : boolean := true; + g_registered_crc_output : boolean := true); + port ( + clk_i : in std_logic; + rst_i : in std_logic; + en_i : in std_logic; + half_i : in std_logic; + restart_i : in std_logic := '0'; + data_i : in std_logic_vector(g_data_width - 1 downto 0); + match_o : out std_logic; + crc_o : out std_logic_vector(g_polynomial'length - 1 downto 0)); + end component; + + ------------------------------------------------------------------------------ + -- Moving average + ------------------------------------------------------------------------------ + component gc_moving_average + generic ( + g_data_width : natural; + g_avg_log2 : natural range 1 to 8); + port ( + rst_n_i : in std_logic; + clk_i : in std_logic; + din_i : in std_logic_vector(g_data_width-1 downto 0); + dout_o : out std_logic_vector(g_data_width+g_avg_log2-1 downto 0); + dout_stb_o : out std_logic); + end component; + + ------------------------------------------------------------------------------ + -- Delay line + ------------------------------------------------------------------------------ + component gc_delay_line + generic ( + g_delay : integer; + g_width : integer); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + d_i : in std_logic_vector(g_width -1 downto 0); + q_o : out std_logic_vector(g_width -1 downto 0); + ready_o : out std_logic); + end component; + + ------------------------------------------------------------------------------ + -- PI controller + ------------------------------------------------------------------------------ + component gc_dual_pi_controller + generic ( + g_error_bits : integer; + g_dacval_bits : integer; + g_output_bias : integer; + g_integrator_fracbits : integer; + g_integrator_overbits : integer; + g_coef_bits : integer); + port ( + clk_sys_i : in std_logic; + rst_n_sysclk_i : in std_logic; + phase_err_i : in std_logic_vector(g_error_bits-1 downto 0); + phase_err_stb_p_i : in std_logic; + freq_err_i : in std_logic_vector(g_error_bits-1 downto 0); + freq_err_stb_p_i : in std_logic; + mode_sel_i : in std_logic; + dac_val_o : out std_logic_vector(g_dacval_bits-1 downto 0); + dac_val_stb_p_o : out std_logic; + pll_pcr_enable_i : in std_logic; + pll_pcr_force_f_i : in std_logic; + pll_fbgr_f_kp_i : in std_logic_vector(g_coef_bits-1 downto 0); + pll_fbgr_f_ki_i : in std_logic_vector(g_coef_bits-1 downto 0); + pll_pbgr_p_kp_i : in std_logic_vector(g_coef_bits-1 downto 0); + pll_pbgr_p_ki_i : in std_logic_vector(g_coef_bits-1 downto 0)); + end component; + + ------------------------------------------------------------------------------ + -- Serial 16-bit DAC interface (SPI/QSPI/MICROWIRE compatible) + ------------------------------------------------------------------------------ + component gc_serial_dac + generic ( + g_num_data_bits : integer; + g_num_extra_bits : integer; + g_num_cs_select : integer; + g_sclk_polarity : integer); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + value_i : in std_logic_vector(g_num_data_bits-1 downto 0); + cs_sel_i : in std_logic_vector(g_num_cs_select-1 downto 0); + load_i : in std_logic; + sclk_divsel_i : in std_logic_vector(2 downto 0); + dac_cs_n_o : out std_logic_vector(g_num_cs_select-1 downto 0); + dac_sclk_o : out std_logic; + dac_sdata_o : out std_logic; + busy_o : out std_logic); + end component; + + ------------------------------------------------------------------------------ + -- Synchronisation FF chain + ------------------------------------------------------------------------------ + component gc_sync_ffs + generic ( + g_sync_edge : string := "positive"); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + data_i : in std_logic; + synced_o : out std_logic; + npulse_o : out std_logic; + ppulse_o : out std_logic); + end component; + + ------------------------------------------------------------------------------ + -- Pulse synchroniser + ------------------------------------------------------------------------------ + component gc_pulse_synchronizer + port ( + clk_in_i : in std_logic; + clk_out_i : in std_logic; + rst_n_i : in std_logic; + d_ready_o : out std_logic; + d_p_i : in std_logic; + q_p_o : out std_logic); + end component; + + ------------------------------------------------------------------------------ + -- Pulse synchroniser (with reset from both clock domains) + ------------------------------------------------------------------------------ + component gc_pulse_synchronizer2 is + port ( + clk_in_i : in std_logic; + rst_in_n_i : in std_logic; + clk_out_i : in std_logic; + rst_out_n_i : in std_logic; + d_ready_o : out std_logic; + d_p_i : in std_logic; + q_p_o : out std_logic); + end component; + + ------------------------------------------------------------------------------ + -- Frequency meter + ------------------------------------------------------------------------------ + component gc_frequency_meter + generic ( + g_with_internal_timebase : boolean; + g_clk_sys_freq : integer; + g_counter_bits : integer); + port ( + clk_sys_i : in std_logic; + clk_in_i : in std_logic; + rst_n_i : in std_logic; + pps_p1_i : in std_logic; + freq_o : out std_logic_vector(g_counter_bits-1 downto 0); + freq_valid_o : out std_logic); + end component; + + ------------------------------------------------------------------------------ + -- Time-division multiplexer with round robin arbitration + ------------------------------------------------------------------------------ + component gc_arbitrated_mux + generic ( + g_num_inputs : integer; + g_width : integer); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + d_i : in std_logic_vector(g_num_inputs * g_width-1 downto 0); + d_valid_i : in std_logic_vector(g_num_inputs-1 downto 0); + d_req_o : out std_logic_vector(g_num_inputs-1 downto 0); + q_o : out std_logic_vector(g_width-1 downto 0); + q_valid_o : out std_logic; + q_input_id_o : out std_logic_vector(f_log2_size(g_num_inputs)-1 downto 0)); + end component; + + ------------------------------------------------------------------------------ + -- Power-On reset generator + ------------------------------------------------------------------------------ + component gc_reset is + generic( + g_clocks : natural := 1; + g_logdelay : natural := 10; + g_syncdepth : natural := 3); + port( + free_clk_i : in std_logic; + locked_i : in std_logic := '1'; -- All the PLL locked signals ANDed together + clks_i : in std_logic_vector(g_clocks-1 downto 0); + rstn_o : out std_logic_vector(g_clocks-1 downto 0)); + end component; + + ------------------------------------------------------------------------------ + -- Power-On reset generator of synchronous single reset from multiple + -- asynchronous input reset signals + ------------------------------------------------------------------------------ + component gc_single_reset_gen is + generic( + g_out_reg_depth : natural :=2; + g_rst_in_num : natural :=2); + port ( + clk_i : in std_logic; + rst_signals_n_a_i : in std_logic_vector(g_rst_in_num-1 downto 0); + rst_n_o : out std_logic + ); + end component; + + ------------------------------------------------------------------------------ + -- Round robin arbiter + ------------------------------------------------------------------------------ + component gc_rr_arbiter + generic ( + g_size : integer); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + req_i : in std_logic_vector(g_size-1 downto 0); + grant_o : out std_logic_vector(g_size-1 downto 0); + grant_comb_o : out std_logic_vector(g_size-1 downto 0)); + end component; + + ------------------------------------------------------------------------------ + -- Pack or unpack words + ------------------------------------------------------------------------------ + component gc_word_packer + generic ( + g_input_width : integer; + g_output_width : integer); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + d_i : in std_logic_vector(g_input_width-1 downto 0); + d_valid_i : in std_logic; + d_req_o : out std_logic; + flush_i : in std_logic := '0'; + q_o : out std_logic_vector(g_output_width-1 downto 0); + q_valid_o : out std_logic; + q_req_i : in std_logic); + end component; + + ------------------------------------------------------------------------------ + -- Adder + ------------------------------------------------------------------------------ + component gc_big_adder is + generic( + g_data_bits : natural := 64; + g_parts : natural := 4); + port( + clk_i : in std_logic; + stall_i : in std_logic := '0'; + a_i : in std_logic_vector(g_data_bits-1 downto 0); + b_i : in std_logic_vector(g_data_bits-1 downto 0); + c_i : in std_logic := '0'; + c1_o : out std_logic; + x2_o : out std_logic_vector(g_data_bits-1 downto 0); + c2_o : out std_logic); + end component; + + ------------------------------------------------------------------------------ + -- I2C slave + ------------------------------------------------------------------------------ + constant c_i2cs_idle : std_logic_vector(1 downto 0) := "00"; + constant c_i2cs_addr_good : std_logic_vector(1 downto 0) := "01"; + constant c_i2cs_rd_done : std_logic_vector(1 downto 0) := "10"; + constant c_i2cs_wr_done : std_logic_vector(1 downto 0) := "11"; + + component gc_i2c_slave is + generic + ( + -- Length of glitch filter + -- 0 - SCL and SDA lines are passed only through synchronizer + -- 1 - one clk_i glitches filtered + -- 2 - two clk_i glitches filtered + g_gf_len : natural := 0; + g_auto_addr_ack : boolean := FALSE + ); + port + ( + -- Clock, reset ports + clk_i : in std_logic; + rst_n_i : in std_logic; + + -- I2C lines + scl_i : in std_logic; + scl_o : out std_logic; + scl_en_o : out std_logic; + sda_i : in std_logic; + sda_o : out std_logic; + sda_en_o : out std_logic; + + -- Slave address + i2c_addr_i : in std_logic_vector(6 downto 0); + + -- ACK input, should be set after done_p_o = '1' + -- (note that the bit is reversed wrt I2C ACK bit) + -- '1' - ACK + -- '0' - NACK + ack_i : in std_logic; + + -- Byte to send, should be loaded while done_p_o = '1' + tx_byte_i : in std_logic_vector(7 downto 0); + + -- Received byte, valid after done_p_o = '1' + rx_byte_o : out std_logic_vector(7 downto 0); + + -- Pulse outputs signaling various I2C actions + -- Start and stop conditions + i2c_sta_p_o : out std_logic; + i2c_sto_p_o : out std_logic; + -- Received address corresponds addr_i + addr_good_p_o : out std_logic; + -- Read and write done + r_done_p_o : out std_logic; + w_done_p_o : out std_logic; + + -- I2C bus operation, set after address detection + -- '0' - write + -- '1' - read + op_o : out std_logic + ); + end component gc_i2c_slave; + + ------------------------------------------------------------------------------ + -- Glitch filter + ------------------------------------------------------------------------------ + component gc_glitch_filt is + generic + ( + -- Length of glitch filter: + -- g_len = 1 => data width should be > 1 clk_i cycle + -- g_len = 2 => data width should be > 2 clk_i cycle + -- etc. + g_len : natural := 4 + ); + port + ( + clk_i : in std_logic; + rst_n_i : in std_logic; + + -- Data input + dat_i : in std_logic; + + -- Data output + -- latency: g_len+1 clk_i cycles + dat_o : out std_logic + ); + end component gc_glitch_filt; + + ------------------------------------------------------------------------------ + -- Dynamic glitch filter + ------------------------------------------------------------------------------ + component gc_dyn_glitch_filt is + generic + ( + -- Number of bit of the glitch filter length input + g_len_width : natural := 8 + ); + port + ( + clk_i : in std_logic; + rst_n_i : in std_logic; + + -- Glitch filter length + len_i : in std_logic_vector(g_len_width-1 downto 0); + + -- Data input + dat_i : in std_logic; + + -- Data output + -- latency: g_len+1 clk_i cycles + dat_o : out std_logic + ); + end component gc_dyn_glitch_filt; + + ------------------------------------------------------------------------------ + -- FSM Watchdog Timer + ------------------------------------------------------------------------------ + component gc_fsm_watchdog is + generic + ( + -- Maximum value of watchdog timer in clk_i cycles + g_wdt_max : positive := 65535 + ); + port + ( + -- Clock and active-low reset line + clk_i : in std_logic; + rst_n_i : in std_logic; + + -- Active-high watchdog timer reset line, synchronous to clk_i + wdt_rst_i : in std_logic; + + -- Active-high reset output, synchronous to clk_i + fsm_rst_o : out std_logic + ); + end component gc_fsm_watchdog; + + ------------------------------------------------------------------------------ + -- Bicolor LED controller + ------------------------------------------------------------------------------ + constant c_led_red : std_logic_vector(1 downto 0) := "10"; + constant c_led_green : std_logic_vector(1 downto 0) := "01"; + constant c_led_red_green : std_logic_vector(1 downto 0) := "11"; + constant c_led_off : std_logic_vector(1 downto 0) := "00"; + + component gc_bicolor_led_ctrl + generic( + g_nb_column : natural := 4; + g_nb_line : natural := 2; + g_clk_freq : natural := 125000000; -- in Hz + g_refresh_rate : natural := 250 -- in Hz + ); + port + ( + rst_n_i : in std_logic; + clk_i : in std_logic; + led_intensity_i : in std_logic_vector(6 downto 0); + led_state_i : in std_logic_vector((g_nb_line * g_nb_column * 2) - 1 downto 0); + column_o : out std_logic_vector(g_nb_column - 1 downto 0); + line_o : out std_logic_vector(g_nb_line - 1 downto 0); + line_oen_o : out std_logic_vector(g_nb_line - 1 downto 0) + ); + end component; + + component gc_sync_register is + generic ( + g_width : integer); + port ( + clk_i : in std_logic; + rst_n_a_i : in std_logic; + d_i : in std_logic_vector(g_width-1 downto 0); + q_o : out std_logic_vector(g_width-1 downto 0)); + end component gc_sync_register; + + component gc_async_signals_input_stage is + generic ( + g_signal_num : integer; + g_extended_pulse_width : integer; + g_dglitch_filter_len : integer); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + signals_a_i : in std_logic_vector(g_signal_num-1 downto 0); + config_active_i : in std_logic_vector(g_signal_num-1 downto 0); + signals_o : out std_logic_vector(g_signal_num-1 downto 0); + signals_p1_o : out std_logic_vector(g_signal_num-1 downto 0); + signals_pN_o : out std_logic_vector(g_signal_num-1 downto 0)); + end component; + + --============================================================================ + -- Procedures and functions + --============================================================================ + procedure f_rr_arbitrate ( + signal req : in std_logic_vector; + signal pre_grant : in std_logic_vector; + signal grant : out std_logic_vector); + function f_onehot_decode(x : std_logic_vector; size : integer) return std_logic_vector; + + function f_big_ripple(a, b : std_logic_vector; c : std_logic) return std_logic_vector; + function f_gray_encode(x : std_logic_vector) return std_logic_vector; + function f_gray_decode(x : std_logic_vector; step : natural) return std_logic_vector; + function log2_ceil(N : natural) return positive; + + function f_bool2int (b : boolean) return natural; + function f_int2bool (n : natural) return boolean; + +end package; + +package body gencores_pkg is + + ------------------------------------------------------------------------------ + -- Simple round-robin arbiter: + -- req = requests (1 = pending request), + -- pre_grant = previous grant vector (1 cycle delay) + -- grant = new grant vector + ------------------------------------------------------------------------------ + procedure f_rr_arbitrate ( + signal req : in std_logic_vector; + signal pre_grant : in std_logic_vector; + signal grant : out std_logic_vector)is + + variable reqs : std_logic_vector(req'length - 1 downto 0); + variable gnts : std_logic_vector(req'length - 1 downto 0); + variable gnt : std_logic_vector(req'length - 1 downto 0); + variable gntM : std_logic_vector(req'length - 1 downto 0); + variable zeros : std_logic_vector(req'length - 1 downto 0); + + begin + zeros := (others => '0'); + + -- bit twiddling magic : + gnt := req and std_logic_vector(unsigned(not req) + 1); + reqs := req and not (std_logic_vector(unsigned(pre_grant) - 1) or pre_grant); + gnts := reqs and std_logic_vector(unsigned(not reqs)+1); + + if(reqs = zeros) then + gntM := gnt; + else + gntM := gnts; + end if; + + if((req and pre_grant) = zeros) then + grant <= gntM; + else + grant <= pre_grant; + end if; + + end f_rr_arbitrate; + + function f_onehot_decode(x : std_logic_vector; size : integer) return std_logic_vector is + begin + for j in 0 to x'left loop + if x(j) /= '0' then + return std_logic_vector(to_unsigned(j, size)); + end if; + end loop; -- i + return std_logic_vector(to_unsigned(0, size)); + end f_onehot_decode; + + + + ------------------------------------------------------------------------------ + -- Carry ripple + ------------------------------------------------------------------------------ + function f_big_ripple(a, b : std_logic_vector; c : std_logic) return std_logic_vector is + constant len : natural := a'length; + variable aw, bw, rw : std_logic_vector(len+1 downto 0); + variable x : std_logic_vector(len downto 0); + begin + aw := "0" & a & c; + bw := "0" & b & c; + rw := std_logic_vector(unsigned(aw) + unsigned(bw)); + x := rw(len+1 downto 1); + return x; + end f_big_ripple; + + + ------------------------------------------------------------------------------ + -- Gray encoder + ------------------------------------------------------------------------------ + function f_gray_encode(x : std_logic_vector) return std_logic_vector is + variable o : std_logic_vector(x'length downto 0); + begin + o := (x & '0') xor ('0' & x); + return o(x'length downto 1); + end f_gray_encode; + + ------------------------------------------------------------------------------ + -- Gray decoder + -- call with step=1 + ------------------------------------------------------------------------------ + function f_gray_decode(x : std_logic_vector; step : natural) return std_logic_vector is + constant len : natural := x'length; + alias y : std_logic_vector(len-1 downto 0) is x; + variable z : std_logic_vector(len-1 downto 0) := (others => '0'); + begin + if step >= len then + return y; + else + z(len-step-1 downto 0) := y(len-1 downto step); + return f_gray_decode(y xor z, step+step); + end if; + end f_gray_decode; + + ------------------------------------------------------------------------------ + -- Returns log of 2 of a natural number + ------------------------------------------------------------------------------ + function log2_ceil(N : natural) return positive is + begin + if N <= 2 then + return 1; + elsif N mod 2 = 0 then + return 1 + log2_ceil(N/2); + else + return 1 + log2_ceil((N+1)/2); + end if; + end; + + ------------------------------------------------------------------------------ + -- Converts a boolean to natural integer (false -> 0, true -> 1) + ------------------------------------------------------------------------------ + function f_bool2int (b : boolean) return natural is + begin + if b then + return 1; + else + return 0; + end if; + end; + + ------------------------------------------------------------------------------ + -- Converts a natural integer to boolean (0 -> false, any positive -> true) + ------------------------------------------------------------------------------ + function f_int2bool (n : natural) return boolean is + begin + if n = 0 then + return false; + else + return true; + end if; + end; + +end gencores_pkg; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/generic_shiftreg_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/generic_shiftreg_fifo.vhd new file mode 100644 index 000000000..9158a4fdb --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/generic_shiftreg_fifo.vhd @@ -0,0 +1,168 @@ +---------------------------------------------------------------------------- +---- ---- +---- ---- +---- This file is part of the srl_fifo project ---- +---- http://www.opencores.org/cores/srl_fifo ---- +---- ---- +---- Description ---- +---- Implementation of srl_fifo IP core according to ---- +---- srl_fifo IP core specification document. ---- +---- ---- +---- To Do: ---- +---- NA ---- +---- ---- +---- Author(s): ---- +---- Andrew Mulcock, amulcock@opencores.org ---- +---- ---- +---- Modified for WR Project by Tomasz Wlostowski ---- +---------------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2008 Authors and OPENCORES.ORG ---- +---- ---- +---- This source file may be used and distributed without ---- +---- restriction provided that this copyright statement is not ---- +---- removed from the file and that any derivative work contains ---- +---- the original copyright notice and the associated disclaimer. ---- +---- ---- +---- This source file is free software; you can redistribute it ---- +---- and/or modify it under the terms of the GNU Lesser General ---- +---- Public License as published by the Free Software Foundation; ---- +---- either version 2.1 of the License, or (at your option) any ---- +---- later version. ---- +---- ---- +---- This source is distributed in the hope that it will be ---- +---- useful, but WITHOUT ANY WARRANTY; without even the implied ---- +---- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ---- +---- PURPOSE. See the GNU Lesser General Public License for more ---- +---- details. ---- +---- ---- +---- You should have received a copy of the GNU Lesser General ---- +---- Public License along with this source; if not, download it ---- +---- from http://www.opencores.org/lgpl.shtml ---- +---- ---- +---------------------------------------------------------------------------- + + +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use ieee.NUMERIC_STD.all; + +use work.genram_pkg.all; + +entity generic_shiftreg_fifo is + generic ( + g_data_width : integer := 128; + g_size : integer := 32 + ); + port ( + rst_n_i : in std_logic := '1'; + clk_i : in std_logic; + + d_i : in std_logic_vector(g_data_width-1 downto 0); + we_i : in std_logic; + q_o : out std_logic_vector(g_data_width-1 downto 0); + rd_i : in std_logic; + + full_o : out std_logic; + almost_full_o : out std_logic; + q_valid_o : out std_logic + ); + +end generic_shiftreg_fifo; + +architecture rtl of generic_shiftreg_fifo is + + component gc_shiftreg + generic ( + g_size : integer); + port ( + clk_i : in std_logic; + en_i : in std_logic; + d_i : in std_logic; + q_o : out std_logic; + a_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0)); + end component; + + signal pointer : integer range 0 to g_size-1 := 0; + + signal srl_addr : std_logic_vector(f_log2_size(g_size)-1 downto 0) := (others => '0'); + signal pointer_zero : std_logic; + signal pointer_full : std_logic; + signal pointer_almost_full : std_logic; + signal empty : std_logic := '1'; + signal valid_count : std_logic; + signal do_write : std_logic; +begin + +-- Valid write, high when valid to write data to the store. + + do_write <= '1' when (rd_i = '1' and we_i = '1') + or (we_i = '1' and pointer_full = '0') else '0'; + + + gen_sregs : for i in 0 to g_data_width-1 generate + U_SRLx : gc_shiftreg + generic map ( + g_size => g_size) + port map ( + clk_i => clk_i, + en_i => do_write, + d_i => d_i(i), + q_o => q_o(i), + a_i => srl_addr); + end generate gen_sregs; + + srl_addr <= std_logic_vector(to_unsigned(pointer, srl_addr'length)); + + p_empty_logic : process(clk_i) + begin + if rising_edge(clk_i) then + if rst_n_i = '0' then + empty <= '1'; + elsif empty = '1' and we_i = '1' then + empty <= '0'; + elsif pointer_zero = '1' and rd_i = '1' and we_i = '0' then + empty <= '1'; + end if; + end if; + end process; + +-- W R Action +-- 0 0 pointer <= pointer +-- 0 1 pointer <= pointer - 1 Read, but no write, so less data in counter +-- 1 0 pointer <= pointer + 1 Write, but no read, so more data in fifo +-- 1 1 pointer <= pointer Read and write, so same number of words in fifo +-- + + valid_count <= '1' when ( + (we_i = '1' and rd_i = '0' and pointer_full = '0' and empty = '0') + or + (we_i = '0' and rd_i = '1' and pointer_zero = '0') + ) else '0'; + + p_gen_address : process(clk_i) + begin + if rising_edge(clk_i) then + if rst_n_i = '0' then + pointer <= 0; + elsif valid_count = '1' then + if we_i = '1' then + pointer <= pointer + 1; + else + pointer <= pointer - 1; + end if; + end if; + end if; + end process; + + -- Detect when pointer is zero and maximum + pointer_zero <= '1' when pointer = 0 else '0'; + pointer_full <= '1' when pointer = g_size - 1 else '0'; + pointer_almost_full <= '1' when pointer_full = '1' or pointer = g_size -3 or pointer = g_size - 2 else '0'; + + + -- assign internal signals to outputs + full_o <= pointer_full; + almost_full_o <= pointer_almost_full; + q_valid_o <= not empty; +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/inferred_async_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/inferred_async_fifo.vhd new file mode 100644 index 000000000..bf24ea561 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/inferred_async_fifo.vhd @@ -0,0 +1,326 @@ +------------------------------------------------------------------------------- +-- Title : Parametrizable asynchronous FIFO (Generic version) +-- Project : Generics RAMs and FIFOs collection +------------------------------------------------------------------------------- +-- File : generic_async_fifo.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2011-01-25 +-- Last update: 2014-07-31 +-- Platform : +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Dual-clock asynchronous FIFO. +-- - configurable data width and size +-- - configurable full/empty/almost full/almost empty/word count signals +------------------------------------------------------------------------------- +-- Copyright (c) 2011 CERN +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2011-01-25 1.0 twlostow Created +------------------------------------------------------------------------------- + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.genram_pkg.all; +use work.gencores_pkg.all; + +entity inferred_async_fifo is + + generic ( + g_data_width : natural; + g_size : natural; + g_show_ahead : boolean := false; + + -- Read-side flag selection + g_with_rd_empty : boolean := true; -- with empty flag + g_with_rd_full : boolean := false; -- with full flag + g_with_rd_almost_empty : boolean := false; + g_with_rd_almost_full : boolean := false; + g_with_rd_count : boolean := false; -- with words counter + + g_with_wr_empty : boolean := false; + g_with_wr_full : boolean := true; + g_with_wr_almost_empty : boolean := false; + g_with_wr_almost_full : boolean := false; + g_with_wr_count : boolean := false; + + g_almost_empty_threshold : integer; -- threshold for almost empty flag + g_almost_full_threshold : integer -- threshold for almost full flag + ); + + port ( + rst_n_i : in std_logic := '1'; + + + -- write port + clk_wr_i : in std_logic; + d_i : in std_logic_vector(g_data_width-1 downto 0); + we_i : in std_logic; + + wr_empty_o : out std_logic; + wr_full_o : out std_logic; + wr_almost_empty_o : out std_logic; -- TODO: assign + wr_almost_full_o : out std_logic; + wr_count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0); + + -- read port + clk_rd_i : in std_logic; + q_o : out std_logic_vector(g_data_width-1 downto 0); + rd_i : in std_logic; + + rd_empty_o : out std_logic; + rd_full_o : out std_logic; + rd_almost_empty_o : out std_logic; + rd_almost_full_o : out std_logic; -- TODO: assign + rd_count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0) + ); + +end inferred_async_fifo; + + +architecture syn of inferred_async_fifo is + + function f_bin2gray(bin : std_logic_vector) return std_logic_vector is + begin + return bin(bin'left) & (bin(bin'left-1 downto 0) xor bin(bin'left downto 1)); + end f_bin2gray; + + function f_gray2bin(gray : std_logic_vector) return std_logic_vector is + variable bin : std_logic_vector(gray'left downto 0); + begin + -- gray to binary + for i in 0 to gray'left loop + bin(i) := '0'; + for j in i to gray'left loop + bin(i) := bin(i) xor gray(j); + end loop; -- j + end loop; -- i + return bin; + end f_gray2bin; + + constant c_counter_bits : integer := f_log2_size(g_size) + 1; + subtype t_counter is std_logic_vector(c_counter_bits-1 downto 0); + + type t_counter_block is record + bin, bin_next, gray, gray_next : t_counter; + bin_x, gray_x, gray_xm : t_counter; + end record; + + type t_mem_type is array (0 to g_size-1) of std_logic_vector(g_data_width-1 downto 0); + signal mem : t_mem_type; + + signal rcb, wcb : t_counter_block; + + + signal full_int, empty_int : std_logic; + signal almost_full_int, almost_empty_int : std_logic; + signal going_full : std_logic; + + signal wr_count, rd_count : t_counter; + signal rd_int, we_int : std_logic; + + signal wr_empty_xm, wr_empty_x : std_logic; + signal rd_full_xm, rd_full_x : std_logic; + + signal almost_full_x, almost_full_xm : std_logic; + signal almost_empty_x, almost_empty_xm : std_logic; + +begin -- syn + + rd_int <= rd_i and not empty_int; + we_int <= we_i and not full_int; + + p_mem_write : process(clk_wr_i) + begin + if rising_edge(clk_wr_i) then + if(we_int = '1') then + mem(to_integer(unsigned(wcb.bin(wcb.bin'left-1 downto 0)))) <= d_i; + end if; + end if; + end process; + + p_mem_read : process(clk_rd_i) + begin + if rising_edge(clk_rd_i) then + if(rd_int = '1') then + q_o <= mem(to_integer(unsigned(rcb.bin(rcb.bin'left-1 downto 0)))); + end if; + end if; + end process; + + wcb.bin_next <= std_logic_vector(unsigned(wcb.bin) + 1); + wcb.gray_next <= f_bin2gray(wcb.bin_next); + + p_write_ptr : process(clk_wr_i, rst_n_i) + begin + if rst_n_i = '0' then + wcb.bin <= (others => '0'); + wcb.gray <= (others => '0'); + elsif rising_edge(clk_wr_i) then + if(we_int = '1') then + wcb.bin <= wcb.bin_next; + wcb.gray <= wcb.gray_next; + end if; + end if; + end process; + + rcb.bin_next <= std_logic_vector(unsigned(rcb.bin) + 1); + rcb.gray_next <= f_bin2gray(rcb.bin_next); + + p_read_ptr : process(clk_rd_i, rst_n_i) + begin + if rst_n_i = '0' then + rcb.bin <= (others => '0'); + rcb.gray <= (others => '0'); + elsif rising_edge(clk_rd_i) then + if(rd_int = '1') then + rcb.bin <= rcb.bin_next; + rcb.gray <= rcb.gray_next; + end if; + end if; + end process; + + U_Sync1: gc_sync_register + generic map ( + g_width => c_counter_bits) + port map ( + clk_i => clk_wr_i, + rst_n_a_i => rst_n_i, + d_i => rcb.gray, + q_o => rcb.gray_x); + + U_Sync2: gc_sync_register + generic map ( + g_width => c_counter_bits) + port map ( + clk_i => clk_rd_i, + rst_n_a_i => rst_n_i, + d_i => wcb.gray, + q_o => wcb.gray_x); + + wcb.bin_x <= f_gray2bin(wcb.gray_x); + rcb.bin_x <= f_gray2bin(rcb.gray_x); + + p_gen_empty : process(clk_rd_i, rst_n_i) + begin + if rst_n_i = '0' then + empty_int <= '1'; + elsif rising_edge (clk_rd_i) then + if(rcb.gray = wcb.gray_x or (rd_int = '1' and (wcb.gray_x = rcb.gray_next))) then + empty_int <= '1'; + else + empty_int <= '0'; + end if; + end if; + end process; + + U_Sync_Empty: gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_wr_i, + rst_n_i => rst_n_i, + data_i => empty_int, + synced_o => wr_empty_x); + + U_Sync_Full: gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_rd_i, + rst_n_i => rst_n_i, + data_i => full_int, + synced_o => rd_full_x); + + + + rd_empty_o <= empty_int; + wr_empty_o <= wr_empty_x; + + p_gen_going_full : process(we_int, wcb, rcb) + begin + if ((wcb.bin (wcb.bin'left-1 downto 0) = rcb.bin_x(rcb.bin_x'left-1 downto 0)) + and (wcb.bin(wcb.bin'left) /= rcb.bin_x(wcb.bin_x'left))) then + going_full <= '1'; + elsif (we_int = '1' + and (wcb.bin_next(wcb.bin'left-1 downto 0) = rcb.bin_x(rcb.bin_x'left-1 downto 0)) + and (wcb.bin_next(wcb.bin'left) /= rcb.bin_x(rcb.bin_x'left))) then + going_full <= '1'; + else + going_full <= '0'; + end if; + end process; + + p_register_full : process(clk_wr_i, rst_n_i) + begin + if rst_n_i = '0' then + full_int <= '0'; + elsif rising_edge (clk_wr_i) then + full_int <= going_full; + end if; + end process; + + wr_full_o <= full_int; + rd_full_o <= rd_full_x; + + p_reg_almost_full : process(clk_wr_i, rst_n_i) + begin + if rst_n_i = '0' then + almost_full_int <= '0'; + elsif rising_edge(clk_wr_i) then + wr_count <= std_logic_vector(unsigned(wcb.bin) - unsigned(rcb.bin_x)); + if (unsigned(wr_count) >= g_almost_full_threshold) then + almost_full_int <= '1'; + else + almost_full_int <= '0'; + end if; + end if; + end process; + + U_Sync_AlmostFull: gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_rd_i, + rst_n_i => rst_n_i, + data_i => almost_full_int, + synced_o => almost_full_x); + + wr_almost_full_o <= almost_full_int; + rd_almost_full_o <= almost_full_x; + + p_reg_almost_empty : process(clk_rd_i, rst_n_i) + begin + if rst_n_i = '0' then + almost_empty_int <= '1'; + elsif rising_edge(clk_rd_i) then + rd_count <= std_logic_vector(unsigned(wcb.bin_x) - unsigned(rcb.bin)); + if (unsigned(rd_count) <= g_almost_empty_threshold) then + almost_empty_int <= '1'; + else + almost_empty_int <= '0'; + end if; + end if; + end process; + + U_Sync_AlmostEmpty: gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_wr_i, + rst_n_i => rst_n_i, + data_i => almost_empty_int, + synced_o => almost_empty_x); + + rd_almost_empty_o <= almost_empty_int; + wr_almost_empty_o <= almost_empty_x; + + wr_count_o <= std_logic_vector(wr_count(f_log2_size(g_size)-1 downto 0)); + rd_count_o <= std_logic_vector(rd_count(f_log2_size(g_size)-1 downto 0)); + +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/inferred_sync_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/inferred_sync_fifo.vhd new file mode 100644 index 000000000..c70a83003 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/inferred_sync_fifo.vhd @@ -0,0 +1,261 @@ +------------------------------------------------------------------------------- +-- Title : Parametrizable synchronous FIFO (Generic version) +-- Project : Generics RAMs and FIFOs collection +------------------------------------------------------------------------------- +-- File : generic_sync_fifo_std.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2011-01-25 +-- Last update: 2017-02-03 +-- Platform : +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Single-clock FIFO. +-- - configurable data width and size +-- - configurable full/empty/almost full/almost empty/word count signals +------------------------------------------------------------------------------- +-- Copyright (c) 2011-2017 CERN +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2011-01-25 1.0 twlostow Created +------------------------------------------------------------------------------- + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.genram_pkg.all; + +entity inferred_sync_fifo is + + generic ( + g_data_width : natural; + g_size : natural; + g_show_ahead : boolean := false; + + -- Read-side flag selection + g_with_empty : boolean := true; -- with empty flag + g_with_full : boolean := true; -- with full flag + g_with_almost_empty : boolean := false; + g_with_almost_full : boolean := false; + g_with_count : boolean := false; -- with words counter + + g_almost_empty_threshold : integer := 0; -- threshold for almost empty flag + g_almost_full_threshold : integer := 0; -- threshold for almost full flag + + g_register_flag_outputs : boolean := true + ); + + port ( + rst_n_i : in std_logic := '1'; + + clk_i : in std_logic; + d_i : in std_logic_vector(g_data_width-1 downto 0); + we_i : in std_logic; + + q_o : out std_logic_vector(g_data_width-1 downto 0); + rd_i : in std_logic; + + empty_o : out std_logic; + full_o : out std_logic; + almost_empty_o : out std_logic; + almost_full_o : out std_logic; + count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0) + ); + +end inferred_sync_fifo; + +architecture syn of inferred_sync_fifo is + + constant c_pointer_width : integer := f_log2_size(g_size); + signal rd_ptr, wr_ptr, wr_ptr_d0, rd_ptr_muxed : unsigned(c_pointer_width-1 downto 0); + signal usedw : unsigned(c_pointer_width downto 0); + signal full, empty : std_logic; + signal q_int : std_logic_vector(g_data_width-1 downto 0); + signal we_int, rd_int : std_logic; + signal guard_bit : std_logic; + + signal q_comb : std_logic_vector(g_data_width-1 downto 0); + +begin -- syn + + we_int <= we_i and not full; + rd_int <= rd_i and not empty; + + U_FIFO_Ram : generic_dpram + generic map ( + g_data_width => g_data_width, + g_size => g_size, + g_with_byte_enable => false, + g_addr_conflict_resolution => "dont_care", + g_dual_clock => false) + port map ( + rst_n_i => rst_n_i, + clka_i => clk_i, + wea_i => we_int, + aa_i => std_logic_vector(wr_ptr(c_pointer_width-1 downto 0)), + da_i => d_i, + clkb_i => '0', + ab_i => std_logic_vector(rd_ptr_muxed(c_pointer_width-1 downto 0)), + qb_o => q_comb); + + process(rd_ptr, rd_i, rd_int) + begin + if(rd_int = '1' and g_show_ahead) then + rd_ptr_muxed <= rd_ptr + 1; + elsif((rd_int = '1' and not g_show_ahead) or (g_show_ahead)) then + rd_ptr_muxed <= rd_ptr; + else + rd_ptr_muxed <= rd_ptr - 1; + end if; + end process; + + q_o <= q_comb; + + p_pointers : process(clk_i) + begin + if rising_edge(clk_i) then + if rst_n_i = '0' then + wr_ptr <= (others => '0'); + rd_ptr <= (others => '0'); + else + if(we_int = '1') then + wr_ptr <= wr_ptr + 1; + end if; + + if(rd_int = '1') then + rd_ptr <= rd_ptr + 1; + end if; + end if; + end if; + end process; + + gen_comb_flags_showahead : if(g_show_ahead = true) generate + + process(clk_i) + begin + if rising_edge(clk_i) then + if ((rd_ptr + 1 = wr_ptr and rd_int = '1') or (rd_ptr = wr_ptr)) then + empty <= '1'; + else + empty <= '0'; + end if; + end if; + end process; + full <= '1' when (wr_ptr + 1 = rd_ptr) else '0'; + + end generate gen_comb_flags_showahead; + + gen_comb_flags : if(g_register_flag_outputs = false and g_show_ahead = false) generate + empty <= '1' when (wr_ptr = rd_ptr and guard_bit = '0') else '0'; + full <= '1' when (wr_ptr = rd_ptr and guard_bit = '1') else '0'; + + p_guard_bit : process(clk_i) + begin + if rising_edge(clk_i) then + if rst_n_i = '0' then + guard_bit <= '0'; + elsif(wr_ptr + 1 = rd_ptr and we_int = '1') then + guard_bit <= '1'; + elsif(rd_i = '1') then + guard_bit <= '0'; + end if; + end if; + end process; + end generate gen_comb_flags; + + gen_registered_flags : if(g_register_flag_outputs = true and g_show_ahead = false) generate + p_reg_flags : process(clk_i) + begin + if rising_edge(clk_i) then + + if(rst_n_i = '0') then + full <= '0'; + empty <= '1'; + else + if(usedw = 1 and rd_int = '1' and we_int = '0') then + empty <= '1'; + elsif(we_int = '1' and rd_int = '0') then + empty <= '0'; + end if; + + if(usedw = g_size-2 and we_int = '1' and rd_int = '0') then + full <= '1'; + elsif(usedw = g_size-1 and rd_int = '1' and we_int = '0') then + full <= '0'; + end if; + end if; + + end if; + end process; + end generate gen_registered_flags; + + + gen_with_word_counter : if(g_with_count or g_with_almost_empty or g_with_almost_full or g_register_flag_outputs) generate + p_usedw_counter : process(clk_i) + begin + if rising_edge(clk_i) then + if rst_n_i = '0' then + usedw <= (others => '0'); + else + if(we_int = '1' and rd_int = '0') then + usedw <= usedw + 1; + elsif(we_int = '0' and rd_int = '1') then + usedw <= usedw - 1; + end if; + end if; + end if; + end process; + + count_o <= std_logic_vector(usedw(c_pointer_width-1 downto 0)); + + end generate gen_with_word_counter; + + gen_with_almost_full : if(g_with_almost_full) generate + process(clk_i) + begin + if rising_edge(clk_i) then + if rst_n_i = '0' then + almost_full_o <= '0'; + else + if(usedw = g_almost_full_threshold-1) and (we_int = '1' and rd_int = '0') then + almost_full_o <= '1'; + elsif (usedw = g_almost_full_threshold) and (rd_int = '1' and we_int = '0') then + almost_full_o <= '0'; + end if; + end if; + end if; + end process; + end generate gen_with_almost_full; + + gen_without_almost_full : if(not g_with_almost_full) generate + almost_full_o <= '0'; + end generate gen_without_almost_full; + + gen_with_almost_empty : if(g_with_almost_empty) generate + process(clk_i) + begin + if rising_edge(clk_i) then + if rst_n_i = '0' then + almost_empty_o <= '1'; + else + if(usedw = g_almost_empty_threshold+1) and (rd_int = '1' and we_int = '0') then + almost_empty_o <= '1'; + elsif (usedw = g_almost_empty_threshold) and (we_int = '1' and rd_int = '0') then + almost_empty_o <= '0'; + end if; + end if; + end if; + end process; + end generate gen_with_almost_empty; + + gen_without_almost_empty : if(not g_with_almost_empty) generate + almost_empty_o <= '0'; + end generate gen_without_almost_empty; + + full_o <= full; + empty_o <= empty; + +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/generic/generic_async_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/generic/generic_async_fifo.vhd new file mode 100644 index 000000000..66fce2fe0 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/generic/generic_async_fifo.vhd @@ -0,0 +1,162 @@ +------------------------------------------------------------------------------- +-- Title : Parametrizable asynchronous FIFO (Generic version) +-- Project : Generics RAMs and FIFOs collection +------------------------------------------------------------------------------- +-- File : generic_async_fifo.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2011-01-25 +-- Last update: 2012-07-03 +-- Platform : +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Dual-clock asynchronous FIFO. +-- - configurable data width and size +-- - configurable full/empty/almost full/almost empty/word count signals +------------------------------------------------------------------------------- +-- Copyright (c) 2011 CERN +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2011-01-25 1.0 twlostow Created +------------------------------------------------------------------------------- + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.genram_pkg.all; + +entity generic_async_fifo is + + generic ( + g_data_width : natural; + g_size : natural; + g_show_ahead : boolean := false; + + -- Read-side flag selection + g_with_rd_empty : boolean := true; -- with empty flag + g_with_rd_full : boolean := false; -- with full flag + g_with_rd_almost_empty : boolean := false; + g_with_rd_almost_full : boolean := false; + g_with_rd_count : boolean := false; -- with words counter + + g_with_wr_empty : boolean := false; + g_with_wr_full : boolean := true; + g_with_wr_almost_empty : boolean := false; + g_with_wr_almost_full : boolean := false; + g_with_wr_count : boolean := false; + + g_almost_empty_threshold : integer; -- threshold for almost empty flag + g_almost_full_threshold : integer -- threshold for almost full flag + ); + + port ( + rst_n_i : in std_logic := '1'; + + + -- write port + clk_wr_i : in std_logic; + d_i : in std_logic_vector(g_data_width-1 downto 0); + we_i : in std_logic; + + wr_empty_o : out std_logic; + wr_full_o : out std_logic; + wr_almost_empty_o : out std_logic; + wr_almost_full_o : out std_logic; + wr_count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0); + + -- read port + clk_rd_i : in std_logic; + q_o : out std_logic_vector(g_data_width-1 downto 0); + rd_i : in std_logic; + + rd_empty_o : out std_logic; + rd_full_o : out std_logic; + rd_almost_empty_o : out std_logic; + rd_almost_full_o : out std_logic; + rd_count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0) + ); + +end generic_async_fifo; + + +architecture syn of generic_async_fifo is + + component inferred_async_fifo + generic ( + g_data_width : natural; + g_size : natural; + g_show_ahead : boolean; + g_with_rd_empty : boolean; + g_with_rd_full : boolean; + g_with_rd_almost_empty : boolean; + g_with_rd_almost_full : boolean; + g_with_rd_count : boolean; + g_with_wr_empty : boolean; + g_with_wr_full : boolean; + g_with_wr_almost_empty : boolean; + g_with_wr_almost_full : boolean; + g_with_wr_count : boolean; + g_almost_empty_threshold : integer; + g_almost_full_threshold : integer); + port ( + rst_n_i : in std_logic := '1'; + clk_wr_i : in std_logic; + d_i : in std_logic_vector(g_data_width-1 downto 0); + we_i : in std_logic; + wr_empty_o : out std_logic; + wr_full_o : out std_logic; + wr_almost_empty_o : out std_logic; + wr_almost_full_o : out std_logic; + wr_count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0); + clk_rd_i : in std_logic; + q_o : out std_logic_vector(g_data_width-1 downto 0); + rd_i : in std_logic; + rd_empty_o : out std_logic; + rd_full_o : out std_logic; + rd_almost_empty_o : out std_logic; + rd_almost_full_o : out std_logic; + rd_count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0)); + end component; + + +begin -- syn + + U_Inferred_FIFO : inferred_async_fifo + generic map ( + g_data_width => g_data_width, + g_size => g_size, + g_show_ahead => g_show_ahead, + g_with_rd_empty => g_with_rd_empty, + g_with_rd_full => g_with_rd_full, + g_with_rd_almost_empty => g_with_rd_almost_empty, + g_with_rd_almost_full => g_with_rd_almost_full, + g_with_rd_count => g_with_rd_count, + g_with_wr_empty => g_with_wr_empty, + g_with_wr_full => g_with_wr_full, + g_with_wr_almost_empty => g_with_wr_almost_empty, + g_with_wr_almost_full => g_with_wr_almost_full, + g_with_wr_count => g_with_wr_count, + g_almost_empty_threshold => g_almost_empty_threshold, + g_almost_full_threshold => g_almost_full_threshold) + port map ( + rst_n_i => rst_n_i, + clk_wr_i => clk_wr_i, + d_i => d_i, + we_i => we_i, + wr_empty_o => wr_empty_o, + wr_full_o => wr_full_o, + wr_almost_empty_o => wr_almost_empty_o, + wr_almost_full_o => wr_almost_full_o, + wr_count_o => wr_count_o, + clk_rd_i => clk_rd_i, + q_o => q_o, + rd_i => rd_i, + rd_empty_o => rd_empty_o, + rd_full_o => rd_full_o, + rd_almost_empty_o => rd_almost_empty_o, + rd_almost_full_o => rd_almost_full_o, + rd_count_o => rd_count_o); +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/generic/generic_sync_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/generic/generic_sync_fifo.vhd new file mode 100644 index 000000000..fecd0882d --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/generic/generic_sync_fifo.vhd @@ -0,0 +1,130 @@ +------------------------------------------------------------------------------- +-- Title : Parametrizable synchronous FIFO (Xilinx version) +-- Project : Generics RAMs and FIFOs collection +------------------------------------------------------------------------------- +-- File : generic_sync_fifo.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2011-01-25 +-- Last update: 2012-07-03 +-- Platform : +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Single-clock FIFO. +-- - configurable data width and size +-- - "show ahead" mode +-- - configurable full/empty/almost full/almost empty/word count signals +------------------------------------------------------------------------------- +-- Copyright (c) 2011 CERN +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2011-01-25 1.0 twlostow Created +------------------------------------------------------------------------------- + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.genram_pkg.all; + +entity generic_sync_fifo is + + generic ( + g_data_width : natural; + g_size : natural; + g_show_ahead : boolean := false; + + -- Read-side flag selection + g_with_empty : boolean := true; -- with empty flag + g_with_full : boolean := true; -- with full flag + g_with_almost_empty : boolean := false; + g_with_almost_full : boolean := false; + g_with_count : boolean := false; -- with words counter + + g_almost_empty_threshold : integer; -- threshold for almost empty flag + g_almost_full_threshold : integer; -- threshold for almost full flag + g_register_flag_outputs : boolean := true + ); + + port ( + rst_n_i : in std_logic := '1'; + + clk_i : in std_logic; + d_i : in std_logic_vector(g_data_width-1 downto 0); + we_i : in std_logic; + + q_o : out std_logic_vector(g_data_width-1 downto 0); + rd_i : in std_logic; + + empty_o : out std_logic; + full_o : out std_logic; + almost_empty_o : out std_logic; + almost_full_o : out std_logic; + count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0) + ); + +end generic_sync_fifo; + +architecture syn of generic_sync_fifo is + + component inferred_sync_fifo + generic ( + g_data_width : natural; + g_size : natural; + g_show_ahead : boolean; + g_with_empty : boolean; + g_with_full : boolean; + g_with_almost_empty : boolean; + g_with_almost_full : boolean; + g_with_count : boolean; + g_almost_empty_threshold : integer; + g_almost_full_threshold : integer; + g_register_flag_outputs : boolean); + port ( + rst_n_i : in std_logic := '1'; + clk_i : in std_logic; + d_i : in std_logic_vector(g_data_width-1 downto 0); + we_i : in std_logic; + q_o : out std_logic_vector(g_data_width-1 downto 0); + rd_i : in std_logic; + empty_o : out std_logic; + full_o : out std_logic; + almost_empty_o : out std_logic; + almost_full_o : out std_logic; + count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0)); + end component; + +begin -- syn + + U_Inferred_FIFO : inferred_sync_fifo + generic map ( + g_data_width => g_data_width, + g_size => g_size, + g_show_ahead => g_show_ahead, + g_with_empty => g_with_empty, + g_with_full => g_with_full, + g_with_almost_empty => g_with_almost_empty, + g_with_almost_full => g_with_almost_full, + g_with_count => g_with_count, + g_almost_empty_threshold => g_almost_empty_threshold, + g_almost_full_threshold => g_almost_full_threshold, + g_register_flag_outputs => g_register_flag_outputs) + + port map ( + rst_n_i => rst_n_i, + clk_i => clk_i, + d_i => d_i, + we_i => we_i, + q_o => q_o, + rd_i => rd_i, + empty_o => empty_o, + full_o => full_o, + almost_empty_o => almost_empty_o, + almost_full_o => almost_full_o, + count_o => count_o); + + + +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/genram_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/genram_pkg.vhd new file mode 100644 index 000000000..c212bbf32 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/genram_pkg.vhd @@ -0,0 +1,262 @@ +------------------------------------------------------------------------------- +-- Title : Main package file +-- Project : Generics RAMs and FIFOs collection +------------------------------------------------------------------------------- +-- File : genram_pkg.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2011-01-25 +-- Last update: 2013-10-30 +-- Platform : +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2011 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2011-01-25 1.0 twlostow Created +------------------------------------------------------------------------------- + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +package genram_pkg is + + function f_log2_size (A : natural) return natural; + function f_gen_dummy_vec (val : std_logic; size : natural) return std_logic_vector; + function f_zeros (size : integer) return std_logic_vector; + function f_check_bounds(x : integer; minx : integer; maxx : integer) return integer; + + type t_generic_ram_init is array (integer range <>, integer range <>) of std_logic; + type t_ram8_type is array (integer range <>) of std_logic_vector(7 downto 0); + type t_ram16_type is array (integer range <>) of std_logic_vector(15 downto 0); + type t_ram32_type is array (integer range <>) of std_logic_vector(31 downto 0); + + -- Single-port synchronous RAM + component generic_spram + generic ( + g_data_width : natural; + g_size : natural; + g_with_byte_enable : boolean := false; + g_init_file : string := "none"; + g_addr_conflict_resolution : string := "dont_care") ; + port ( + rst_n_i : in std_logic; + clk_i : in std_logic; + bwe_i : in std_logic_vector((g_data_width+7)/8-1 downto 0):= f_gen_dummy_vec('1', (g_data_width+7)/8); + we_i : in std_logic; + a_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + d_i : in std_logic_vector(g_data_width-1 downto 0) := f_gen_dummy_vec('0', g_data_width); + q_o : out std_logic_vector(g_data_width-1 downto 0)); + end component; + + component generic_simple_dpram + generic ( + g_data_width : natural; + g_size : natural; + g_with_byte_enable : boolean := false; + g_addr_conflict_resolution : string := "dont_care"; + g_init_file : string := "none"; + g_dual_clock : boolean := true); + port ( + rst_n_i : in std_logic := '1'; + clka_i : in std_logic; + bwea_i : in std_logic_vector((g_data_width+7)/8 -1 downto 0) := f_gen_dummy_vec('1', (g_data_width+7)/8); + wea_i : in std_logic; + aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + da_i : in std_logic_vector(g_data_width -1 downto 0); + clkb_i : in std_logic; + ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + qb_o : out std_logic_vector(g_data_width -1 downto 0)); + end component; + + component generic_dpram + generic ( + g_data_width : natural; + g_size : natural; + g_with_byte_enable : boolean := false; + g_addr_conflict_resolution : string := "dont_care"; + g_init_file : string := "none"; + g_dual_clock : boolean := true); + port ( + rst_n_i : in std_logic := '1'; + clka_i : in std_logic; + bwea_i : in std_logic_vector((g_data_width+7)/8-1 downto 0) := f_gen_dummy_vec('1', (g_data_width+7)/8); + wea_i : in std_logic := '0'; + aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + da_i : in std_logic_vector(g_data_width-1 downto 0) := f_gen_dummy_vec('0', g_data_width); + qa_o : out std_logic_vector(g_data_width-1 downto 0); + clkb_i : in std_logic; + bweb_i : in std_logic_vector((g_data_width+7)/8-1 downto 0) := f_gen_dummy_vec('1', (g_data_width+7)/8); + web_i : in std_logic := '0'; + ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + db_i : in std_logic_vector(g_data_width-1 downto 0) := f_gen_dummy_vec('0', g_data_width); + qb_o : out std_logic_vector(g_data_width-1 downto 0)); + end component; + + component generic_dpram_mixed + generic ( + g_data_a_width : natural; + g_data_b_width : natural; + g_size : natural; + g_addr_conflict_resolution : string := "dont_care"; + g_init_file : string := "none"; + g_dual_clock : boolean := true); + port ( + rst_n_i : in std_logic := '1'; + clka_i : in std_logic; + bwea_i : in std_logic_vector((g_data_a_width+7)/8-1 downto 0) := f_gen_dummy_vec('1', (g_data_a_width+7)/8); + wea_i : in std_logic := '0'; + aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + da_i : in std_logic_vector(g_data_a_width-1 downto 0) := f_gen_dummy_vec('0', g_data_a_width); + qa_o : out std_logic_vector(g_data_a_width-1 downto 0); + clkb_i : in std_logic; + bweb_i : in std_logic_vector((g_data_b_width+7)/8-1 downto 0) := f_gen_dummy_vec('1', (g_data_b_width+7)/8); + web_i : in std_logic := '0'; + ab_i : in std_logic_vector(f_log2_size(g_data_a_width*g_size/g_data_b_width)-1 downto 0); + db_i : in std_logic_vector(g_data_b_width-1 downto 0) := f_gen_dummy_vec('0', g_data_b_width); + qb_o : out std_logic_vector(g_data_b_width-1 downto 0)); + end component; + + component generic_async_fifo + generic ( + g_data_width : natural; + g_size : natural; + g_show_ahead : boolean := false; + g_with_rd_empty : boolean := true; + g_with_rd_full : boolean := false; + g_with_rd_almost_empty : boolean := false; + g_with_rd_almost_full : boolean := false; + g_with_rd_count : boolean := false; + g_with_wr_empty : boolean := false; + g_with_wr_full : boolean := true; + g_with_wr_almost_empty : boolean := false; + g_with_wr_almost_full : boolean := false; + g_with_wr_count : boolean := false; + g_almost_empty_threshold : integer := 0; + g_almost_full_threshold : integer := 0); + port ( + rst_n_i : in std_logic := '1'; + clk_wr_i : in std_logic; + d_i : in std_logic_vector(g_data_width-1 downto 0); + we_i : in std_logic; + wr_empty_o : out std_logic; + wr_full_o : out std_logic; + wr_almost_empty_o : out std_logic; + wr_almost_full_o : out std_logic; + wr_count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0); + clk_rd_i : in std_logic; + q_o : out std_logic_vector(g_data_width-1 downto 0); + rd_i : in std_logic; + rd_empty_o : out std_logic; + rd_full_o : out std_logic; + rd_almost_empty_o : out std_logic; + rd_almost_full_o : out std_logic; + rd_count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0)); + end component; + + + component generic_sync_fifo + generic ( + g_data_width : natural; + g_size : natural; + g_show_ahead : boolean := false; + g_with_empty : boolean := true; + g_with_full : boolean := true; + g_with_almost_empty : boolean := false; + g_with_almost_full : boolean := false; + g_with_count : boolean := false; + g_almost_empty_threshold : integer := 0; + g_almost_full_threshold : integer := 0); + port ( + rst_n_i : in std_logic := '1'; + clk_i : in std_logic; + d_i : in std_logic_vector(g_data_width-1 downto 0); + we_i : in std_logic; + q_o : out std_logic_vector(g_data_width-1 downto 0); + rd_i : in std_logic; + empty_o : out std_logic; + full_o : out std_logic; + almost_empty_o : out std_logic; + almost_full_o : out std_logic; + count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0)); + end component; + + component generic_shiftreg_fifo + generic ( + g_data_width : integer; + g_size : integer); + port ( + rst_n_i : in std_logic := '1'; + clk_i : in std_logic; + d_i : in std_logic_vector(g_data_width-1 downto 0); + we_i : in std_logic; + q_o : out std_logic_vector(g_data_width-1 downto 0); + rd_i : in std_logic; + full_o : out std_logic; + almost_full_o : out std_logic; + q_valid_o : out std_logic + ); + end component; + +end genram_pkg; + +package body genram_pkg is + + function f_log2_size (A : natural) return natural is + begin + for I in 1 to 64 loop -- Works for up to 64 bits + if (2**I >= A) then + return(I); + end if; + end loop; + return(63); + end function f_log2_size; + + function f_gen_dummy_vec (val : std_logic; size : natural) return std_logic_vector is + variable tmp : std_logic_vector(size-1 downto 0); + begin + for i in 0 to size-1 loop + tmp(i) := val; + end loop; -- i + return tmp; + end f_gen_dummy_vec; + + function f_zeros(size : integer) + return std_logic_vector is + begin + return std_logic_vector(to_unsigned(0, size)); + end f_zeros; + + function f_check_bounds(x : integer; minx : integer; maxx : integer) return integer is + begin + if(x < minx) then + return minx; + elsif(x > maxx) then + return maxx; + else + return x; + end if; + end f_check_bounds; + +end genram_pkg; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/memory_loader_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/memory_loader_pkg.vhd new file mode 100644 index 000000000..5bb1da6d3 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/memory_loader_pkg.vhd @@ -0,0 +1,251 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library std; +use std.textio.all; + +library work; +use work.genram_pkg.all; + +package memory_loader_pkg is + + subtype t_meminit_array is t_generic_ram_init; + + impure function f_load_mem_from_file + (file_name : in string; + mem_size : in integer; + mem_width : in integer; + fail_if_notfound : boolean) + return t_meminit_array; + + impure function f_load_mem32_from_file + (file_name : in string; mem_size : in integer; fail_if_notfound : boolean) + return t_ram32_type; + + impure function f_load_mem16_from_file + (file_name : in string; mem_size : in integer; fail_if_notfound : boolean) + return t_ram16_type; + + impure function f_load_mem8_from_file + (file_name : in string; mem_size : in integer; fail_if_notfound : boolean) + return t_ram8_type; + + impure function f_load_mem32_from_file_split + (file_name : in string; mem_size : in integer; + fail_if_notfound : boolean; byte_idx : in integer) + return t_ram8_type; + +end memory_loader_pkg; + +package body memory_loader_pkg is + + impure function f_load_mem_from_file + (file_name : in string; + mem_size : in integer; + mem_width : in integer; + fail_if_notfound : boolean) + return t_meminit_array is + + FILE f_in : text; + variable l : line; + variable tmp_bv : bit_vector(mem_width-1 downto 0); + variable tmp_sv : std_logic_vector(mem_width-1 downto 0); + variable mem: t_meminit_array(0 to mem_size-1, mem_width-1 downto 0); + variable status : file_open_status; + begin + if(file_name = "" or file_name = "none") then + mem:= (others => (others => '0')); + return mem; + end if; + + file_open(status, f_in, file_name, read_mode); + + if(status /= open_ok) then + if(fail_if_notfound) then + report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity failure; + else + report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity warning; + end if; + end if; + + for I in 0 to mem_size-1 loop + readline (f_in, l); + -- read function gives us bit_vector + read (l, tmp_bv); + tmp_sv := to_stdlogicvector(tmp_bv); + for J in 0 to mem_width-1 loop + mem(i, j) := tmp_sv(j); + end loop; + end loop; + + file_close(f_in); + return mem; + end f_load_mem_from_file; + + ------------------------------------------------------------------- + -- RAM initialization for most common sizes to speed-up synthesis + ------------------------------------------------------------------- + + impure function f_load_mem32_from_file + (file_name : in string; + mem_size : in integer; + fail_if_notfound : boolean) + return t_ram32_type is + + FILE f_in : text; + variable l : line; + variable tmp_bv : bit_vector(31 downto 0); + variable mem: t_ram32_type(0 to mem_size-1); + variable status : file_open_status; + begin + if(file_name = "" or file_name = "none") then + mem:= (others => (others => '0')); + return mem; + end if; + + file_open(status, f_in, file_name, read_mode); + + if(status /= open_ok) then + if(fail_if_notfound) then + report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity failure; + else + report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity warning; + end if; + end if; + + for I in 0 to mem_size-1 loop + readline (f_in, l); + -- read function gives us bit_vector + read (l, tmp_bv); + mem(I) := to_stdlogicvector(tmp_bv); + end loop; + + file_close(f_in); + return mem; + end f_load_mem32_from_file; + + ------------------------------------------------------------------- + + impure function f_load_mem16_from_file + (file_name : in string; + mem_size : in integer; + fail_if_notfound : boolean) + return t_ram16_type is + + FILE f_in : text; + variable l : line; + variable tmp_bv : bit_vector(15 downto 0); + variable mem: t_ram16_type(0 to mem_size-1); + variable status : file_open_status; + begin + if(file_name = "" or file_name = "none") then + mem:= (others => (others => '0')); + return mem; + end if; + + file_open(status, f_in, file_name, read_mode); + + if(status /= open_ok) then + if(fail_if_notfound) then + report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity failure; + else + report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity warning; + end if; + end if; + + for I in 0 to mem_size-1 loop + readline (f_in, l); + -- read function gives us bit_vector + read (l, tmp_bv); + mem(I) := to_stdlogicvector(tmp_bv); + end loop; + + file_close(f_in); + return mem; + end f_load_mem16_from_file; + + ------------------------------------------------------------------- + + impure function f_load_mem8_from_file + (file_name : in string; + mem_size : in integer; + fail_if_notfound : boolean) + return t_ram8_type is + + FILE f_in : text; + variable l : line; + variable tmp_bv : bit_vector(7 downto 0); + variable mem: t_ram8_type(0 to mem_size-1); + variable status : file_open_status; + begin + if(file_name = "" or file_name = "none") then + mem:= (others => (others => '0')); + return mem; + end if; + + file_open(status, f_in, file_name, read_mode); + + if(status /= open_ok) then + if(fail_if_notfound) then + report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity failure; + else + report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity warning; + end if; + end if; + + for I in 0 to mem_size-1 loop + readline (f_in, l); + -- read function gives us bit_vector + read (l, tmp_bv); + mem(I) := to_stdlogicvector(tmp_bv); + end loop; + + file_close(f_in); + return mem; + end f_load_mem8_from_file; + + ------------------------------------------------------------------- + -- initialization for 32-bit RAM split into 4x 8-bit BRAM + ------------------------------------------------------------------- + + impure function f_load_mem32_from_file_split + (file_name : in string; + mem_size : in integer; + fail_if_notfound : boolean; + byte_idx : in integer) + return t_ram8_type is + + FILE f_in : text; + variable l : line; + variable tmp_bv : bit_vector(31 downto 0); + variable mem: t_ram8_type(0 to mem_size-1); + variable status : file_open_status; + begin + if(file_name = "" or file_name = "none") then + mem:= (others => (others => '0')); + return mem; + end if; + + file_open(status, f_in, file_name, read_mode); + + if(status /= open_ok) then + if(fail_if_notfound) then + report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity failure; + else + report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity warning; + end if; + end if; + + for I in 0 to mem_size-1 loop + readline (f_in, l); + -- read function gives us bit_vector + read (l, tmp_bv); + mem(I) := to_stdlogicvector( tmp_bv((byte_idx+1)*8-1 downto byte_idx*8) ); + end loop; + + file_close(f_in); + return mem; + end f_load_mem32_from_file_split; + +end memory_loader_pkg; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/gc_shiftreg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/gc_shiftreg.vhd new file mode 100644 index 000000000..87a4eee97 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/gc_shiftreg.vhd @@ -0,0 +1,68 @@ +library ieee; + +use ieee.STD_LOGIC_1164.all; +use ieee.NUMERIC_STD.all; + +use work.genram_pkg.all; + +entity gc_shiftreg is + + generic ( + g_size : integer); + + port ( + clk_i : in std_logic; + en_i : in std_logic; + d_i : in std_logic; + q_o : out std_logic; + a_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0)); + +end gc_shiftreg; + + +architecture wrapper of gc_shiftreg is + + component SRLC32E + port ( + Q : out std_ulogic; + A : in std_logic_vector (4 downto 0); + CE : in std_ulogic; + CLK : in std_ulogic; + D : in std_ulogic); + end component; + + signal a : std_logic_vector(4 downto 0); + signal sr : std_logic_vector(g_size-1 downto 0); + +begin -- wrapper + + assert (g_size <= 32) report "gc_shiftreg[xilinx]: forced SRL32 implementation can be done only for 32-bit or smaller shift registers" severity warning; + + a <= std_logic_vector(resize(unsigned(a_i), 5)); + + gen_srl32 : if(g_size <= 32) generate + U_SRLC32 : SRLC32E + port map ( + Q => q_o, + A => a, + CE => en_i, + CLK => clk_i, + D => d_i); + end generate gen_srl32; + + gen_inferred : if(g_size > 32) generate + + p_srl : process(clk_i) + begin + if rising_edge(clk_i) then + if en_i = '1' then + sr <= sr(sr'left - 1 downto 0) & d_i; + end if; + end if; + end process; + + q_o <= sr(TO_INTEGER(unsigned(a_i))); + end generate gen_inferred; + + +end wrapper; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram.vhd new file mode 100644 index 000000000..db5a42b04 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram.vhd @@ -0,0 +1,235 @@ +------------------------------------------------------------------------------- +-- Title : Parametrizable dual-port synchronous RAM (Xilinx version) +-- Project : Generics RAMs and FIFOs collection +------------------------------------------------------------------------------- +-- File : generic_dpram.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2011-01-25 +-- Last update: 2012-03-16 +-- Platform : +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: True dual-port synchronous RAM for Xilinx FPGAs with: +-- - configurable address and data bus width +-- - byte-addressing mode (data bus width restricted to multiple of 8 bits) +-- Todo: +-- - loading initial contents from file +-- - add support for read-first/write-first address conflict resulution (only +-- supported by Xilinx in VHDL templates) +------------------------------------------------------------------------------- +-- Copyright (c) 2011 CERN +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2011-01-25 1.0 twlostow Created +-- 2012-03-13 1.1 wterpstra Added initial value as array +------------------------------------------------------------------------------- + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use std.textio.all; + +library work; +use work.genram_pkg.all; +use work.memory_loader_pkg.all; + +entity generic_dpram is + + generic ( + -- standard parameters + g_data_width : natural := 32; + g_size : natural := 16384; + + g_with_byte_enable : boolean := false; + g_addr_conflict_resolution : string := "read_first"; + g_init_file : string := ""; + g_dual_clock : boolean := true; + g_fail_if_file_not_found : boolean := true + ); + + port ( + rst_n_i : in std_logic := '1'; -- synchronous reset, active LO + + -- Port A + clka_i : in std_logic; + bwea_i : in std_logic_vector((g_data_width+7)/8-1 downto 0); + wea_i : in std_logic; + aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + da_i : in std_logic_vector(g_data_width-1 downto 0); + qa_o : out std_logic_vector(g_data_width-1 downto 0); + -- Port B + + clkb_i : in std_logic; + bweb_i : in std_logic_vector((g_data_width+7)/8-1 downto 0); + web_i : in std_logic; + ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + db_i : in std_logic_vector(g_data_width-1 downto 0); + qb_o : out std_logic_vector(g_data_width-1 downto 0) + ); + +end generic_dpram; + + + +architecture syn of generic_dpram is + + constant c_gen_split :boolean := (g_dual_clock = false and g_data_width=32 and + g_with_byte_enable=true and (g_addr_conflict_resolution="dont_care" or + g_addr_conflict_resolution="read_first")); + constant c_gen_sc :boolean := (not c_gen_split) and (not g_dual_clock); + constant c_gen_dc :boolean := g_dual_clock; + + component generic_dpram_split + generic ( + g_size : natural; + g_addr_conflict_resolution : string := "dont_care"; + g_init_file : string := "none"; + g_fail_if_file_not_found : boolean := true); + port ( + rst_n_i : in std_logic := '1'; + clk_i : in std_logic; + bwea_i : in std_logic_vector(3 downto 0); + wea_i : in std_logic; + aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + da_i : in std_logic_vector(31 downto 0); + qa_o : out std_logic_vector(31 downto 0); + bweb_i : in std_logic_vector(3 downto 0); + web_i : in std_logic; + ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + db_i : in std_logic_vector(31 downto 0); + qb_o : out std_logic_vector(31 downto 0)); + end component; + + component generic_dpram_sameclock + generic ( + g_data_width : natural; + g_size : natural; + g_with_byte_enable : boolean; + g_addr_conflict_resolution : string; + g_init_file : string; + g_fail_if_file_not_found : boolean); + port ( + rst_n_i : in std_logic := '1'; + clk_i : in std_logic; + bwea_i : in std_logic_vector((g_data_width+7)/8-1 downto 0); + wea_i : in std_logic; + aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + da_i : in std_logic_vector(g_data_width-1 downto 0); + qa_o : out std_logic_vector(g_data_width-1 downto 0); + bweb_i : in std_logic_vector((g_data_width+7)/8-1 downto 0); + web_i : in std_logic; + ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + db_i : in std_logic_vector(g_data_width-1 downto 0); + qb_o : out std_logic_vector(g_data_width-1 downto 0)); + end component; + + component generic_dpram_dualclock + generic ( + g_data_width : natural; + g_size : natural; + g_with_byte_enable : boolean; + g_addr_conflict_resolution : string; + g_init_file : string; + g_fail_if_file_not_found : boolean); + port ( + rst_n_i : in std_logic := '1'; + clka_i : in std_logic; + bwea_i : in std_logic_vector((g_data_width+7)/8-1 downto 0); + wea_i : in std_logic; + aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + da_i : in std_logic_vector(g_data_width-1 downto 0); + qa_o : out std_logic_vector(g_data_width-1 downto 0); + clkb_i : in std_logic; + bweb_i : in std_logic_vector((g_data_width+7)/8-1 downto 0); + web_i : in std_logic; + ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + db_i : in std_logic_vector(g_data_width-1 downto 0); + qb_o : out std_logic_vector(g_data_width-1 downto 0)); + end component; + +begin + + -- generic_dpram_split is like generic_dpram_sameclock, but hardcoded to + -- 32-bit data width and split into 4 BRAMs, each of them 8-bit wide. It's + -- better for Xilinx ISE, because it's unable to infer DPRAM with byte-write + -- enables without using huge number of LUTs. + -- Since it's hardcoded to 32-bits data width, we need to keep + -- generic_dpram_sameclock as well. For reasons why generic_dpram_split is + -- hardcoded to 32-bits please check the Note in generic_dpram_split.vhd. + gen_splitram: if c_gen_split generate + U_RAM_SPLIT: generic_dpram_split + generic map( + g_size => g_size, + g_addr_conflict_resolution => g_addr_conflict_resolution, + g_init_file => g_init_file, + g_fail_if_file_not_found => g_fail_if_file_not_found) + port map( + rst_n_i => rst_n_i, + clk_i => clka_i, + bwea_i => bwea_i, + wea_i => wea_i, + aa_i => aa_i, + da_i => da_i, + qa_o => qa_o, + bweb_i => bweb_i, + web_i => web_i, + ab_i => ab_i, + db_i => db_i, + qb_o => qb_o); + end generate gen_splitram; + + gen_single_clk : if c_gen_sc generate + U_RAM_SC: generic_dpram_sameclock + generic map ( + g_data_width => g_data_width, + g_size => g_size, + g_with_byte_enable => g_with_byte_enable, + g_addr_conflict_resolution => g_addr_conflict_resolution, + g_init_file => g_init_file, + g_fail_if_file_not_found => g_fail_if_file_not_found) + port map ( + rst_n_i => rst_n_i, + clk_i => clka_i, + bwea_i => bwea_i, + wea_i => wea_i, + aa_i => aa_i, + da_i => da_i, + qa_o => qa_o, + bweb_i => bweb_i, + web_i => web_i, + ab_i => ab_i, + db_i => db_i, + qb_o => qb_o); + + + end generate gen_single_clk; + + gen_dual_clk : if c_gen_dc generate + U_RAM_DC: generic_dpram_dualclock + generic map ( + g_data_width => g_data_width, + g_size => g_size, + g_with_byte_enable => g_with_byte_enable, + g_addr_conflict_resolution => g_addr_conflict_resolution, + g_init_file => g_init_file, + g_fail_if_file_not_found => g_fail_if_file_not_found) + port map ( + rst_n_i => rst_n_i, + clka_i => clka_i, + bwea_i => bwea_i, + wea_i => wea_i, + aa_i => aa_i, + da_i => da_i, + qa_o => qa_o, + clkb_i => clkb_i, + bweb_i => bweb_i, + web_i => web_i, + ab_i => ab_i, + db_i => db_i, + qb_o => qb_o); + end generate gen_dual_clk; + +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_dualclock.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_dualclock.vhd new file mode 100644 index 000000000..9f3318d42 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_dualclock.vhd @@ -0,0 +1,268 @@ +------------------------------------------------------------------------------- +-- Title : Parametrizable dual-port synchronous RAM (Xilinx version) +-- Project : Generics RAMs and FIFOs collection +------------------------------------------------------------------------------- +-- File : generic_dpram.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2011-01-25 +-- Last update: 2012-03-28 +-- Platform : +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: True dual-port synchronous RAM for Xilinx FPGAs with: +-- - configurable address and data bus width +-- - byte-addressing mode (data bus width restricted to multiple of 8 bits) +-- Todo: +-- - loading initial contents from file +-- - add support for read-first/write-first address conflict resulution (only +-- supported by Xilinx in VHDL templates) +------------------------------------------------------------------------------- +-- Copyright (c) 2011 CERN +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2011-01-25 1.0 twlostow Created +------------------------------------------------------------------------------- + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use std.textio.all; + +library work; +use work.genram_pkg.all; +use work.memory_loader_pkg.all; + +entity generic_dpram_dualclock is + + generic ( + -- standard parameters + g_data_width : natural := 32; + g_size : natural := 16384; + + g_with_byte_enable : boolean := false; + g_addr_conflict_resolution : string := "read_first"; + g_init_file : string := ""; + g_fail_if_file_not_found : boolean := true + ); + + port ( + rst_n_i : in std_logic := '1'; -- synchronous reset, active LO + + -- Port A + clka_i : in std_logic; + bwea_i : in std_logic_vector((g_data_width+7)/8-1 downto 0); + wea_i : in std_logic; + aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + da_i : in std_logic_vector(g_data_width-1 downto 0); + qa_o : out std_logic_vector(g_data_width-1 downto 0); + -- Port B + + clkb_i : in std_logic; + bweb_i : in std_logic_vector((g_data_width+7)/8-1 downto 0); + web_i : in std_logic; + ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + db_i : in std_logic_vector(g_data_width-1 downto 0); + qb_o : out std_logic_vector(g_data_width-1 downto 0) + ); + +end generic_dpram_dualclock; + + + +architecture syn of generic_dpram_dualclock is + + constant c_num_bytes : integer := (g_data_width+7)/8; + + + type t_ram_type is array(0 to g_size-1) of std_logic_vector(g_data_width-1 downto 0); + + impure function f_file_to_ramtype return t_ram_type is + variable tmp : t_ram_type; + variable n, pos : integer; + variable mem32 : t_ram32_type(0 to g_size-1); + variable mem16 : t_ram16_type(0 to g_size-1); + variable mem8 : t_ram8_type(0 to g_size-1); + variable arr : t_meminit_array(0 to g_size-1, g_data_width-1 downto 0); + begin + -- If no file was given, there is nothing to convert, just return + if (g_init_file = "" or g_init_file = "none") then + tmp := (others=>(others=>'0')); + return tmp; + end if; + + arr := f_load_mem_from_file(g_init_file, g_size, g_data_width, g_fail_if_file_not_found); + pos := 0; + while(pos < g_size)loop + n := 0; + -- avoid ISE loop iteration limit + while (pos < g_size and n < 4096) loop + for i in 0 to g_data_width-1 loop + tmp(pos)(i) := arr(pos, i); + end loop; -- i + n := n+1; + pos := pos + 1; + end loop; + end loop; + return tmp; + end f_file_to_ramtype; + + function f_is_synthesis return boolean is + begin + -- synthesis translate_off + return false; + -- synthesis translate_on + return true; + end f_is_synthesis; + + shared variable ram : t_ram_type := f_file_to_ramtype; + + signal s_we_a : std_logic_vector(c_num_bytes-1 downto 0); + signal s_ram_in_a : std_logic_vector(g_data_width-1 downto 0); + signal s_we_b : std_logic_vector(c_num_bytes-1 downto 0); + signal s_ram_in_b : std_logic_vector(g_data_width-1 downto 0); + + signal clka_int : std_logic; + signal clkb_int : std_logic; + + signal wea_rep, web_rep : std_logic_vector(c_num_bytes-1 downto 0); + +begin + + wea_rep <= (others => wea_i); + web_rep <= (others => web_i); + + s_we_a <= bwea_i and wea_rep; + s_we_b <= bweb_i and web_rep; + + gen_with_byte_enable_readfirst : if(g_with_byte_enable = true and (g_addr_conflict_resolution = "read_first" or + g_addr_conflict_resolution = "dont_care")) generate + + + process (clka_i) + begin + if rising_edge(clka_i) then + if f_is_synthesis then + qa_o <= ram(to_integer(unsigned(aa_i))); + else + qa_o <= ram(to_integer(unsigned(aa_i)) mod g_size); + end if; + for i in 0 to c_num_bytes-1 loop + if s_we_a(i) = '1' then + ram(to_integer(unsigned(aa_i)))((i+1)*8-1 downto i*8) := da_i((i+1)*8-1 downto i*8); + end if; + end loop; + end if; + end process; + + + process (clkb_i) + begin + if rising_edge(clkb_i) then + if f_is_synthesis then + qb_o <= ram(to_integer(unsigned(ab_i))); + else + qb_o <= ram(to_integer(unsigned(ab_i)) mod g_size); + end if; + for i in 0 to c_num_bytes-1 loop + if s_we_b(i) = '1' then + ram(to_integer(unsigned(ab_i)))((i+1)*8-1 downto i*8) + := db_i((i+1)*8-1 downto i*8); + end if; + end loop; + end if; + end process; + + + + + end generate gen_with_byte_enable_readfirst; + + + + gen_without_byte_enable_readfirst : if(g_with_byte_enable = false and (g_addr_conflict_resolution = "read_first" or + g_addr_conflict_resolution = "dont_care")) generate + + process(clka_i) + begin + if rising_edge(clka_i) then + qa_o <= ram(to_integer(unsigned(aa_i))); + if(wea_i = '1') then + ram(to_integer(unsigned(aa_i))) := da_i; + end if; + end if; + end process; + + + process(clkb_i) + begin + if rising_edge(clkb_i) then + qb_o <= ram(to_integer(unsigned(ab_i))); + if(web_i = '1') then + ram(to_integer(unsigned(ab_i))) := db_i; + end if; + end if; + end process; + + end generate gen_without_byte_enable_readfirst; + + + gen_without_byte_enable_writefirst : if(g_with_byte_enable = false and g_addr_conflict_resolution = "write_first") generate + + process(clka_i) + begin + if rising_edge(clka_i) then + if(wea_i = '1') then + ram(to_integer(unsigned(aa_i))) := da_i; + qa_o <= da_i; + else + qa_o <= ram(to_integer(unsigned(aa_i))); + end if; + end if; + end process; + + + process(clkb_i) + begin + if rising_edge(clkb_i) then + if(web_i = '1') then + ram(to_integer(unsigned(ab_i))) := db_i; + qb_o <= db_i; + else + qb_o <= ram(to_integer(unsigned(ab_i))); + end if; + end if; + end process; + end generate gen_without_byte_enable_writefirst; + + + gen_without_byte_enable_nochange : if(g_with_byte_enable = false and g_addr_conflict_resolution = "no_change") generate + + process(clka_i) + begin + if rising_edge(clka_i) then + if(wea_i = '1') then + ram(to_integer(unsigned(aa_i))) := da_i; + else + qa_o <= ram(to_integer(unsigned(aa_i))); + end if; + end if; + end process; + + + process(clkb_i) + begin + if rising_edge(clkb_i) then + if(web_i = '1') then + ram(to_integer(unsigned(ab_i))) := db_i; + else + qb_o <= ram(to_integer(unsigned(ab_i))); + end if; + end if; + end process; + end generate gen_without_byte_enable_nochange; + + +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_sameclock.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_sameclock.vhd new file mode 100644 index 000000000..49151486d --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_sameclock.vhd @@ -0,0 +1,304 @@ +------------------------------------------------------------------------------- +-- Title : Parametrizable dual-port synchronous RAM (Xilinx version) +-- Project : Generics RAMs and FIFOs collection +------------------------------------------------------------------------------- +-- File : generic_dpram_sameclock.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2011-01-25 +-- Last update: 2015-03-30 +-- Platform : +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: True dual-port synchronous RAM for Xilinx FPGAs with: +-- - configurable address and data bus width +-- - byte-addressing mode (data bus width restricted to multiple of 8 bits) +-- Todo: +-- - loading initial contents from file +-- - add support for read-first/write-first address conflict resulution (only +-- supported by Xilinx in VHDL templates) +------------------------------------------------------------------------------- +-- Copyright (c) 2011 CERN +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2011-01-25 1.0 twlostow Created +------------------------------------------------------------------------------- + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use std.textio.all; + +library work; +use work.genram_pkg.all; +use work.memory_loader_pkg.all; + +entity generic_dpram_sameclock is + + generic ( + g_data_width : natural := 32; + g_size : natural := 16384; + + g_with_byte_enable : boolean := false; + g_addr_conflict_resolution : string := "read_first"; + g_init_file : string := ""; + g_fail_if_file_not_found : boolean := true + ); + + port ( + rst_n_i : in std_logic := '1'; -- synchronous reset, active LO + + -- Port A + clk_i : in std_logic; + + bwea_i : in std_logic_vector((g_data_width+7)/8-1 downto 0); + wea_i : in std_logic; + aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + da_i : in std_logic_vector(g_data_width-1 downto 0); + qa_o : out std_logic_vector(g_data_width-1 downto 0); + + -- Port B + bweb_i : in std_logic_vector((g_data_width+7)/8-1 downto 0); + web_i : in std_logic; + ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + db_i : in std_logic_vector(g_data_width-1 downto 0); + qb_o : out std_logic_vector(g_data_width-1 downto 0) + ); + +end generic_dpram_sameclock; + + + +architecture syn of generic_dpram_sameclock is + + constant c_num_bytes : integer := (g_data_width + 7)/8; + + + type t_ram_type is array(0 to g_size-1) of std_logic_vector(g_data_width-1 downto 0); + + impure function f_file_to_ramtype return t_ram_type is + variable tmp : t_ram_type; + variable n, pos : integer; + variable mem32 : t_ram32_type(0 to g_size-1); + variable mem16 : t_ram16_type(0 to g_size-1); + variable mem8 : t_ram8_type(0 to g_size-1); + variable arr : t_meminit_array(0 to g_size-1, g_data_width-1 downto 0); + begin + -- If no file was given, there is nothing to convert, just return + if (g_init_file = "" or g_init_file = "none") then + tmp := (others=>(others=>'0')); + return tmp; + end if; + + arr := f_load_mem_from_file(g_init_file, g_size, g_data_width, g_fail_if_file_not_found); + pos := 0; + while(pos < g_size)loop + n := 0; + -- avoid ISE loop iteration limit + while (pos < g_size and n < 4096) loop + for i in 0 to g_data_width-1 loop + tmp(pos)(i) := arr(pos, i); + end loop; -- i + n := n+1; + pos := pos + 1; + end loop; + end loop; + return tmp; + end f_file_to_ramtype; + + function f_is_synthesis return boolean is + begin + -- synthesis translate_off + return false; + -- synthesis translate_on + return true; + end f_is_synthesis; + + + shared variable ram : t_ram_type := f_file_to_ramtype; + + signal s_we_a : std_logic_vector(c_num_bytes-1 downto 0); + signal s_ram_in_a : std_logic_vector(g_data_width-1 downto 0); + signal s_we_b : std_logic_vector(c_num_bytes-1 downto 0); + signal s_ram_in_b : std_logic_vector(g_data_width-1 downto 0); + + signal wea_rep, web_rep : std_logic_vector(c_num_bytes-1 downto 0); + +begin + + wea_rep <= (others => wea_i); + web_rep <= (others => web_i); + + s_we_a <= bwea_i and wea_rep; + s_we_b <= bweb_i and web_rep; + + gen_with_byte_enable_readfirst : if(g_with_byte_enable = true and (g_addr_conflict_resolution = "read_first" or + g_addr_conflict_resolution = "dont_care")) generate + + Port_A: process (clk_i) + begin + if rising_edge(clk_i) then + qa_o <= ram(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1)); + for i in 0 to c_num_bytes-1 loop + if s_we_a(i) = '1' then + ram(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1))((i+1)*8-1 downto i*8) := da_i((i+1)*8-1 downto i*8); + end if; + end loop; + end if; + end process; + + Port_B: process (clk_i) + begin + if rising_edge(clk_i) then + qb_o <= ram(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1)); + for i in 0 to c_num_bytes-1 loop + if(s_we_b(i) = '1') then + ram(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1))((i+1)*8-1 downto i*8) := db_i((i+1)*8-1 downto i*8); + end if; + end loop; + end if; + end process; + + end generate gen_with_byte_enable_readfirst; + + + + gen_without_byte_enable_readfirst : if(g_with_byte_enable = false and (g_addr_conflict_resolution = "read_first" or + g_addr_conflict_resolution = "dont_care")) generate + + Port_A: process(clk_i) + begin + if rising_edge(clk_i) then + if f_is_synthesis then + qa_o <= ram(to_integer(unsigned(aa_i))); + else + qa_o <= ram(to_integer(unsigned(aa_i)) mod g_size); + end if; + if(wea_i = '1') then + ram(to_integer(unsigned(aa_i))) := da_i; + end if; + end if; + end process; + + Port_B: process(clk_i) + begin + if rising_edge(clk_i) then + if f_is_synthesis then + qb_o <= ram(to_integer(unsigned(ab_i))); + else + qb_o <= ram(to_integer(unsigned(ab_i)) mod g_size); + end if; + if(web_i = '1') then + ram(to_integer(unsigned(ab_i))) := db_i; + end if; + end if; + end process; + end generate gen_without_byte_enable_readfirst; + + gen_without_byte_enable_writefirst : if(g_with_byte_enable = false and g_addr_conflict_resolution = "write_first") generate + + Port_A: process(clk_i) + begin + if rising_edge(clk_i) then + if(wea_i = '1') then + ram(to_integer(unsigned(aa_i))) := da_i; + qa_o <= da_i; + else + if f_is_synthesis then + qa_o <= ram(to_integer(unsigned(aa_i))); + else + qa_o <= ram(to_integer(unsigned(aa_i)) mod g_size); + end if; + end if; + end if; + end process; + + Port_B: process(clk_i) + begin + if rising_edge(clk_i) then + if(web_i = '1') then + ram(to_integer(unsigned(ab_i))) := db_i; + qb_o <= db_i; + else + if f_is_synthesis then + qb_o <= ram(to_integer(unsigned(ab_i))); + else + qb_o <= ram(to_integer(unsigned(ab_i)) mod g_size); + end if; + end if; + end if; + end process; + + end generate gen_without_byte_enable_writefirst; + + + gen_without_byte_enable_nochange : if(g_with_byte_enable = false and g_addr_conflict_resolution = "no_change") generate + + Port_A: process(clk_i) + begin + if rising_edge(clk_i) then + if(wea_i = '1') then + ram(to_integer(unsigned(aa_i))) := da_i; + else + if f_is_synthesis then + qa_o <= ram(to_integer(unsigned(aa_i))); + else + qa_o <= ram(to_integer(unsigned(aa_i)) mod g_size); + end if; + end if; + end if; + end process; + + Port_B: process(clk_i) + begin + if rising_edge(clk_i) then + if(web_i = '1') then + ram(to_integer(unsigned(ab_i))) := db_i; + else + if f_is_synthesis then + qb_o <= ram(to_integer(unsigned(ab_i))); + else + qb_o <= ram(to_integer(unsigned(ab_i)) mod g_size); + end if; + end if; + end if; + end process; + + + end generate gen_without_byte_enable_nochange; + + gen_with_byte_enable_writefirst : if(g_with_byte_enable = true and (g_addr_conflict_resolution = "write_first")) generate + + Port_A: process (clk_i) + begin + if rising_edge(clk_i) then + for i in 0 to c_num_bytes-1 loop + if s_we_a(i) = '1' then + ram(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1))((i+1)*8-1 downto i*8) := da_i((i+1)*8-1 downto i*8); + qa_o((i+1)*8-1 downto i*8) <= da_i((i+1)*8-1 downto i*8); + else + qa_o((i+1)*8-1 downto i*8) <= ram(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1))((i+1)*8-1 downto i*8); + end if; + end loop; + end if; + end process; + + Port_B: process (clk_i) + begin + if rising_edge(clk_i) then + for i in 0 to c_num_bytes-1 loop + if s_we_b(i) = '1' then + ram(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1))((i+1)*8-1 downto i*8) := db_i((i+1)*8-1 downto i*8); + qb_o((i+1)*8-1 downto i*8) <= db_i((i+1)*8-1 downto i*8); + else + qb_o((i+1)*8-1 downto i*8) <= ram(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1))((i+1)*8-1 downto i*8); + end if; + end loop; + end if; + end process; + + end generate gen_with_byte_enable_writefirst; + +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_split.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_split.vhd new file mode 100644 index 000000000..b6d692bb8 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_split.vhd @@ -0,0 +1,233 @@ +------------------------------------------------------------------------------- +-- Title : Dual-port synchronous RAM with byte-write for Xilinx +------------------------------------------------------------------------------- +-- File : generic_dpram_split.vhd +-- Author : Grzegorz Daniluk +-- Company : CERN BE-CO-HT +-- Created : 2017-02-13 +-- Last update: 2017-02-13 +-- Platform : +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: +-- This module is 32-bit RAM with byte-write enables. It was created for Xilinx +-- FPGAs, since Xilinx ISE is unable to infer dual-port block-RAM with +-- byte-writes (e.g. based on generic_dpram_sameclock.vhd module). When +-- synthesizing generic_dpram_sameclock with g_with_byte_enable, ISE uses a lot +-- of LUTs to get the byte-write behavior (instead of using the features of BRAM +-- blocks). +-- +-- Note: +-- This module is hardcoded to 32-bits and 4 ram modules (ram0-3). It would be +-- much cleaner to have a generic code and using ram(0 to g_data_width/8-1). +-- However, it looks that ISE is not able to initialize 3-d array that would be +-- needed in this case. +-- I.e. this works: +-- shared variable ram0 : t_split_ram := f_file_to_ramtype(0); +-- shared variable ram1 : t_split_ram := f_file_to_ramtype(1); +-- shared variable ram2 : t_split_ram := f_file_to_ramtype(2); +-- shared variable ram3 : t_split_ram := f_file_to_ramtype(3); +-- +-- but this doesn't: +-- type t_split_ram_array is array(0 to 3) of t_split_ram; +-- shared variable ram : t_split_ram_array := (f_file_to_ramtype(0), +-- f_file_to_ramtype(1),f_file_to_ramtype(2), +-- f_file_to_ramtype(3)); +-- +-- By "doesn't work" I mean that ISE does not fail during the synthesis, but RAM +-- does not get initialized. +------------------------------------------------------------------------------- +-- Copyright (c) 2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.genram_pkg.all; +use work.memory_loader_pkg.all; + +entity generic_dpram_split is + generic ( + g_size : natural := 16384; + g_addr_conflict_resolution : string := "read_first"; + g_init_file : string := ""; + g_fail_if_file_not_found : boolean := true); + port ( + rst_n_i : in std_logic := '1'; + clk_i : in std_logic; + + -- Port A + bwea_i : in std_logic_vector(3 downto 0); + wea_i : in std_logic; + aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + da_i : in std_logic_vector(31 downto 0); + qa_o : out std_logic_vector(31 downto 0); + + -- Port B + bweb_i : in std_logic_vector(3 downto 0); + web_i : in std_logic; + ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + db_i : in std_logic_vector(31 downto 0); + qb_o : out std_logic_vector(31 downto 0)); +end generic_dpram_split; + +architecture syn of generic_dpram_split is + + constant c_data_width : integer := 32; + constant c_num_bytes : integer := (c_data_width+7)/8; + + type t_split_ram is array(0 to g_size-1) of std_logic_vector(7 downto 0); + + impure function f_file_to_ramtype(idx : integer) return t_split_ram is + variable tmp : t_split_ram; + variable mem8 : t_ram8_type(0 to g_size-1); + begin + -- If no file was given, there is nothing to convert, just return + if (g_init_file = "" or g_init_file = "none") then + tmp := (others=>(others=>'0')); + return tmp; + end if; + + mem8 := f_load_mem32_from_file_split(g_init_file, g_size, g_fail_if_file_not_found, idx); + return t_split_ram(mem8); + end f_file_to_ramtype; + + impure function f_file_contents return t_meminit_array is + begin + return f_load_mem_from_file(g_init_file, g_size, c_data_width, g_fail_if_file_not_found); + end f_file_contents; + + shared variable ram0 : t_split_ram := f_file_to_ramtype(0); + shared variable ram1 : t_split_ram := f_file_to_ramtype(1); + shared variable ram2 : t_split_ram := f_file_to_ramtype(2); + shared variable ram3 : t_split_ram := f_file_to_ramtype(3); + + signal s_we_a : std_logic_vector(c_num_bytes-1 downto 0); + signal s_we_b : std_logic_vector(c_num_bytes-1 downto 0); + signal wea_rep : std_logic_vector(c_num_bytes-1 downto 0); + signal web_rep : std_logic_vector(c_num_bytes-1 downto 0); + +begin + + assert (g_addr_conflict_resolution = "read_first" or g_addr_conflict_resolution = "dont_care") + report "generic_dpram_split: only read_first and dont_care supported for now" severity failure; + + -- combine byte-write enable with write signals + wea_rep <= (others => wea_i); + web_rep <= (others => web_i); + s_we_a <= bwea_i and wea_rep; + s_we_b <= bweb_i and web_rep; + + -------------------------------------------------- + -- yes, I know this is 4 times exactly the same code for ram0,1,2,3, + -- but ISE fails to initialize BRAM when ram is an array (check Note + -- in the header of this file). + GEN_RAM0_Port_A: process (clk_i) + begin + if rising_edge(clk_i) then + qa_o(7 downto 0) <= ram0(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1)); + if s_we_a(0) = '1' then + ram0(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1)) := da_i(7 downto 0); + end if; + end if; + end process; + + GEN_RAM0_Port_B: process (clk_i) + begin + if rising_edge(clk_i) then + qb_o(7 downto 0) <= ram0(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1)); + if s_we_b(0) = '1' then + ram0(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1)) := db_i(7 downto 0); + end if; + end if; + end process; + + -------------------------------------------------- + + GEN_RAM1_Port_A: process (clk_i) + begin + if rising_edge(clk_i) then + qa_o(15 downto 8) <= ram1(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1)); + if s_we_a(1) = '1' then + ram1(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1)) := da_i(15 downto 8); + end if; + end if; + end process; + + GEN_RAM1_Port_B: process (clk_i) + begin + if rising_edge(clk_i) then + qb_o(15 downto 8) <= ram1(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1)); + if s_we_b(1) = '1' then + ram1(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1)) := db_i(15 downto 8); + end if; + end if; + end process; + + -------------------------------------------------- + + GEN_RAM2_Port_A: process (clk_i) + begin + if rising_edge(clk_i) then + qa_o(23 downto 16) <= ram2(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1)); + if s_we_a(2) = '1' then + ram2(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1)) := da_i(23 downto 16); + end if; + end if; + end process; + + GEN_RAM2_Port_B: process (clk_i) + begin + if rising_edge(clk_i) then + qb_o(23 downto 16) <= ram2(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1)); + if s_we_b(2) = '1' then + ram2(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1)) := db_i(23 downto 16); + end if; + end if; + end process; + + -------------------------------------------------- + + GEN_RAM3_Port_A: process (clk_i) + begin + if rising_edge(clk_i) then + qa_o(31 downto 24) <= ram3(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1)); + if s_we_a(3) = '1' then + ram3(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1)) := da_i(31 downto 24); + end if; + end if; + end process; + + GEN_RAM3_Port_B: process (clk_i) + begin + if rising_edge(clk_i) then + qb_o(31 downto 24) <= ram3(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1)); + if s_we_b(3) = '1' then + ram3(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1)) := db_i(31 downto 24); + end if; + end if; + end process; + + -------------------------------------------------- + +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_simple_dpram.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_simple_dpram.vhd new file mode 100644 index 000000000..5eb14729a --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_simple_dpram.vhd @@ -0,0 +1,100 @@ +------------------------------------------------------------------------------- +-- Title : Parametrizable dual-port synchronous RAM (Xilinx version) +-- Project : Generics RAMs and FIFOs collection +------------------------------------------------------------------------------- +-- File : generic_simple_dpram.vhd +-- Author : Wesley W. Terpstra +-- Company : GSI +-- Created : 2013-03-04 +-- Last update: 2013-10-30 +-- Platform : +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: True dual-port synchronous RAM for Xilinx FPGAs with: +-- - configurable address and data bus width +-- - byte-addressing mode (data bus width restricted to multiple of 8 bits) +-- Todo: +-- - loading initial contents from file +-- - add support for read-first/write-first address conflict resulution (only +-- supported by Xilinx in VHDL templates) +------------------------------------------------------------------------------- +-- Copyright (c) 2011 CERN +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2013-03-04 1.0 wterpstra Initial version: wrapper to generic_dpram +------------------------------------------------------------------------------- + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use std.textio.all; + +library work; +use work.genram_pkg.all; +use work.memory_loader_pkg.all; + +entity generic_simple_dpram is + + generic ( + -- standard parameters + g_data_width : natural := 32; + g_size : natural := 16384; + + g_with_byte_enable : boolean := false; + g_addr_conflict_resolution : string := "read_first"; + g_init_file : string := ""; + g_dual_clock : boolean := true; + g_fail_if_file_not_found : boolean := true + ); + + port ( + rst_n_i : in std_logic := '1'; -- synchronous reset, active LO + + -- Port A + clka_i : in std_logic; + bwea_i : in std_logic_vector((g_data_width+7)/8-1 downto 0); + wea_i : in std_logic; + aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + da_i : in std_logic_vector(g_data_width-1 downto 0); + + -- Port B + clkb_i : in std_logic; + ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0); + qb_o : out std_logic_vector(g_data_width-1 downto 0) + ); + +end generic_simple_dpram; + + + +architecture syn of generic_simple_dpram is + +begin + + -- Works well enough until a Xilinx guru can optimize it. + true_dp : generic_dpram + generic map( + g_data_width => g_data_width, + g_size => g_size, + g_with_byte_enable => g_with_byte_enable, + g_addr_conflict_resolution => g_addr_conflict_resolution, + g_init_file => g_init_file, + g_dual_clock => g_dual_clock) + port map( + rst_n_i => rst_n_i, + clka_i => clka_i, + bwea_i => bwea_i, + wea_i => wea_i, + aa_i => aa_i, + da_i => da_i, + qa_o => open, + clkb_i => clkb_i, + bweb_i => f_zeros((g_data_width+7)/8), + web_i => '0', + ab_i => ab_i, + db_i => f_zeros(g_data_width), + qb_o => qb_o); + +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/axi4_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/axi4_pkg.vhd new file mode 100644 index 000000000..cde1f31bb --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/axi4_pkg.vhd @@ -0,0 +1,253 @@ +------------------------------------------------------------------------------- +-- Title : AXI4Lite-to-WB bridge package +-- Project : General Cores +------------------------------------------------------------------------------- +-- File : axi4_pkg.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN +-- Platform : FPGA-generics +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- Copyright (c) 2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +use work.wishbone_pkg.all; + +package axi4_pkg is + + -- AXI4-Full interface, master output ports, 32 bits + type t_axi4_full_master_out_32 is record + ARVALID : std_logic; + AWVALID : std_logic; + BREADY : std_logic; + RREADY : std_logic; + WLAST : std_logic; + WVALID : std_logic; + ARID : std_logic_vector (11 downto 0); + AWID : std_logic_vector (11 downto 0); + WID : std_logic_vector (11 downto 0); + ARBURST : std_logic_vector (1 downto 0); + ARLOCK : std_logic_vector (1 downto 0); + ARSIZE : std_logic_vector (2 downto 0); + AWBURST : std_logic_vector (1 downto 0); + AWLOCK : std_logic_vector (1 downto 0); + AWSIZE : std_logic_vector (2 downto 0); + ARPROT : std_logic_vector (2 downto 0); + AWPROT : std_logic_vector (2 downto 0); + ARADDR : std_logic_vector (31 downto 0); + AWADDR : std_logic_vector (31 downto 0); + WDATA : std_logic_vector (31 downto 0); + ARCACHE : std_logic_vector (3 downto 0); + ARLEN : std_logic_vector (3 downto 0); + ARQOS : std_logic_vector (3 downto 0); + AWCACHE : std_logic_vector (3 downto 0); + AWLEN : std_logic_vector (3 downto 0); + AWQOS : std_logic_vector (3 downto 0); + WSTRB : std_logic_vector (3 downto 0); + end record; + + -- AXI4-Full interface, master input ports, 32 bits + type t_axi4_full_master_in_32 is record + ARREADY : std_logic; + AWREADY : std_logic; + BVALID : std_logic; + RLAST : std_logic; + RVALID : std_logic; + WREADY : std_logic; + BID : std_logic_vector (11 downto 0); + RID : std_logic_vector (11 downto 0); + BRESP : std_logic_vector (1 downto 0); + RRESP : std_logic_vector (1 downto 0); + RDATA : std_logic_vector (31 downto 0); + end record; + + -- AXI4-Lite interface, master output ports, 32 bits + type t_axi4_lite_master_out_32 is record + ARVALID : std_logic; + AWVALID : std_logic; + BREADY : std_logic; + RREADY : std_logic; + WLAST : std_logic; + WVALID : std_logic; + ARADDR : std_logic_vector (31 downto 0); + AWADDR : std_logic_vector (31 downto 0); + WDATA : std_logic_vector (31 downto 0); + WSTRB : std_logic_vector (3 downto 0); + end record; + + -- AXI4-Lite interface, master input ports, 32 bits + type t_axi4_lite_master_in_32 is record + ARREADY : std_logic; + AWREADY : std_logic; + BVALID : std_logic; + RLAST : std_logic; + RVALID : std_logic; + WREADY : std_logic; + BRESP : std_logic_vector (1 downto 0); + RRESP : std_logic_vector (1 downto 0); + RDATA : std_logic_vector (31 downto 0); + end record; + + constant c_axi4_lite_default_master_in_32 : t_axi4_lite_master_in_32 := + ( + AWREADY => '0', + ARREADY => '0', + BVALID => '0', + RLAST => '0', + RVALID => '0', + WREADY => '0', + BRESP => "00", + RRESP => "00", + RDATA => (others => '0') + ); + + + constant c_axi4_lite_default_master_out_32 : t_axi4_lite_master_out_32 := + ( + ARVALID => '0', + AWVALID => '0', + BREADY => '0', + RREADY => '0', + WLAST => '0', + WVALID => '0', + ARADDR => (others => '0'), + AWADDR => (others => '0'), + WDATA => (others => '0'), + WSTRB => (others => '0') + ); + + + + subtype t_axi4_lite_slave_in_32 is t_axi4_lite_master_out_32; + subtype t_axi4_lite_slave_out_32 is t_axi4_lite_master_in_32; + + constant c_AXI4_RESP_OKAY : std_logic_vector(1 downto 0) := "00"; + constant c_AXI4_RESP_EXOKAY : std_logic_vector(1 downto 0) := "01"; + constant c_AXI4_RESP_SLVERR : std_logic_vector(1 downto 0) := "10"; + constant c_AXI4_RESP_DECERR : std_logic_vector(1 downto 0) := "11"; + + function f_axi4_full_to_lite ( + f : t_axi4_full_master_out_32 + ) return t_axi4_lite_master_out_32; + + function f_axi4_lite_to_full ( + l : t_axi4_lite_master_in_32 + ) return t_axi4_full_master_in_32; + + component xwb_axi4lite_bridge is + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + axi4_slave_i : in t_axi4_lite_slave_in_32; + axi4_slave_o : out t_axi4_lite_slave_out_32; + wb_master_o : out t_wishbone_master_out; + wb_master_i : in t_wishbone_master_in); + end component xwb_axi4lite_bridge; + + component wb_axi4lite_bridge is + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + ARVALID : in std_logic; + AWVALID : in std_logic; + BREADY : in std_logic; + RREADY : in std_logic; + WLAST : in std_logic; + WVALID : in std_logic; + ARADDR : in std_logic_vector (31 downto 0); + AWADDR : in std_logic_vector (31 downto 0); + WDATA : in std_logic_vector (31 downto 0); + WSTRB : in std_logic_vector (3 downto 0); + ARREADY : out std_logic; + AWREADY : out std_logic; + BVALID : out std_logic; + RLAST : out std_logic; + RVALID : out std_logic; + WREADY : out std_logic; + BRESP : out std_logic_vector (1 downto 0); + RRESP : out std_logic_vector (1 downto 0); + RDATA : out std_logic_vector (31 downto 0); + + wb_adr : out std_logic_vector(c_wishbone_address_width-1 downto 0); + wb_dat_m2s : out std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_sel : out std_logic_vector(c_wishbone_data_width/8-1 downto 0); + wb_cyc : out std_logic; + wb_stb : out std_logic; + wb_we : out std_logic; + + wb_dat_s2m : in std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_err : in std_logic := '0'; + wb_rty : in std_logic := '0'; + wb_ack : in std_logic; + wb_stall : in std_logic + ); + end component; + +end package; + +package body axi4_pkg is + + function f_axi4_full_to_lite ( + f : t_axi4_full_master_out_32 + ) return t_axi4_lite_master_out_32 is + variable l : t_axi4_lite_master_out_32; + begin + + l.ARVALID := f.ARVALID; + l.AWVALID := f.AWVALID; + l.BREADY := f.BREADY; + l.RREADY := f.RREADY; + l.WLAST := f.WLAST; + l.WVALID := f.WVALID; + l.ARADDR := f.ARADDR; + l.AWADDR := f.AWADDR; + l.WDATA := f.WDATA; + l.WSTRB := f.WSTRB; + + return l; + + end f_axi4_full_to_lite; + + function f_axi4_lite_to_full ( + l : t_axi4_lite_master_in_32 + ) return t_axi4_full_master_in_32 is + variable f : t_axi4_full_master_in_32; + begin + f.ARREADY := l.ARREADY; + f.AWREADY := l.AWREADY; + f.BVALID := l.BVALID; + f.RLAST := l.RLAST; + f.RVALID := l.RVALID; + f.WREADY := l.WREADY; + f.BID := (others => '0'); + f.RID := (others => '0'); + f.BRESP := l.BRESP; + f.RRESP := l.RRESP; + f.RDATA := l.RDATA; + + return f; + + end f_axi4_lite_to_full; + + +end package body; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/wb_axi4lite_bridge.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/wb_axi4lite_bridge.vhd new file mode 100644 index 000000000..b8e63eca3 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/wb_axi4lite_bridge.vhd @@ -0,0 +1,131 @@ +------------------------------------------------------------------------------- +-- Title : AXI4Lite-to-WB bridge +-- Project : General Cores +------------------------------------------------------------------------------- +-- File : wb_axi4lite_bridge.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN +-- Platform : FPGA-generics +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- Copyright (c) 2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.axi4_pkg.all; +use work.wishbone_pkg.all; + +entity wb_axi4lite_bridge is + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + ARVALID : in std_logic; + AWVALID : in std_logic; + BREADY : in std_logic; + RREADY : in std_logic; + WLAST : in std_logic; + WVALID : in std_logic; + ARADDR : in std_logic_vector (31 downto 0); + AWADDR : in std_logic_vector (31 downto 0); + WDATA : in std_logic_vector (31 downto 0); + WSTRB : in std_logic_vector (3 downto 0); + ARREADY : out std_logic; + AWREADY : out std_logic; + BVALID : out std_logic; + RLAST : out std_logic; + RVALID : out std_logic; + WREADY : out std_logic; + BRESP : out std_logic_vector (1 downto 0); + RRESP : out std_logic_vector (1 downto 0); + RDATA : out std_logic_vector (31 downto 0); + + wb_adr : out std_logic_vector(c_wishbone_address_width-1 downto 0); + wb_dat_m2s : out std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_sel : out std_logic_vector(c_wishbone_data_width/8-1 downto 0); + wb_cyc : out std_logic; + wb_stb : out std_logic; + wb_we : out std_logic; + + wb_dat_s2m : in std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_err : in std_logic := '0'; + wb_rty : in std_logic := '0'; + wb_ack : in std_logic; + wb_stall : in std_logic + ); + +end wb_axi4lite_bridge; + +architecture rtl of wb_axi4lite_bridge is + + signal axi_in : t_axi4_lite_master_out_32; + signal axi_out : t_axi4_lite_master_in_32; + signal wb_in : t_wishbone_master_in; + signal wb_out : t_wishbone_master_out; + +begin + + axi_in.ARVALID <= ARVALID; + axi_in.AWVALID <= AWVALID; + axi_in.BREADY <= BREADY; + axi_in.RREADY <= RREADY; + axi_in.WLAST <= WLAST; + axi_in.WVALID <= WVALID; + axi_in.ARADDR <= ARADDR; + axi_in.AWADDR <= AWADDR; + axi_in.WDATA <= WDATA; + axi_in.WSTRB <= WSTRB; + ARREADY <= axi_out.ARREADY; + AWREADY <= axi_out.AWREADY; + BVALID <= axi_out.BVALID; + RLAST <= axi_out.RLAST; + RVALID <= axi_out.RVALID; + WREADY <= axi_out.WREADY; + BRESP <= axi_out.BRESP; + RRESP <= axi_out.RRESP; + RDATA <= axi_out.RDATA; + + wb_adr <= wb_out.adr; + wb_dat_m2s <= wb_out.dat; + wb_stb <= wb_out.stb; + wb_sel <= wb_out.sel; + wb_cyc <= wb_out.cyc; + wb_we <= wb_out.we; + + wb_in.err <= wb_err; + wb_in.rty <= wb_rty; + wb_in.ack <= wb_ack; + wb_in.int <= '0'; + wb_in.stall <= wb_stall; + wb_in.dat <= wb_dat_s2m; + + U_Wrapped_Bridge : xwb_axi4lite_bridge + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + axi4_slave_i => axi_in, + axi4_slave_o => axi_out, + wb_master_o => wb_out, + wb_master_i => wb_in); + +end rtl; + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/xwb_axi4lite_bridge.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/xwb_axi4lite_bridge.vhd new file mode 100644 index 000000000..51838931a --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/xwb_axi4lite_bridge.vhd @@ -0,0 +1,196 @@ +------------------------------------------------------------------------------- +-- Title : AXI4Lite-to-WB bridge wrapper +-- Project : General Cores +------------------------------------------------------------------------------- +-- File : xwb_axi4lite_bridge.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN +-- Platform : FPGA-generics +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- Copyright (c) 2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.axi4_pkg.all; +use work.wishbone_pkg.all; + +entity xwb_axi4lite_bridge is + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + axi4_slave_i : in t_axi4_lite_slave_in_32; + axi4_slave_o : out t_axi4_lite_slave_out_32; + + wb_master_o : out t_wishbone_master_out; + wb_master_i : in t_wishbone_master_in + + ); + +end xwb_axi4lite_bridge; + +architecture rtl of xwb_axi4lite_bridge is + + constant c_timeout : integer := 256; + + type t_state is + (IDLE, ISSUE_WRITE, ISSUE_READ, COMPLETE_WRITE, COMPLETE_READ, WAIT_ACK_READ, WAIT_ACK_WRITE, RESPONSE_READ, RESPONSE_WRITE); + + signal state : t_state; + + signal count : unsigned(10 downto 0); + +begin + + process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + axi4_slave_o <= c_axi4_lite_default_master_in_32; + wb_master_o.cyc <= '0'; + state <= IDLE; + else + case state is + when IDLE => + wb_master_o.cyc <= '0'; + axi4_slave_o.ARREADY <= '1'; + axi4_slave_o.AWREADY <= '1'; + axi4_slave_o.WREADY <= '0'; + axi4_slave_o.BVALID <= '0'; + axi4_slave_o.BRESP <= (others => 'X'); + axi4_slave_o.RDATA <= (others => 'X'); + axi4_slave_o.RRESP <= (others => 'X'); + axi4_slave_o.RVALID <= '0'; + axi4_slave_o.RLAST <= '0'; + + if(axi4_slave_i.AWVALID = '1') then + state <= ISSUE_WRITE; + wb_master_o.adr <= axi4_slave_i.AWADDR; + elsif (axi4_slave_i.ARVALID = '1') then + state <= ISSUE_READ; + wb_master_o.adr <= axi4_slave_i.ARADDR; + end if; + + when ISSUE_WRITE => + axi4_slave_o.WREADY <= '1'; + + wb_master_o.cyc <= '1'; + wb_master_o.we <= '1'; + + if(axi4_slave_i.WVALID = '1') then + wb_master_o.stb <= '1'; + wb_master_o.sel <= axi4_slave_i.WSTRB; + wb_master_o.dat <= axi4_slave_i.WDATA; + state <= COMPLETE_WRITE; + end if; + + when ISSUE_READ => + + wb_master_o.cyc <= '1'; + wb_master_o.stb <= '1'; + wb_master_o.we <= '0'; + axi4_slave_o.RVALID <= '0'; + axi4_slave_o.RLAST <= '0'; + state <= COMPLETE_READ; + + when COMPLETE_READ => + if(wb_master_i.stall = '0') then + wb_master_o.stb <= '0'; + if(wb_master_i.ack = '1') then + state <= IDLE; + axi4_slave_o.RRESP <= c_AXI4_RESP_EXOKAY; + axi4_slave_o.RDATA <= wb_master_i.dat; + axi4_slave_o.RVALID <= '1'; + axi4_slave_o.RLAST <= '1'; + wb_master_o.cyc <= '0'; + else + state <= WAIT_ACK_READ; + count <= (others => '0'); + end if; + end if; + + + when COMPLETE_WRITE => + if(wb_master_i.stall = '0') then + wb_master_o.stb <= '0'; + if(wb_master_i.ack = '1') then + state <= RESPONSE_WRITE; + axi4_slave_o.BRESP <= c_AXI4_RESP_EXOKAY; + wb_master_o.cyc <= '0'; + else + state <= WAIT_ACK_WRITE; + count <= (others => '0'); + end if; + end if; + + + when WAIT_ACK_WRITE => + if(wb_master_i.ack = '1') then + state <= RESPONSE_WRITE; + axi4_slave_o.BRESP <= c_AXI4_RESP_EXOKAY; + wb_master_o.cyc <= '0'; + elsif count = c_timeout then + state <= RESPONSE_WRITE; + axi4_slave_o.BRESP <= c_AXI4_RESP_SLVERR; + wb_master_o.cyc <= '0'; + end if; + count <= count + 1; + + when WAIT_ACK_READ => + if(wb_master_i.ack = '1') then + state <= IDLE; + axi4_slave_o.RRESP <= c_AXI4_RESP_EXOKAY; + axi4_slave_o.RVALID <= '1'; + axi4_slave_o.RLAST <= '1'; + axi4_slave_o.RDATA <= wb_master_i.dat; + wb_master_o.cyc <= '0'; + elsif count = c_timeout then + state <= IDLE; + axi4_slave_o.RRESP <= c_AXI4_RESP_SLVERR; + axi4_slave_o.RVALID <= '1'; + axi4_slave_o.RLAST <= '1'; + axi4_slave_o.RDATA <= (others => 'X'); + wb_master_o.cyc <= '0'; + end if; + count <= count + 1; + + + when RESPONSE_WRITE => + if (axi4_slave_i.BREADY = '1') then + axi4_slave_o.BVALID <= '1'; + state <= IDLE; + end if; + + when RESPONSE_READ => null; + + + end case; + + + + end if; + end if; + end process; + +end rtl; + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/sdb_rom.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/sdb_rom.vhd new file mode 100644 index 000000000..9ca049b71 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/sdb_rom.vhd @@ -0,0 +1,160 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.wishbone_pkg.all; + +entity sdb_rom is + generic( + g_layout : t_sdb_record_array; + g_masters : natural; + g_bus_end : unsigned(63 downto 0); + g_sdb_name : string := "WB4-Crossbar-GSI "); + port( + clk_sys_i : in std_logic; + master_i : in std_logic_vector(g_masters-1 downto 0); + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out); +end sdb_rom; + +architecture rtl of sdb_rom is + alias c_layout : t_sdb_record_array(g_layout'length downto 1) is g_layout; + + -- The ROM must describe all slaves, the crossbar itself and the optional information records + constant c_used_entries : natural := c_layout'high + 1; + constant c_rom_entries : natural := 2**f_ceil_log2(c_used_entries); -- next power of 2 + constant c_sdb_words : natural := c_sdb_device_length / c_wishbone_data_width; + constant c_rom_words : natural := c_rom_entries * c_sdb_words; + constant c_rom_depth : natural := f_ceil_log2(c_rom_words); + constant c_rom_lowbits : natural := f_ceil_log2(c_wishbone_data_width / 8); + constant c_sdb_name : string := f_string_fix_len(g_sdb_name , 19, ' ', false); + + -- Index of the MSI entry in SDB + type t_nat_array is array(g_masters-1 downto 0) of natural; + function f_master_positions return t_nat_array is + variable typ : std_logic_vector(7 downto 0); + variable result : t_nat_array; + variable master : natural := 0; + begin + for rec in c_layout'low to c_layout'high loop + typ := c_layout(rec)(7 downto 0); + case typ is + when x"03" | x"f3" => + assert master < g_masters + report "Too many msi records found" + severity failure; + + result(master) := rec; + master := master + 1; + + when others => null; + end case; + end loop; + + if master = 0 then + result := (others => 0); + else + assert master = g_masters + report "Insufficient msi records found (" & Integer'image(master) & "/" & Integer'image(g_masters) & ")" + severity failure; + end if; + return result; + end f_master_positions; + + constant c_master_positions : t_nat_array := f_master_positions; + constant c_msi : boolean := c_master_positions(0) /= 0; + + function f_msi_flag_index(y : std_logic_vector) return std_logic_vector is + variable offset : unsigned(c_rom_depth-1 downto 0) := (others => '0'); + variable result : std_logic_vector(c_rom_depth-1 downto 0) := (others => '0'); + begin + for i in c_master_positions'range loop + if c_msi then + offset := to_unsigned(c_master_positions(i)*16, offset'length); + end if; + for b in result'range loop + result(b) := result(b) or (offset(b) and y(i)); + end loop; + end loop; + return result; + end f_msi_flag_index; + + type t_rom is array(c_rom_words-1 downto 0) of t_wishbone_data; + + function f_build_rom + return t_rom + is + variable res : t_rom := (others => (others => '0')); + variable sdb_record : t_sdb_record; + variable sdb_component : t_sdb_component; + begin + sdb_record(511 downto 480) := x"5344422D" ; -- sdb_magic + sdb_record(479 downto 464) := std_logic_vector(to_unsigned(c_used_entries, 16)); -- sdb_records + sdb_record(463 downto 456) := x"01"; -- sdb_version + sdb_record(455 downto 448) := x"00"; -- sdb_bus_type = sdb_wishbone + sdb_record( 7 downto 0) := x"00"; -- record_type = sdb_interconnect + + sdb_component.addr_first := (others => '0'); + sdb_component.addr_last := std_logic_vector(g_bus_end); + sdb_component.product.vendor_id := x"0000000000000651"; -- GSI + sdb_component.product.device_id := x"e6a542c9"; + sdb_component.product.version := x"00000003"; + sdb_component.product.date := x"20120511"; + sdb_component.product.name := c_sdb_name; + sdb_record(447 downto 8) := f_sdb_embed_component(sdb_component, (others => '0')); + + for i in 0 to c_sdb_words-1 loop + res(c_sdb_words-1-i) := + sdb_record((i+1)*c_wishbone_data_width-1 downto i*c_wishbone_data_width); + end loop; + + for idx in c_layout'range loop + sdb_record := c_layout(idx); + + -- All local/temporary types => empty record + if sdb_record(7 downto 4) = x"f" then + sdb_record(3 downto 0) := x"f"; + end if; + + for i in 0 to c_sdb_words-1 loop + res((idx+1)*c_sdb_words-1-i) := + sdb_record((i+1)*c_wishbone_data_width-1 downto i*c_wishbone_data_width); + end loop; + end loop; + + return res; + end f_build_rom; + + signal rom : t_rom := f_build_rom; + + signal s_adr : unsigned(c_rom_depth-1 downto 0); + signal s_sel : unsigned(c_rom_depth-1 downto 0); + + signal r_rom : t_wishbone_data; + signal r_flag : t_wishbone_data; + signal r_ack : std_logic; + +begin + + slave_o.dat <= r_rom or r_flag; + slave_o.ack <= r_ack; + slave_o.err <= '0'; + slave_o.rty <= '0'; + slave_o.stall <= '0'; + slave_o.int <= '0'; -- Tom sucks! This should not be here. + + s_adr <= unsigned(slave_i.adr(c_rom_depth+c_rom_lowbits-1 downto c_rom_lowbits)); + s_sel <= unsigned(f_msi_flag_index(master_i)); + + slave_clk : process(clk_sys_i) + begin + if (rising_edge(clk_sys_i)) then + r_ack <= slave_i.cyc and slave_i.stb; + r_rom <= rom(to_integer(s_adr)); + r_flag <= (others => '0'); + if s_adr = s_sel and c_msi then + r_flag(r_flag'high) <= '1'; + end if; + end if; + end process; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_crossbar.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_crossbar.vhd new file mode 100644 index 000000000..265e3495b --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_crossbar.vhd @@ -0,0 +1,427 @@ +------------------------------------------------------------------------------- +-- Title : An MxS Wishbone crossbar switch +-- Project : General Cores Library (gencores) +------------------------------------------------------------------------------- +-- File : xwb_crossbar.vhd +-- Author : Wesley W. Terpstra +-- Company : GSI +-- Created : 2011-06-08 +-- Last update: 2011-09-22 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: +-- +-- An MxS Wishbone crossbar switch +-- +-- All masters, slaves, and the crossbar itself must share the same WB clock. +-- All participants must support the same data bus width. +-- +-- If a master raises STB_O with an address not mapped by the crossbar, +-- ERR_I will be raised. If two masters address the same slave +-- simultaneously, the lowest numbered master is granted access. +-- +-- The implementation of this crossbar locks a master to a slave so long as +-- CYC_O is held high. +-- +-- Synthesis/timing relevant facts: +-- (m)asters, (s)laves, masked (a)ddress bits +-- +-- Area required = O(ms log(ma)) +-- Arbitration depth = O(log(msa)) +-- Master->Slave depth = O(log(m)) +-- Slave->Master depth = O(log(s)) +-- +-- If g_registered = false, arbitration depth is added to M->S and S->M. +-- +------------------------------------------------------------------------------- +-- Copyright (c) 2011 GSI / Wesley W. Terpstra +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2012-03-05 3.0 wterpstra made address generic and check overlap +-- 2011-11-04 2.0 wterpstra timing improvements +-- 2011-06-08 1.0 wterpstra import from SVN +------------------------------------------------------------------------------- + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.wishbone_pkg.all; + +entity xwb_crossbar is + generic( + g_num_masters : integer := 2; + g_num_slaves : integer := 1; + g_registered : boolean := false; + -- Address of the slaves connected + g_address : t_wishbone_address_array; + g_mask : t_wishbone_address_array); + port( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + -- Master connections (INTERCON is a slave) + slave_i : in t_wishbone_slave_in_array(g_num_masters-1 downto 0); + slave_o : out t_wishbone_slave_out_array(g_num_masters-1 downto 0); + -- Slave connections (INTERCON is a master) + master_i : in t_wishbone_master_in_array(g_num_slaves-1 downto 0); + master_o : out t_wishbone_master_out_array(g_num_slaves-1 downto 0); + -- Master granted access to SDB for use by MSI crossbar (please ignore it) + sdb_sel_o : out std_logic_vector(g_num_masters-1 downto 0)); +end xwb_crossbar; + +architecture rtl of xwb_crossbar is + alias c_address : t_wishbone_address_array(g_num_slaves-1 downto 0) is g_address; + alias c_mask : t_wishbone_address_array(g_num_slaves-1 downto 0) is g_mask; + + -- Confirm that no address ranges overlap + function f_ranges_ok + return boolean + is + constant zero : t_wishbone_address := (others => '0'); + constant align : std_logic_vector(f_ceil_log2(c_wishbone_data_width)-4 downto 0) := (others => '0'); + begin + -- all (i,j) with 0 <= i < j < n + if g_num_slaves > 1 then + for i in 0 to g_num_slaves-2 loop + for j in i+1 to g_num_slaves-1 loop + assert not (((c_mask(i) and c_mask(j)) and (c_address(i) xor c_address(j))) = zero) or + ((c_mask(i) or not c_address(i)) = zero) or -- disconnected slave? + ((c_mask(j) or not c_address(j)) = zero) -- disconnected slave? + report "Address ranges must be distinct (slaves " & + Integer'image(i) & "[" & f_bits2string(c_address(i)) & "/" & + f_bits2string(c_mask(i)) & "] & " & + Integer'image(j) & "[" & f_bits2string(c_address(j)) & "/" & + f_bits2string(c_mask(j)) & "])" + severity Failure; + end loop; + end loop; + end if; + for i in 0 to g_num_slaves-1 loop + assert (c_address(i) and not c_mask(i)) = zero or -- at least 1 bit outside mask + (not c_address(i) or c_mask(i)) = zero -- all bits outside mask (= disconnected) + report "Address bits not in mask; slave #" & + Integer'image(i) & "[" & f_bits2string(c_address(i)) & "/" & + f_bits2string(c_mask(i)) & "]" + severity Failure; + + assert c_mask(i)(align'range) = align + report "Address space smaller than a wishbone register; slave #" & + Integer'image(i) & "[" & f_bits2string(c_address(i)) & "/" & + f_bits2string(c_mask(i)) & "]" + severity Failure; + + -- Working case + report "Mapping slave #" & + Integer'image(i) & "[" & f_bits2string(c_address(i)) & "/" & + f_bits2string(c_mask(i)) & "]" + severity Note; + end loop; + return true; + end f_ranges_ok; + constant c_ok : boolean := f_ranges_ok; + + -- Crossbar connection matrix + type matrix is array (g_num_masters-1 downto 0, g_num_slaves downto 0) of std_logic; + + -- Add an 'error' device to the list of slaves + signal master_ie : t_wishbone_master_in_array(g_num_slaves downto 0); + signal master_oe : t_wishbone_master_out_array(g_num_slaves downto 0); + signal virtual_ERR : std_logic; + + signal matrix_old : matrix; -- Registered connection matrix + signal matrix_new : matrix; -- The new values of the matrix + + -- Either matrix_old or matrix_new, depending on g_registered + signal granted : matrix; + + -- 1 => 0 2 => 1 3..4 => 2 5..8 => 3 + function log2(i : natural) return natural is + begin + if i <= 1 + then return 0; + else return log2((i+1)/2) + 1; + end if; + end log2; + + -- 0 => 1 1 => 2 2 => 4 3 => 8 + function pow2(i : natural) return natural is + begin + if i = 0 + then return 1; + else return pow2(i-1)*2; + end if; + end pow2; + + -- If any of the bits are '1', the whole thing is '1' + -- This function makes the check explicitly have logarithmic depth. + function vector_OR(x : std_logic_vector) + return std_logic + is + constant len : integer := x'length; + constant mid : integer := len / 2; + alias y : std_logic_vector(len-1 downto 0) is x; + begin + if len = 1 + then return y(0); + else return vector_OR(y(len-1 downto mid)) or + vector_OR(y(mid-1 downto 0)); + end if; + end vector_OR; + + -- Kogge-Stone network of ORs. + -- A log(n) deep, n-wide circuit where: + -- output(i) = OR_{j<=i} input(j) + function ks_OR(input : std_logic_vector) + return std_logic_vector + is + constant width : natural := input'length; + constant stages : natural := log2(width); + variable prev : std_logic_vector(width-1 downto 0); + variable output : std_logic_vector(width-1 downto 0); + begin + prev := input; + if stages = 0 then + output := prev; + else + for l in 0 to stages-1 loop + for i in 0 to width-1 loop + if i >= pow2(l) + then output(i) := prev(i) or prev(i-pow2(l)); + else output(i) := prev(i); + end if; + end loop; + prev := output; + end loop; + end if; + return output; + end ks_OR; + + -- Impure because it accesses c_{address, mask} + function matrix_logic( + matrix_old : matrix; + slave_i : t_wishbone_slave_in_array(g_num_masters-1 downto 0)) + return matrix + is + subtype row is std_logic_vector(g_num_masters-1 downto 0); + subtype column is std_logic_vector(g_num_slaves downto 0); + + variable tmp : std_logic; + variable tmp_column : column; + variable tmp_row : row; + + variable request : matrix; -- Which slaves do the masters address log(S) + variable selected : matrix; -- Which master wins arbitration log(M) request + variable sbusy : column; -- Does the slave's previous connection persist? + variable mbusy : row; -- Does the master's previous connection persist? + variable matrix_new : matrix; + begin + -- A slave is busy iff it services an in-progress cycle + for slave in g_num_slaves downto 0 loop + for master in g_num_masters-1 downto 0 loop + tmp_row(master) := matrix_old(master, slave) and slave_i(master).CYC; + end loop; + sbusy(slave) := vector_OR(tmp_row); + end loop; + + -- A master is busy iff it services an in-progress cycle + for master in g_num_masters-1 downto 0 loop + for slave in g_num_slaves downto 0 loop + tmp_column(slave) := matrix_old(master, slave); + end loop; + mbusy(master) := vector_OR(tmp_column) and slave_i(master).CYC; + end loop; + + -- Decode the request address to see if master wants access + for master in g_num_masters-1 downto 0 loop + for slave in g_num_slaves-1 downto 0 loop + tmp := not vector_OR((slave_i(master).ADR and c_mask(slave)) xor c_address(slave)); + tmp_column(slave) := tmp; + request(master, slave) := slave_i(master).CYC and slave_i(master).STB and tmp; + end loop; + tmp_column(g_num_slaves) := '0'; + -- If no slaves match request, bind to 'error device' + request(master, g_num_slaves) := slave_i(master).CYC and slave_i(master).STB and not vector_OR(tmp_column); + end loop; + + -- Arbitrate among the requesting masters + -- Policy: lowest numbered master first + for slave in g_num_slaves downto 0 loop + -- OR together all the requests by higher priority masters + for master in 0 to g_num_masters-1 loop + tmp_row(master) := request(master, slave); + end loop; + tmp_row := ks_OR(tmp_row); + + -- Grant to highest priority master + selected(0, slave) := request(0, slave); -- master 0 always wins + if g_num_masters > 1 then + for master in 1 to g_num_masters-1 loop + selected(master, slave) := -- only if requested and no lower requests + not tmp_row(master-1) and request(master, slave); + end loop; + end if; + end loop; + + -- Determine the master granted access + -- Policy: if cycle still in progress, preserve the previous choice + for slave in g_num_slaves downto 0 loop + for master in g_num_masters-1 downto 0 loop + if sbusy(slave) = '1' or mbusy(master) = '1' then + matrix_new(master, slave) := matrix_old(master, slave); + else + matrix_new(master, slave) := selected(master, slave); + end if; + end loop; + end loop; + + return matrix_new; + end matrix_logic; + + subtype slave_row is std_logic_vector(g_num_masters-1 downto 0); + type slave_matrix is array (natural range <>) of slave_row; + + function slave_matrix_OR(x : slave_matrix) + return std_logic_vector is + variable result : std_logic_vector(x'LENGTH-1 downto 0); + begin + for i in x'LENGTH-1 downto 0 loop + result(i) := vector_OR(x(i)); + end loop; + return result; + end slave_matrix_OR; + + -- Select the master pins the slave will receive + function slave_logic(slave : integer; + granted : matrix; + slave_i : t_wishbone_slave_in_array(g_num_masters-1 downto 0)) + return t_wishbone_master_out + is + variable CYC_row : slave_row; + variable STB_row : slave_row; + variable ADR_matrix : slave_matrix(c_wishbone_address_width-1 downto 0); + variable SEL_matrix : slave_matrix((c_wishbone_address_width/8)-1 downto 0); + variable WE_row : slave_row; + variable DAT_matrix : slave_matrix(c_wishbone_data_width-1 downto 0); + begin + -- Rename all the signals ready for big_or + for master in g_num_masters-1 downto 0 loop + CYC_row(master) := slave_i(master).CYC and granted(master, slave); + STB_row(master) := slave_i(master).STB and granted(master, slave); + for bit in c_wishbone_address_width-1 downto 0 loop + ADR_matrix(bit)(master) := slave_i(master).ADR(bit) and granted(master, slave); + end loop; + for bit in (c_wishbone_address_width/8)-1 downto 0 loop + SEL_matrix(bit)(master) := slave_i(master).SEL(bit) and granted(master, slave); + end loop; + WE_row(master) := slave_i(master).WE and granted(master, slave); + for bit in c_wishbone_data_width-1 downto 0 loop + DAT_matrix(bit)(master) := slave_i(master).DAT(bit) and granted(master, slave); + end loop; + end loop; + + return ( + CYC => vector_OR(CYC_row), + STB => vector_OR(STB_row), + ADR => slave_matrix_OR(ADR_matrix), + SEL => slave_matrix_OR(SEL_matrix), + WE => vector_OR(WE_row), + DAT => slave_matrix_OR(DAT_matrix)); + end slave_logic; + + subtype master_row is std_logic_vector(g_num_slaves downto 0); + type master_matrix is array (natural range <>) of master_row; + + function master_matrix_OR(x : master_matrix) + return std_logic_vector is + variable result : std_logic_vector(x'LENGTH-1 downto 0); + begin + for i in x'LENGTH-1 downto 0 loop + result(i) := vector_OR(x(i)); + end loop; + return result; + end master_matrix_OR; + + -- Select the slave pins the master will receive + function master_logic(master : integer; + granted : matrix; + master_ie : t_wishbone_master_in_array(g_num_slaves downto 0)) + return t_wishbone_slave_out + is + variable ACK_row : master_row; + variable ERR_row : master_row; + variable RTY_row : master_row; + variable STALL_row : master_row; + variable DAT_matrix : master_matrix(c_wishbone_data_width-1 downto 0); + begin + -- We use inverted logic on STALL so that if no slave granted => stall + for slave in g_num_slaves downto 0 loop + ACK_row(slave) := master_ie(slave).ACK and granted(master, slave); + ERR_row(slave) := master_ie(slave).ERR and granted(master, slave); + RTY_row(slave) := master_ie(slave).RTY and granted(master, slave); + STALL_row(slave) := not master_ie(slave).STALL and granted(master, slave); + for bit in c_wishbone_data_width-1 downto 0 loop + DAT_matrix(bit)(slave) := master_ie(slave).DAT(bit) and granted(master, slave); + end loop; + end loop; + + return ( + ACK => vector_OR(ACK_row), + ERR => vector_OR(ERR_row), + RTY => vector_OR(RTY_row), + STALL => not vector_OR(STALL_row), + DAT => master_matrix_OR(DAT_matrix), + INT => '0'); + end master_logic; +begin + -- The virtual error slave is pretty straight-forward: + master_o <= master_oe(g_num_slaves-1 downto 0); + master_ie(g_num_slaves-1 downto 0) <= master_i; + + master_ie(g_num_slaves) <= ( + ACK => '0', + ERR => virtual_ERR, + RTY => '0', + STALL => '0', + DAT => (others => '0'), + INT => '0'); + virtual_error_slave : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + virtual_ERR <= master_oe(g_num_slaves).CYC and master_oe(g_num_slaves).STB; + end if; + end process virtual_error_slave; + + -- Copy the matrix to a register: + matrix_new <= matrix_logic(matrix_old, slave_i); + main : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + matrix_old <= (others => (others => '0')); + else + matrix_old <= matrix_new; + end if; + end if; + end process main; + + -- Is the crossbar combinatorial or registered + granted <= matrix_old when g_registered else matrix_new; + + -- Make the slave connections + slave_matrixs : for slave in g_num_slaves downto 0 generate + master_oe(slave) <= slave_logic(slave, granted, slave_i); + end generate; + + -- Make the master connections + master_matrixs : for master in g_num_masters-1 downto 0 generate + slave_o(master) <= master_logic(master, granted, master_ie); + end generate; + + -- Tell SDB which master is accessing it (SDB is last slave) + sdb_masters : for master in g_num_masters-1 downto 0 generate + sdb_sel_o(master) <= granted(master, g_num_slaves-1); + end generate; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_sdb_crossbar.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_sdb_crossbar.vhd new file mode 100644 index 000000000..010fe078a --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_sdb_crossbar.vhd @@ -0,0 +1,232 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.wishbone_pkg.all; + +entity xwb_sdb_crossbar is + generic( + g_num_masters : natural := 1; + g_num_slaves : natural := 1; + g_registered : boolean := false; + g_wraparound : boolean := true; + g_layout : t_sdb_record_array; + g_sdb_addr : t_wishbone_address; + g_sdb_name : string := "WB4-Crossbar-GSI "); + port( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + -- Master connections (INTERCON is a slave) + slave_i : in t_wishbone_slave_in_array (g_num_masters-1 downto 0); + slave_o : out t_wishbone_slave_out_array (g_num_masters-1 downto 0); + msi_master_i : in t_wishbone_master_in_array (g_num_masters-1 downto 0) := (others => cc_dummy_master_in); + msi_master_o : out t_wishbone_master_out_array(g_num_masters-1 downto 0); + -- Slave connections (INTERCON is a master) + master_i : in t_wishbone_master_in_array (g_num_slaves -1 downto 0); + master_o : out t_wishbone_master_out_array(g_num_slaves -1 downto 0); + msi_slave_i : in t_wishbone_slave_in_array (g_num_slaves -1 downto 0) := (others => cc_dummy_slave_in); + msi_slave_o : out t_wishbone_slave_out_array (g_num_slaves -1 downto 0)); +end xwb_sdb_crossbar; + +architecture rtl of xwb_sdb_crossbar is + alias c_layout : t_sdb_record_array(g_layout'length-1 downto 0) is g_layout; + + -- Pretty print device name + function f_trim(s : string) return string is + variable cut : natural; + begin + byte : for i in s'length downto 1 loop + cut := i; + exit byte when s(i) /= ' '; + end loop; + return s(1 to cut); + end f_trim; + + -- Step 1. Place the SDB ROM on the bus + -- How much space does the ROM need? + constant c_used_entries : natural := c_layout'length + 1; + constant c_rom_entries : natural := 2**f_ceil_log2(c_used_entries); -- next power of 2 + constant c_sdb_bytes : natural := c_sdb_device_length / 8; + constant c_rom_bytes : natural := c_rom_entries * c_sdb_bytes; + + constant c_bus_last : unsigned := f_sdb_bus_end(g_wraparound, g_layout, g_sdb_addr, false); + constant c_msi_last : unsigned := f_sdb_bus_end(g_wraparound, g_layout, g_sdb_addr, true); + + type t_addresses is record + bus_address : t_wishbone_address_array(g_num_slaves -1 downto 0); + bus_mask : t_wishbone_address_array(g_num_slaves -1 downto 0); + msi_address : t_wishbone_address_array(g_num_masters-1 downto 0); + msi_mask : t_wishbone_address_array(g_num_masters-1 downto 0); + end record t_addresses; + + -- Step 3. Map device address begin values + function f_addresses return t_addresses is + variable result : t_addresses; + + variable typ : std_logic_vector(7 downto 0); + variable sdb_component : t_sdb_component; + + variable address : t_wishbone_address; + variable extend : std_logic_vector(63 downto 0) := (others => '0'); + variable size : unsigned(63 downto 0); + + variable bus_index : natural := 0; + variable msi_index : natural := 0; + begin + for i in c_layout'low to c_layout'high loop + typ := c_layout(i)(7 downto 0); + sdb_component := f_sdb_extract_component(c_layout(i)(447 downto 8)); + + if (typ(7) = '0') then --only do address checks on non-meta record types (typ >= 0x80) + -- Range must be valid + assert unsigned(sdb_component.addr_first) <= unsigned(sdb_component.addr_last) + report "Wishbone slave device #" & Integer'image(i) & " (" & f_trim(sdb_component.product.name) & ") sdb_component.addr_first (" & f_bits2string(sdb_component.addr_first) & ") must precede sdb_component.addr_last address (" & f_bits2string(sdb_component.addr_last) & ")." + severity Failure; + + -- Address must fit within Wishbone address width + address := sdb_component.addr_first(address'range); + extend(address'range) := address; + assert sdb_component.addr_first = extend + report "Wishbone slave device #" & Integer'image(i) & " (" & f_trim(sdb_component.product.name) & ") sdb_component.addr_first (" & f_bits2string(sdb_component.addr_first) & " does not fit in t_wishbone_address." + severity Failure; + + size := unsigned(sdb_component.addr_last) - unsigned(sdb_component.addr_first); + -- size must be of the form 000000...00001111...1 + assert (size and (size + 1)) = 0 + report "Wishbone slave device #" & Integer'image(i) & " (" & f_trim(sdb_component.product.name) & ") has an address range that is not a power of 2 minus one (" & f_bits2string(std_logic_vector(size)) & "). This is not supported by the crossbar." + severity Warning; + + -- fix the size up to the form 000...0001111...11 + for j in c_wishbone_address_width-2 downto 0 loop + size(j) := size(j) or size(j+1); + end loop; + + -- the base address must be aligned to the size + assert (unsigned(sdb_component.addr_first) and size) = 0 + report "Wishbone slave device #" & Integer'image(i) & " (" & f_trim(sdb_component.product.name) & ") sdb_component.addr_first (" & f_bits2string(sdb_component.addr_first) & ") is not aligned. This is not supported by the crossbar." + severity Failure; + + end if; + + -- Record the address for posterity + case typ is + when x"01" | x"02" => + assert bus_index < g_num_slaves + report "Too many device and bridge records found in g_layout" + severity Failure; + + size := c_bus_last - size; + result.bus_address(bus_index) := address; + result.bus_mask (bus_index) := std_logic_vector(size(address'range)); + bus_index := bus_index + 1; + + when x"03" => + assert msi_index < g_num_masters + report "Too many msi records found in g_layout" + severity Failure; + + size := c_msi_last - size; + result.msi_address(msi_index) := address; + result.msi_mask (msi_index) := std_logic_vector(size(address'range)); + msi_index := msi_index + 1; + + when x"f1" | x"f2" => + result.bus_address(bus_index) := (others => '1'); + result.bus_mask (bus_index) := (others => '0'); + bus_index := bus_index + 1; + + when x"f3" => + result.msi_address(msi_index) := (others => '1'); + result.msi_mask (msi_index) := (others => '0'); + msi_index := msi_index + 1; + + when others => null; + end case; + end loop; + + -- There must be exactly the right number of slave SDB records + assert bus_index = g_num_slaves + report "Too few device and bridge records found in g_layout. Did you accidentally include meta records in the supplied number of slaves?" + severity Failure; + + -- It is OK to have no master records (backwards compat) + if msi_index = 0 then + result.msi_address := (others => (others => '1')); + result.msi_mask := (others => (others => '0')); + else + assert msi_index = g_num_masters + report "Too few msi records found in g_layout" + severity Failure; + end if; + + return result; + end f_addresses; + + constant c_addresses : t_addresses := f_addresses; + + -- Figure out the mask for the SDB slave + constant c_rom_mask : unsigned(63 downto 0) := + c_bus_last - to_unsigned(c_rom_bytes-1, 64); + constant c_sdb_mask : t_wishbone_address := + std_logic_vector(c_rom_mask(c_wishbone_address_width-1 downto 0)); + + -- Fill bus crossbar parameters + constant c_address : t_wishbone_address_array(g_num_slaves downto 0) := + g_sdb_addr & c_addresses.bus_address; + constant c_mask : t_wishbone_address_array(g_num_slaves downto 0) := + c_sdb_mask & c_addresses.bus_mask; + + signal master_i_1 : t_wishbone_master_in_array(g_num_slaves downto 0); + signal master_o_1 : t_wishbone_master_out_array(g_num_slaves downto 0); + signal sdb_sel : std_logic_vector(g_num_masters-1 downto 0); + +begin + + -- Pass-through all slave ports except SDB + master_i_1(g_num_slaves-1 downto 0) <= master_i; + master_o <= master_o_1(g_num_slaves-1 downto 0); + + rom : sdb_rom + generic map( + g_layout => c_layout, + g_masters => g_num_masters, + g_bus_end => c_bus_last, + g_sdb_name => g_sdb_name) + port map( + clk_sys_i => clk_sys_i, + master_i => sdb_sel, + slave_i => master_o_1(g_num_slaves), + slave_o => master_i_1(g_num_slaves)); + + crossbar : xwb_crossbar + generic map( + g_num_masters => g_num_masters, + g_num_slaves => g_num_slaves + 1, + g_registered => g_registered, + g_address => c_address, + g_mask => c_mask) + port map( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + slave_i => slave_i, + slave_o => slave_o, + master_i => master_i_1, + master_o => master_o_1, + sdb_sel_o => sdb_sel); + + msi : xwb_crossbar + generic map( + g_num_masters => g_num_slaves, + g_num_slaves => g_num_masters, + g_registered => g_registered, + g_address => c_addresses.msi_address, + g_mask => c_addresses.msi_mask) + port map( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + slave_i => msi_slave_i, + slave_o => msi_slave_o, + master_i => msi_master_i, + master_o => msi_master_o, + sdb_sel_o => open); + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_dpram/xwb_dpram.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_dpram/xwb_dpram.vhd new file mode 100644 index 000000000..71c3f3840 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_dpram/xwb_dpram.vhd @@ -0,0 +1,185 @@ +------------------------------------------------------------------------------- +-- Title : Dual-port RAM for WR core +-- Project : WhiteRabbit +------------------------------------------------------------------------------- +-- File : wrc_dpram.vhd +-- Author : Grzegorz Daniluk +-- Company : CERN +-- Created : 2011-02-15 +-- Last update: 2017-02-03 +-- Platform : FPGA-generics +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- Description: +-- +-- Dual port RAM with wishbone interface +------------------------------------------------------------------------------- +-- Copyright (c) 2011-2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2011-02-15 1.0 greg.d Created +-- 2011-06-09 1.01 twlostow Removed unnecessary generics +-- 2011-21-09 1.02 twlostow Struct-ized version +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + + +library work; +use work.genram_pkg.all; +use work.wishbone_pkg.all; + +entity xwb_dpram is + generic( + g_size : natural := 16384; + g_init_file : string := ""; + g_must_have_init_file : boolean := true; + g_slave1_interface_mode : t_wishbone_interface_mode; + g_slave2_interface_mode : t_wishbone_interface_mode; + g_slave1_granularity : t_wishbone_address_granularity; + g_slave2_granularity : t_wishbone_address_granularity + ); + port( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + slave1_i : in t_wishbone_slave_in; + slave1_o : out t_wishbone_slave_out; + slave2_i : in t_wishbone_slave_in; + slave2_o : out t_wishbone_slave_out + ); +end xwb_dpram; + +architecture struct of xwb_dpram is + + signal s_wea : std_logic; + signal s_web : std_logic; + signal s_bwea : std_logic_vector(3 downto 0); + signal s_bweb : std_logic_vector(3 downto 0); + + signal slave1_in : t_wishbone_slave_in; + signal slave1_out : t_wishbone_slave_out; + signal slave2_in : t_wishbone_slave_in; + signal slave2_out : t_wishbone_slave_out; + +begin + U_Adapter1 : wb_slave_adapter + generic map ( + g_master_use_struct => true, + g_master_mode => g_slave1_interface_mode, + g_master_granularity => WORD, + g_slave_use_struct => true, + g_slave_mode => g_slave1_interface_mode, + g_slave_granularity => g_slave1_granularity) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + slave_i => slave1_i, + slave_o => slave1_o, + master_i => slave1_out, + master_o => slave1_in); + + U_Adapter2 : wb_slave_adapter + generic map ( + g_master_use_struct => true, + g_master_mode => g_slave2_interface_mode, + g_master_granularity => WORD, + g_slave_use_struct => true, + g_slave_mode => g_slave2_interface_mode, + g_slave_granularity => g_slave2_granularity) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + slave_i => slave2_i, + slave_o => slave2_o, + master_i => slave2_out, + master_o => slave2_in); + + U_DPRAM : generic_dpram + generic map( + -- standard parameters + g_data_width => 32, + g_size => g_size, + g_with_byte_enable => true, + g_addr_conflict_resolution => "dont_care", + g_init_file => g_init_file, + g_dual_clock => false + ) + port map( + rst_n_i => rst_n_i, + -- Port A + clka_i => clk_sys_i, + bwea_i => s_bwea, + wea_i => s_wea, + aa_i => slave1_in.adr(f_log2_size(g_size)-1 downto 0), + da_i => slave1_in.dat, + qa_o => slave1_out.dat, + -- Port B + clkb_i => clk_sys_i, + bweb_i => s_bweb, + web_i => s_web, + ab_i => slave2_in.adr(f_log2_size(g_size)-1 downto 0), + db_i => slave2_in.dat, + qb_o => slave2_out.dat + ); + + -- I know this looks weird, but otherwise ISE generates distributed RAM instead of block + -- RAM + s_bwea <= slave1_in.sel when s_wea = '1' else f_zeros(c_wishbone_data_width/8); + s_bweb <= slave2_in.sel when s_web = '1' else f_zeros(c_wishbone_data_width/8); + + s_wea <= slave1_in.we and slave1_in.stb and slave1_in.cyc; + s_web <= slave2_in.we and slave2_in.stb and slave2_in.cyc; + + process(clk_sys_i) + begin + if(rising_edge(clk_sys_i)) then + if(rst_n_i = '0') then + slave1_out.ack <= '0'; + slave2_out.ack <= '0'; + else + if(slave1_out.ack = '1' and g_slave1_interface_mode = CLASSIC) then + slave1_out.ack <= '0'; + else + slave1_out.ack <= slave1_in.cyc and slave1_in.stb; + end if; + + if(slave2_out.ack = '1' and g_slave2_interface_mode = CLASSIC) then + slave2_out.ack <= '0'; + else + slave2_out.ack <= slave2_in.cyc and slave2_in.stb; + end if; + end if; + end if; + end process; + + slave1_out.stall <= '0'; + slave2_out.stall <= '0'; + slave1_out.err <= '0'; + slave2_out.err <= '0'; + slave1_out.rty <= '0'; + slave2_out.rty <= '0'; + slave1_out.int <= '0'; + slave2_out.int <= '0'; + +end struct; + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/generated/lm32_allprofiles.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/generated/lm32_allprofiles.v new file mode 100644 index 000000000..af57302c2 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/generated/lm32_allprofiles.v @@ -0,0 +1,102181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_top_full ( + + clk_i, + rst_i, + + + interrupt, + + + + + + + + + + + I_DAT_I, + I_ACK_I, + I_ERR_I, + I_RTY_I, + + + + D_DAT_I, + D_ACK_I, + D_ERR_I, + D_RTY_I, + + + + + + + + + + + + I_DAT_O, + I_ADR_O, + I_CYC_O, + I_SEL_O, + I_STB_O, + I_WE_O, + I_CTI_O, + I_LOCK_O, + I_BTE_O, + + + + D_DAT_O, + D_ADR_O, + D_CYC_O, + D_SEL_O, + D_STB_O, + D_WE_O, + D_CTI_O, + D_LOCK_O, + D_BTE_O + ); + +parameter eba_reset = 32'h00000000; +parameter sdb_address = 32'h00000000; + + + + +input clk_i; +input rst_i; + + +input [ (32-1):0] interrupt; + + + + + + + + + + +input [ (32-1):0] I_DAT_I; +input I_ACK_I; +input I_ERR_I; +input I_RTY_I; + + + +input [ (32-1):0] D_DAT_I; +input D_ACK_I; +input D_ERR_I; +input D_RTY_I; + + + + + + + + + + + + + + + + + + + +output [ (32-1):0] I_DAT_O; +wire [ (32-1):0] I_DAT_O; +output [ (32-1):0] I_ADR_O; +wire [ (32-1):0] I_ADR_O; +output I_CYC_O; +wire I_CYC_O; +output [ (4-1):0] I_SEL_O; +wire [ (4-1):0] I_SEL_O; +output I_STB_O; +wire I_STB_O; +output I_WE_O; +wire I_WE_O; +output [ (3-1):0] I_CTI_O; +wire [ (3-1):0] I_CTI_O; +output I_LOCK_O; +wire I_LOCK_O; +output [ (2-1):0] I_BTE_O; +wire [ (2-1):0] I_BTE_O; + + + +output [ (32-1):0] D_DAT_O; +wire [ (32-1):0] D_DAT_O; +output [ (32-1):0] D_ADR_O; +wire [ (32-1):0] D_ADR_O; +output D_CYC_O; +wire D_CYC_O; +output [ (4-1):0] D_SEL_O; +wire [ (4-1):0] D_SEL_O; +output D_STB_O; +wire D_STB_O; +output D_WE_O; +wire D_WE_O; +output [ (3-1):0] D_CTI_O; +wire [ (3-1):0] D_CTI_O; +output D_LOCK_O; +wire D_LOCK_O; +output [ (2-1):0] D_BTE_O; +wire [ (2-1):0] D_BTE_O; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1<= 32'h0) + && (load_store_address_x <= 32'h7fffffff) + + + + + + + + + ; + + + + assign wb_select_x = 1'b1 + + + && !dcache_select_x + + + + + + + + + + + ; + + +always @(*) +begin + case (size_x) + 2'b00: store_data_x = {4{store_operand_x[7:0]}}; + 2'b11: store_data_x = {2{store_operand_x[15:0]}}; + 2'b10: store_data_x = store_operand_x; + default: store_data_x = { 32{1'bx}}; + endcase +end + + +always @(*) +begin + casez ({size_x, load_store_address_x[1:0]}) + { 2'b00, 2'b11}: byte_enable_x = 4'b0001; + { 2'b00, 2'b10}: byte_enable_x = 4'b0010; + { 2'b00, 2'b01}: byte_enable_x = 4'b0100; + { 2'b00, 2'b00}: byte_enable_x = 4'b1000; + { 2'b11, 2'b1?}: byte_enable_x = 4'b0011; + { 2'b11, 2'b0?}: byte_enable_x = 4'b1100; + { 2'b10, 2'b??}: byte_enable_x = 4'b1111; + default: byte_enable_x = 4'bxxxx; + endcase +end + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + assign data_m = wb_select_m == 1'b1 + ? wb_data_m + : dcache_data_m; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +always @(*) +begin + casez ({size_w, load_store_address_w[1:0]}) + { 2'b00, 2'b11}: load_data_w = {{24{sign_extend_w & data_w[7]}}, data_w[7:0]}; + { 2'b00, 2'b10}: load_data_w = {{24{sign_extend_w & data_w[15]}}, data_w[15:8]}; + { 2'b00, 2'b01}: load_data_w = {{24{sign_extend_w & data_w[23]}}, data_w[23:16]}; + { 2'b00, 2'b00}: load_data_w = {{24{sign_extend_w & data_w[31]}}, data_w[31:24]}; + { 2'b11, 2'b1?}: load_data_w = {{16{sign_extend_w & data_w[15]}}, data_w[15:0]}; + { 2'b11, 2'b0?}: load_data_w = {{16{sign_extend_w & data_w[31]}}, data_w[31:16]}; + { 2'b10, 2'b??}: load_data_w = data_w; + default: load_data_w = { 32{1'bx}}; + endcase +end + + +assign d_bte_o = 2'b00; + + + + +generate + case (bytes_per_line) + 4: + begin +assign first_cycle_type = 3'b111; +assign next_cycle_type = 3'b111; +assign last_word = 1'b1; +assign first_address = {dcache_refill_address[ 32-1:2], 2'b00}; + end + 8: + begin +assign first_cycle_type = 3'b010; +assign next_cycle_type = 3'b111; +assign last_word = (&d_adr_o[addr_offset_msb:addr_offset_lsb]) == 1'b1; +assign first_address = {dcache_refill_address[ 32-1:addr_offset_msb+1], {addr_offset_width{1'b0}}, 2'b00}; + end + 16: + begin +assign first_cycle_type = 3'b010; +assign next_cycle_type = d_adr_o[addr_offset_msb] == 1'b1 ? 3'b111 : 3'b010; +assign last_word = (&d_adr_o[addr_offset_msb:addr_offset_lsb]) == 1'b1; +assign first_address = {dcache_refill_address[ 32-1:addr_offset_msb+1], {addr_offset_width{1'b0}}, 2'b00}; + end + endcase +endgenerate + + + + + + + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + d_cyc_o <= 1'b0; + d_stb_o <= 1'b0; + d_dat_o <= { 32{1'b0}}; + d_adr_o <= { 32{1'b0}}; + d_sel_o <= { 4{ 1'b0}}; + d_we_o <= 1'b0; + d_cti_o <= 3'b111; + d_lock_o <= 1'b0; + wb_data_m <= { 32{1'b0}}; + wb_load_complete <= 1'b0; + stall_wb_load <= 1'b0; + + + dcache_refill_ready <= 1'b0; + + + end + else + begin + + + + dcache_refill_ready <= 1'b0; + + + + if (d_cyc_o == 1'b1) + begin + + if ((d_ack_i == 1'b1) || (d_err_i == 1'b1)) + begin + + + if ((dcache_refilling == 1'b1) && (!last_word)) + begin + + d_adr_o[addr_offset_msb:addr_offset_lsb] <= d_adr_o[addr_offset_msb:addr_offset_lsb] + 1'b1; + end + else + + + begin + + d_cyc_o <= 1'b0; + d_stb_o <= 1'b0; + d_lock_o <= 1'b0; + end + + + d_cti_o <= next_cycle_type; + + dcache_refill_ready <= dcache_refilling; + + + + wb_data_m <= d_dat_i; + + wb_load_complete <= !d_we_o; + end + + end + else + begin + + + if (dcache_refill_request == 1'b1) + begin + + d_adr_o <= first_address; + d_cyc_o <= 1'b1; + d_sel_o <= { 32/8{ 1'b1}}; + d_stb_o <= 1'b1; + d_we_o <= 1'b0; + d_cti_o <= first_cycle_type; + + end + else + + + if ( (store_q_m == 1'b1) + && (stall_m == 1'b0) + + + + + + + + + ) + begin + + d_dat_o <= store_data_m; + d_adr_o <= load_store_address_m; + d_cyc_o <= 1'b1; + d_sel_o <= byte_enable_m; + d_stb_o <= 1'b1; + d_we_o <= 1'b1; + d_cti_o <= 3'b111; + end + else if ( (load_q_m == 1'b1) + && (wb_select_m == 1'b1) + && (wb_load_complete == 1'b0) + + ) + begin + + stall_wb_load <= 1'b0; + d_adr_o <= load_store_address_m; + d_cyc_o <= 1'b1; + d_sel_o <= byte_enable_m; + d_stb_o <= 1'b1; + d_we_o <= 1'b0; + d_cti_o <= 3'b111; + end + end + + if (stall_m == 1'b0) + wb_load_complete <= 1'b0; + + if ((load_q_x == 1'b1) && (wb_select_x == 1'b1) && (stall_x == 1'b0)) + stall_wb_load <= 1'b1; + + if ((kill_m == 1'b1) || (exception_m == 1'b1)) + stall_wb_load <= 1'b0; + end +end + + + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + sign_extend_m <= 1'b0; + size_m <= 2'b00; + byte_enable_m <= 1'b0; + store_data_m <= { 32{1'b0}}; + + + dcache_select_m <= 1'b0; + + + + + + + + + + + + wb_select_m <= 1'b0; + end + else + begin + if (stall_m == 1'b0) + begin + sign_extend_m <= sign_extend_x; + size_m <= size_x; + byte_enable_m <= byte_enable_x; + store_data_m <= store_data_x; + + + dcache_select_m <= dcache_select_x; + + + + + + + + + + + + wb_select_m <= wb_select_x; + end + end +end + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + size_w <= 2'b00; + data_w <= { 32{1'b0}}; + sign_extend_w <= 1'b0; + end + else + begin + size_w <= size_m; + + + + + + data_w <= data_m; + + sign_extend_w <= sign_extend_m; + end +end + + + + + + + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_decoder_full ( + + instruction, + + d_result_sel_0, + d_result_sel_1, + x_result_sel_csr, + + + x_result_sel_mc_arith, + + + + + + + + + x_result_sel_sext, + + + x_result_sel_logic, + + + + + x_result_sel_add, + m_result_sel_compare, + + + m_result_sel_shift, + + + w_result_sel_load, + + + w_result_sel_mul, + + + x_bypass_enable, + m_bypass_enable, + read_enable_0, + read_idx_0, + read_enable_1, + read_idx_1, + write_enable, + write_idx, + immediate, + branch_offset, + load, + store, + size, + sign_extend, + adder_op, + logic_op, + + + direction, + + + + + + + + + + + + + + divide, + modulus, + + + branch, + branch_reg, + condition, + bi_conditional, + bi_unconditional, + + + + + scall, + eret, + + + + + + + + + csr_write_enable + ); + + + + + +input [ (32-1):0] instruction; + + + + + +output [ 0:0] d_result_sel_0; +reg [ 0:0] d_result_sel_0; +output [ 1:0] d_result_sel_1; +reg [ 1:0] d_result_sel_1; +output x_result_sel_csr; +reg x_result_sel_csr; + + +output x_result_sel_mc_arith; +reg x_result_sel_mc_arith; + + + + + + + + + +output x_result_sel_sext; +reg x_result_sel_sext; + + +output x_result_sel_logic; +reg x_result_sel_logic; + + + + + +output x_result_sel_add; +reg x_result_sel_add; +output m_result_sel_compare; +reg m_result_sel_compare; + + +output m_result_sel_shift; +reg m_result_sel_shift; + + +output w_result_sel_load; +reg w_result_sel_load; + + +output w_result_sel_mul; +reg w_result_sel_mul; + + +output x_bypass_enable; +wire x_bypass_enable; +output m_bypass_enable; +wire m_bypass_enable; +output read_enable_0; +wire read_enable_0; +output [ (5-1):0] read_idx_0; +wire [ (5-1):0] read_idx_0; +output read_enable_1; +wire read_enable_1; +output [ (5-1):0] read_idx_1; +wire [ (5-1):0] read_idx_1; +output write_enable; +wire write_enable; +output [ (5-1):0] write_idx; +wire [ (5-1):0] write_idx; +output [ (32-1):0] immediate; +wire [ (32-1):0] immediate; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_offset; +wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_offset; +output load; +wire load; +output store; +wire store; +output [ 1:0] size; +wire [ 1:0] size; +output sign_extend; +wire sign_extend; +output adder_op; +wire adder_op; +output [ 3:0] logic_op; +wire [ 3:0] logic_op; + + +output direction; +wire direction; + + + + + + + + + + + + + + + + +output divide; +wire divide; +output modulus; +wire modulus; + + +output branch; +wire branch; +output branch_reg; +wire branch_reg; +output [ (3-1):0] condition; +wire [ (3-1):0] condition; +output bi_conditional; +wire bi_conditional; +output bi_unconditional; +wire bi_unconditional; + + + + + +output scall; +wire scall; +output eret; +wire eret; + + + + + + + + + + +output csr_write_enable; +wire csr_write_enable; + + + + + +wire [ (32-1):0] extended_immediate; +wire [ (32-1):0] high_immediate; +wire [ (32-1):0] call_immediate; +wire [ (32-1):0] branch_immediate; +wire sign_extend_immediate; +wire select_high_immediate; +wire select_call_immediate; + +wire op_add; +wire op_and; +wire op_andhi; +wire op_b; +wire op_bi; +wire op_be; +wire op_bg; +wire op_bge; +wire op_bgeu; +wire op_bgu; +wire op_bne; +wire op_call; +wire op_calli; +wire op_cmpe; +wire op_cmpg; +wire op_cmpge; +wire op_cmpgeu; +wire op_cmpgu; +wire op_cmpne; + + +wire op_divu; + + +wire op_lb; +wire op_lbu; +wire op_lh; +wire op_lhu; +wire op_lw; + + +wire op_modu; + + + + +wire op_mul; + + +wire op_nor; +wire op_or; +wire op_orhi; +wire op_raise; +wire op_rcsr; +wire op_sb; + + +wire op_sextb; +wire op_sexth; + + +wire op_sh; + + +wire op_sl; + + +wire op_sr; +wire op_sru; +wire op_sub; +wire op_sw; + + + + +wire op_wcsr; +wire op_xnor; +wire op_xor; + +wire arith; +wire logical; +wire cmp; +wire bra; +wire call; + + +wire shift; + + + + + + + + +wire sext; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 4) +assign dmem_write_address = {refill_address[ addr_set_msb:addr_set_lsb], refill_offset}; + else +assign dmem_write_address = refill_address[ addr_set_msb:addr_set_lsb]; +endgenerate + +assign dmem_read_address = address_a[ addr_set_msb:addr_offset_lsb]; + + +assign tmem_read_address = address_a[ addr_set_msb:addr_set_lsb]; +assign tmem_write_address = flushing + ? flush_set + : refill_address[ addr_set_msb:addr_set_lsb]; + + +generate + if (bytes_per_line > 4) +assign last_refill = refill_offset == {addr_offset_width{1'b1}}; + else +assign last_refill = 1'b1; +endgenerate + + +assign enable = (stall_a == 1'b0); + + +generate + if (associativity == 1) + begin : we_1 +assign way_mem_we[0] = (refill_ready == 1'b1); + end + else + begin : we_2 +assign way_mem_we[0] = (refill_ready == 1'b1) && (refill_way_select[0] == 1'b1); +assign way_mem_we[1] = (refill_ready == 1'b1) && (refill_way_select[1] == 1'b1); + end +endgenerate + + +assign tmem_write_data[ 0] = last_refill & !flushing; +assign tmem_write_data[ ((addr_tag_width+1)-1):1] = refill_address[ addr_tag_msb:addr_tag_lsb]; + + +assign flushing = |state[1:0]; +assign check = state[2]; +assign refill = state[3]; + +assign miss = (~(|way_match)) && (read_enable_f == 1'b1) && (stall_f == 1'b0) && !(valid_d && branch_predict_taken_d); +assign stall_request = (check == 1'b0); +assign refill_request = (refill == 1'b1); + + + + + + +generate + if (associativity >= 2) + begin : way_select +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refill_way_select <= {{associativity-1{1'b0}}, 1'b1}; + else + begin + if (miss == 1'b1) + refill_way_select <= {refill_way_select[0], refill_way_select[1]}; + end +end + end +endgenerate + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refilling <= 1'b0; + else + refilling <= refill; +end + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + state <= 4'b0001; + flush_set <= { addr_set_width{1'b1}}; + refill_address <= { (clogb2(32'h7fffffff-32'h0)-2){1'bx}}; + restart_request <= 1'b0; + end + else + begin + case (state) + + + 4'b0001: + begin + if (flush_set == { addr_set_width{1'b0}}) + state <= 4'b0100; + flush_set <= flush_set - 1'b1; + end + + + 4'b0010: + begin + if (flush_set == { addr_set_width{1'b0}}) + + + + + + + state <= 4'b0100; + + flush_set <= flush_set - 1'b1; + end + + + 4'b0100: + begin + if (stall_a == 1'b0) + restart_request <= 1'b0; + if (iflush == 1'b1) + begin + refill_address <= address_f; + state <= 4'b0010; + end + else if (miss == 1'b1) + begin + refill_address <= address_f; + state <= 4'b1000; + end + end + + + 4'b1000: + begin + if (refill_ready == 1'b1) + begin + if (last_refill == 1'b1) + begin + restart_request <= 1'b1; + state <= 4'b0100; + end + end + end + + endcase + end +end + +generate + if (bytes_per_line > 4) + begin + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refill_offset <= {addr_offset_width{1'b0}}; + else + begin + case (state) + + + 4'b0100: + begin + if (iflush == 1'b1) + refill_offset <= {addr_offset_width{1'b0}}; + else if (miss == 1'b1) + refill_offset <= {addr_offset_width{1'b0}}; + end + + + 4'b1000: + begin + if (refill_ready == 1'b1) + refill_offset <= refill_offset + 1'b1; + end + + endcase + end +end + end +endgenerate + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_dcache_full ( + + clk_i, + rst_i, + stall_a, + stall_x, + stall_m, + address_x, + address_m, + load_q_m, + store_q_m, + store_data, + store_byte_select, + refill_ready, + refill_data, + dflush, + + stall_request, + restart_request, + refill_request, + refill_address, + refilling, + load_data + ); + + + + + +parameter associativity = 1; +parameter sets = 512; +parameter bytes_per_line = 16; +parameter base_address = 0; +parameter limit = 0; + +localparam addr_offset_width = clogb2(bytes_per_line)-1-2; +localparam addr_set_width = clogb2(sets)-1; +localparam addr_offset_lsb = 2; +localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1); +localparam addr_set_lsb = (addr_offset_msb+1); +localparam addr_set_msb = (addr_set_lsb+addr_set_width-1); +localparam addr_tag_lsb = (addr_set_msb+1); +localparam addr_tag_msb = clogb2( 32'h7fffffff- 32'h0)-1; +localparam addr_tag_width = (addr_tag_msb-addr_tag_lsb+1); + + + + + +input clk_i; +input rst_i; + +input stall_a; +input stall_x; +input stall_m; + +input [ (32-1):0] address_x; +input [ (32-1):0] address_m; +input load_q_m; +input store_q_m; +input [ (32-1):0] store_data; +input [ (4-1):0] store_byte_select; + +input refill_ready; +input [ (32-1):0] refill_data; + +input dflush; + + + + + +output stall_request; +wire stall_request; +output restart_request; +reg restart_request; +output refill_request; +reg refill_request; +output [ (32-1):0] refill_address; +reg [ (32-1):0] refill_address; +output refilling; +reg refilling; +output [ (32-1):0] load_data; +wire [ (32-1):0] load_data; + + + + + +wire read_port_enable; +wire write_port_enable; +wire [0:associativity-1] way_tmem_we; +wire [0:associativity-1] way_dmem_we; +wire [ (32-1):0] way_data[0:associativity-1]; +wire [ ((addr_tag_width+1)-1):1] way_tag[0:associativity-1]; +wire [0:associativity-1] way_valid; +wire [0:associativity-1] way_match; +wire miss; + +wire [ (addr_set_width-1):0] tmem_read_address; +wire [ (addr_set_width-1):0] tmem_write_address; +wire [ ((addr_offset_width+addr_set_width)-1):0] dmem_read_address; +wire [ ((addr_offset_width+addr_set_width)-1):0] dmem_write_address; +wire [ ((addr_tag_width+1)-1):0] tmem_write_data; +reg [ (32-1):0] dmem_write_data; + +reg [ 2:0] state; +wire flushing; +wire check; +wire refill; + +wire valid_store; +reg [associativity-1:0] refill_way_select; +reg [ addr_offset_msb:addr_offset_lsb] refill_offset; +wire last_refill; +reg [ (addr_set_width-1):0] flush_set; + +genvar i, j; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 4) +assign dmem_write_address = (refill == 1'b1) + ? {refill_address[ addr_set_msb:addr_set_lsb], refill_offset} + : address_m[ addr_set_msb:addr_offset_lsb]; + else +assign dmem_write_address = (refill == 1'b1) + ? refill_address[ addr_set_msb:addr_set_lsb] + : address_m[ addr_set_msb:addr_offset_lsb]; +endgenerate +assign dmem_read_address = address_x[ addr_set_msb:addr_offset_lsb]; + +assign tmem_write_address = (flushing == 1'b1) + ? flush_set + : refill_address[ addr_set_msb:addr_set_lsb]; +assign tmem_read_address = address_x[ addr_set_msb:addr_set_lsb]; + + +generate + if (bytes_per_line > 4) +assign last_refill = refill_offset == {addr_offset_width{1'b1}}; + else +assign last_refill = 1'b1; +endgenerate + + +assign read_port_enable = (stall_x == 1'b0); +assign write_port_enable = (refill_ready == 1'b1) || !stall_m; + + +assign valid_store = (store_q_m == 1'b1) && (check == 1'b1); + + +generate + if (associativity == 1) + begin : we_1 +assign way_dmem_we[0] = (refill_ready == 1'b1) || ((valid_store == 1'b1) && (way_match[0] == 1'b1)); +assign way_tmem_we[0] = (refill_ready == 1'b1) || (flushing == 1'b1); + end + else + begin : we_2 +assign way_dmem_we[0] = ((refill_ready == 1'b1) && (refill_way_select[0] == 1'b1)) || ((valid_store == 1'b1) && (way_match[0] == 1'b1)); +assign way_dmem_we[1] = ((refill_ready == 1'b1) && (refill_way_select[1] == 1'b1)) || ((valid_store == 1'b1) && (way_match[1] == 1'b1)); +assign way_tmem_we[0] = ((refill_ready == 1'b1) && (refill_way_select[0] == 1'b1)) || (flushing == 1'b1); +assign way_tmem_we[1] = ((refill_ready == 1'b1) && (refill_way_select[1] == 1'b1)) || (flushing == 1'b1); + end +endgenerate + + +assign tmem_write_data[ 0] = ((last_refill == 1'b1) || (valid_store == 1'b1)) && (flushing == 1'b0); +assign tmem_write_data[ ((addr_tag_width+1)-1):1] = refill_address[ addr_tag_msb:addr_tag_lsb]; + + +assign flushing = state[0]; +assign check = state[1]; +assign refill = state[2]; + +assign miss = (~(|way_match)) && (load_q_m == 1'b1) && (stall_m == 1'b0); +assign stall_request = (check == 1'b0); + + + + + + +generate + if (associativity >= 2) + begin : way_select +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refill_way_select <= {{associativity-1{1'b0}}, 1'b1}; + else + begin + if (refill_request == 1'b1) + refill_way_select <= {refill_way_select[0], refill_way_select[1]}; + end +end + end +endgenerate + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refilling <= 1'b0; + else + refilling <= refill; +end + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + state <= 3'b001; + flush_set <= { addr_set_width{1'b1}}; + refill_request <= 1'b0; + refill_address <= { 32{1'bx}}; + restart_request <= 1'b0; + end + else + begin + case (state) + + + 3'b001: + begin + if (flush_set == { addr_set_width{1'b0}}) + state <= 3'b010; + flush_set <= flush_set - 1'b1; + end + + + 3'b010: + begin + if (stall_a == 1'b0) + restart_request <= 1'b0; + if (miss == 1'b1) + begin + refill_request <= 1'b1; + refill_address <= address_m; + state <= 3'b100; + end + else if (dflush == 1'b1) + state <= 3'b001; + end + + + 3'b100: + begin + refill_request <= 1'b0; + if (refill_ready == 1'b1) + begin + if (last_refill == 1'b1) + begin + restart_request <= 1'b1; + state <= 3'b010; + end + end + end + + endcase + end +end + +generate + if (bytes_per_line > 4) + begin + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refill_offset <= {addr_offset_width{1'b0}}; + else + begin + case (state) + + + 3'b010: + begin + if (miss == 1'b1) + refill_offset <= {addr_offset_width{1'b0}}; + end + + + 3'b100: + begin + if (refill_ready == 1'b1) + refill_offset <= refill_offset + 1'b1; + end + + endcase + end +end + end +endgenerate + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_instruction_unit_full ( + + clk_i, + rst_i, + + stall_a, + stall_f, + stall_d, + stall_x, + stall_m, + valid_f, + valid_d, + kill_f, + branch_predict_taken_d, + branch_predict_address_d, + + + branch_taken_x, + branch_target_x, + + + exception_m, + branch_taken_m, + branch_mispredict_taken_m, + branch_target_m, + + + iflush, + + + + + dcache_restart_request, + dcache_refill_request, + dcache_refilling, + + + + + + i_dat_i, + i_ack_i, + i_err_i, + i_rty_i, + + + + + + + + + + + + pc_f, + pc_d, + pc_x, + pc_m, + pc_w, + + + icache_stall_request, + icache_restart_request, + icache_refill_request, + icache_refilling, + + + + + + i_dat_o, + i_adr_o, + i_cyc_o, + i_sel_o, + i_stb_o, + i_we_o, + i_cti_o, + i_lock_o, + i_bte_o, + + + + + + + + + + + + + + + + bus_error_d, + + + + + instruction_f, + + + instruction_d + ); + + + + + +parameter eba_reset = 32'h00000000; +parameter associativity = 1; +parameter sets = 512; +parameter bytes_per_line = 16; +parameter base_address = 0; +parameter limit = 0; + + +localparam eba_reset_minus_4 = eba_reset - 4; +localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2; +localparam addr_offset_lsb = 2; +localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1); + + + + + + + + + + + + +input clk_i; +input rst_i; + +input stall_a; +input stall_f; +input stall_d; +input stall_x; +input stall_m; +input valid_f; +input valid_d; +input kill_f; + +input branch_predict_taken_d; +input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_predict_address_d; + + + +input branch_taken_x; +input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_x; + + +input exception_m; +input branch_taken_m; +input branch_mispredict_taken_m; +input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_m; + + + +input iflush; + + + + +input dcache_restart_request; +input dcache_refill_request; +input dcache_refilling; + + + + + + +input [ (32-1):0] i_dat_i; +input i_ack_i; +input i_err_i; +input i_rty_i; + + + + + + + + + + + + + + + +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w; + + + +output icache_stall_request; +wire icache_stall_request; +output icache_restart_request; +wire icache_restart_request; +output icache_refill_request; +wire icache_refill_request; +output icache_refilling; +wire icache_refilling; + + + + + +output [ (32-1):0] i_dat_o; + + + + +wire [ (32-1):0] i_dat_o; + + +output [ (32-1):0] i_adr_o; +reg [ (32-1):0] i_adr_o; +output i_cyc_o; +reg i_cyc_o; +output [ (4-1):0] i_sel_o; + + + + +wire [ (4-1):0] i_sel_o; + + +output i_stb_o; +reg i_stb_o; +output i_we_o; + + + + +wire i_we_o; + + +output [ (3-1):0] i_cti_o; +reg [ (3-1):0] i_cti_o; +output i_lock_o; +reg i_lock_o; +output [ (2-1):0] i_bte_o; +wire [ (2-1):0] i_bte_o; + + + + + + + + + + + + + +output bus_error_d; +reg bus_error_d; + + + + +output [ (32-1):0] instruction_f; +wire [ (32-1):0] instruction_f; + + +output [ (32-1):0] instruction_d; +reg [ (32-1):0] instruction_d; + + + + + +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_a; + + + +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] restart_address; + + + + + +wire icache_read_enable_f; +wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] icache_refill_address; +reg icache_refill_ready; +reg [ (32-1):0] icache_refill_data; +wire [ (32-1):0] icache_data_f; +wire [ (3-1):0] first_cycle_type; +wire [ (3-1):0] next_cycle_type; +wire last_word; +wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] first_address; + + + + + + + + + + + + + + + + + + + + + + + + + reg bus_error_f; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 1) + begin + +always @(*) +begin + case (csr) + 4 'h0: csr_read_data = {{ 32-3{1'b0}}, + + + + + 1'b0, + + + eie, + ie + }; + 4 'h2: csr_read_data = ip; + 4 'h1: csr_read_data = im; + default: csr_read_data = { 32{1'bx}}; + endcase +end + end + else + begin + +always @(*) +begin + case (csr) + 4 'h0: csr_read_data = {{ 32-3{1'b0}}, + + + + + 1'b0, + + + eie, + ie + }; + 4 'h2: csr_read_data = ip; + default: csr_read_data = { 32{1'bx}}; + endcase +end + end +endgenerate + + + + + + + + reg [ 10:0] eie_delay = 0; + + +generate + + + if (interrupts > 1) + begin + +always @(posedge clk_i ) + begin + if (rst_i == 1'b1) + begin + ie <= 1'b0; + eie <= 1'b0; + + + + + im <= {interrupts{1'b0}}; + ip <= {interrupts{1'b0}}; + eie_delay <= 0; + + end + else + begin + + ip <= asserted; + + + + + + + + + + + + + + + + if (exception == 1'b1) + begin + + eie <= ie; + ie <= 1'b0; + end + + + else if (stall_x == 1'b0) + begin + + if(eie_delay[0]) + ie <= eie; + + eie_delay <= {1'b0, eie_delay[ 10:1]}; + + if (eret_q_x == 1'b1) begin + + eie_delay[ 10] <= 1'b1; + eie_delay[ 10-1:0] <= 0; + end + + + + + + + + + + else if (csr_write_enable == 1'b1) + begin + + if (csr == 4 'h0) + begin + ie <= csr_write_data[0]; + eie <= csr_write_data[1]; + + + + + end + if (csr == 4 'h1) + im <= csr_write_data[interrupts-1:0]; + if (csr == 4 'h2) + ip <= asserted & ~csr_write_data[interrupts-1:0]; + end + end + end +end + end +else + begin + +always @(posedge clk_i ) + begin + if (rst_i == 1'b1) + begin + ie <= 1'b0; + eie <= 1'b0; + + + + + ip <= {interrupts{1'b0}}; + eie_delay <= 0; + end + else + begin + + ip <= asserted; + + + + + + + + + + + + + + + + if (exception == 1'b1) + begin + + eie <= ie; + ie <= 1'b0; + end + + + else if (stall_x == 1'b0) + begin + + if(eie_delay[0]) + ie <= eie; + + eie_delay <= {1'b0, eie_delay[ 10:1]}; + + if (eret_q_x == 1'b1) begin + + eie_delay[ 10] <= 1'b1; + eie_delay[ 10-1:0] <= 0; + end + + + + + + + + else if (csr_write_enable == 1'b1) + begin + + if (csr == 4 'h0) + begin + ie <= csr_write_data[0]; + eie <= csr_write_data[1]; + + + + + end + if (csr == 4 'h2) + ip <= asserted & ~csr_write_data[interrupts-1:0]; + end + end + end +end + end +endgenerate + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_top_full_debug ( + + clk_i, + rst_i, + + + interrupt, + + + + + + + + + + + I_DAT_I, + I_ACK_I, + I_ERR_I, + I_RTY_I, + + + + D_DAT_I, + D_ACK_I, + D_ERR_I, + D_RTY_I, + + + + + + + + + + + + I_DAT_O, + I_ADR_O, + I_CYC_O, + I_SEL_O, + I_STB_O, + I_WE_O, + I_CTI_O, + I_LOCK_O, + I_BTE_O, + + + + D_DAT_O, + D_ADR_O, + D_CYC_O, + D_SEL_O, + D_STB_O, + D_WE_O, + D_CTI_O, + D_LOCK_O, + D_BTE_O + ); + +parameter eba_reset = 32'h00000000; +parameter sdb_address = 32'h00000000; + + + + +input clk_i; +input rst_i; + + +input [ (32-1):0] interrupt; + + + + + + + + + + +input [ (32-1):0] I_DAT_I; +input I_ACK_I; +input I_ERR_I; +input I_RTY_I; + + + +input [ (32-1):0] D_DAT_I; +input D_ACK_I; +input D_ERR_I; +input D_RTY_I; + + + + + + + + + + + + + + + + + + + +output [ (32-1):0] I_DAT_O; +wire [ (32-1):0] I_DAT_O; +output [ (32-1):0] I_ADR_O; +wire [ (32-1):0] I_ADR_O; +output I_CYC_O; +wire I_CYC_O; +output [ (4-1):0] I_SEL_O; +wire [ (4-1):0] I_SEL_O; +output I_STB_O; +wire I_STB_O; +output I_WE_O; +wire I_WE_O; +output [ (3-1):0] I_CTI_O; +wire [ (3-1):0] I_CTI_O; +output I_LOCK_O; +wire I_LOCK_O; +output [ (2-1):0] I_BTE_O; +wire [ (2-1):0] I_BTE_O; + + + +output [ (32-1):0] D_DAT_O; +wire [ (32-1):0] D_DAT_O; +output [ (32-1):0] D_ADR_O; +wire [ (32-1):0] D_ADR_O; +output D_CYC_O; +wire D_CYC_O; +output [ (4-1):0] D_SEL_O; +wire [ (4-1):0] D_SEL_O; +output D_STB_O; +wire D_STB_O; +output D_WE_O; +wire D_WE_O; +output [ (3-1):0] D_CTI_O; +wire [ (3-1):0] D_CTI_O; +output D_LOCK_O; +wire D_LOCK_O; +output [ (2-1):0] D_BTE_O; +wire [ (2-1):0] D_BTE_O; + + + + + + + + +wire [ 7:0] jtag_reg_d; +wire [ 7:0] jtag_reg_q; +wire jtag_update; +wire [2:0] jtag_reg_addr_d; +wire [2:0] jtag_reg_addr_q; +wire jtck; +wire jrstn; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1<= 32'h0) + && (load_store_address_x <= 32'h7fffffff) + + + + + + + + + ; + + + + assign wb_select_x = 1'b1 + + + && !dcache_select_x + + + + + + + + + + + ; + + +always @(*) +begin + case (size_x) + 2'b00: store_data_x = {4{store_operand_x[7:0]}}; + 2'b11: store_data_x = {2{store_operand_x[15:0]}}; + 2'b10: store_data_x = store_operand_x; + default: store_data_x = { 32{1'bx}}; + endcase +end + + +always @(*) +begin + casez ({size_x, load_store_address_x[1:0]}) + { 2'b00, 2'b11}: byte_enable_x = 4'b0001; + { 2'b00, 2'b10}: byte_enable_x = 4'b0010; + { 2'b00, 2'b01}: byte_enable_x = 4'b0100; + { 2'b00, 2'b00}: byte_enable_x = 4'b1000; + { 2'b11, 2'b1?}: byte_enable_x = 4'b0011; + { 2'b11, 2'b0?}: byte_enable_x = 4'b1100; + { 2'b10, 2'b??}: byte_enable_x = 4'b1111; + default: byte_enable_x = 4'bxxxx; + endcase +end + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + assign data_m = wb_select_m == 1'b1 + ? wb_data_m + : dcache_data_m; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +always @(*) +begin + casez ({size_w, load_store_address_w[1:0]}) + { 2'b00, 2'b11}: load_data_w = {{24{sign_extend_w & data_w[7]}}, data_w[7:0]}; + { 2'b00, 2'b10}: load_data_w = {{24{sign_extend_w & data_w[15]}}, data_w[15:8]}; + { 2'b00, 2'b01}: load_data_w = {{24{sign_extend_w & data_w[23]}}, data_w[23:16]}; + { 2'b00, 2'b00}: load_data_w = {{24{sign_extend_w & data_w[31]}}, data_w[31:24]}; + { 2'b11, 2'b1?}: load_data_w = {{16{sign_extend_w & data_w[15]}}, data_w[15:0]}; + { 2'b11, 2'b0?}: load_data_w = {{16{sign_extend_w & data_w[31]}}, data_w[31:16]}; + { 2'b10, 2'b??}: load_data_w = data_w; + default: load_data_w = { 32{1'bx}}; + endcase +end + + +assign d_bte_o = 2'b00; + + + + +generate + case (bytes_per_line) + 4: + begin +assign first_cycle_type = 3'b111; +assign next_cycle_type = 3'b111; +assign last_word = 1'b1; +assign first_address = {dcache_refill_address[ 32-1:2], 2'b00}; + end + 8: + begin +assign first_cycle_type = 3'b010; +assign next_cycle_type = 3'b111; +assign last_word = (&d_adr_o[addr_offset_msb:addr_offset_lsb]) == 1'b1; +assign first_address = {dcache_refill_address[ 32-1:addr_offset_msb+1], {addr_offset_width{1'b0}}, 2'b00}; + end + 16: + begin +assign first_cycle_type = 3'b010; +assign next_cycle_type = d_adr_o[addr_offset_msb] == 1'b1 ? 3'b111 : 3'b010; +assign last_word = (&d_adr_o[addr_offset_msb:addr_offset_lsb]) == 1'b1; +assign first_address = {dcache_refill_address[ 32-1:addr_offset_msb+1], {addr_offset_width{1'b0}}, 2'b00}; + end + endcase +endgenerate + + + + + + + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + d_cyc_o <= 1'b0; + d_stb_o <= 1'b0; + d_dat_o <= { 32{1'b0}}; + d_adr_o <= { 32{1'b0}}; + d_sel_o <= { 4{ 1'b0}}; + d_we_o <= 1'b0; + d_cti_o <= 3'b111; + d_lock_o <= 1'b0; + wb_data_m <= { 32{1'b0}}; + wb_load_complete <= 1'b0; + stall_wb_load <= 1'b0; + + + dcache_refill_ready <= 1'b0; + + + end + else + begin + + + + dcache_refill_ready <= 1'b0; + + + + if (d_cyc_o == 1'b1) + begin + + if ((d_ack_i == 1'b1) || (d_err_i == 1'b1)) + begin + + + if ((dcache_refilling == 1'b1) && (!last_word)) + begin + + d_adr_o[addr_offset_msb:addr_offset_lsb] <= d_adr_o[addr_offset_msb:addr_offset_lsb] + 1'b1; + end + else + + + begin + + d_cyc_o <= 1'b0; + d_stb_o <= 1'b0; + d_lock_o <= 1'b0; + end + + + d_cti_o <= next_cycle_type; + + dcache_refill_ready <= dcache_refilling; + + + + wb_data_m <= d_dat_i; + + wb_load_complete <= !d_we_o; + end + + end + else + begin + + + if (dcache_refill_request == 1'b1) + begin + + d_adr_o <= first_address; + d_cyc_o <= 1'b1; + d_sel_o <= { 32/8{ 1'b1}}; + d_stb_o <= 1'b1; + d_we_o <= 1'b0; + d_cti_o <= first_cycle_type; + + end + else + + + if ( (store_q_m == 1'b1) + && (stall_m == 1'b0) + + + + + + + + + ) + begin + + d_dat_o <= store_data_m; + d_adr_o <= load_store_address_m; + d_cyc_o <= 1'b1; + d_sel_o <= byte_enable_m; + d_stb_o <= 1'b1; + d_we_o <= 1'b1; + d_cti_o <= 3'b111; + end + else if ( (load_q_m == 1'b1) + && (wb_select_m == 1'b1) + && (wb_load_complete == 1'b0) + + ) + begin + + stall_wb_load <= 1'b0; + d_adr_o <= load_store_address_m; + d_cyc_o <= 1'b1; + d_sel_o <= byte_enable_m; + d_stb_o <= 1'b1; + d_we_o <= 1'b0; + d_cti_o <= 3'b111; + end + end + + if (stall_m == 1'b0) + wb_load_complete <= 1'b0; + + if ((load_q_x == 1'b1) && (wb_select_x == 1'b1) && (stall_x == 1'b0)) + stall_wb_load <= 1'b1; + + if ((kill_m == 1'b1) || (exception_m == 1'b1)) + stall_wb_load <= 1'b0; + end +end + + + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + sign_extend_m <= 1'b0; + size_m <= 2'b00; + byte_enable_m <= 1'b0; + store_data_m <= { 32{1'b0}}; + + + dcache_select_m <= 1'b0; + + + + + + + + + + + + wb_select_m <= 1'b0; + end + else + begin + if (stall_m == 1'b0) + begin + sign_extend_m <= sign_extend_x; + size_m <= size_x; + byte_enable_m <= byte_enable_x; + store_data_m <= store_data_x; + + + dcache_select_m <= dcache_select_x; + + + + + + + + + + + + wb_select_m <= wb_select_x; + end + end +end + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + size_w <= 2'b00; + data_w <= { 32{1'b0}}; + sign_extend_w <= 1'b0; + end + else + begin + size_w <= size_m; + + + + + + data_w <= data_m; + + sign_extend_w <= sign_extend_m; + end +end + + + + + + + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_decoder_full_debug ( + + instruction, + + d_result_sel_0, + d_result_sel_1, + x_result_sel_csr, + + + x_result_sel_mc_arith, + + + + + + + + + x_result_sel_sext, + + + x_result_sel_logic, + + + + + x_result_sel_add, + m_result_sel_compare, + + + m_result_sel_shift, + + + w_result_sel_load, + + + w_result_sel_mul, + + + x_bypass_enable, + m_bypass_enable, + read_enable_0, + read_idx_0, + read_enable_1, + read_idx_1, + write_enable, + write_idx, + immediate, + branch_offset, + load, + store, + size, + sign_extend, + adder_op, + logic_op, + + + direction, + + + + + + + + + + + + + + divide, + modulus, + + + branch, + branch_reg, + condition, + bi_conditional, + bi_unconditional, + + + break_opcode, + + + scall, + eret, + + + bret, + + + + + + + csr_write_enable + ); + + + + + +input [ (32-1):0] instruction; + + + + + +output [ 0:0] d_result_sel_0; +reg [ 0:0] d_result_sel_0; +output [ 1:0] d_result_sel_1; +reg [ 1:0] d_result_sel_1; +output x_result_sel_csr; +reg x_result_sel_csr; + + +output x_result_sel_mc_arith; +reg x_result_sel_mc_arith; + + + + + + + + + +output x_result_sel_sext; +reg x_result_sel_sext; + + +output x_result_sel_logic; +reg x_result_sel_logic; + + + + + +output x_result_sel_add; +reg x_result_sel_add; +output m_result_sel_compare; +reg m_result_sel_compare; + + +output m_result_sel_shift; +reg m_result_sel_shift; + + +output w_result_sel_load; +reg w_result_sel_load; + + +output w_result_sel_mul; +reg w_result_sel_mul; + + +output x_bypass_enable; +wire x_bypass_enable; +output m_bypass_enable; +wire m_bypass_enable; +output read_enable_0; +wire read_enable_0; +output [ (5-1):0] read_idx_0; +wire [ (5-1):0] read_idx_0; +output read_enable_1; +wire read_enable_1; +output [ (5-1):0] read_idx_1; +wire [ (5-1):0] read_idx_1; +output write_enable; +wire write_enable; +output [ (5-1):0] write_idx; +wire [ (5-1):0] write_idx; +output [ (32-1):0] immediate; +wire [ (32-1):0] immediate; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_offset; +wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_offset; +output load; +wire load; +output store; +wire store; +output [ 1:0] size; +wire [ 1:0] size; +output sign_extend; +wire sign_extend; +output adder_op; +wire adder_op; +output [ 3:0] logic_op; +wire [ 3:0] logic_op; + + +output direction; +wire direction; + + + + + + + + + + + + + + + + +output divide; +wire divide; +output modulus; +wire modulus; + + +output branch; +wire branch; +output branch_reg; +wire branch_reg; +output [ (3-1):0] condition; +wire [ (3-1):0] condition; +output bi_conditional; +wire bi_conditional; +output bi_unconditional; +wire bi_unconditional; + + +output break_opcode; +wire break_opcode; + + +output scall; +wire scall; +output eret; +wire eret; + + +output bret; +wire bret; + + + + + + + +output csr_write_enable; +wire csr_write_enable; + + + + + +wire [ (32-1):0] extended_immediate; +wire [ (32-1):0] high_immediate; +wire [ (32-1):0] call_immediate; +wire [ (32-1):0] branch_immediate; +wire sign_extend_immediate; +wire select_high_immediate; +wire select_call_immediate; + +wire op_add; +wire op_and; +wire op_andhi; +wire op_b; +wire op_bi; +wire op_be; +wire op_bg; +wire op_bge; +wire op_bgeu; +wire op_bgu; +wire op_bne; +wire op_call; +wire op_calli; +wire op_cmpe; +wire op_cmpg; +wire op_cmpge; +wire op_cmpgeu; +wire op_cmpgu; +wire op_cmpne; + + +wire op_divu; + + +wire op_lb; +wire op_lbu; +wire op_lh; +wire op_lhu; +wire op_lw; + + +wire op_modu; + + + + +wire op_mul; + + +wire op_nor; +wire op_or; +wire op_orhi; +wire op_raise; +wire op_rcsr; +wire op_sb; + + +wire op_sextb; +wire op_sexth; + + +wire op_sh; + + +wire op_sl; + + +wire op_sr; +wire op_sru; +wire op_sub; +wire op_sw; + + + + +wire op_wcsr; +wire op_xnor; +wire op_xor; + +wire arith; +wire logical; +wire cmp; +wire bra; +wire call; + + +wire shift; + + + + + + + + +wire sext; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 4) +assign dmem_write_address = {refill_address[ addr_set_msb:addr_set_lsb], refill_offset}; + else +assign dmem_write_address = refill_address[ addr_set_msb:addr_set_lsb]; +endgenerate + +assign dmem_read_address = address_a[ addr_set_msb:addr_offset_lsb]; + + +assign tmem_read_address = address_a[ addr_set_msb:addr_set_lsb]; +assign tmem_write_address = flushing + ? flush_set + : refill_address[ addr_set_msb:addr_set_lsb]; + + +generate + if (bytes_per_line > 4) +assign last_refill = refill_offset == {addr_offset_width{1'b1}}; + else +assign last_refill = 1'b1; +endgenerate + + +assign enable = (stall_a == 1'b0); + + +generate + if (associativity == 1) + begin : we_1 +assign way_mem_we[0] = (refill_ready == 1'b1); + end + else + begin : we_2 +assign way_mem_we[0] = (refill_ready == 1'b1) && (refill_way_select[0] == 1'b1); +assign way_mem_we[1] = (refill_ready == 1'b1) && (refill_way_select[1] == 1'b1); + end +endgenerate + + +assign tmem_write_data[ 0] = last_refill & !flushing; +assign tmem_write_data[ ((addr_tag_width+1)-1):1] = refill_address[ addr_tag_msb:addr_tag_lsb]; + + +assign flushing = |state[1:0]; +assign check = state[2]; +assign refill = state[3]; + +assign miss = (~(|way_match)) && (read_enable_f == 1'b1) && (stall_f == 1'b0) && !(valid_d && branch_predict_taken_d); +assign stall_request = (check == 1'b0); +assign refill_request = (refill == 1'b1); + + + + + + +generate + if (associativity >= 2) + begin : way_select +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refill_way_select <= {{associativity-1{1'b0}}, 1'b1}; + else + begin + if (miss == 1'b1) + refill_way_select <= {refill_way_select[0], refill_way_select[1]}; + end +end + end +endgenerate + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refilling <= 1'b0; + else + refilling <= refill; +end + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + state <= 4'b0001; + flush_set <= { addr_set_width{1'b1}}; + refill_address <= { (clogb2(32'h7fffffff-32'h0)-2){1'bx}}; + restart_request <= 1'b0; + end + else + begin + case (state) + + + 4'b0001: + begin + if (flush_set == { addr_set_width{1'b0}}) + state <= 4'b0100; + flush_set <= flush_set - 1'b1; + end + + + 4'b0010: + begin + if (flush_set == { addr_set_width{1'b0}}) + + + + + + + state <= 4'b0100; + + flush_set <= flush_set - 1'b1; + end + + + 4'b0100: + begin + if (stall_a == 1'b0) + restart_request <= 1'b0; + if (iflush == 1'b1) + begin + refill_address <= address_f; + state <= 4'b0010; + end + else if (miss == 1'b1) + begin + refill_address <= address_f; + state <= 4'b1000; + end + end + + + 4'b1000: + begin + if (refill_ready == 1'b1) + begin + if (last_refill == 1'b1) + begin + restart_request <= 1'b1; + state <= 4'b0100; + end + end + end + + endcase + end +end + +generate + if (bytes_per_line > 4) + begin + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refill_offset <= {addr_offset_width{1'b0}}; + else + begin + case (state) + + + 4'b0100: + begin + if (iflush == 1'b1) + refill_offset <= {addr_offset_width{1'b0}}; + else if (miss == 1'b1) + refill_offset <= {addr_offset_width{1'b0}}; + end + + + 4'b1000: + begin + if (refill_ready == 1'b1) + refill_offset <= refill_offset + 1'b1; + end + + endcase + end +end + end +endgenerate + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_dcache_full_debug ( + + clk_i, + rst_i, + stall_a, + stall_x, + stall_m, + address_x, + address_m, + load_q_m, + store_q_m, + store_data, + store_byte_select, + refill_ready, + refill_data, + dflush, + + stall_request, + restart_request, + refill_request, + refill_address, + refilling, + load_data + ); + + + + + +parameter associativity = 1; +parameter sets = 512; +parameter bytes_per_line = 16; +parameter base_address = 0; +parameter limit = 0; + +localparam addr_offset_width = clogb2(bytes_per_line)-1-2; +localparam addr_set_width = clogb2(sets)-1; +localparam addr_offset_lsb = 2; +localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1); +localparam addr_set_lsb = (addr_offset_msb+1); +localparam addr_set_msb = (addr_set_lsb+addr_set_width-1); +localparam addr_tag_lsb = (addr_set_msb+1); +localparam addr_tag_msb = clogb2( 32'h7fffffff- 32'h0)-1; +localparam addr_tag_width = (addr_tag_msb-addr_tag_lsb+1); + + + + + +input clk_i; +input rst_i; + +input stall_a; +input stall_x; +input stall_m; + +input [ (32-1):0] address_x; +input [ (32-1):0] address_m; +input load_q_m; +input store_q_m; +input [ (32-1):0] store_data; +input [ (4-1):0] store_byte_select; + +input refill_ready; +input [ (32-1):0] refill_data; + +input dflush; + + + + + +output stall_request; +wire stall_request; +output restart_request; +reg restart_request; +output refill_request; +reg refill_request; +output [ (32-1):0] refill_address; +reg [ (32-1):0] refill_address; +output refilling; +reg refilling; +output [ (32-1):0] load_data; +wire [ (32-1):0] load_data; + + + + + +wire read_port_enable; +wire write_port_enable; +wire [0:associativity-1] way_tmem_we; +wire [0:associativity-1] way_dmem_we; +wire [ (32-1):0] way_data[0:associativity-1]; +wire [ ((addr_tag_width+1)-1):1] way_tag[0:associativity-1]; +wire [0:associativity-1] way_valid; +wire [0:associativity-1] way_match; +wire miss; + +wire [ (addr_set_width-1):0] tmem_read_address; +wire [ (addr_set_width-1):0] tmem_write_address; +wire [ ((addr_offset_width+addr_set_width)-1):0] dmem_read_address; +wire [ ((addr_offset_width+addr_set_width)-1):0] dmem_write_address; +wire [ ((addr_tag_width+1)-1):0] tmem_write_data; +reg [ (32-1):0] dmem_write_data; + +reg [ 2:0] state; +wire flushing; +wire check; +wire refill; + +wire valid_store; +reg [associativity-1:0] refill_way_select; +reg [ addr_offset_msb:addr_offset_lsb] refill_offset; +wire last_refill; +reg [ (addr_set_width-1):0] flush_set; + +genvar i, j; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 4) +assign dmem_write_address = (refill == 1'b1) + ? {refill_address[ addr_set_msb:addr_set_lsb], refill_offset} + : address_m[ addr_set_msb:addr_offset_lsb]; + else +assign dmem_write_address = (refill == 1'b1) + ? refill_address[ addr_set_msb:addr_set_lsb] + : address_m[ addr_set_msb:addr_offset_lsb]; +endgenerate +assign dmem_read_address = address_x[ addr_set_msb:addr_offset_lsb]; + +assign tmem_write_address = (flushing == 1'b1) + ? flush_set + : refill_address[ addr_set_msb:addr_set_lsb]; +assign tmem_read_address = address_x[ addr_set_msb:addr_set_lsb]; + + +generate + if (bytes_per_line > 4) +assign last_refill = refill_offset == {addr_offset_width{1'b1}}; + else +assign last_refill = 1'b1; +endgenerate + + +assign read_port_enable = (stall_x == 1'b0); +assign write_port_enable = (refill_ready == 1'b1) || !stall_m; + + +assign valid_store = (store_q_m == 1'b1) && (check == 1'b1); + + +generate + if (associativity == 1) + begin : we_1 +assign way_dmem_we[0] = (refill_ready == 1'b1) || ((valid_store == 1'b1) && (way_match[0] == 1'b1)); +assign way_tmem_we[0] = (refill_ready == 1'b1) || (flushing == 1'b1); + end + else + begin : we_2 +assign way_dmem_we[0] = ((refill_ready == 1'b1) && (refill_way_select[0] == 1'b1)) || ((valid_store == 1'b1) && (way_match[0] == 1'b1)); +assign way_dmem_we[1] = ((refill_ready == 1'b1) && (refill_way_select[1] == 1'b1)) || ((valid_store == 1'b1) && (way_match[1] == 1'b1)); +assign way_tmem_we[0] = ((refill_ready == 1'b1) && (refill_way_select[0] == 1'b1)) || (flushing == 1'b1); +assign way_tmem_we[1] = ((refill_ready == 1'b1) && (refill_way_select[1] == 1'b1)) || (flushing == 1'b1); + end +endgenerate + + +assign tmem_write_data[ 0] = ((last_refill == 1'b1) || (valid_store == 1'b1)) && (flushing == 1'b0); +assign tmem_write_data[ ((addr_tag_width+1)-1):1] = refill_address[ addr_tag_msb:addr_tag_lsb]; + + +assign flushing = state[0]; +assign check = state[1]; +assign refill = state[2]; + +assign miss = (~(|way_match)) && (load_q_m == 1'b1) && (stall_m == 1'b0); +assign stall_request = (check == 1'b0); + + + + + + +generate + if (associativity >= 2) + begin : way_select +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refill_way_select <= {{associativity-1{1'b0}}, 1'b1}; + else + begin + if (refill_request == 1'b1) + refill_way_select <= {refill_way_select[0], refill_way_select[1]}; + end +end + end +endgenerate + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refilling <= 1'b0; + else + refilling <= refill; +end + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + state <= 3'b001; + flush_set <= { addr_set_width{1'b1}}; + refill_request <= 1'b0; + refill_address <= { 32{1'bx}}; + restart_request <= 1'b0; + end + else + begin + case (state) + + + 3'b001: + begin + if (flush_set == { addr_set_width{1'b0}}) + state <= 3'b010; + flush_set <= flush_set - 1'b1; + end + + + 3'b010: + begin + if (stall_a == 1'b0) + restart_request <= 1'b0; + if (miss == 1'b1) + begin + refill_request <= 1'b1; + refill_address <= address_m; + state <= 3'b100; + end + else if (dflush == 1'b1) + state <= 3'b001; + end + + + 3'b100: + begin + refill_request <= 1'b0; + if (refill_ready == 1'b1) + begin + if (last_refill == 1'b1) + begin + restart_request <= 1'b1; + state <= 3'b010; + end + end + end + + endcase + end +end + +generate + if (bytes_per_line > 4) + begin + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refill_offset <= {addr_offset_width{1'b0}}; + else + begin + case (state) + + + 3'b010: + begin + if (miss == 1'b1) + refill_offset <= {addr_offset_width{1'b0}}; + end + + + 3'b100: + begin + if (refill_ready == 1'b1) + refill_offset <= refill_offset + 1'b1; + end + + endcase + end +end + end +endgenerate + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_debug_full_debug ( + + clk_i, + rst_i, + pc_x, + load_x, + store_x, + load_store_address_x, + csr_write_enable_x, + csr_write_data, + csr_x, + + + + + jtag_csr_write_enable, + jtag_csr_write_data, + jtag_csr, + + + + + + + + + + + + + + + eret_q_x, + bret_q_x, + stall_x, + exception_x, + q_x, + + + dcache_refill_request, + + + + + + + + + dc_ss, + + + dc_re, + bp_match, + wp_match + ); + + + + + +parameter breakpoints = 0; +parameter watchpoints = 0; + + + + + +input clk_i; +input rst_i; + +input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x; +input load_x; +input store_x; +input [ (32-1):0] load_store_address_x; +input csr_write_enable_x; +input [ (32-1):0] csr_write_data; +input [ (5-1):0] csr_x; + + + + +input jtag_csr_write_enable; +input [ (32-1):0] jtag_csr_write_data; +input [ (5-1):0] jtag_csr; + + + + + + + + + + + + + + +input eret_q_x; +input bret_q_x; +input stall_x; +input exception_x; +input q_x; + + +input dcache_refill_request; + + + + + + + + + + + +output dc_ss; +reg dc_ss; + + +output dc_re; +reg dc_re; +output bp_match; +wire bp_match; +output wp_match; +wire wp_match; + + + + + +genvar i; + + + +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] bp_a[0:breakpoints-1]; +reg bp_e[0:breakpoints-1]; +wire [0:breakpoints-1]bp_match_n; + +reg [ 1:0] wpc_c[0:watchpoints-1]; +reg [ (32-1):0] wp[0:watchpoints-1]; +wire [0:watchpoints-1]wp_match_n; + +wire debug_csr_write_enable; +wire [ (32-1):0] debug_csr_write_data; +wire [ (5-1):0] debug_csr; + + + + +reg [ 2:0] state; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0) +assign bp_match = (|bp_match_n) || (state == 3'b011); + else +assign bp_match = state == 3'b011; + + + + + + + +endgenerate + + +generate + for (i = 0; i < watchpoints; i = i + 1) + begin : wp_comb +assign wp_match_n[i] = (wp[i] == load_store_address_x) && ((load_x & wpc_c[i][0]) | (store_x & wpc_c[i][1])); + end +endgenerate +generate + if (watchpoints > 0) +assign wp_match = |wp_match_n; + else +assign wp_match = 1'b0; +endgenerate + + + + + + +assign debug_csr_write_enable = (csr_write_enable_x == 1'b1) || (jtag_csr_write_enable == 1'b1); +assign debug_csr_write_data = jtag_csr_write_enable == 1'b1 ? jtag_csr_write_data : csr_write_data; +assign debug_csr = jtag_csr_write_enable == 1'b1 ? jtag_csr : csr_x; + + + + + + + + + + + + + + + + + + + + + + + +generate + for (i = 0; i < breakpoints; i = i + 1) + begin : bp_seq +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + bp_a[i] <= { (clogb2(32'h7fffffff-32'h0)-2){1'bx}}; + bp_e[i] <= 1'b0; + end + else + begin + if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h10 + i)) + begin + bp_a[i] <= debug_csr_write_data[ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2]; + bp_e[i] <= debug_csr_write_data[0]; + end + end +end + end +endgenerate + + +generate + for (i = 0; i < watchpoints; i = i + 1) + begin : wp_seq +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + wp[i] <= { 32{1'bx}}; + wpc_c[i] <= 2'b00; + end + else + begin + if (debug_csr_write_enable == 1'b1) + begin + if (debug_csr == 5'h8) + wpc_c[i] <= debug_csr_write_data[3+i*2:2+i*2]; + if (debug_csr == 5'h18 + i) + wp[i] <= debug_csr_write_data; + end + end +end + end +endgenerate + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + dc_re <= 1'b0; + else + begin + if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h8)) + dc_re <= debug_csr_write_data[1]; + end +end + + + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + state <= 3'b000; + dc_ss <= 1'b0; + end + else + begin + if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h8)) + begin + dc_ss <= debug_csr_write_data[0]; + if (debug_csr_write_data[0] == 1'b0) + state <= 3'b000; + else + state <= 3'b001; + end + case (state) + 3'b001: + begin + + if ( ( (eret_q_x == 1'b1) + || (bret_q_x == 1'b1) + ) + && (stall_x == 1'b0) + ) + state <= 3'b010; + end + 3'b010: + begin + + if ((q_x == 1'b1) && (stall_x == 1'b0)) + state <= 3'b011; + end + 3'b011: + begin + + + + if (dcache_refill_request == 1'b1) + state <= 3'b010; + else + + + if ((exception_x == 1'b1) && (q_x == 1'b1) && (stall_x == 1'b0)) + begin + dc_ss <= 1'b0; + state <= 3'b100; + end + end + 3'b100: + begin + + + + if (dcache_refill_request == 1'b1) + state <= 3'b010; + else + + + state <= 3'b000; + end + endcase + end +end + + + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_instruction_unit_full_debug ( + + clk_i, + rst_i, + + stall_a, + stall_f, + stall_d, + stall_x, + stall_m, + valid_f, + valid_d, + kill_f, + branch_predict_taken_d, + branch_predict_address_d, + + + branch_taken_x, + branch_target_x, + + + exception_m, + branch_taken_m, + branch_mispredict_taken_m, + branch_target_m, + + + iflush, + + + + + dcache_restart_request, + dcache_refill_request, + dcache_refilling, + + + + + + i_dat_i, + i_ack_i, + i_err_i, + i_rty_i, + + + + + jtag_read_enable, + jtag_write_enable, + jtag_write_data, + jtag_address, + + + + + pc_f, + pc_d, + pc_x, + pc_m, + pc_w, + + + icache_stall_request, + icache_restart_request, + icache_refill_request, + icache_refilling, + + + + + + i_dat_o, + i_adr_o, + i_cyc_o, + i_sel_o, + i_stb_o, + i_we_o, + i_cti_o, + i_lock_o, + i_bte_o, + + + + + + + + + + + jtag_read_data, + jtag_access_complete, + + + + + bus_error_d, + + + + + instruction_f, + + + instruction_d + ); + + + + + +parameter eba_reset = 32'h00000000; +parameter associativity = 1; +parameter sets = 512; +parameter bytes_per_line = 16; +parameter base_address = 0; +parameter limit = 0; + + +localparam eba_reset_minus_4 = eba_reset - 4; +localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2; +localparam addr_offset_lsb = 2; +localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1); + + + + + + + + + + + + +input clk_i; +input rst_i; + +input stall_a; +input stall_f; +input stall_d; +input stall_x; +input stall_m; +input valid_f; +input valid_d; +input kill_f; + +input branch_predict_taken_d; +input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_predict_address_d; + + + +input branch_taken_x; +input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_x; + + +input exception_m; +input branch_taken_m; +input branch_mispredict_taken_m; +input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_m; + + + +input iflush; + + + + +input dcache_restart_request; +input dcache_refill_request; +input dcache_refilling; + + + + + + +input [ (32-1):0] i_dat_i; +input i_ack_i; +input i_err_i; +input i_rty_i; + + + + + +input jtag_read_enable; +input jtag_write_enable; +input [ 7:0] jtag_write_data; +input [ (32-1):0] jtag_address; + + + + + + + +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w; + + + +output icache_stall_request; +wire icache_stall_request; +output icache_restart_request; +wire icache_restart_request; +output icache_refill_request; +wire icache_refill_request; +output icache_refilling; +wire icache_refilling; + + + + + +output [ (32-1):0] i_dat_o; + + +reg [ (32-1):0] i_dat_o; + + + + +output [ (32-1):0] i_adr_o; +reg [ (32-1):0] i_adr_o; +output i_cyc_o; +reg i_cyc_o; +output [ (4-1):0] i_sel_o; + + +reg [ (4-1):0] i_sel_o; + + + + +output i_stb_o; +reg i_stb_o; +output i_we_o; + + +reg i_we_o; + + + + +output [ (3-1):0] i_cti_o; +reg [ (3-1):0] i_cti_o; +output i_lock_o; +reg i_lock_o; +output [ (2-1):0] i_bte_o; +wire [ (2-1):0] i_bte_o; + + + + + +output [ 7:0] jtag_read_data; +reg [ 7:0] jtag_read_data; +output jtag_access_complete; +wire jtag_access_complete; + + + + + +output bus_error_d; +reg bus_error_d; + + + + +output [ (32-1):0] instruction_f; +wire [ (32-1):0] instruction_f; + + +output [ (32-1):0] instruction_d; +reg [ (32-1):0] instruction_d; + + + + + +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_a; + + + +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] restart_address; + + + + + +wire icache_read_enable_f; +wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] icache_refill_address; +reg icache_refill_ready; +reg [ (32-1):0] icache_refill_data; +wire [ (32-1):0] icache_data_f; +wire [ (3-1):0] first_cycle_type; +wire [ (3-1):0] next_cycle_type; +wire last_word; +wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] first_address; + + + + + + + + + + + + + + + + + + + + + + + + + reg bus_error_f; + + + + + + + + + + + +reg jtag_access; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 1) + begin + +always @(*) +begin + case (csr) + 5'h0: csr_read_data = {{ 32-3{1'b0}}, + + + bie, + + + + + eie, + ie + }; + 5'h2: csr_read_data = ip; + 5'h1: csr_read_data = im; + default: csr_read_data = { 32{1'bx}}; + endcase +end + end + else + begin + +always @(*) +begin + case (csr) + 5'h0: csr_read_data = {{ 32-3{1'b0}}, + + + bie, + + + + + eie, + ie + }; + 5'h2: csr_read_data = ip; + default: csr_read_data = { 32{1'bx}}; + endcase +end + end +endgenerate + + + + + + + + reg [ 10:0] eie_delay = 0; + + +generate + + + if (interrupts > 1) + begin + +always @(posedge clk_i ) + begin + if (rst_i == 1'b1) + begin + ie <= 1'b0; + eie <= 1'b0; + + + bie <= 1'b0; + + + im <= {interrupts{1'b0}}; + ip <= {interrupts{1'b0}}; + eie_delay <= 0; + + end + else + begin + + ip <= asserted; + + + if (non_debug_exception == 1'b1) + begin + + eie <= ie; + ie <= 1'b0; + end + else if (debug_exception == 1'b1) + begin + + bie <= ie; + ie <= 1'b0; + end + + + + + + + + + + else if (stall_x == 1'b0) + begin + + if(eie_delay[0]) + ie <= eie; + + eie_delay <= {1'b0, eie_delay[ 10:1]}; + + if (eret_q_x == 1'b1) begin + + eie_delay[ 10] <= 1'b1; + eie_delay[ 10-1:0] <= 0; + end + + + + + + else if (bret_q_x == 1'b1) + + ie <= bie; + + + else if (csr_write_enable == 1'b1) + begin + + if (csr == 5'h0) + begin + ie <= csr_write_data[0]; + eie <= csr_write_data[1]; + + + bie <= csr_write_data[2]; + + + end + if (csr == 5'h1) + im <= csr_write_data[interrupts-1:0]; + if (csr == 5'h2) + ip <= asserted & ~csr_write_data[interrupts-1:0]; + end + end + end +end + end +else + begin + +always @(posedge clk_i ) + begin + if (rst_i == 1'b1) + begin + ie <= 1'b0; + eie <= 1'b0; + + + bie <= 1'b0; + + + ip <= {interrupts{1'b0}}; + eie_delay <= 0; + end + else + begin + + ip <= asserted; + + + if (non_debug_exception == 1'b1) + begin + + eie <= ie; + ie <= 1'b0; + end + else if (debug_exception == 1'b1) + begin + + bie <= ie; + ie <= 1'b0; + end + + + + + + + + + + else if (stall_x == 1'b0) + begin + + if(eie_delay[0]) + ie <= eie; + + eie_delay <= {1'b0, eie_delay[ 10:1]}; + + if (eret_q_x == 1'b1) begin + + eie_delay[ 10] <= 1'b1; + eie_delay[ 10-1:0] <= 0; + end + + + + else if (bret_q_x == 1'b1) + + ie <= bie; + + + else if (csr_write_enable == 1'b1) + begin + + if (csr == 5'h0) + begin + ie <= csr_write_data[0]; + eie <= csr_write_data[1]; + + + bie <= csr_write_data[2]; + + + end + if (csr == 5'h2) + ip <= asserted & ~csr_write_data[interrupts-1:0]; + end + end + end +end + end +endgenerate + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_top_medium ( + + clk_i, + rst_i, + + + interrupt, + + + + + + + + + + + I_DAT_I, + I_ACK_I, + I_ERR_I, + I_RTY_I, + + + + D_DAT_I, + D_ACK_I, + D_ERR_I, + D_RTY_I, + + + + + + + + + + + + I_DAT_O, + I_ADR_O, + I_CYC_O, + I_SEL_O, + I_STB_O, + I_WE_O, + I_CTI_O, + I_LOCK_O, + I_BTE_O, + + + + D_DAT_O, + D_ADR_O, + D_CYC_O, + D_SEL_O, + D_STB_O, + D_WE_O, + D_CTI_O, + D_LOCK_O, + D_BTE_O + ); + +parameter eba_reset = 32'h00000000; +parameter sdb_address = 32'h00000000; + + + + +input clk_i; +input rst_i; + + +input [ (32-1):0] interrupt; + + + + + + + + + + +input [ (32-1):0] I_DAT_I; +input I_ACK_I; +input I_ERR_I; +input I_RTY_I; + + + +input [ (32-1):0] D_DAT_I; +input D_ACK_I; +input D_ERR_I; +input D_RTY_I; + + + + + + + + + + + + + + + + + + + +output [ (32-1):0] I_DAT_O; +wire [ (32-1):0] I_DAT_O; +output [ (32-1):0] I_ADR_O; +wire [ (32-1):0] I_ADR_O; +output I_CYC_O; +wire I_CYC_O; +output [ (4-1):0] I_SEL_O; +wire [ (4-1):0] I_SEL_O; +output I_STB_O; +wire I_STB_O; +output I_WE_O; +wire I_WE_O; +output [ (3-1):0] I_CTI_O; +wire [ (3-1):0] I_CTI_O; +output I_LOCK_O; +wire I_LOCK_O; +output [ (2-1):0] I_BTE_O; +wire [ (2-1):0] I_BTE_O; + + + +output [ (32-1):0] D_DAT_O; +wire [ (32-1):0] D_DAT_O; +output [ (32-1):0] D_ADR_O; +wire [ (32-1):0] D_ADR_O; +output D_CYC_O; +wire D_CYC_O; +output [ (4-1):0] D_SEL_O; +wire [ (4-1):0] D_SEL_O; +output D_STB_O; +wire D_STB_O; +output D_WE_O; +wire D_WE_O; +output [ (3-1):0] D_CTI_O; +wire [ (3-1):0] D_CTI_O; +output D_LOCK_O; +wire D_LOCK_O; +output [ (2-1):0] D_BTE_O; +wire [ (2-1):0] D_BTE_O; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 1) + begin + +always @(*) +begin + case (csr) + 4 'h0: csr_read_data = {{ 32-3{1'b0}}, + + + + + 1'b0, + + + eie, + ie + }; + 4 'h2: csr_read_data = ip; + 4 'h1: csr_read_data = im; + default: csr_read_data = { 32{1'bx}}; + endcase +end + end + else + begin + +always @(*) +begin + case (csr) + 4 'h0: csr_read_data = {{ 32-3{1'b0}}, + + + + + 1'b0, + + + eie, + ie + }; + 4 'h2: csr_read_data = ip; + default: csr_read_data = { 32{1'bx}}; + endcase +end + end +endgenerate + + + + + + + + reg [ 10:0] eie_delay = 0; + + +generate + + + if (interrupts > 1) + begin + +always @(posedge clk_i ) + begin + if (rst_i == 1'b1) + begin + ie <= 1'b0; + eie <= 1'b0; + + + + + im <= {interrupts{1'b0}}; + ip <= {interrupts{1'b0}}; + eie_delay <= 0; + + end + else + begin + + ip <= asserted; + + + + + + + + + + + + + + + + if (exception == 1'b1) + begin + + eie <= ie; + ie <= 1'b0; + end + + + else if (stall_x == 1'b0) + begin + + if(eie_delay[0]) + ie <= eie; + + eie_delay <= {1'b0, eie_delay[ 10:1]}; + + if (eret_q_x == 1'b1) begin + + eie_delay[ 10] <= 1'b1; + eie_delay[ 10-1:0] <= 0; + end + + + + + + + + + + else if (csr_write_enable == 1'b1) + begin + + if (csr == 4 'h0) + begin + ie <= csr_write_data[0]; + eie <= csr_write_data[1]; + + + + + end + if (csr == 4 'h1) + im <= csr_write_data[interrupts-1:0]; + if (csr == 4 'h2) + ip <= asserted & ~csr_write_data[interrupts-1:0]; + end + end + end +end + end +else + begin + +always @(posedge clk_i ) + begin + if (rst_i == 1'b1) + begin + ie <= 1'b0; + eie <= 1'b0; + + + + + ip <= {interrupts{1'b0}}; + eie_delay <= 0; + end + else + begin + + ip <= asserted; + + + + + + + + + + + + + + + + if (exception == 1'b1) + begin + + eie <= ie; + ie <= 1'b0; + end + + + else if (stall_x == 1'b0) + begin + + if(eie_delay[0]) + ie <= eie; + + eie_delay <= {1'b0, eie_delay[ 10:1]}; + + if (eret_q_x == 1'b1) begin + + eie_delay[ 10] <= 1'b1; + eie_delay[ 10-1:0] <= 0; + end + + + + + + + + else if (csr_write_enable == 1'b1) + begin + + if (csr == 4 'h0) + begin + ie <= csr_write_data[0]; + eie <= csr_write_data[1]; + + + + + end + if (csr == 4 'h2) + ip <= asserted & ~csr_write_data[interrupts-1:0]; + end + end + end +end + end +endgenerate + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_top_medium_debug ( + + clk_i, + rst_i, + + + interrupt, + + + + + + + + + + + I_DAT_I, + I_ACK_I, + I_ERR_I, + I_RTY_I, + + + + D_DAT_I, + D_ACK_I, + D_ERR_I, + D_RTY_I, + + + + + + + + + + + + I_DAT_O, + I_ADR_O, + I_CYC_O, + I_SEL_O, + I_STB_O, + I_WE_O, + I_CTI_O, + I_LOCK_O, + I_BTE_O, + + + + D_DAT_O, + D_ADR_O, + D_CYC_O, + D_SEL_O, + D_STB_O, + D_WE_O, + D_CTI_O, + D_LOCK_O, + D_BTE_O + ); + +parameter eba_reset = 32'h00000000; +parameter sdb_address = 32'h00000000; + + + + +input clk_i; +input rst_i; + + +input [ (32-1):0] interrupt; + + + + + + + + + + +input [ (32-1):0] I_DAT_I; +input I_ACK_I; +input I_ERR_I; +input I_RTY_I; + + + +input [ (32-1):0] D_DAT_I; +input D_ACK_I; +input D_ERR_I; +input D_RTY_I; + + + + + + + + + + + + + + + + + + + +output [ (32-1):0] I_DAT_O; +wire [ (32-1):0] I_DAT_O; +output [ (32-1):0] I_ADR_O; +wire [ (32-1):0] I_ADR_O; +output I_CYC_O; +wire I_CYC_O; +output [ (4-1):0] I_SEL_O; +wire [ (4-1):0] I_SEL_O; +output I_STB_O; +wire I_STB_O; +output I_WE_O; +wire I_WE_O; +output [ (3-1):0] I_CTI_O; +wire [ (3-1):0] I_CTI_O; +output I_LOCK_O; +wire I_LOCK_O; +output [ (2-1):0] I_BTE_O; +wire [ (2-1):0] I_BTE_O; + + + +output [ (32-1):0] D_DAT_O; +wire [ (32-1):0] D_DAT_O; +output [ (32-1):0] D_ADR_O; +wire [ (32-1):0] D_ADR_O; +output D_CYC_O; +wire D_CYC_O; +output [ (4-1):0] D_SEL_O; +wire [ (4-1):0] D_SEL_O; +output D_STB_O; +wire D_STB_O; +output D_WE_O; +wire D_WE_O; +output [ (3-1):0] D_CTI_O; +wire [ (3-1):0] D_CTI_O; +output D_LOCK_O; +wire D_LOCK_O; +output [ (2-1):0] D_BTE_O; +wire [ (2-1):0] D_BTE_O; + + + + + + + + +wire [ 7:0] jtag_reg_d; +wire [ 7:0] jtag_reg_q; +wire jtag_update; +wire [2:0] jtag_reg_addr_d; +wire [2:0] jtag_reg_addr_q; +wire jtck; +wire jrstn; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 4) +assign dmem_write_address = {refill_address[ addr_set_msb:addr_set_lsb], refill_offset}; + else +assign dmem_write_address = refill_address[ addr_set_msb:addr_set_lsb]; +endgenerate + +assign dmem_read_address = address_a[ addr_set_msb:addr_offset_lsb]; + + +assign tmem_read_address = address_a[ addr_set_msb:addr_set_lsb]; +assign tmem_write_address = flushing + ? flush_set + : refill_address[ addr_set_msb:addr_set_lsb]; + + +generate + if (bytes_per_line > 4) +assign last_refill = refill_offset == {addr_offset_width{1'b1}}; + else +assign last_refill = 1'b1; +endgenerate + + +assign enable = (stall_a == 1'b0); + + +generate + if (associativity == 1) + begin : we_1 +assign way_mem_we[0] = (refill_ready == 1'b1); + end + else + begin : we_2 +assign way_mem_we[0] = (refill_ready == 1'b1) && (refill_way_select[0] == 1'b1); +assign way_mem_we[1] = (refill_ready == 1'b1) && (refill_way_select[1] == 1'b1); + end +endgenerate + + +assign tmem_write_data[ 0] = last_refill & !flushing; +assign tmem_write_data[ ((addr_tag_width+1)-1):1] = refill_address[ addr_tag_msb:addr_tag_lsb]; + + +assign flushing = |state[1:0]; +assign check = state[2]; +assign refill = state[3]; + +assign miss = (~(|way_match)) && (read_enable_f == 1'b1) && (stall_f == 1'b0) && !(valid_d && branch_predict_taken_d); +assign stall_request = (check == 1'b0); +assign refill_request = (refill == 1'b1); + + + + + + +generate + if (associativity >= 2) + begin : way_select +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refill_way_select <= {{associativity-1{1'b0}}, 1'b1}; + else + begin + if (miss == 1'b1) + refill_way_select <= {refill_way_select[0], refill_way_select[1]}; + end +end + end +endgenerate + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refilling <= 1'b0; + else + refilling <= refill; +end + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + state <= 4'b0001; + flush_set <= { addr_set_width{1'b1}}; + refill_address <= { (clogb2(32'h7fffffff-32'h0)-2){1'bx}}; + restart_request <= 1'b0; + end + else + begin + case (state) + + + 4'b0001: + begin + if (flush_set == { addr_set_width{1'b0}}) + state <= 4'b0100; + flush_set <= flush_set - 1'b1; + end + + + 4'b0010: + begin + if (flush_set == { addr_set_width{1'b0}}) + + + + + + + state <= 4'b0100; + + flush_set <= flush_set - 1'b1; + end + + + 4'b0100: + begin + if (stall_a == 1'b0) + restart_request <= 1'b0; + if (iflush == 1'b1) + begin + refill_address <= address_f; + state <= 4'b0010; + end + else if (miss == 1'b1) + begin + refill_address <= address_f; + state <= 4'b1000; + end + end + + + 4'b1000: + begin + if (refill_ready == 1'b1) + begin + if (last_refill == 1'b1) + begin + restart_request <= 1'b1; + state <= 4'b0100; + end + end + end + + endcase + end +end + +generate + if (bytes_per_line > 4) + begin + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refill_offset <= {addr_offset_width{1'b0}}; + else + begin + case (state) + + + 4'b0100: + begin + if (iflush == 1'b1) + refill_offset <= {addr_offset_width{1'b0}}; + else if (miss == 1'b1) + refill_offset <= {addr_offset_width{1'b0}}; + end + + + 4'b1000: + begin + if (refill_ready == 1'b1) + refill_offset <= refill_offset + 1'b1; + end + + endcase + end +end + end +endgenerate + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_debug_medium_debug ( + + clk_i, + rst_i, + pc_x, + load_x, + store_x, + load_store_address_x, + csr_write_enable_x, + csr_write_data, + csr_x, + + + + + jtag_csr_write_enable, + jtag_csr_write_data, + jtag_csr, + + + + + + + + + + + + + + + eret_q_x, + bret_q_x, + stall_x, + exception_x, + q_x, + + + + + + + + + + + dc_ss, + + + dc_re, + bp_match, + wp_match + ); + + + + + +parameter breakpoints = 0; +parameter watchpoints = 0; + + + + + +input clk_i; +input rst_i; + +input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x; +input load_x; +input store_x; +input [ (32-1):0] load_store_address_x; +input csr_write_enable_x; +input [ (32-1):0] csr_write_data; +input [ (5-1):0] csr_x; + + + + +input jtag_csr_write_enable; +input [ (32-1):0] jtag_csr_write_data; +input [ (5-1):0] jtag_csr; + + + + + + + + + + + + + + +input eret_q_x; +input bret_q_x; +input stall_x; +input exception_x; +input q_x; + + + + + + + + + + + + + +output dc_ss; +reg dc_ss; + + +output dc_re; +reg dc_re; +output bp_match; +wire bp_match; +output wp_match; +wire wp_match; + + + + + +genvar i; + + + +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] bp_a[0:breakpoints-1]; +reg bp_e[0:breakpoints-1]; +wire [0:breakpoints-1]bp_match_n; + +reg [ 1:0] wpc_c[0:watchpoints-1]; +reg [ (32-1):0] wp[0:watchpoints-1]; +wire [0:watchpoints-1]wp_match_n; + +wire debug_csr_write_enable; +wire [ (32-1):0] debug_csr_write_data; +wire [ (5-1):0] debug_csr; + + + + +reg [ 2:0] state; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0) +assign bp_match = (|bp_match_n) || (state == 3'b011); + else +assign bp_match = state == 3'b011; + + + + + + + +endgenerate + + +generate + for (i = 0; i < watchpoints; i = i + 1) + begin : wp_comb +assign wp_match_n[i] = (wp[i] == load_store_address_x) && ((load_x & wpc_c[i][0]) | (store_x & wpc_c[i][1])); + end +endgenerate +generate + if (watchpoints > 0) +assign wp_match = |wp_match_n; + else +assign wp_match = 1'b0; +endgenerate + + + + + + +assign debug_csr_write_enable = (csr_write_enable_x == 1'b1) || (jtag_csr_write_enable == 1'b1); +assign debug_csr_write_data = jtag_csr_write_enable == 1'b1 ? jtag_csr_write_data : csr_write_data; +assign debug_csr = jtag_csr_write_enable == 1'b1 ? jtag_csr : csr_x; + + + + + + + + + + + + + + + + + + + + + + + +generate + for (i = 0; i < breakpoints; i = i + 1) + begin : bp_seq +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + bp_a[i] <= { (clogb2(32'h7fffffff-32'h0)-2){1'bx}}; + bp_e[i] <= 1'b0; + end + else + begin + if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h10 + i)) + begin + bp_a[i] <= debug_csr_write_data[ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2]; + bp_e[i] <= debug_csr_write_data[0]; + end + end +end + end +endgenerate + + +generate + for (i = 0; i < watchpoints; i = i + 1) + begin : wp_seq +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + wp[i] <= { 32{1'bx}}; + wpc_c[i] <= 2'b00; + end + else + begin + if (debug_csr_write_enable == 1'b1) + begin + if (debug_csr == 5'h8) + wpc_c[i] <= debug_csr_write_data[3+i*2:2+i*2]; + if (debug_csr == 5'h18 + i) + wp[i] <= debug_csr_write_data; + end + end +end + end +endgenerate + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + dc_re <= 1'b0; + else + begin + if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h8)) + dc_re <= debug_csr_write_data[1]; + end +end + + + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + state <= 3'b000; + dc_ss <= 1'b0; + end + else + begin + if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h8)) + begin + dc_ss <= debug_csr_write_data[0]; + if (debug_csr_write_data[0] == 1'b0) + state <= 3'b000; + else + state <= 3'b001; + end + case (state) + 3'b001: + begin + + if ( ( (eret_q_x == 1'b1) + || (bret_q_x == 1'b1) + ) + && (stall_x == 1'b0) + ) + state <= 3'b010; + end + 3'b010: + begin + + if ((q_x == 1'b1) && (stall_x == 1'b0)) + state <= 3'b011; + end + 3'b011: + begin + + + + + + + + if ((exception_x == 1'b1) && (q_x == 1'b1) && (stall_x == 1'b0)) + begin + dc_ss <= 1'b0; + state <= 3'b100; + end + end + 3'b100: + begin + + + + + + + + state <= 3'b000; + end + endcase + end +end + + + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_instruction_unit_medium_debug ( + + clk_i, + rst_i, + + stall_a, + stall_f, + stall_d, + stall_x, + stall_m, + valid_f, + valid_d, + kill_f, + branch_predict_taken_d, + branch_predict_address_d, + + + + + + exception_m, + branch_taken_m, + branch_mispredict_taken_m, + branch_target_m, + + + iflush, + + + + + + + + + + + + i_dat_i, + i_ack_i, + i_err_i, + i_rty_i, + + + + + jtag_read_enable, + jtag_write_enable, + jtag_write_data, + jtag_address, + + + + + pc_f, + pc_d, + pc_x, + pc_m, + pc_w, + + + icache_stall_request, + icache_restart_request, + icache_refill_request, + icache_refilling, + + + + + + i_dat_o, + i_adr_o, + i_cyc_o, + i_sel_o, + i_stb_o, + i_we_o, + i_cti_o, + i_lock_o, + i_bte_o, + + + + + + + + + + + jtag_read_data, + jtag_access_complete, + + + + + + + + + instruction_f, + + + instruction_d + ); + + + + + +parameter eba_reset = 32'h00000000; +parameter associativity = 1; +parameter sets = 512; +parameter bytes_per_line = 16; +parameter base_address = 0; +parameter limit = 0; + + +localparam eba_reset_minus_4 = eba_reset - 4; +localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2; +localparam addr_offset_lsb = 2; +localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1); + + + + + + + + + + + + +input clk_i; +input rst_i; + +input stall_a; +input stall_f; +input stall_d; +input stall_x; +input stall_m; +input valid_f; +input valid_d; +input kill_f; + +input branch_predict_taken_d; +input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_predict_address_d; + + + + + + +input exception_m; +input branch_taken_m; +input branch_mispredict_taken_m; +input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_m; + + + +input iflush; + + + + + + + + + + + + +input [ (32-1):0] i_dat_i; +input i_ack_i; +input i_err_i; +input i_rty_i; + + + + + +input jtag_read_enable; +input jtag_write_enable; +input [ 7:0] jtag_write_data; +input [ (32-1):0] jtag_address; + + + + + + + +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w; + + + +output icache_stall_request; +wire icache_stall_request; +output icache_restart_request; +wire icache_restart_request; +output icache_refill_request; +wire icache_refill_request; +output icache_refilling; +wire icache_refilling; + + + + + +output [ (32-1):0] i_dat_o; + + +reg [ (32-1):0] i_dat_o; + + + + +output [ (32-1):0] i_adr_o; +reg [ (32-1):0] i_adr_o; +output i_cyc_o; +reg i_cyc_o; +output [ (4-1):0] i_sel_o; + + +reg [ (4-1):0] i_sel_o; + + + + +output i_stb_o; +reg i_stb_o; +output i_we_o; + + +reg i_we_o; + + + + +output [ (3-1):0] i_cti_o; +reg [ (3-1):0] i_cti_o; +output i_lock_o; +reg i_lock_o; +output [ (2-1):0] i_bte_o; +wire [ (2-1):0] i_bte_o; + + + + + +output [ 7:0] jtag_read_data; +reg [ 7:0] jtag_read_data; +output jtag_access_complete; +wire jtag_access_complete; + + + + + + + + + + +output [ (32-1):0] instruction_f; +wire [ (32-1):0] instruction_f; + + +output [ (32-1):0] instruction_d; +reg [ (32-1):0] instruction_d; + + + + + +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_a; + + + +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] restart_address; + + + + + +wire icache_read_enable_f; +wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] icache_refill_address; +reg icache_refill_ready; +reg [ (32-1):0] icache_refill_data; +wire [ (32-1):0] icache_data_f; +wire [ (3-1):0] first_cycle_type; +wire [ (3-1):0] next_cycle_type; +wire last_word; +wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] first_address; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +reg jtag_access; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 1) + begin + +always @(*) +begin + case (csr) + 5'h0: csr_read_data = {{ 32-3{1'b0}}, + + + bie, + + + + + eie, + ie + }; + 5'h2: csr_read_data = ip; + 5'h1: csr_read_data = im; + default: csr_read_data = { 32{1'bx}}; + endcase +end + end + else + begin + +always @(*) +begin + case (csr) + 5'h0: csr_read_data = {{ 32-3{1'b0}}, + + + bie, + + + + + eie, + ie + }; + 5'h2: csr_read_data = ip; + default: csr_read_data = { 32{1'bx}}; + endcase +end + end +endgenerate + + + + + + + + reg [ 10:0] eie_delay = 0; + + +generate + + + if (interrupts > 1) + begin + +always @(posedge clk_i ) + begin + if (rst_i == 1'b1) + begin + ie <= 1'b0; + eie <= 1'b0; + + + bie <= 1'b0; + + + im <= {interrupts{1'b0}}; + ip <= {interrupts{1'b0}}; + eie_delay <= 0; + + end + else + begin + + ip <= asserted; + + + if (non_debug_exception == 1'b1) + begin + + eie <= ie; + ie <= 1'b0; + end + else if (debug_exception == 1'b1) + begin + + bie <= ie; + ie <= 1'b0; + end + + + + + + + + + + else if (stall_x == 1'b0) + begin + + if(eie_delay[0]) + ie <= eie; + + eie_delay <= {1'b0, eie_delay[ 10:1]}; + + if (eret_q_x == 1'b1) begin + + eie_delay[ 10] <= 1'b1; + eie_delay[ 10-1:0] <= 0; + end + + + + + + else if (bret_q_x == 1'b1) + + ie <= bie; + + + else if (csr_write_enable == 1'b1) + begin + + if (csr == 5'h0) + begin + ie <= csr_write_data[0]; + eie <= csr_write_data[1]; + + + bie <= csr_write_data[2]; + + + end + if (csr == 5'h1) + im <= csr_write_data[interrupts-1:0]; + if (csr == 5'h2) + ip <= asserted & ~csr_write_data[interrupts-1:0]; + end + end + end +end + end +else + begin + +always @(posedge clk_i ) + begin + if (rst_i == 1'b1) + begin + ie <= 1'b0; + eie <= 1'b0; + + + bie <= 1'b0; + + + ip <= {interrupts{1'b0}}; + eie_delay <= 0; + end + else + begin + + ip <= asserted; + + + if (non_debug_exception == 1'b1) + begin + + eie <= ie; + ie <= 1'b0; + end + else if (debug_exception == 1'b1) + begin + + bie <= ie; + ie <= 1'b0; + end + + + + + + + + + + else if (stall_x == 1'b0) + begin + + if(eie_delay[0]) + ie <= eie; + + eie_delay <= {1'b0, eie_delay[ 10:1]}; + + if (eret_q_x == 1'b1) begin + + eie_delay[ 10] <= 1'b1; + eie_delay[ 10-1:0] <= 0; + end + + + + else if (bret_q_x == 1'b1) + + ie <= bie; + + + else if (csr_write_enable == 1'b1) + begin + + if (csr == 5'h0) + begin + ie <= csr_write_data[0]; + eie <= csr_write_data[1]; + + + bie <= csr_write_data[2]; + + + end + if (csr == 5'h2) + ip <= asserted & ~csr_write_data[interrupts-1:0]; + end + end + end +end + end +endgenerate + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_top_medium_icache ( + + clk_i, + rst_i, + + + interrupt, + + + + + + + + + + + I_DAT_I, + I_ACK_I, + I_ERR_I, + I_RTY_I, + + + + D_DAT_I, + D_ACK_I, + D_ERR_I, + D_RTY_I, + + + + + + + + + + + + I_DAT_O, + I_ADR_O, + I_CYC_O, + I_SEL_O, + I_STB_O, + I_WE_O, + I_CTI_O, + I_LOCK_O, + I_BTE_O, + + + + D_DAT_O, + D_ADR_O, + D_CYC_O, + D_SEL_O, + D_STB_O, + D_WE_O, + D_CTI_O, + D_LOCK_O, + D_BTE_O + ); + +parameter eba_reset = 32'h00000000; +parameter sdb_address = 32'h00000000; + + + + +input clk_i; +input rst_i; + + +input [ (32-1):0] interrupt; + + + + + + + + + + +input [ (32-1):0] I_DAT_I; +input I_ACK_I; +input I_ERR_I; +input I_RTY_I; + + + +input [ (32-1):0] D_DAT_I; +input D_ACK_I; +input D_ERR_I; +input D_RTY_I; + + + + + + + + + + + + + + + + + + + +output [ (32-1):0] I_DAT_O; +wire [ (32-1):0] I_DAT_O; +output [ (32-1):0] I_ADR_O; +wire [ (32-1):0] I_ADR_O; +output I_CYC_O; +wire I_CYC_O; +output [ (4-1):0] I_SEL_O; +wire [ (4-1):0] I_SEL_O; +output I_STB_O; +wire I_STB_O; +output I_WE_O; +wire I_WE_O; +output [ (3-1):0] I_CTI_O; +wire [ (3-1):0] I_CTI_O; +output I_LOCK_O; +wire I_LOCK_O; +output [ (2-1):0] I_BTE_O; +wire [ (2-1):0] I_BTE_O; + + + +output [ (32-1):0] D_DAT_O; +wire [ (32-1):0] D_DAT_O; +output [ (32-1):0] D_ADR_O; +wire [ (32-1):0] D_ADR_O; +output D_CYC_O; +wire D_CYC_O; +output [ (4-1):0] D_SEL_O; +wire [ (4-1):0] D_SEL_O; +output D_STB_O; +wire D_STB_O; +output D_WE_O; +wire D_WE_O; +output [ (3-1):0] D_CTI_O; +wire [ (3-1):0] D_CTI_O; +output D_LOCK_O; +wire D_LOCK_O; +output [ (2-1):0] D_BTE_O; +wire [ (2-1):0] D_BTE_O; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 4) +assign dmem_write_address = {refill_address[ addr_set_msb:addr_set_lsb], refill_offset}; + else +assign dmem_write_address = refill_address[ addr_set_msb:addr_set_lsb]; +endgenerate + +assign dmem_read_address = address_a[ addr_set_msb:addr_offset_lsb]; + + +assign tmem_read_address = address_a[ addr_set_msb:addr_set_lsb]; +assign tmem_write_address = flushing + ? flush_set + : refill_address[ addr_set_msb:addr_set_lsb]; + + +generate + if (bytes_per_line > 4) +assign last_refill = refill_offset == {addr_offset_width{1'b1}}; + else +assign last_refill = 1'b1; +endgenerate + + +assign enable = (stall_a == 1'b0); + + +generate + if (associativity == 1) + begin : we_1 +assign way_mem_we[0] = (refill_ready == 1'b1); + end + else + begin : we_2 +assign way_mem_we[0] = (refill_ready == 1'b1) && (refill_way_select[0] == 1'b1); +assign way_mem_we[1] = (refill_ready == 1'b1) && (refill_way_select[1] == 1'b1); + end +endgenerate + + +assign tmem_write_data[ 0] = last_refill & !flushing; +assign tmem_write_data[ ((addr_tag_width+1)-1):1] = refill_address[ addr_tag_msb:addr_tag_lsb]; + + +assign flushing = |state[1:0]; +assign check = state[2]; +assign refill = state[3]; + +assign miss = (~(|way_match)) && (read_enable_f == 1'b1) && (stall_f == 1'b0) && !(valid_d && branch_predict_taken_d); +assign stall_request = (check == 1'b0); +assign refill_request = (refill == 1'b1); + + + + + + +generate + if (associativity >= 2) + begin : way_select +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refill_way_select <= {{associativity-1{1'b0}}, 1'b1}; + else + begin + if (miss == 1'b1) + refill_way_select <= {refill_way_select[0], refill_way_select[1]}; + end +end + end +endgenerate + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refilling <= 1'b0; + else + refilling <= refill; +end + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + state <= 4'b0001; + flush_set <= { addr_set_width{1'b1}}; + refill_address <= { (clogb2(32'h7fffffff-32'h0)-2){1'bx}}; + restart_request <= 1'b0; + end + else + begin + case (state) + + + 4'b0001: + begin + if (flush_set == { addr_set_width{1'b0}}) + state <= 4'b0100; + flush_set <= flush_set - 1'b1; + end + + + 4'b0010: + begin + if (flush_set == { addr_set_width{1'b0}}) + + + + + + + state <= 4'b0100; + + flush_set <= flush_set - 1'b1; + end + + + 4'b0100: + begin + if (stall_a == 1'b0) + restart_request <= 1'b0; + if (iflush == 1'b1) + begin + refill_address <= address_f; + state <= 4'b0010; + end + else if (miss == 1'b1) + begin + refill_address <= address_f; + state <= 4'b1000; + end + end + + + 4'b1000: + begin + if (refill_ready == 1'b1) + begin + if (last_refill == 1'b1) + begin + restart_request <= 1'b1; + state <= 4'b0100; + end + end + end + + endcase + end +end + +generate + if (bytes_per_line > 4) + begin + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refill_offset <= {addr_offset_width{1'b0}}; + else + begin + case (state) + + + 4'b0100: + begin + if (iflush == 1'b1) + refill_offset <= {addr_offset_width{1'b0}}; + else if (miss == 1'b1) + refill_offset <= {addr_offset_width{1'b0}}; + end + + + 4'b1000: + begin + if (refill_ready == 1'b1) + refill_offset <= refill_offset + 1'b1; + end + + endcase + end +end + end +endgenerate + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_instruction_unit_medium_icache ( + + clk_i, + rst_i, + + stall_a, + stall_f, + stall_d, + stall_x, + stall_m, + valid_f, + valid_d, + kill_f, + branch_predict_taken_d, + branch_predict_address_d, + + + + + + exception_m, + branch_taken_m, + branch_mispredict_taken_m, + branch_target_m, + + + iflush, + + + + + + + + + + + + i_dat_i, + i_ack_i, + i_err_i, + i_rty_i, + + + + + + + + + + + + pc_f, + pc_d, + pc_x, + pc_m, + pc_w, + + + icache_stall_request, + icache_restart_request, + icache_refill_request, + icache_refilling, + + + + + + i_dat_o, + i_adr_o, + i_cyc_o, + i_sel_o, + i_stb_o, + i_we_o, + i_cti_o, + i_lock_o, + i_bte_o, + + + + + + + + + + + + + + + + + + + + instruction_f, + + + instruction_d + ); + + + + + +parameter eba_reset = 32'h00000000; +parameter associativity = 1; +parameter sets = 512; +parameter bytes_per_line = 16; +parameter base_address = 0; +parameter limit = 0; + + +localparam eba_reset_minus_4 = eba_reset - 4; +localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2; +localparam addr_offset_lsb = 2; +localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1); + + + + + + + + + + + + +input clk_i; +input rst_i; + +input stall_a; +input stall_f; +input stall_d; +input stall_x; +input stall_m; +input valid_f; +input valid_d; +input kill_f; + +input branch_predict_taken_d; +input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_predict_address_d; + + + + + + +input exception_m; +input branch_taken_m; +input branch_mispredict_taken_m; +input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_m; + + + +input iflush; + + + + + + + + + + + + +input [ (32-1):0] i_dat_i; +input i_ack_i; +input i_err_i; +input i_rty_i; + + + + + + + + + + + + + + + +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w; + + + +output icache_stall_request; +wire icache_stall_request; +output icache_restart_request; +wire icache_restart_request; +output icache_refill_request; +wire icache_refill_request; +output icache_refilling; +wire icache_refilling; + + + + + +output [ (32-1):0] i_dat_o; + + + + +wire [ (32-1):0] i_dat_o; + + +output [ (32-1):0] i_adr_o; +reg [ (32-1):0] i_adr_o; +output i_cyc_o; +reg i_cyc_o; +output [ (4-1):0] i_sel_o; + + + + +wire [ (4-1):0] i_sel_o; + + +output i_stb_o; +reg i_stb_o; +output i_we_o; + + + + +wire i_we_o; + + +output [ (3-1):0] i_cti_o; +reg [ (3-1):0] i_cti_o; +output i_lock_o; +reg i_lock_o; +output [ (2-1):0] i_bte_o; +wire [ (2-1):0] i_bte_o; + + + + + + + + + + + + + + + + + + +output [ (32-1):0] instruction_f; +wire [ (32-1):0] instruction_f; + + +output [ (32-1):0] instruction_d; +reg [ (32-1):0] instruction_d; + + + + + +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_a; + + + +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] restart_address; + + + + + +wire icache_read_enable_f; +wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] icache_refill_address; +reg icache_refill_ready; +reg [ (32-1):0] icache_refill_data; +wire [ (32-1):0] icache_data_f; +wire [ (3-1):0] first_cycle_type; +wire [ (3-1):0] next_cycle_type; +wire last_word; +wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] first_address; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 1) + begin + +always @(*) +begin + case (csr) + 4 'h0: csr_read_data = {{ 32-3{1'b0}}, + + + + + 1'b0, + + + eie, + ie + }; + 4 'h2: csr_read_data = ip; + 4 'h1: csr_read_data = im; + default: csr_read_data = { 32{1'bx}}; + endcase +end + end + else + begin + +always @(*) +begin + case (csr) + 4 'h0: csr_read_data = {{ 32-3{1'b0}}, + + + + + 1'b0, + + + eie, + ie + }; + 4 'h2: csr_read_data = ip; + default: csr_read_data = { 32{1'bx}}; + endcase +end + end +endgenerate + + + + + + + + reg [ 10:0] eie_delay = 0; + + +generate + + + if (interrupts > 1) + begin + +always @(posedge clk_i ) + begin + if (rst_i == 1'b1) + begin + ie <= 1'b0; + eie <= 1'b0; + + + + + im <= {interrupts{1'b0}}; + ip <= {interrupts{1'b0}}; + eie_delay <= 0; + + end + else + begin + + ip <= asserted; + + + + + + + + + + + + + + + + if (exception == 1'b1) + begin + + eie <= ie; + ie <= 1'b0; + end + + + else if (stall_x == 1'b0) + begin + + if(eie_delay[0]) + ie <= eie; + + eie_delay <= {1'b0, eie_delay[ 10:1]}; + + if (eret_q_x == 1'b1) begin + + eie_delay[ 10] <= 1'b1; + eie_delay[ 10-1:0] <= 0; + end + + + + + + + + + + else if (csr_write_enable == 1'b1) + begin + + if (csr == 4 'h0) + begin + ie <= csr_write_data[0]; + eie <= csr_write_data[1]; + + + + + end + if (csr == 4 'h1) + im <= csr_write_data[interrupts-1:0]; + if (csr == 4 'h2) + ip <= asserted & ~csr_write_data[interrupts-1:0]; + end + end + end +end + end +else + begin + +always @(posedge clk_i ) + begin + if (rst_i == 1'b1) + begin + ie <= 1'b0; + eie <= 1'b0; + + + + + ip <= {interrupts{1'b0}}; + eie_delay <= 0; + end + else + begin + + ip <= asserted; + + + + + + + + + + + + + + + + if (exception == 1'b1) + begin + + eie <= ie; + ie <= 1'b0; + end + + + else if (stall_x == 1'b0) + begin + + if(eie_delay[0]) + ie <= eie; + + eie_delay <= {1'b0, eie_delay[ 10:1]}; + + if (eret_q_x == 1'b1) begin + + eie_delay[ 10] <= 1'b1; + eie_delay[ 10-1:0] <= 0; + end + + + + + + + + else if (csr_write_enable == 1'b1) + begin + + if (csr == 4 'h0) + begin + ie <= csr_write_data[0]; + eie <= csr_write_data[1]; + + + + + end + if (csr == 4 'h2) + ip <= asserted & ~csr_write_data[interrupts-1:0]; + end + end + end +end + end +endgenerate + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_top_medium_icache_debug ( + + clk_i, + rst_i, + + + interrupt, + + + + + + + + + + + I_DAT_I, + I_ACK_I, + I_ERR_I, + I_RTY_I, + + + + D_DAT_I, + D_ACK_I, + D_ERR_I, + D_RTY_I, + + + + + + + + + + + + I_DAT_O, + I_ADR_O, + I_CYC_O, + I_SEL_O, + I_STB_O, + I_WE_O, + I_CTI_O, + I_LOCK_O, + I_BTE_O, + + + + D_DAT_O, + D_ADR_O, + D_CYC_O, + D_SEL_O, + D_STB_O, + D_WE_O, + D_CTI_O, + D_LOCK_O, + D_BTE_O + ); + +parameter eba_reset = 32'h00000000; +parameter sdb_address = 32'h00000000; + + + + +input clk_i; +input rst_i; + + +input [ (32-1):0] interrupt; + + + + + + + + + + +input [ (32-1):0] I_DAT_I; +input I_ACK_I; +input I_ERR_I; +input I_RTY_I; + + + +input [ (32-1):0] D_DAT_I; +input D_ACK_I; +input D_ERR_I; +input D_RTY_I; + + + + + + + + + + + + + + + + + + + +output [ (32-1):0] I_DAT_O; +wire [ (32-1):0] I_DAT_O; +output [ (32-1):0] I_ADR_O; +wire [ (32-1):0] I_ADR_O; +output I_CYC_O; +wire I_CYC_O; +output [ (4-1):0] I_SEL_O; +wire [ (4-1):0] I_SEL_O; +output I_STB_O; +wire I_STB_O; +output I_WE_O; +wire I_WE_O; +output [ (3-1):0] I_CTI_O; +wire [ (3-1):0] I_CTI_O; +output I_LOCK_O; +wire I_LOCK_O; +output [ (2-1):0] I_BTE_O; +wire [ (2-1):0] I_BTE_O; + + + +output [ (32-1):0] D_DAT_O; +wire [ (32-1):0] D_DAT_O; +output [ (32-1):0] D_ADR_O; +wire [ (32-1):0] D_ADR_O; +output D_CYC_O; +wire D_CYC_O; +output [ (4-1):0] D_SEL_O; +wire [ (4-1):0] D_SEL_O; +output D_STB_O; +wire D_STB_O; +output D_WE_O; +wire D_WE_O; +output [ (3-1):0] D_CTI_O; +wire [ (3-1):0] D_CTI_O; +output D_LOCK_O; +wire D_LOCK_O; +output [ (2-1):0] D_BTE_O; +wire [ (2-1):0] D_BTE_O; + + + + + + + + +wire [ 7:0] jtag_reg_d; +wire [ 7:0] jtag_reg_q; +wire jtag_update; +wire [2:0] jtag_reg_addr_d; +wire [2:0] jtag_reg_addr_q; +wire jtck; +wire jrstn; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 4) +assign dmem_write_address = {refill_address[ addr_set_msb:addr_set_lsb], refill_offset}; + else +assign dmem_write_address = refill_address[ addr_set_msb:addr_set_lsb]; +endgenerate + +assign dmem_read_address = address_a[ addr_set_msb:addr_offset_lsb]; + + +assign tmem_read_address = address_a[ addr_set_msb:addr_set_lsb]; +assign tmem_write_address = flushing + ? flush_set + : refill_address[ addr_set_msb:addr_set_lsb]; + + +generate + if (bytes_per_line > 4) +assign last_refill = refill_offset == {addr_offset_width{1'b1}}; + else +assign last_refill = 1'b1; +endgenerate + + +assign enable = (stall_a == 1'b0); + + +generate + if (associativity == 1) + begin : we_1 +assign way_mem_we[0] = (refill_ready == 1'b1); + end + else + begin : we_2 +assign way_mem_we[0] = (refill_ready == 1'b1) && (refill_way_select[0] == 1'b1); +assign way_mem_we[1] = (refill_ready == 1'b1) && (refill_way_select[1] == 1'b1); + end +endgenerate + + +assign tmem_write_data[ 0] = last_refill & !flushing; +assign tmem_write_data[ ((addr_tag_width+1)-1):1] = refill_address[ addr_tag_msb:addr_tag_lsb]; + + +assign flushing = |state[1:0]; +assign check = state[2]; +assign refill = state[3]; + +assign miss = (~(|way_match)) && (read_enable_f == 1'b1) && (stall_f == 1'b0) && !(valid_d && branch_predict_taken_d); +assign stall_request = (check == 1'b0); +assign refill_request = (refill == 1'b1); + + + + + + +generate + if (associativity >= 2) + begin : way_select +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refill_way_select <= {{associativity-1{1'b0}}, 1'b1}; + else + begin + if (miss == 1'b1) + refill_way_select <= {refill_way_select[0], refill_way_select[1]}; + end +end + end +endgenerate + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refilling <= 1'b0; + else + refilling <= refill; +end + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + state <= 4'b0001; + flush_set <= { addr_set_width{1'b1}}; + refill_address <= { (clogb2(32'h7fffffff-32'h0)-2){1'bx}}; + restart_request <= 1'b0; + end + else + begin + case (state) + + + 4'b0001: + begin + if (flush_set == { addr_set_width{1'b0}}) + state <= 4'b0100; + flush_set <= flush_set - 1'b1; + end + + + 4'b0010: + begin + if (flush_set == { addr_set_width{1'b0}}) + + + + + + + state <= 4'b0100; + + flush_set <= flush_set - 1'b1; + end + + + 4'b0100: + begin + if (stall_a == 1'b0) + restart_request <= 1'b0; + if (iflush == 1'b1) + begin + refill_address <= address_f; + state <= 4'b0010; + end + else if (miss == 1'b1) + begin + refill_address <= address_f; + state <= 4'b1000; + end + end + + + 4'b1000: + begin + if (refill_ready == 1'b1) + begin + if (last_refill == 1'b1) + begin + restart_request <= 1'b1; + state <= 4'b0100; + end + end + end + + endcase + end +end + +generate + if (bytes_per_line > 4) + begin + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + refill_offset <= {addr_offset_width{1'b0}}; + else + begin + case (state) + + + 4'b0100: + begin + if (iflush == 1'b1) + refill_offset <= {addr_offset_width{1'b0}}; + else if (miss == 1'b1) + refill_offset <= {addr_offset_width{1'b0}}; + end + + + 4'b1000: + begin + if (refill_ready == 1'b1) + refill_offset <= refill_offset + 1'b1; + end + + endcase + end +end + end +endgenerate + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_debug_medium_icache_debug ( + + clk_i, + rst_i, + pc_x, + load_x, + store_x, + load_store_address_x, + csr_write_enable_x, + csr_write_data, + csr_x, + + + + + jtag_csr_write_enable, + jtag_csr_write_data, + jtag_csr, + + + + + + + + + + + + + + + eret_q_x, + bret_q_x, + stall_x, + exception_x, + q_x, + + + + + + + + + + + dc_ss, + + + dc_re, + bp_match, + wp_match + ); + + + + + +parameter breakpoints = 0; +parameter watchpoints = 0; + + + + + +input clk_i; +input rst_i; + +input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x; +input load_x; +input store_x; +input [ (32-1):0] load_store_address_x; +input csr_write_enable_x; +input [ (32-1):0] csr_write_data; +input [ (5-1):0] csr_x; + + + + +input jtag_csr_write_enable; +input [ (32-1):0] jtag_csr_write_data; +input [ (5-1):0] jtag_csr; + + + + + + + + + + + + + + +input eret_q_x; +input bret_q_x; +input stall_x; +input exception_x; +input q_x; + + + + + + + + + + + + + +output dc_ss; +reg dc_ss; + + +output dc_re; +reg dc_re; +output bp_match; +wire bp_match; +output wp_match; +wire wp_match; + + + + + +genvar i; + + + +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] bp_a[0:breakpoints-1]; +reg bp_e[0:breakpoints-1]; +wire [0:breakpoints-1]bp_match_n; + +reg [ 1:0] wpc_c[0:watchpoints-1]; +reg [ (32-1):0] wp[0:watchpoints-1]; +wire [0:watchpoints-1]wp_match_n; + +wire debug_csr_write_enable; +wire [ (32-1):0] debug_csr_write_data; +wire [ (5-1):0] debug_csr; + + + + +reg [ 2:0] state; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0) +assign bp_match = (|bp_match_n) || (state == 3'b011); + else +assign bp_match = state == 3'b011; + + + + + + + +endgenerate + + +generate + for (i = 0; i < watchpoints; i = i + 1) + begin : wp_comb +assign wp_match_n[i] = (wp[i] == load_store_address_x) && ((load_x & wpc_c[i][0]) | (store_x & wpc_c[i][1])); + end +endgenerate +generate + if (watchpoints > 0) +assign wp_match = |wp_match_n; + else +assign wp_match = 1'b0; +endgenerate + + + + + + +assign debug_csr_write_enable = (csr_write_enable_x == 1'b1) || (jtag_csr_write_enable == 1'b1); +assign debug_csr_write_data = jtag_csr_write_enable == 1'b1 ? jtag_csr_write_data : csr_write_data; +assign debug_csr = jtag_csr_write_enable == 1'b1 ? jtag_csr : csr_x; + + + + + + + + + + + + + + + + + + + + + + + +generate + for (i = 0; i < breakpoints; i = i + 1) + begin : bp_seq +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + bp_a[i] <= { (clogb2(32'h7fffffff-32'h0)-2){1'bx}}; + bp_e[i] <= 1'b0; + end + else + begin + if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h10 + i)) + begin + bp_a[i] <= debug_csr_write_data[ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2]; + bp_e[i] <= debug_csr_write_data[0]; + end + end +end + end +endgenerate + + +generate + for (i = 0; i < watchpoints; i = i + 1) + begin : wp_seq +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + wp[i] <= { 32{1'bx}}; + wpc_c[i] <= 2'b00; + end + else + begin + if (debug_csr_write_enable == 1'b1) + begin + if (debug_csr == 5'h8) + wpc_c[i] <= debug_csr_write_data[3+i*2:2+i*2]; + if (debug_csr == 5'h18 + i) + wp[i] <= debug_csr_write_data; + end + end +end + end +endgenerate + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + dc_re <= 1'b0; + else + begin + if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h8)) + dc_re <= debug_csr_write_data[1]; + end +end + + + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + state <= 3'b000; + dc_ss <= 1'b0; + end + else + begin + if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h8)) + begin + dc_ss <= debug_csr_write_data[0]; + if (debug_csr_write_data[0] == 1'b0) + state <= 3'b000; + else + state <= 3'b001; + end + case (state) + 3'b001: + begin + + if ( ( (eret_q_x == 1'b1) + || (bret_q_x == 1'b1) + ) + && (stall_x == 1'b0) + ) + state <= 3'b010; + end + 3'b010: + begin + + if ((q_x == 1'b1) && (stall_x == 1'b0)) + state <= 3'b011; + end + 3'b011: + begin + + + + + + + + if ((exception_x == 1'b1) && (q_x == 1'b1) && (stall_x == 1'b0)) + begin + dc_ss <= 1'b0; + state <= 3'b100; + end + end + 3'b100: + begin + + + + + + + + state <= 3'b000; + end + endcase + end +end + + + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_instruction_unit_medium_icache_debug ( + + clk_i, + rst_i, + + stall_a, + stall_f, + stall_d, + stall_x, + stall_m, + valid_f, + valid_d, + kill_f, + branch_predict_taken_d, + branch_predict_address_d, + + + + + + exception_m, + branch_taken_m, + branch_mispredict_taken_m, + branch_target_m, + + + iflush, + + + + + + + + + + + + i_dat_i, + i_ack_i, + i_err_i, + i_rty_i, + + + + + jtag_read_enable, + jtag_write_enable, + jtag_write_data, + jtag_address, + + + + + pc_f, + pc_d, + pc_x, + pc_m, + pc_w, + + + icache_stall_request, + icache_restart_request, + icache_refill_request, + icache_refilling, + + + + + + i_dat_o, + i_adr_o, + i_cyc_o, + i_sel_o, + i_stb_o, + i_we_o, + i_cti_o, + i_lock_o, + i_bte_o, + + + + + + + + + + + jtag_read_data, + jtag_access_complete, + + + + + + + + + instruction_f, + + + instruction_d + ); + + + + + +parameter eba_reset = 32'h00000000; +parameter associativity = 1; +parameter sets = 512; +parameter bytes_per_line = 16; +parameter base_address = 0; +parameter limit = 0; + + +localparam eba_reset_minus_4 = eba_reset - 4; +localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2; +localparam addr_offset_lsb = 2; +localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1); + + + + + + + + + + + + +input clk_i; +input rst_i; + +input stall_a; +input stall_f; +input stall_d; +input stall_x; +input stall_m; +input valid_f; +input valid_d; +input kill_f; + +input branch_predict_taken_d; +input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_predict_address_d; + + + + + + +input exception_m; +input branch_taken_m; +input branch_mispredict_taken_m; +input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_m; + + + +input iflush; + + + + + + + + + + + + +input [ (32-1):0] i_dat_i; +input i_ack_i; +input i_err_i; +input i_rty_i; + + + + + +input jtag_read_enable; +input jtag_write_enable; +input [ 7:0] jtag_write_data; +input [ (32-1):0] jtag_address; + + + + + + + +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m; +output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w; +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w; + + + +output icache_stall_request; +wire icache_stall_request; +output icache_restart_request; +wire icache_restart_request; +output icache_refill_request; +wire icache_refill_request; +output icache_refilling; +wire icache_refilling; + + + + + +output [ (32-1):0] i_dat_o; + + +reg [ (32-1):0] i_dat_o; + + + + +output [ (32-1):0] i_adr_o; +reg [ (32-1):0] i_adr_o; +output i_cyc_o; +reg i_cyc_o; +output [ (4-1):0] i_sel_o; + + +reg [ (4-1):0] i_sel_o; + + + + +output i_stb_o; +reg i_stb_o; +output i_we_o; + + +reg i_we_o; + + + + +output [ (3-1):0] i_cti_o; +reg [ (3-1):0] i_cti_o; +output i_lock_o; +reg i_lock_o; +output [ (2-1):0] i_bte_o; +wire [ (2-1):0] i_bte_o; + + + + + +output [ 7:0] jtag_read_data; +reg [ 7:0] jtag_read_data; +output jtag_access_complete; +wire jtag_access_complete; + + + + + + + + + + +output [ (32-1):0] instruction_f; +wire [ (32-1):0] instruction_f; + + +output [ (32-1):0] instruction_d; +reg [ (32-1):0] instruction_d; + + + + + +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_a; + + + +reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] restart_address; + + + + + +wire icache_read_enable_f; +wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] icache_refill_address; +reg icache_refill_ready; +reg [ (32-1):0] icache_refill_data; +wire [ (32-1):0] icache_data_f; +wire [ (3-1):0] first_cycle_type; +wire [ (3-1):0] next_cycle_type; +wire last_word; +wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] first_address; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +reg jtag_access; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 1) + begin + +always @(*) +begin + case (csr) + 5'h0: csr_read_data = {{ 32-3{1'b0}}, + + + bie, + + + + + eie, + ie + }; + 5'h2: csr_read_data = ip; + 5'h1: csr_read_data = im; + default: csr_read_data = { 32{1'bx}}; + endcase +end + end + else + begin + +always @(*) +begin + case (csr) + 5'h0: csr_read_data = {{ 32-3{1'b0}}, + + + bie, + + + + + eie, + ie + }; + 5'h2: csr_read_data = ip; + default: csr_read_data = { 32{1'bx}}; + endcase +end + end +endgenerate + + + + + + + + reg [ 10:0] eie_delay = 0; + + +generate + + + if (interrupts > 1) + begin + +always @(posedge clk_i ) + begin + if (rst_i == 1'b1) + begin + ie <= 1'b0; + eie <= 1'b0; + + + bie <= 1'b0; + + + im <= {interrupts{1'b0}}; + ip <= {interrupts{1'b0}}; + eie_delay <= 0; + + end + else + begin + + ip <= asserted; + + + if (non_debug_exception == 1'b1) + begin + + eie <= ie; + ie <= 1'b0; + end + else if (debug_exception == 1'b1) + begin + + bie <= ie; + ie <= 1'b0; + end + + + + + + + + + + else if (stall_x == 1'b0) + begin + + if(eie_delay[0]) + ie <= eie; + + eie_delay <= {1'b0, eie_delay[ 10:1]}; + + if (eret_q_x == 1'b1) begin + + eie_delay[ 10] <= 1'b1; + eie_delay[ 10-1:0] <= 0; + end + + + + + + else if (bret_q_x == 1'b1) + + ie <= bie; + + + else if (csr_write_enable == 1'b1) + begin + + if (csr == 5'h0) + begin + ie <= csr_write_data[0]; + eie <= csr_write_data[1]; + + + bie <= csr_write_data[2]; + + + end + if (csr == 5'h1) + im <= csr_write_data[interrupts-1:0]; + if (csr == 5'h2) + ip <= asserted & ~csr_write_data[interrupts-1:0]; + end + end + end +end + end +else + begin + +always @(posedge clk_i ) + begin + if (rst_i == 1'b1) + begin + ie <= 1'b0; + eie <= 1'b0; + + + bie <= 1'b0; + + + ip <= {interrupts{1'b0}}; + eie_delay <= 0; + end + else + begin + + ip <= asserted; + + + if (non_debug_exception == 1'b1) + begin + + eie <= ie; + ie <= 1'b0; + end + else if (debug_exception == 1'b1) + begin + + bie <= ie; + ie <= 1'b0; + end + + + + + + + + + + else if (stall_x == 1'b0) + begin + + if(eie_delay[0]) + ie <= eie; + + eie_delay <= {1'b0, eie_delay[ 10:1]}; + + if (eret_q_x == 1'b1) begin + + eie_delay[ 10] <= 1'b1; + eie_delay[ 10-1:0] <= 0; + end + + + + else if (bret_q_x == 1'b1) + + ie <= bie; + + + else if (csr_write_enable == 1'b1) + begin + + if (csr == 5'h0) + begin + ie <= csr_write_data[0]; + eie <= csr_write_data[1]; + + + bie <= csr_write_data[2]; + + + end + if (csr == 5'h2) + ip <= asserted & ~csr_write_data[interrupts-1:0]; + end + end + end +end + end +endgenerate + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_top_minimal ( + + clk_i, + rst_i, + + + interrupt, + + + + + + + + + + + I_DAT_I, + I_ACK_I, + I_ERR_I, + I_RTY_I, + + + + D_DAT_I, + D_ACK_I, + D_ERR_I, + D_RTY_I, + + + + + + + + + + + + I_DAT_O, + I_ADR_O, + I_CYC_O, + I_SEL_O, + I_STB_O, + I_WE_O, + I_CTI_O, + I_LOCK_O, + I_BTE_O, + + + + D_DAT_O, + D_ADR_O, + D_CYC_O, + D_SEL_O, + D_STB_O, + D_WE_O, + D_CTI_O, + D_LOCK_O, + D_BTE_O + ); + +parameter eba_reset = 32'h00000000; +parameter sdb_address = 32'h00000000; + + + + +input clk_i; +input rst_i; + + +input [ (32-1):0] interrupt; + + + + + + + + + + +input [ (32-1):0] I_DAT_I; +input I_ACK_I; +input I_ERR_I; +input I_RTY_I; + + + +input [ (32-1):0] D_DAT_I; +input D_ACK_I; +input D_ERR_I; +input D_RTY_I; + + + + + + + + + + + + + + + + + + + +output [ (32-1):0] I_DAT_O; +wire [ (32-1):0] I_DAT_O; +output [ (32-1):0] I_ADR_O; +wire [ (32-1):0] I_ADR_O; +output I_CYC_O; +wire I_CYC_O; +output [ (4-1):0] I_SEL_O; +wire [ (4-1):0] I_SEL_O; +output I_STB_O; +wire I_STB_O; +output I_WE_O; +wire I_WE_O; +output [ (3-1):0] I_CTI_O; +wire [ (3-1):0] I_CTI_O; +output I_LOCK_O; +wire I_LOCK_O; +output [ (2-1):0] I_BTE_O; +wire [ (2-1):0] I_BTE_O; + + + +output [ (32-1):0] D_DAT_O; +wire [ (32-1):0] D_DAT_O; +output [ (32-1):0] D_ADR_O; +wire [ (32-1):0] D_ADR_O; +output D_CYC_O; +wire D_CYC_O; +output [ (4-1):0] D_SEL_O; +wire [ (4-1):0] D_SEL_O; +output D_STB_O; +wire D_STB_O; +output D_WE_O; +wire D_WE_O; +output [ (3-1):0] D_CTI_O; +wire [ (3-1):0] D_CTI_O; +output D_LOCK_O; +wire D_LOCK_O; +output [ (2-1):0] D_BTE_O; +wire [ (2-1):0] D_BTE_O; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 1) + begin + +always @(*) +begin + case (csr) + 4 'h0: csr_read_data = {{ 32-3{1'b0}}, + + + + + 1'b0, + + + eie, + ie + }; + 4 'h2: csr_read_data = ip; + 4 'h1: csr_read_data = im; + default: csr_read_data = { 32{1'bx}}; + endcase +end + end + else + begin + +always @(*) +begin + case (csr) + 4 'h0: csr_read_data = {{ 32-3{1'b0}}, + + + + + 1'b0, + + + eie, + ie + }; + 4 'h2: csr_read_data = ip; + default: csr_read_data = { 32{1'bx}}; + endcase +end + end +endgenerate + + + + + + + + reg [ 10:0] eie_delay = 0; + + +generate + + + if (interrupts > 1) + begin + +always @(posedge clk_i ) + begin + if (rst_i == 1'b1) + begin + ie <= 1'b0; + eie <= 1'b0; + + + + + im <= {interrupts{1'b0}}; + ip <= {interrupts{1'b0}}; + eie_delay <= 0; + + end + else + begin + + ip <= asserted; + + + + + + + + + + + + + + + + if (exception == 1'b1) + begin + + eie <= ie; + ie <= 1'b0; + end + + + else if (stall_x == 1'b0) + begin + + if(eie_delay[0]) + ie <= eie; + + eie_delay <= {1'b0, eie_delay[ 10:1]}; + + if (eret_q_x == 1'b1) begin + + eie_delay[ 10] <= 1'b1; + eie_delay[ 10-1:0] <= 0; + end + + + + + + + + + + else if (csr_write_enable == 1'b1) + begin + + if (csr == 4 'h0) + begin + ie <= csr_write_data[0]; + eie <= csr_write_data[1]; + + + + + end + if (csr == 4 'h1) + im <= csr_write_data[interrupts-1:0]; + if (csr == 4 'h2) + ip <= asserted & ~csr_write_data[interrupts-1:0]; + end + end + end +end + end +else + begin + +always @(posedge clk_i ) + begin + if (rst_i == 1'b1) + begin + ie <= 1'b0; + eie <= 1'b0; + + + + + ip <= {interrupts{1'b0}}; + eie_delay <= 0; + end + else + begin + + ip <= asserted; + + + + + + + + + + + + + + + + if (exception == 1'b1) + begin + + eie <= ie; + ie <= 1'b0; + end + + + else if (stall_x == 1'b0) + begin + + if(eie_delay[0]) + ie <= eie; + + eie_delay <= {1'b0, eie_delay[ 10:1]}; + + if (eret_q_x == 1'b1) begin + + eie_delay[ 10] <= 1'b1; + eie_delay[ 10-1:0] <= 0; + end + + + + + + + + else if (csr_write_enable == 1'b1) + begin + + if (csr == 4 'h0) + begin + ie <= csr_write_data[0]; + eie <= csr_write_data[1]; + + + + + end + if (csr == 4 'h2) + ip <= asserted & ~csr_write_data[interrupts-1:0]; + end + end + end +end + end +endgenerate + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_top_wr_node ( + + clk_i, + rst_i, + + + interrupt, + + + + + + + + + + + + + + + + + D_DAT_I, + D_ACK_I, + D_ERR_I, + D_RTY_I, + + + + + + + + + + + + + + + + + + + + + + + D_DAT_O, + D_ADR_O, + D_CYC_O, + D_SEL_O, + D_STB_O, + D_WE_O, + D_CTI_O, + D_LOCK_O, + D_BTE_O + ); + +parameter eba_reset = 32'h00000000; +parameter sdb_address = 32'h00000000; + + + + +input clk_i; +input rst_i; + + +input [ (32-1):0] interrupt; + + + + + + + + + + + + + + + + +input [ (32-1):0] D_DAT_I; +input D_ACK_I; +input D_ERR_I; +input D_RTY_I; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +output [ (32-1):0] D_DAT_O; +wire [ (32-1):0] D_DAT_O; +output [ (32-1):0] D_ADR_O; +wire [ (32-1):0] D_ADR_O; +output D_CYC_O; +wire D_CYC_O; +output [ (4-1):0] D_SEL_O; +wire [ (4-1):0] D_SEL_O; +output D_STB_O; +wire D_STB_O; +output D_WE_O; +wire D_WE_O; +output [ (3-1):0] D_CTI_O; +wire [ (3-1):0] D_CTI_O; +output D_LOCK_O; +wire D_LOCK_O; +output [ (2-1):0] D_BTE_O; +wire [ (2-1):0] D_BTE_O; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1<= 0) + && (load_store_address_x <= 32'h000fffff); + + assign iram_d_sel_o = byte_enable_m; + assign iram_en = !stall_x || !stall_m; + + always@(posedge clk_i) + iram_en_d0 <= iram_en; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + assign wb_select_x = 1'b1 + + + + + + + + + + + && !iram_select_x + + + ; + + +always @(*) +begin + case (size_x) + 2'b00: store_data_x = {4{store_operand_x[7:0]}}; + 2'b11: store_data_x = {2{store_operand_x[15:0]}}; + 2'b10: store_data_x = store_operand_x; + default: store_data_x = { 32{1'bx}}; + endcase +end + + +always @(*) +begin + casez ({size_x, load_store_address_x[1:0]}) + { 2'b00, 2'b11}: byte_enable_x = 4'b0001; + { 2'b00, 2'b10}: byte_enable_x = 4'b0010; + { 2'b00, 2'b01}: byte_enable_x = 4'b0100; + { 2'b00, 2'b00}: byte_enable_x = 4'b1000; + { 2'b11, 2'b1?}: byte_enable_x = 4'b0011; + { 2'b11, 2'b0?}: byte_enable_x = 4'b1100; + { 2'b10, 2'b??}: byte_enable_x = 4'b1111; + default: byte_enable_x = 4'bxxxx; + endcase +end + + + + assign iram_d_dat_o = store_data_m; + assign iram_d_adr_o = (iram_enable_m && store_q_m) ? load_store_address_m : load_store_address_x; + + assign iram_stall_request_x = (iram_select_x == 1'b1) + && (store_q_x == 1'b1); + + + assign iram_d_we_o = (iram_enable_m == 1'b1) && (store_q_m == 1'b1); + assign iram_d_en_o = !stall_m || !stall_x; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + assign data_m = wb_select_m == 1'b1 + ? wb_data_m + : iram_d_dat_i; + + + + + + + + + + + + +always @(*) +begin + casez ({size_w, load_store_address_w[1:0]}) + { 2'b00, 2'b11}: load_data_w = {{24{sign_extend_w & data_w[7]}}, data_w[7:0]}; + { 2'b00, 2'b10}: load_data_w = {{24{sign_extend_w & data_w[15]}}, data_w[15:8]}; + { 2'b00, 2'b01}: load_data_w = {{24{sign_extend_w & data_w[23]}}, data_w[23:16]}; + { 2'b00, 2'b00}: load_data_w = {{24{sign_extend_w & data_w[31]}}, data_w[31:24]}; + { 2'b11, 2'b1?}: load_data_w = {{16{sign_extend_w & data_w[15]}}, data_w[15:0]}; + { 2'b11, 2'b0?}: load_data_w = {{16{sign_extend_w & data_w[31]}}, data_w[31:16]}; + { 2'b10, 2'b??}: load_data_w = data_w; + default: load_data_w = { 32{1'bx}}; + endcase +end + + +assign d_bte_o = 2'b00; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + d_cyc_o <= 1'b0; + d_stb_o <= 1'b0; + d_dat_o <= { 32{1'b0}}; + d_adr_o <= { 32{1'b0}}; + d_sel_o <= { 4{ 1'b0}}; + d_we_o <= 1'b0; + d_cti_o <= 3'b111; + d_lock_o <= 1'b0; + wb_data_m <= { 32{1'b0}}; + wb_load_complete <= 1'b0; + stall_wb_load <= 1'b0; + + + + + end + else + begin + + + + + + + if (d_cyc_o == 1'b1) + begin + + if ((d_ack_i == 1'b1) || (d_err_i == 1'b1)) + begin + + + + + + + + + + begin + + d_cyc_o <= 1'b0; + d_stb_o <= 1'b0; + d_lock_o <= 1'b0; + end + + + + + + + + wb_data_m <= d_dat_i; + + wb_load_complete <= !d_we_o; + end + + end + else + begin + + + + + + + + + + + + + + + + if ( (store_q_m == 1'b1) + && (stall_m == 1'b0) + + + + + + + && (iram_enable_m == 1'b0) + + + ) + begin + + d_dat_o <= store_data_m; + d_adr_o <= load_store_address_m; + d_cyc_o <= 1'b1; + d_sel_o <= byte_enable_m; + d_stb_o <= 1'b1; + d_we_o <= 1'b1; + d_cti_o <= 3'b111; + end + else if ( (load_q_m == 1'b1) + && (wb_select_m == 1'b1) + && (wb_load_complete == 1'b0) + + ) + begin + + stall_wb_load <= 1'b0; + d_adr_o <= load_store_address_m; + d_cyc_o <= 1'b1; + d_sel_o <= byte_enable_m; + d_stb_o <= 1'b1; + d_we_o <= 1'b0; + d_cti_o <= 3'b111; + end + end + + if (stall_m == 1'b0) + wb_load_complete <= 1'b0; + + if ((load_q_x == 1'b1) && (wb_select_x == 1'b1) && (stall_x == 1'b0)) + stall_wb_load <= 1'b1; + + if ((kill_m == 1'b1) || (exception_m == 1'b1)) + stall_wb_load <= 1'b0; + end +end + + + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + sign_extend_m <= 1'b0; + size_m <= 2'b00; + byte_enable_m <= 1'b0; + store_data_m <= { 32{1'b0}}; + + + + + + + + + + + iram_enable_m <= 1'b0; + iram_select_m <= 1'b0; + + + wb_select_m <= 1'b0; + end + else + begin + if (stall_m == 1'b0) + begin + sign_extend_m <= sign_extend_x; + size_m <= size_x; + byte_enable_m <= byte_enable_x; + store_data_m <= store_data_x; + + + + + + + + + + + iram_enable_m <= iram_select_x; + iram_select_m <= iram_select_x; + + + wb_select_m <= wb_select_x; + end + end +end + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + size_w <= 2'b00; + data_w <= { 32{1'b0}}; + sign_extend_w <= 1'b0; + end + else + begin + size_w <= size_m; + + + + if(!iram_select_m || iram_en_d0) + + + data_w <= data_m; + + sign_extend_w <= sign_extend_m; + end +end + + + + + + + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_decoder_wr_node ( + + instruction, + + d_result_sel_0, + d_result_sel_1, + x_result_sel_csr, + + + x_result_sel_mc_arith, + + + + + + + + + x_result_sel_sext, + + + x_result_sel_logic, + + + + + x_result_sel_add, + m_result_sel_compare, + + + m_result_sel_shift, + + + w_result_sel_load, + + + w_result_sel_mul, + + + x_bypass_enable, + m_bypass_enable, + read_enable_0, + read_idx_0, + read_enable_1, + read_idx_1, + write_enable, + write_idx, + immediate, + branch_offset, + load, + store, + size, + sign_extend, + adder_op, + logic_op, + + + direction, + + + + + + + + + + + + + + divide, + modulus, + + + branch, + branch_reg, + condition, + bi_conditional, + bi_unconditional, + + + break_opcode, + + + scall, + eret, + + + bret, + + + + + + + csr_write_enable + ); + + + + + +input [ (32-1):0] instruction; + + + + + +output [ 0:0] d_result_sel_0; +reg [ 0:0] d_result_sel_0; +output [ 1:0] d_result_sel_1; +reg [ 1:0] d_result_sel_1; +output x_result_sel_csr; +reg x_result_sel_csr; + + +output x_result_sel_mc_arith; +reg x_result_sel_mc_arith; + + + + + + + + + +output x_result_sel_sext; +reg x_result_sel_sext; + + +output x_result_sel_logic; +reg x_result_sel_logic; + + + + + +output x_result_sel_add; +reg x_result_sel_add; +output m_result_sel_compare; +reg m_result_sel_compare; + + +output m_result_sel_shift; +reg m_result_sel_shift; + + +output w_result_sel_load; +reg w_result_sel_load; + + +output w_result_sel_mul; +reg w_result_sel_mul; + + +output x_bypass_enable; +wire x_bypass_enable; +output m_bypass_enable; +wire m_bypass_enable; +output read_enable_0; +wire read_enable_0; +output [ (5-1):0] read_idx_0; +wire [ (5-1):0] read_idx_0; +output read_enable_1; +wire read_enable_1; +output [ (5-1):0] read_idx_1; +wire [ (5-1):0] read_idx_1; +output write_enable; +wire write_enable; +output [ (5-1):0] write_idx; +wire [ (5-1):0] write_idx; +output [ (32-1):0] immediate; +wire [ (32-1):0] immediate; +output [ ((32-2)+2-1):2] branch_offset; +wire [ ((32-2)+2-1):2] branch_offset; +output load; +wire load; +output store; +wire store; +output [ 1:0] size; +wire [ 1:0] size; +output sign_extend; +wire sign_extend; +output adder_op; +wire adder_op; +output [ 3:0] logic_op; +wire [ 3:0] logic_op; + + +output direction; +wire direction; + + + + + + + + + + + + + + + + +output divide; +wire divide; +output modulus; +wire modulus; + + +output branch; +wire branch; +output branch_reg; +wire branch_reg; +output [ (3-1):0] condition; +wire [ (3-1):0] condition; +output bi_conditional; +wire bi_conditional; +output bi_unconditional; +wire bi_unconditional; + + +output break_opcode; +wire break_opcode; + + +output scall; +wire scall; +output eret; +wire eret; + + +output bret; +wire bret; + + + + + + + +output csr_write_enable; +wire csr_write_enable; + + + + + +wire [ (32-1):0] extended_immediate; +wire [ (32-1):0] high_immediate; +wire [ (32-1):0] call_immediate; +wire [ (32-1):0] branch_immediate; +wire sign_extend_immediate; +wire select_high_immediate; +wire select_call_immediate; + +wire op_add; +wire op_and; +wire op_andhi; +wire op_b; +wire op_bi; +wire op_be; +wire op_bg; +wire op_bge; +wire op_bgeu; +wire op_bgu; +wire op_bne; +wire op_call; +wire op_calli; +wire op_cmpe; +wire op_cmpg; +wire op_cmpge; +wire op_cmpgeu; +wire op_cmpgu; +wire op_cmpne; + + +wire op_divu; + + +wire op_lb; +wire op_lbu; +wire op_lh; +wire op_lhu; +wire op_lw; + + +wire op_modu; + + + + +wire op_mul; + + +wire op_nor; +wire op_or; +wire op_orhi; +wire op_raise; +wire op_rcsr; +wire op_sb; + + +wire op_sextb; +wire op_sexth; + + +wire op_sh; + + +wire op_sl; + + +wire op_sr; +wire op_sru; +wire op_sub; +wire op_sw; + + + + +wire op_wcsr; +wire op_xnor; +wire op_xor; + +wire arith; +wire logical; +wire cmp; +wire bra; +wire call; + + +wire shift; + + + + + + + + +wire sext; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 0) +assign bp_match = (|bp_match_n) || (state == 3'b011); + else +assign bp_match = state == 3'b011; + + + + + + + +endgenerate + + +generate + for (i = 0; i < watchpoints; i = i + 1) + begin : wp_comb +assign wp_match_n[i] = (wp[i] == load_store_address_x) && ((load_x & wpc_c[i][0]) | (store_x & wpc_c[i][1])); + end +endgenerate +generate + if (watchpoints > 0) +assign wp_match = |wp_match_n; + else +assign wp_match = 1'b0; +endgenerate + + + + + + + + + + + + + +assign debug_csr_write_enable = (csr_write_enable_x == 1'b1) || (dbg_csr_write_enable_i == 1'b1); +assign debug_csr_write_data = dbg_csr_write_data_i == 1'b1 ? dbg_csr_write_data_i : csr_write_data; +assign debug_csr = dbg_csr_write_enable_i == 1'b1 ? dbg_csr_addr_i : csr_x; + + + + + + + + + + + + + + + + +generate + for (i = 0; i < breakpoints; i = i + 1) + begin : bp_seq +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + bp_a[i] <= { (32-2){1'bx}}; + bp_e[i] <= 1'b0; + end + else + begin + if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h10 + i)) + begin + bp_a[i] <= debug_csr_write_data[ ((32-2)+2-1):2]; + bp_e[i] <= debug_csr_write_data[0]; + end + end +end + end +endgenerate + + +generate + for (i = 0; i < watchpoints; i = i + 1) + begin : wp_seq +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + wp[i] <= { 32{1'bx}}; + wpc_c[i] <= 2'b00; + end + else + begin + if (debug_csr_write_enable == 1'b1) + begin + if (debug_csr == 5'h8) + wpc_c[i] <= debug_csr_write_data[3+i*2:2+i*2]; + if (debug_csr == 5'h18 + i) + wp[i] <= debug_csr_write_data; + end + end +end + end +endgenerate + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + dc_re <= 1'b0; + else + begin + if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h8)) + dc_re <= debug_csr_write_data[1]; + end +end + + + + +always @(posedge clk_i ) +begin + if (rst_i == 1'b1) + begin + state <= 3'b000; + dc_ss <= 1'b0; + end + else + begin + if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h8)) + begin + dc_ss <= debug_csr_write_data[0]; + if (debug_csr_write_data[0] == 1'b0) + state <= 3'b000; + else + state <= 3'b001; + end + case (state) + 3'b001: + begin + + if ( ( (eret_q_x == 1'b1) + || (bret_q_x == 1'b1) + ) + && (stall_x == 1'b0) + ) + state <= 3'b010; + end + 3'b010: + begin + + if ((q_x == 1'b1) && (stall_x == 1'b0)) + state <= 3'b011; + end + 3'b011: + begin + + + + + + + + if ((exception_x == 1'b1) && (q_x == 1'b1) && (stall_x == 1'b0)) + begin + dc_ss <= 1'b0; + state <= 3'b100; + end + end + 3'b100: + begin + + + + + + + + state <= 3'b000; + end + endcase + end +end + + + +endmodule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +module lm32_instruction_unit_wr_node ( + + clk_i, + rst_i, + + stall_a, + stall_f, + stall_d, + stall_x, + stall_m, + valid_f, + valid_d, + kill_f, + branch_predict_taken_d, + branch_predict_address_d, + + + + + + exception_m, + branch_taken_m, + branch_mispredict_taken_m, + branch_target_m, + + + + + + + + + + + + + + + + + + + + + jtag_read_enable, + jtag_write_enable, + jtag_write_data, + jtag_address, + + + + + pc_f, + pc_d, + pc_x, + pc_m, + pc_w, + + + + + + + + + + + + + + + + + + + + + + + iram_i_adr_o, + iram_i_dat_i, + iram_i_en_o, + + + + + jtag_read_data, + jtag_access_complete, + + + + + bus_error_d, + + + + + instruction_f, + + + instruction_d + ); + + + + + +parameter eba_reset = 32'h00000000; +parameter associativity = 1; +parameter sets = 512; +parameter bytes_per_line = 16; +parameter base_address = 0; +parameter limit = 0; + + +localparam eba_reset_minus_4 = eba_reset - 4; +localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2; +localparam addr_offset_lsb = 2; +localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1); + + + + + + +output [31:0] iram_i_adr_o; +input [31:0] iram_i_dat_i; + output iram_i_en_o; + + + + +input clk_i; +input rst_i; + +input stall_a; +input stall_f; +input stall_d; +input stall_x; +input stall_m; +input valid_f; +input valid_d; +input kill_f; + +input branch_predict_taken_d; +input [ ((32-2)+2-1):2] branch_predict_address_d; + + + + + + +input exception_m; +input branch_taken_m; +input branch_mispredict_taken_m; +input [ ((32-2)+2-1):2] branch_target_m; + + + + + + + + + + + + + + + + + + + + + + + +input jtag_read_enable; +input jtag_write_enable; +input [ 7:0] jtag_write_data; +input [ (32-1):0] jtag_address; + + + + + + + +output [ ((32-2)+2-1):2] pc_f; +reg [ ((32-2)+2-1):2] pc_f; +output [ ((32-2)+2-1):2] pc_d; +reg [ ((32-2)+2-1):2] pc_d; +output [ ((32-2)+2-1):2] pc_x; +reg [ ((32-2)+2-1):2] pc_x; +output [ ((32-2)+2-1):2] pc_m; +reg [ ((32-2)+2-1):2] pc_m; +output [ ((32-2)+2-1):2] pc_w; +reg [ ((32-2)+2-1):2] pc_w; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +output [ 7:0] jtag_read_data; +reg [ 7:0] jtag_read_data; +output jtag_access_complete; +wire jtag_access_complete; + + + + + +output bus_error_d; +reg bus_error_d; + + + + +output [ (32-1):0] instruction_f; +wire [ (32-1):0] instruction_f; + + +output [ (32-1):0] instruction_d; +reg [ (32-1):0] instruction_d; + + + + + +reg [ ((32-2)+2-1):2] pc_a; + + + + + + + + + + + + + + + + + + + + + + + + + + +wire iram_select_a; + reg iram_select_f; + + + + + + + + + + + + + + + + + + + + + + wire bus_error_f = 0; + + + + + +reg jtag_access; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +function integer clogb2_v1; +input [31:0] value; +reg [31:0] i; +reg [31:0] temp; +begin + temp = 0; + i = 0; + for (i = 0; temp < value; i = i + 1) + temp = 1< 1) + begin + +always @(*) +begin + case (csr) + 5'h0: csr_read_data = {{ 32-3{1'b0}}, + + + bie, + + + + + eie, + ie + }; + 5'h2: csr_read_data = ip; + 5'h1: csr_read_data = im; + default: csr_read_data = { 32{1'bx}}; + endcase +end + end + else + begin + +always @(*) +begin + case (csr) + 5'h0: csr_read_data = {{ 32-3{1'b0}}, + + + bie, + + + + + eie, + ie + }; + 5'h2: csr_read_data = ip; + default: csr_read_data = { 32{1'bx}}; + endcase +end + end +endgenerate + + + + + + + + reg [ 10:0] eie_delay = 0; + + +generate + + + if (interrupts > 1) + begin + +always @(posedge clk_i ) + begin + if (rst_i == 1'b1) + begin + ie <= 1'b0; + eie <= 1'b0; + + + bie <= 1'b0; + + + im <= {interrupts{1'b0}}; + ip <= {interrupts{1'b0}}; + eie_delay <= 0; + + end + else + begin + + ip <= asserted; + + + if (non_debug_exception == 1'b1) + begin + + eie <= ie; + ie <= 1'b0; + end + else if (debug_exception == 1'b1) + begin + + bie <= ie; + ie <= 1'b0; + end + + + + + + + + + + else if (stall_x == 1'b0) + begin + + if(eie_delay[0]) + ie <= eie; + + eie_delay <= {1'b0, eie_delay[ 10:1]}; + + if (eret_q_x == 1'b1) begin + + eie_delay[ 10] <= 1'b1; + eie_delay[ 10-1:0] <= 0; + end + + + + + + else if (bret_q_x == 1'b1) + + ie <= bie; + + + else if (csr_write_enable == 1'b1) + begin + + if (csr == 5'h0) + begin + ie <= csr_write_data[0]; + eie <= csr_write_data[1]; + + + bie <= csr_write_data[2]; + + + end + if (csr == 5'h1) + im <= csr_write_data[interrupts-1:0]; + if (csr == 5'h2) + ip <= asserted & ~csr_write_data[interrupts-1:0]; + end + end + end +end + end +else + begin + +always @(posedge clk_i ) + begin + if (rst_i == 1'b1) + begin + ie <= 1'b0; + eie <= 1'b0; + + + bie <= 1'b0; + + + ip <= {interrupts{1'b0}}; + eie_delay <= 0; + end + else + begin + + ip <= asserted; + + + if (non_debug_exception == 1'b1) + begin + + eie <= ie; + ie <= 1'b0; + end + else if (debug_exception == 1'b1) + begin + + bie <= ie; + ie <= 1'b0; + end + + + + + + + + + + else if (stall_x == 1'b0) + begin + + if(eie_delay[0]) + ie <= eie; + + eie_delay <= {1'b0, eie_delay[ 10:1]}; + + if (eret_q_x == 1'b1) begin + + eie_delay[ 10] <= 1'b1; + eie_delay[ 10-1:0] <= 0; + end + + + + else if (bret_q_x == 1'b1) + + ie <= bie; + + + else if (csr_write_enable == 1'b1) + begin + + if (csr == 5'h0) + begin + ie <= csr_write_data[0]; + eie <= csr_write_data[1]; + + + bie <= csr_write_data[2]; + + + end + if (csr == 5'h2) + ip <= asserted & ~csr_write_data[interrupts-1:0]; + end + end + end +end + end +endgenerate + +endmodule + + + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/generated/xwb_lm32.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/generated/xwb_lm32.vhd new file mode 100644 index 000000000..d57c9b7ab --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/generated/xwb_lm32.vhd @@ -0,0 +1,825 @@ +--auto-generated by gen_lmcores.py. Don't hand-edit please +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.wishbone_pkg.all; +entity xwb_lm32 is +generic(g_profile: string; +g_reset_vector: std_logic_vector(31 downto 0) := x"00000000"; +g_sdb_address: std_logic_vector(31 downto 0) := x"00000000"); +port( +clk_sys_i : in std_logic; +rst_n_i : in std_logic; +irq_i : in std_logic_vector(31 downto 0); +dwb_o : out t_wishbone_master_out; +dwb_i : in t_wishbone_master_in; +iwb_o : out t_wishbone_master_out; +iwb_i : in t_wishbone_master_in); +end xwb_lm32; +architecture rtl of xwb_lm32 is +function f_eval_i_burst_length(profile_name:string) return natural is +begin +if profile_name = "minimal" then return 1; end if; +if profile_name = "medium" then return 1; end if; +if profile_name = "medium_icache" then return 4; end if; +if profile_name = "medium_debug" then return 4; end if; +if profile_name = "medium_icache_debug" then return 4; end if; +if profile_name = "full" then return 4; end if; +if profile_name = "full_debug" then return 4; end if; +if profile_name = "wr_node" then return 1; end if; +return 0; +end function; +function f_eval_d_burst_length(profile_name:string) return natural is +begin +if profile_name = "minimal" then return 1; end if; +if profile_name = "medium" then return 1; end if; +if profile_name = "medium_icache" then return 1; end if; +if profile_name = "medium_debug" then return 1; end if; +if profile_name = "medium_icache_debug" then return 1; end if; +if profile_name = "full" then return 4; end if; +if profile_name = "full_debug" then return 4; end if; +if profile_name = "wr_node" then return 1; end if; +return 0; +end function; +component lm32_top_minimal is +generic ( eba_reset: std_logic_vector(31 downto 0); + sdb_address: std_logic_vector(31 downto 0)); +port ( + + clk_i : in std_logic; + rst_i : in std_logic; + interrupt : in std_logic_vector(31 downto 0); + I_DAT_I : in std_logic_vector(31 downto 0); + I_ACK_I : in std_logic; + I_ERR_I : in std_logic; + I_RTY_I : in std_logic; + D_DAT_I : in std_logic_vector(31 downto 0); + D_ACK_I : in std_logic; + D_ERR_I : in std_logic; + D_RTY_I : in std_logic; + I_DAT_O : out std_logic_vector(31 downto 0); + I_ADR_O : out std_logic_vector(31 downto 0); + I_CYC_O : out std_logic; + I_SEL_O : out std_logic_vector(3 downto 0); + I_STB_O : out std_logic; + I_WE_O : out std_logic; + I_CTI_O : out std_logic_vector(2 downto 0); + I_LOCK_O : out std_logic; + I_BTE_O : out std_logic_vector(1 downto 0); + D_DAT_O : out std_logic_vector(31 downto 0); + D_ADR_O : out std_logic_vector(31 downto 0); + D_CYC_O : out std_logic; + D_SEL_O : out std_logic_vector(3 downto 0); + D_STB_O : out std_logic; + D_WE_O : out std_logic; + D_CTI_O : out std_logic_vector(2 downto 0); + D_LOCK_O : out std_logic; + D_BTE_O : out std_logic_vector(1 downto 0)); +end component; +component lm32_top_medium is +generic ( eba_reset: std_logic_vector(31 downto 0); + sdb_address: std_logic_vector(31 downto 0)); +port ( + + clk_i : in std_logic; + rst_i : in std_logic; + interrupt : in std_logic_vector(31 downto 0); + I_DAT_I : in std_logic_vector(31 downto 0); + I_ACK_I : in std_logic; + I_ERR_I : in std_logic; + I_RTY_I : in std_logic; + D_DAT_I : in std_logic_vector(31 downto 0); + D_ACK_I : in std_logic; + D_ERR_I : in std_logic; + D_RTY_I : in std_logic; + I_DAT_O : out std_logic_vector(31 downto 0); + I_ADR_O : out std_logic_vector(31 downto 0); + I_CYC_O : out std_logic; + I_SEL_O : out std_logic_vector(3 downto 0); + I_STB_O : out std_logic; + I_WE_O : out std_logic; + I_CTI_O : out std_logic_vector(2 downto 0); + I_LOCK_O : out std_logic; + I_BTE_O : out std_logic_vector(1 downto 0); + D_DAT_O : out std_logic_vector(31 downto 0); + D_ADR_O : out std_logic_vector(31 downto 0); + D_CYC_O : out std_logic; + D_SEL_O : out std_logic_vector(3 downto 0); + D_STB_O : out std_logic; + D_WE_O : out std_logic; + D_CTI_O : out std_logic_vector(2 downto 0); + D_LOCK_O : out std_logic; + D_BTE_O : out std_logic_vector(1 downto 0)); +end component; +component lm32_top_medium_icache is +generic ( eba_reset: std_logic_vector(31 downto 0); + sdb_address: std_logic_vector(31 downto 0)); +port ( + + clk_i : in std_logic; + rst_i : in std_logic; + interrupt : in std_logic_vector(31 downto 0); + I_DAT_I : in std_logic_vector(31 downto 0); + I_ACK_I : in std_logic; + I_ERR_I : in std_logic; + I_RTY_I : in std_logic; + D_DAT_I : in std_logic_vector(31 downto 0); + D_ACK_I : in std_logic; + D_ERR_I : in std_logic; + D_RTY_I : in std_logic; + I_DAT_O : out std_logic_vector(31 downto 0); + I_ADR_O : out std_logic_vector(31 downto 0); + I_CYC_O : out std_logic; + I_SEL_O : out std_logic_vector(3 downto 0); + I_STB_O : out std_logic; + I_WE_O : out std_logic; + I_CTI_O : out std_logic_vector(2 downto 0); + I_LOCK_O : out std_logic; + I_BTE_O : out std_logic_vector(1 downto 0); + D_DAT_O : out std_logic_vector(31 downto 0); + D_ADR_O : out std_logic_vector(31 downto 0); + D_CYC_O : out std_logic; + D_SEL_O : out std_logic_vector(3 downto 0); + D_STB_O : out std_logic; + D_WE_O : out std_logic; + D_CTI_O : out std_logic_vector(2 downto 0); + D_LOCK_O : out std_logic; + D_BTE_O : out std_logic_vector(1 downto 0)); +end component; +component lm32_top_medium_debug is +generic ( eba_reset: std_logic_vector(31 downto 0); + sdb_address: std_logic_vector(31 downto 0)); +port ( + + clk_i : in std_logic; + rst_i : in std_logic; + interrupt : in std_logic_vector(31 downto 0); + I_DAT_I : in std_logic_vector(31 downto 0); + I_ACK_I : in std_logic; + I_ERR_I : in std_logic; + I_RTY_I : in std_logic; + D_DAT_I : in std_logic_vector(31 downto 0); + D_ACK_I : in std_logic; + D_ERR_I : in std_logic; + D_RTY_I : in std_logic; + I_DAT_O : out std_logic_vector(31 downto 0); + I_ADR_O : out std_logic_vector(31 downto 0); + I_CYC_O : out std_logic; + I_SEL_O : out std_logic_vector(3 downto 0); + I_STB_O : out std_logic; + I_WE_O : out std_logic; + I_CTI_O : out std_logic_vector(2 downto 0); + I_LOCK_O : out std_logic; + I_BTE_O : out std_logic_vector(1 downto 0); + D_DAT_O : out std_logic_vector(31 downto 0); + D_ADR_O : out std_logic_vector(31 downto 0); + D_CYC_O : out std_logic; + D_SEL_O : out std_logic_vector(3 downto 0); + D_STB_O : out std_logic; + D_WE_O : out std_logic; + D_CTI_O : out std_logic_vector(2 downto 0); + D_LOCK_O : out std_logic; + D_BTE_O : out std_logic_vector(1 downto 0)); +end component; +component lm32_top_medium_icache_debug is +generic ( eba_reset: std_logic_vector(31 downto 0); + sdb_address: std_logic_vector(31 downto 0)); +port ( + + clk_i : in std_logic; + rst_i : in std_logic; + interrupt : in std_logic_vector(31 downto 0); + I_DAT_I : in std_logic_vector(31 downto 0); + I_ACK_I : in std_logic; + I_ERR_I : in std_logic; + I_RTY_I : in std_logic; + D_DAT_I : in std_logic_vector(31 downto 0); + D_ACK_I : in std_logic; + D_ERR_I : in std_logic; + D_RTY_I : in std_logic; + I_DAT_O : out std_logic_vector(31 downto 0); + I_ADR_O : out std_logic_vector(31 downto 0); + I_CYC_O : out std_logic; + I_SEL_O : out std_logic_vector(3 downto 0); + I_STB_O : out std_logic; + I_WE_O : out std_logic; + I_CTI_O : out std_logic_vector(2 downto 0); + I_LOCK_O : out std_logic; + I_BTE_O : out std_logic_vector(1 downto 0); + D_DAT_O : out std_logic_vector(31 downto 0); + D_ADR_O : out std_logic_vector(31 downto 0); + D_CYC_O : out std_logic; + D_SEL_O : out std_logic_vector(3 downto 0); + D_STB_O : out std_logic; + D_WE_O : out std_logic; + D_CTI_O : out std_logic_vector(2 downto 0); + D_LOCK_O : out std_logic; + D_BTE_O : out std_logic_vector(1 downto 0)); +end component; +component lm32_top_full is +generic ( eba_reset: std_logic_vector(31 downto 0); + sdb_address: std_logic_vector(31 downto 0)); +port ( + + clk_i : in std_logic; + rst_i : in std_logic; + interrupt : in std_logic_vector(31 downto 0); + I_DAT_I : in std_logic_vector(31 downto 0); + I_ACK_I : in std_logic; + I_ERR_I : in std_logic; + I_RTY_I : in std_logic; + D_DAT_I : in std_logic_vector(31 downto 0); + D_ACK_I : in std_logic; + D_ERR_I : in std_logic; + D_RTY_I : in std_logic; + I_DAT_O : out std_logic_vector(31 downto 0); + I_ADR_O : out std_logic_vector(31 downto 0); + I_CYC_O : out std_logic; + I_SEL_O : out std_logic_vector(3 downto 0); + I_STB_O : out std_logic; + I_WE_O : out std_logic; + I_CTI_O : out std_logic_vector(2 downto 0); + I_LOCK_O : out std_logic; + I_BTE_O : out std_logic_vector(1 downto 0); + D_DAT_O : out std_logic_vector(31 downto 0); + D_ADR_O : out std_logic_vector(31 downto 0); + D_CYC_O : out std_logic; + D_SEL_O : out std_logic_vector(3 downto 0); + D_STB_O : out std_logic; + D_WE_O : out std_logic; + D_CTI_O : out std_logic_vector(2 downto 0); + D_LOCK_O : out std_logic; + D_BTE_O : out std_logic_vector(1 downto 0)); +end component; +component lm32_top_full_debug is +generic ( eba_reset: std_logic_vector(31 downto 0); + sdb_address: std_logic_vector(31 downto 0)); +port ( + + clk_i : in std_logic; + rst_i : in std_logic; + interrupt : in std_logic_vector(31 downto 0); + I_DAT_I : in std_logic_vector(31 downto 0); + I_ACK_I : in std_logic; + I_ERR_I : in std_logic; + I_RTY_I : in std_logic; + D_DAT_I : in std_logic_vector(31 downto 0); + D_ACK_I : in std_logic; + D_ERR_I : in std_logic; + D_RTY_I : in std_logic; + I_DAT_O : out std_logic_vector(31 downto 0); + I_ADR_O : out std_logic_vector(31 downto 0); + I_CYC_O : out std_logic; + I_SEL_O : out std_logic_vector(3 downto 0); + I_STB_O : out std_logic; + I_WE_O : out std_logic; + I_CTI_O : out std_logic_vector(2 downto 0); + I_LOCK_O : out std_logic; + I_BTE_O : out std_logic_vector(1 downto 0); + D_DAT_O : out std_logic_vector(31 downto 0); + D_ADR_O : out std_logic_vector(31 downto 0); + D_CYC_O : out std_logic; + D_SEL_O : out std_logic_vector(3 downto 0); + D_STB_O : out std_logic; + D_WE_O : out std_logic; + D_CTI_O : out std_logic_vector(2 downto 0); + D_LOCK_O : out std_logic; + D_BTE_O : out std_logic_vector(1 downto 0)); +end component; +component lm32_top_wr_node is +generic ( eba_reset: std_logic_vector(31 downto 0); + sdb_address: std_logic_vector(31 downto 0)); +port ( + + clk_i : in std_logic; + rst_i : in std_logic; + interrupt : in std_logic_vector(31 downto 0); + I_DAT_I : in std_logic_vector(31 downto 0); + I_ACK_I : in std_logic; + I_ERR_I : in std_logic; + I_RTY_I : in std_logic; + D_DAT_I : in std_logic_vector(31 downto 0); + D_ACK_I : in std_logic; + D_ERR_I : in std_logic; + D_RTY_I : in std_logic; + I_DAT_O : out std_logic_vector(31 downto 0); + I_ADR_O : out std_logic_vector(31 downto 0); + I_CYC_O : out std_logic; + I_SEL_O : out std_logic_vector(3 downto 0); + I_STB_O : out std_logic; + I_WE_O : out std_logic; + I_CTI_O : out std_logic_vector(2 downto 0); + I_LOCK_O : out std_logic; + I_BTE_O : out std_logic_vector(1 downto 0); + D_DAT_O : out std_logic_vector(31 downto 0); + D_ADR_O : out std_logic_vector(31 downto 0); + D_CYC_O : out std_logic; + D_SEL_O : out std_logic_vector(3 downto 0); + D_STB_O : out std_logic; + D_WE_O : out std_logic; + D_CTI_O : out std_logic_vector(2 downto 0); + D_LOCK_O : out std_logic; + D_BTE_O : out std_logic_vector(1 downto 0)); +end component; + + function pick(first : boolean; + a, b : t_wishbone_address) + return t_wishbone_address is + begin + if first then + return a; + else + return b; + end if; + end pick; + + function b2l(val : boolean) + return std_logic is + begin + if val then + return '1'; + else + return '0'; + end if; + end b2l; + + function strip_undefined + (x : std_logic_vector) return std_logic_vector is + variable tmp : std_logic_vector(x'left downto 0); + begin + for i in 0 to x'left loop + if(x(i)='1') then + tmp(i) := '1'; + else + tmp(i) := '0'; + end if; + end loop; -- i + return tmp; + end strip_undefined; + + constant dcache_burst_length : natural := f_eval_d_burst_length(g_profile); + constant icache_burst_length : natural := f_eval_i_burst_length(g_profile); + + -- Control pins from the LM32 + signal I_ADR : t_wishbone_address; + signal D_ADR : t_wishbone_address; + signal I_CYC : std_logic; + signal D_CYC : std_logic; + signal I_CTI : t_wishbone_cycle_type; + signal D_CTI : t_wishbone_cycle_type; + -- We also watch the STALL lines from the v4 slaves + + -- Registered logic: + signal inst_was_busy : std_logic; + signal data_was_busy : std_logic; + signal inst_addr_reg : t_wishbone_address; + signal data_addr_reg : t_wishbone_address; + signal inst_remaining : natural range 0 to icache_burst_length; + signal data_remaining : natural range 0 to dcache_burst_length; + + -- Asynchronous logic: + signal I_STB_O : std_logic; + signal D_STB_O : std_logic; + signal rst:std_logic; +begin + rst <= not rst_n_i; +gen_profile_minimal: if (g_profile = "minimal") generate +U_Wrapped_LM32: lm32_top_minimal + +generic map ( + eba_reset => g_reset_vector, + sdb_address => g_sdb_address) +port map( + clk_i => clk_sys_i, + rst_i => rst, + interrupt => irq_i, + -- Pass slave responses through unmodified + I_DAT_I => strip_undefined(iwb_i.DAT), + I_ACK_I => iwb_i.ACK, + I_ERR_I => iwb_i.ERR, + I_RTY_I => iwb_i.RTY, + D_DAT_I => strip_undefined(dwb_i.DAT), + D_ACK_I => dwb_i.ACK, + D_ERR_I => dwb_i.ERR, + D_RTY_I => dwb_i.RTY, + -- Writes can only happen as a single cycle + I_DAT_O => iwb_o.DAT, + D_DAT_O => dwb_o.DAT, + I_WE_O => iwb_o.WE, + D_WE_O => dwb_o.WE, + -- SEL /= 1111 only for single cycles + I_SEL_O => iwb_o.SEL, + D_SEL_O => dwb_o.SEL, + -- We can ignore BTE as we know it's always linear burst mode + I_BTE_O => open, + D_BTE_O => open, + -- Lock is never flagged by LM32. Besides, WBv4 locks intercon on CYC. + I_LOCK_O => open, + D_LOCK_O => open, + -- The LM32 has STB=CYC always + I_STB_O => open, + D_STB_O => open, + -- We monitor these pins to direct the adapter's logic + I_ADR_O => I_ADR, + I_CYC_O => I_CYC, + I_CTI_O => I_CTI, + D_ADR_O => D_ADR, + D_CYC_O => D_CYC, + D_CTI_O => D_CTI); +end generate gen_profile_minimal; +gen_profile_medium: if (g_profile = "medium") generate +U_Wrapped_LM32: lm32_top_medium + +generic map ( + eba_reset => g_reset_vector, + sdb_address => g_sdb_address) +port map( + clk_i => clk_sys_i, + rst_i => rst, + interrupt => irq_i, + -- Pass slave responses through unmodified + I_DAT_I => strip_undefined(iwb_i.DAT), + I_ACK_I => iwb_i.ACK, + I_ERR_I => iwb_i.ERR, + I_RTY_I => iwb_i.RTY, + D_DAT_I => strip_undefined(dwb_i.DAT), + D_ACK_I => dwb_i.ACK, + D_ERR_I => dwb_i.ERR, + D_RTY_I => dwb_i.RTY, + -- Writes can only happen as a single cycle + I_DAT_O => iwb_o.DAT, + D_DAT_O => dwb_o.DAT, + I_WE_O => iwb_o.WE, + D_WE_O => dwb_o.WE, + -- SEL /= 1111 only for single cycles + I_SEL_O => iwb_o.SEL, + D_SEL_O => dwb_o.SEL, + -- We can ignore BTE as we know it's always linear burst mode + I_BTE_O => open, + D_BTE_O => open, + -- Lock is never flagged by LM32. Besides, WBv4 locks intercon on CYC. + I_LOCK_O => open, + D_LOCK_O => open, + -- The LM32 has STB=CYC always + I_STB_O => open, + D_STB_O => open, + -- We monitor these pins to direct the adapter's logic + I_ADR_O => I_ADR, + I_CYC_O => I_CYC, + I_CTI_O => I_CTI, + D_ADR_O => D_ADR, + D_CYC_O => D_CYC, + D_CTI_O => D_CTI); +end generate gen_profile_medium; +gen_profile_medium_icache: if (g_profile = "medium_icache") generate +U_Wrapped_LM32: lm32_top_medium_icache + +generic map ( + eba_reset => g_reset_vector, + sdb_address => g_sdb_address) +port map( + clk_i => clk_sys_i, + rst_i => rst, + interrupt => irq_i, + -- Pass slave responses through unmodified + I_DAT_I => strip_undefined(iwb_i.DAT), + I_ACK_I => iwb_i.ACK, + I_ERR_I => iwb_i.ERR, + I_RTY_I => iwb_i.RTY, + D_DAT_I => strip_undefined(dwb_i.DAT), + D_ACK_I => dwb_i.ACK, + D_ERR_I => dwb_i.ERR, + D_RTY_I => dwb_i.RTY, + -- Writes can only happen as a single cycle + I_DAT_O => iwb_o.DAT, + D_DAT_O => dwb_o.DAT, + I_WE_O => iwb_o.WE, + D_WE_O => dwb_o.WE, + -- SEL /= 1111 only for single cycles + I_SEL_O => iwb_o.SEL, + D_SEL_O => dwb_o.SEL, + -- We can ignore BTE as we know it's always linear burst mode + I_BTE_O => open, + D_BTE_O => open, + -- Lock is never flagged by LM32. Besides, WBv4 locks intercon on CYC. + I_LOCK_O => open, + D_LOCK_O => open, + -- The LM32 has STB=CYC always + I_STB_O => open, + D_STB_O => open, + -- We monitor these pins to direct the adapter's logic + I_ADR_O => I_ADR, + I_CYC_O => I_CYC, + I_CTI_O => I_CTI, + D_ADR_O => D_ADR, + D_CYC_O => D_CYC, + D_CTI_O => D_CTI); +end generate gen_profile_medium_icache; +gen_profile_medium_debug: if (g_profile = "medium_debug") generate +U_Wrapped_LM32: lm32_top_medium_debug + +generic map ( + eba_reset => g_reset_vector, + sdb_address => g_sdb_address) +port map( + clk_i => clk_sys_i, + rst_i => rst, + interrupt => irq_i, + -- Pass slave responses through unmodified + I_DAT_I => strip_undefined(iwb_i.DAT), + I_ACK_I => iwb_i.ACK, + I_ERR_I => iwb_i.ERR, + I_RTY_I => iwb_i.RTY, + D_DAT_I => strip_undefined(dwb_i.DAT), + D_ACK_I => dwb_i.ACK, + D_ERR_I => dwb_i.ERR, + D_RTY_I => dwb_i.RTY, + -- Writes can only happen as a single cycle + I_DAT_O => iwb_o.DAT, + D_DAT_O => dwb_o.DAT, + I_WE_O => iwb_o.WE, + D_WE_O => dwb_o.WE, + -- SEL /= 1111 only for single cycles + I_SEL_O => iwb_o.SEL, + D_SEL_O => dwb_o.SEL, + -- We can ignore BTE as we know it's always linear burst mode + I_BTE_O => open, + D_BTE_O => open, + -- Lock is never flagged by LM32. Besides, WBv4 locks intercon on CYC. + I_LOCK_O => open, + D_LOCK_O => open, + -- The LM32 has STB=CYC always + I_STB_O => open, + D_STB_O => open, + -- We monitor these pins to direct the adapter's logic + I_ADR_O => I_ADR, + I_CYC_O => I_CYC, + I_CTI_O => I_CTI, + D_ADR_O => D_ADR, + D_CYC_O => D_CYC, + D_CTI_O => D_CTI); +end generate gen_profile_medium_debug; +gen_profile_medium_icache_debug: if (g_profile = "medium_icache_debug") generate +U_Wrapped_LM32: lm32_top_medium_icache_debug + +generic map ( + eba_reset => g_reset_vector, + sdb_address => g_sdb_address) +port map( + clk_i => clk_sys_i, + rst_i => rst, + interrupt => irq_i, + -- Pass slave responses through unmodified + I_DAT_I => strip_undefined(iwb_i.DAT), + I_ACK_I => iwb_i.ACK, + I_ERR_I => iwb_i.ERR, + I_RTY_I => iwb_i.RTY, + D_DAT_I => strip_undefined(dwb_i.DAT), + D_ACK_I => dwb_i.ACK, + D_ERR_I => dwb_i.ERR, + D_RTY_I => dwb_i.RTY, + -- Writes can only happen as a single cycle + I_DAT_O => iwb_o.DAT, + D_DAT_O => dwb_o.DAT, + I_WE_O => iwb_o.WE, + D_WE_O => dwb_o.WE, + -- SEL /= 1111 only for single cycles + I_SEL_O => iwb_o.SEL, + D_SEL_O => dwb_o.SEL, + -- We can ignore BTE as we know it's always linear burst mode + I_BTE_O => open, + D_BTE_O => open, + -- Lock is never flagged by LM32. Besides, WBv4 locks intercon on CYC. + I_LOCK_O => open, + D_LOCK_O => open, + -- The LM32 has STB=CYC always + I_STB_O => open, + D_STB_O => open, + -- We monitor these pins to direct the adapter's logic + I_ADR_O => I_ADR, + I_CYC_O => I_CYC, + I_CTI_O => I_CTI, + D_ADR_O => D_ADR, + D_CYC_O => D_CYC, + D_CTI_O => D_CTI); +end generate gen_profile_medium_icache_debug; +gen_profile_full: if (g_profile = "full") generate +U_Wrapped_LM32: lm32_top_full + +generic map ( + eba_reset => g_reset_vector, + sdb_address => g_sdb_address) +port map( + clk_i => clk_sys_i, + rst_i => rst, + interrupt => irq_i, + -- Pass slave responses through unmodified + I_DAT_I => strip_undefined(iwb_i.DAT), + I_ACK_I => iwb_i.ACK, + I_ERR_I => iwb_i.ERR, + I_RTY_I => iwb_i.RTY, + D_DAT_I => strip_undefined(dwb_i.DAT), + D_ACK_I => dwb_i.ACK, + D_ERR_I => dwb_i.ERR, + D_RTY_I => dwb_i.RTY, + -- Writes can only happen as a single cycle + I_DAT_O => iwb_o.DAT, + D_DAT_O => dwb_o.DAT, + I_WE_O => iwb_o.WE, + D_WE_O => dwb_o.WE, + -- SEL /= 1111 only for single cycles + I_SEL_O => iwb_o.SEL, + D_SEL_O => dwb_o.SEL, + -- We can ignore BTE as we know it's always linear burst mode + I_BTE_O => open, + D_BTE_O => open, + -- Lock is never flagged by LM32. Besides, WBv4 locks intercon on CYC. + I_LOCK_O => open, + D_LOCK_O => open, + -- The LM32 has STB=CYC always + I_STB_O => open, + D_STB_O => open, + -- We monitor these pins to direct the adapter's logic + I_ADR_O => I_ADR, + I_CYC_O => I_CYC, + I_CTI_O => I_CTI, + D_ADR_O => D_ADR, + D_CYC_O => D_CYC, + D_CTI_O => D_CTI); +end generate gen_profile_full; +gen_profile_full_debug: if (g_profile = "full_debug") generate +U_Wrapped_LM32: lm32_top_full_debug + +generic map ( + eba_reset => g_reset_vector, + sdb_address => g_sdb_address) +port map( + clk_i => clk_sys_i, + rst_i => rst, + interrupt => irq_i, + -- Pass slave responses through unmodified + I_DAT_I => strip_undefined(iwb_i.DAT), + I_ACK_I => iwb_i.ACK, + I_ERR_I => iwb_i.ERR, + I_RTY_I => iwb_i.RTY, + D_DAT_I => strip_undefined(dwb_i.DAT), + D_ACK_I => dwb_i.ACK, + D_ERR_I => dwb_i.ERR, + D_RTY_I => dwb_i.RTY, + -- Writes can only happen as a single cycle + I_DAT_O => iwb_o.DAT, + D_DAT_O => dwb_o.DAT, + I_WE_O => iwb_o.WE, + D_WE_O => dwb_o.WE, + -- SEL /= 1111 only for single cycles + I_SEL_O => iwb_o.SEL, + D_SEL_O => dwb_o.SEL, + -- We can ignore BTE as we know it's always linear burst mode + I_BTE_O => open, + D_BTE_O => open, + -- Lock is never flagged by LM32. Besides, WBv4 locks intercon on CYC. + I_LOCK_O => open, + D_LOCK_O => open, + -- The LM32 has STB=CYC always + I_STB_O => open, + D_STB_O => open, + -- We monitor these pins to direct the adapter's logic + I_ADR_O => I_ADR, + I_CYC_O => I_CYC, + I_CTI_O => I_CTI, + D_ADR_O => D_ADR, + D_CYC_O => D_CYC, + D_CTI_O => D_CTI); +end generate gen_profile_full_debug; +gen_profile_wr_node: if (g_profile = "wr_node") generate +U_Wrapped_LM32: lm32_top_wr_node + +generic map ( + eba_reset => g_reset_vector, + sdb_address => g_sdb_address) +port map( + clk_i => clk_sys_i, + rst_i => rst, + interrupt => irq_i, + -- Pass slave responses through unmodified + I_DAT_I => strip_undefined(iwb_i.DAT), + I_ACK_I => iwb_i.ACK, + I_ERR_I => iwb_i.ERR, + I_RTY_I => iwb_i.RTY, + D_DAT_I => strip_undefined(dwb_i.DAT), + D_ACK_I => dwb_i.ACK, + D_ERR_I => dwb_i.ERR, + D_RTY_I => dwb_i.RTY, + -- Writes can only happen as a single cycle + I_DAT_O => iwb_o.DAT, + D_DAT_O => dwb_o.DAT, + I_WE_O => iwb_o.WE, + D_WE_O => dwb_o.WE, + -- SEL /= 1111 only for single cycles + I_SEL_O => iwb_o.SEL, + D_SEL_O => dwb_o.SEL, + -- We can ignore BTE as we know it's always linear burst mode + I_BTE_O => open, + D_BTE_O => open, + -- Lock is never flagged by LM32. Besides, WBv4 locks intercon on CYC. + I_LOCK_O => open, + D_LOCK_O => open, + -- The LM32 has STB=CYC always + I_STB_O => open, + D_STB_O => open, + -- We monitor these pins to direct the adapter's logic + I_ADR_O => I_ADR, + I_CYC_O => I_CYC, + I_CTI_O => I_CTI, + D_ADR_O => D_ADR, + D_CYC_O => D_CYC, + D_CTI_O => D_CTI); +end generate gen_profile_wr_node; + + -- Cycle durations always match in our adapter + iwb_o.CYC <= I_CYC; + dwb_o.CYC <= D_CYC; + + iwb_o.STB <= I_STB_O; + dwb_o.STB <= D_STB_O; + + I_STB_O <= (I_CYC and not inst_was_busy) or b2l(inst_remaining /= 0); + inst : process(clk_sys_i) + variable inst_addr : t_wishbone_address; + variable inst_length : natural; + begin + if rising_edge(clk_sys_i) then + if rst = '1' then + inst_was_busy <= '0'; + inst_remaining <= 0; + inst_addr_reg <= (others => '0'); + else + inst_was_busy <= I_CYC; + + -- Is this the start of a new WB cycle? + if I_CYC = '1' and inst_was_busy = '0' then + inst_addr := I_ADR; + if I_CTI = "010" then + inst_length := icache_burst_length; + else + inst_length := 1; + end if; + else + inst_addr := inst_addr_reg; + inst_length := inst_remaining; + end if; + + -- When stalled, we cannot advance the address + if iwb_i.STALL = '0' and I_STB_O = '1' then + inst_addr_reg <= std_logic_vector(unsigned(inst_addr) + 4); + inst_remaining <= inst_length - 1; + else + inst_addr_reg <= inst_addr; + inst_remaining <= inst_length; + end if; + end if; + end if; + end process; + + D_STB_O <= (D_CYC and not data_was_busy) or b2l(data_remaining /= 0); + data : process(clk_sys_i) + variable data_addr : t_wishbone_address; + variable data_length : natural; + begin + if rising_edge(clk_sys_i) then + if rst = '1' then + data_was_busy <= '0'; + data_remaining <= 0; + data_addr_reg <= (others => '0'); + else + data_was_busy <= D_CYC; + + -- Is this the start of a new WB cycle? + if D_CYC = '1' and data_was_busy = '0' then + data_addr := D_ADR; + if D_CTI = "010" then + data_length := dcache_burst_length; + else + data_length := 1; + end if; + else + data_addr := data_addr_reg; + data_length := data_remaining; + end if; + + -- When stalled, we cannot advance the address + if dwb_i.STALL = '0' and D_STB_O = '1' then + data_addr_reg <= std_logic_vector(unsigned(data_addr) + 4); + data_remaining <= data_length - 1; + else + data_addr_reg <= data_addr; + data_remaining <= data_length; + end if; + end if; + end if; + end process; + + -- The first request uses the WBv3 address, thereafter an incrementing one. + dwb_o.ADR <= pick(data_was_busy = '0', D_ADR, data_addr_reg); + iwb_o.ADR <= pick(inst_was_busy = '0', I_ADR, inst_addr_reg); + end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/jtag_tap.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/jtag_tap.v new file mode 100644 index 000000000..1821c3f6d --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/jtag_tap.v @@ -0,0 +1,20 @@ +module jtag_tap( + output tck, + output tdi, + input tdo, + output capture, + output shift, + output e1dr, + output update, + output reset +); + + assign tck = 1; + assign tdi = 1; + assign capture = 0; + assign shift = 0; + assign e1dr = 0; + assign update = 0; + assign reset = 0; + +endmodule diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/lm32_multiplier.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/lm32_multiplier.v new file mode 100644 index 000000000..ea3e0cb0d --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/lm32_multiplier.v @@ -0,0 +1,119 @@ +// ============================================================================= +// COPYRIGHT NOTICE +// Copyright 2006 (c) Lattice Semiconductor Corporation +// ALL RIGHTS RESERVED +// This confidential and proprietary software may be used only as authorised by +// a licensing agreement from Lattice Semiconductor Corporation. +// The entire notice above must be reproduced on all authorized copies and +// copies may only be made to the extent permitted by a licensing agreement from +// Lattice Semiconductor Corporation. +// +// Lattice Semiconductor Corporation TEL : 1-800-Lattice (USA and Canada) +// 5555 NE Moore Court 408-826-6000 (other locations) +// Hillsboro, OR 97124 web : http://www.latticesemi.com/ +// U.S.A email: techsupport@latticesemi.com +// =============================================================================/ +// FILE DETAILS +// Project : LatticeMico32 +// File : lm32_multiplier.v +// Title : Pipelined multiplier. +// Dependencies : lm32_include.v +// Version : 6.1.17 +// : Initial Release +// Version : 7.0SP2, 3.0 +// : No Change +// Version : 3.1 +// : No Change +// ============================================================================= + +`include "../../src/lm32_include.v" + +///////////////////////////////////////////////////// +// Module interface +///////////////////////////////////////////////////// + +module lm32_multiplier ( + // ----- Inputs ----- + clk_i, + rst_i, + stall_x, + stall_m, + operand_0, + operand_1, + // ----- Ouputs ----- + result + ); + +///////////////////////////////////////////////////// +// Inputs +///////////////////////////////////////////////////// + +input clk_i; // Clock +input rst_i; // Reset +input stall_x; // Stall instruction in X stage +input stall_m; // Stall instruction in M stage +input [`LM32_WORD_RNG] operand_0; // Muliplicand +input [`LM32_WORD_RNG] operand_1; // Multiplier + +///////////////////////////////////////////////////// +// Outputs +///////////////////////////////////////////////////// + +output [`LM32_WORD_RNG] result; // Product of multiplication +wire [`LM32_WORD_RNG] result; + +///////////////////////////////////////////////////// +// Internal nets and registers +///////////////////////////////////////////////////// + +// Divide multiplicands into high and low +`define HALF_WORD_WIDTH (`LM32_WORD_WIDTH/2) +`define HALF_WORD_RNG (`HALF_WORD_WIDTH-1):0 + +// Result = c+d+e = a*b +reg [`HALF_WORD_RNG] a0, a1, b0, b1; +reg [`HALF_WORD_RNG] c0, c1; +reg [`HALF_WORD_RNG] d1, e1; +reg [`HALF_WORD_RNG] result0, result1; + +assign result = {result1, result0}; + +///////////////////////////////////////////////////// +// Sequential logic +///////////////////////////////////////////////////// + +always @(posedge clk_i `CFG_RESET_SENSITIVITY) +begin + if (rst_i == `TRUE) + begin + a0 <= {`HALF_WORD_WIDTH{1'b0}}; + a1 <= {`HALF_WORD_WIDTH{1'b0}}; + b0 <= {`HALF_WORD_WIDTH{1'b0}}; + b1 <= {`HALF_WORD_WIDTH{1'b0}}; + c0 <= {`HALF_WORD_WIDTH{1'b0}}; + c1 <= {`HALF_WORD_WIDTH{1'b0}}; + d1 <= {`HALF_WORD_WIDTH{1'b0}}; + e1 <= {`HALF_WORD_WIDTH{1'b0}}; + result0 <= {`HALF_WORD_WIDTH{1'b0}}; + result1 <= {`HALF_WORD_WIDTH{1'b0}}; + end + else + begin + if (stall_x == `FALSE) + begin + {a1, a0} <= operand_0; + {b1, b0} <= operand_1; + end + if (stall_m == `FALSE) + begin + {c1, c0} <= a0 * b0; + d1 <= a0 * b1; + e1 <= a1 * b0; + end + + result0 <= c0; + result1 <= c1 + d1 + e1; + end +end + +endmodule diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/jtag_cores.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/jtag_cores.v new file mode 100644 index 000000000..78dbf0293 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/jtag_cores.v @@ -0,0 +1,66 @@ +// Modified by GSI to use simple positive edge clocking and the JTAG capture state + +module jtag_cores ( + input [7:0] reg_d, + input [2:0] reg_addr_d, + output reg_update, + output [7:0] reg_q, + output [2:0] reg_addr_q, + output jtck, + output jrstn +); + +wire tck; +wire tdi; +wire tdo; +wire capture; +wire shift; +wire update; +wire e1dr; +wire reset; + +jtag_tap jtag_tap ( + .tck(tck), + .tdi(tdi), + .tdo(tdo), + .capture(capture), + .shift(shift), + .e1dr(e1dr), + .update(update), + .reset(reset) +); + +reg [10:0] jtag_shift; +reg [10:0] jtag_latched; + +always @(posedge tck) +begin + if(reset) + jtag_shift <= 11'b0; + else begin + if (shift) + jtag_shift <= {tdi, jtag_shift[10:1]}; + else if (capture) + jtag_shift <= {reg_d, reg_addr_d}; + end +end + +assign tdo = jtag_shift[0]; + +always @(posedge tck) +begin + if(reset) + jtag_latched <= 11'b0; + else begin + if (e1dr) + jtag_latched <= jtag_shift; + end +end + +assign reg_update = update; +assign reg_q = jtag_latched[10:3]; +assign reg_addr_q = jtag_latched[2:0]; +assign jtck = tck; +assign jrstn = ~reset; + +endmodule diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_adder.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_adder.v new file mode 100644 index 000000000..b0d2d79ce --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_adder.v @@ -0,0 +1,115 @@ +// ============================================================================= +// COPYRIGHT NOTICE +// Copyright 2006 (c) Lattice Semiconductor Corporation +// ALL RIGHTS RESERVED +// This confidential and proprietary software may be used only as authorised by +// a licensing agreement from Lattice Semiconductor Corporation. +// The entire notice above must be reproduced on all authorized copies and +// copies may only be made to the extent permitted by a licensing agreement from +// Lattice Semiconductor Corporation. +// +// Lattice Semiconductor Corporation TEL : 1-800-Lattice (USA and Canada) +// 5555 NE Moore Court 408-826-6000 (other locations) +// Hillsboro, OR 97124 web : http://www.latticesemi.com/ +// U.S.A email: techsupport@latticesemi.com +// ============================================================================/ +// FILE DETAILS +// Project : LatticeMico32 +// File : lm32_adder.v +// Title : Integer adder / subtractor with comparison flag generation +// Dependencies : lm32_include.v +// Version : 6.1.17 +// : Initial Release +// Version : 7.0SP2, 3.0 +// : No Change +// Version : 3.1 +// : No Change +// ============================================================================= + +`include "lm32_include.v" + +///////////////////////////////////////////////////// +// Module interface +///////////////////////////////////////////////////// + +module lm32_adder ( + // ----- Inputs ------- + adder_op_x, + adder_op_x_n, + operand_0_x, + operand_1_x, + // ----- Outputs ------- + adder_result_x, + adder_carry_n_x, + adder_overflow_x + ); + +///////////////////////////////////////////////////// +// Inputs +///////////////////////////////////////////////////// + +input adder_op_x; // Operating to perform, 0 for addition, 1 for subtraction +input adder_op_x_n; // Inverted version of adder_op_x +input [`LM32_WORD_RNG] operand_0_x; // Operand to add, or subtract from +input [`LM32_WORD_RNG] operand_1_x; // Opearnd to add, or subtract by + +///////////////////////////////////////////////////// +// Outputs +///////////////////////////////////////////////////// + +output [`LM32_WORD_RNG] adder_result_x; // Result of addition or subtraction +wire [`LM32_WORD_RNG] adder_result_x; +output adder_carry_n_x; // Inverted carry +wire adder_carry_n_x; +output adder_overflow_x; // Indicates if overflow occured, only valid for subtractions +reg adder_overflow_x; + +///////////////////////////////////////////////////// +// Internal nets and registers +///////////////////////////////////////////////////// + +wire a_sign; // Sign (i.e. positive or negative) of operand 0 +wire b_sign; // Sign of operand 1 +wire result_sign; // Sign of result + +///////////////////////////////////////////////////// +// Instantiations +///////////////////////////////////////////////////// + +lm32_addsub addsub ( + // ----- Inputs ----- + .DataA (operand_0_x), + .DataB (operand_1_x), + .Cin (adder_op_x), + .Add_Sub (adder_op_x_n), + // ----- Ouputs ----- + .Result (adder_result_x), + .Cout (adder_carry_n_x) + ); + +///////////////////////////////////////////////////// +// Combinational Logic +///////////////////////////////////////////////////// + +// Extract signs of operands and result + +assign a_sign = operand_0_x[`LM32_WORD_WIDTH-1]; +assign b_sign = operand_1_x[`LM32_WORD_WIDTH-1]; +assign result_sign = adder_result_x[`LM32_WORD_WIDTH-1]; + +// Determine whether an overflow occured when performing a subtraction + +always @(*) +begin + // +ve - -ve = -ve -> overflow + // -ve - +ve = +ve -> overflow + if ( (!a_sign & b_sign & result_sign) + || (a_sign & !b_sign & !result_sign) + ) + adder_overflow_x = `TRUE; + else + adder_overflow_x = `FALSE; +end + +endmodule + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_addsub.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_addsub.v new file mode 100644 index 000000000..8861cbe2d --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_addsub.v @@ -0,0 +1,74 @@ +// ============================================================================= +// COPYRIGHT NOTICE +// Copyright 2006 (c) Lattice Semiconductor Corporation +// ALL RIGHTS RESERVED +// This confidential and proprietary software may be used only as authorised by +// a licensing agreement from Lattice Semiconductor Corporation. +// The entire notice above must be reproduced on all authorized copies and +// copies may only be made to the extent permitted by a licensing agreement from +// Lattice Semiconductor Corporation. +// +// Lattice Semiconductor Corporation TEL : 1-800-Lattice (USA and Canada) +// 5555 NE Moore Court 408-826-6000 (other locations) +// Hillsboro, OR 97124 web : http://www.latticesemi.com/ +// U.S.A email: techsupport@latticesemi.com +// =============================================================================/ +// FILE DETAILS +// Project : LatticeMico32 +// File : lm32_addsub.v +// Title : PMI adder/subtractor. +// Version : 6.1.17 +// : Initial Release +// Version : 7.0SP2, 3.0 +// : No Change +// Version : 3.1 +// : No Change +// ============================================================================= + +`include "lm32_include.v" + +///////////////////////////////////////////////////// +// Module interface +///////////////////////////////////////////////////// + +module lm32_addsub ( + // ----- Inputs ------- + DataA, + DataB, + Cin, + Add_Sub, + // ----- Outputs ------- + Result, + Cout + ); + +///////////////////////////////////////////////////// +// Inputs +///////////////////////////////////////////////////// + +input [31:0] DataA; +input [31:0] DataB; +input Cin; +input Add_Sub; + +///////////////////////////////////////////////////// +// Outputs +///////////////////////////////////////////////////// + +output [31:0] Result; +wire [31:0] Result; +output Cout; +wire Cout; + +///////////////////////////////////////////////////// +// Instantiations +///////////////////////////////////////////////////// + +// Modified for Milkymist: removed non-portable instantiated block + wire [32:0] tmp_addResult = DataA + DataB + Cin; + wire [32:0] tmp_subResult = DataA - DataB - !Cin; + + assign Result = (Add_Sub == 1) ? tmp_addResult[31:0] : tmp_subResult[31:0]; + assign Cout = (Add_Sub == 1) ? tmp_addResult[32] : !tmp_subResult[32]; + +endmodule diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_dp_ram.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_dp_ram.vhd new file mode 100644 index 000000000..7f416bb95 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_dp_ram.vhd @@ -0,0 +1,46 @@ +-- Work-alike to lm32_dp_ram.v, but using generic_simple_dpram + +library ieee; +use ieee.std_logic_1164.all; + +library work; +use work.genram_pkg.all; + +entity lm32_dp_ram is + generic( + addr_width : natural := 32; + addr_depth : natural := 1024; + data_width : natural := 8); + port( + clk_i : in std_logic; + rst_i : in std_logic; + we_i : in std_logic; + waddr_i : in std_logic_vector(addr_width-1 downto 0); + wdata_i : in std_logic_vector(data_width-1 downto 0); + raddr_i : in std_logic_vector(addr_width-1 downto 0); + rdata_o : out std_logic_vector(data_width-1 downto 0)); +end lm32_dp_ram; + +architecture syn of lm32_dp_ram is + + constant c_addr_width : natural := f_log2_size(addr_depth); + +begin + + ram : generic_simple_dpram + generic map( + g_data_width => data_width, + g_size => addr_depth, + g_with_byte_enable => false, + g_addr_conflict_resolution => "write_first", + g_dual_clock => false) + port map( + clka_i => clk_i, + wea_i => we_i, + aa_i => waddr_i(c_addr_width-1 downto 0), + da_i => wdata_i, + clkb_i => clk_i, + ab_i => raddr_i(c_addr_width-1 downto 0), + qb_o => rdata_o); + +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_include.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_include.v new file mode 100644 index 000000000..5adff9d86 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_include.v @@ -0,0 +1,320 @@ +// ============================================================================= +// COPYRIGHT NOTICE +// Copyright 2006 (c) Lattice Semiconductor Corporation +// ALL RIGHTS RESERVED +// This confidential and proprietary software may be used only as authorised by +// a licensing agreement from Lattice Semiconductor Corporation. +// The entire notice above must be reproduced on all authorized copies and +// copies may only be made to the extent permitted by a licensing agreement from +// Lattice Semiconductor Corporation. +// +// Lattice Semiconductor Corporation TEL : 1-800-Lattice (USA and Canada) +// 5555 NE Moore Court 408-826-6000 (other locations) +// Hillsboro, OR 97124 web : http://www.latticesemi.com/ +// U.S.A email: techsupport@latticesemi.com +// =============================================================================/ +// FILE DETAILS +// Project : LatticeMico32 +// File : lm32_include.v +// Title : CPU global macros +// Version : 6.1.17 +// : Initial Release +// Version : 7.0SP2, 3.0 +// : No Change +// Version : 3.1 +// : No Change +// Version : 3.2 +// : No Change +// Version : 3.3 +// : Support for extended configuration register +// ============================================================================= + +`ifdef LM32_INCLUDE_V +`else +`define LM32_INCLUDE_V + +// Configuration options +//`include "system_conf.v" + +`ifdef TRUE +`else +`define TRUE 1'b1 +`define FALSE 1'b0 +`define TRUE_N 1'b0 +`define FALSE_N 1'b1 +`endif + +// Wishbone configuration +`ifndef CFG_IRAM_ENABLED +`define CFG_IWB_ENABLED +`endif + +`define CFG_DWB_ENABLED + +// Data-path width +`define LM32_WORD_WIDTH 32 +`define LM32_WORD_RNG (`LM32_WORD_WIDTH-1):0 +`define LM32_SHIFT_WIDTH 5 +`define LM32_SHIFT_RNG (`LM32_SHIFT_WIDTH-1):0 +`define LM32_BYTE_SELECT_WIDTH 4 +`define LM32_BYTE_SELECT_RNG (`LM32_BYTE_SELECT_WIDTH-1):0 + +// Register file size +`define LM32_REGISTERS 32 +`define LM32_REG_IDX_WIDTH 5 +`define LM32_REG_IDX_RNG (`LM32_REG_IDX_WIDTH-1):0 + +// Standard register numbers +`define LM32_RA_REG `LM32_REG_IDX_WIDTH'd29 +`define LM32_EA_REG `LM32_REG_IDX_WIDTH'd30 +`define LM32_BA_REG `LM32_REG_IDX_WIDTH'd31 + +// Range of Program Counter. Two LSBs are always 0. +`ifdef CFG_ICACHE_ENABLED +`define LM32_PC_WIDTH (clogb2(`CFG_ICACHE_LIMIT-`CFG_ICACHE_BASE_ADDRESS)-2) +`else +`ifdef CFG_IWB_ENABLED +`define LM32_PC_WIDTH (`LM32_WORD_WIDTH-2) +`else +`define LM32_IRAM_ADDRESS_WIDTH 32 +`define LM32_PC_WIDTH (`LM32_IRAM_ADDRESS_WIDTH-2) +`endif +`endif +`define LM32_PC_RNG (`LM32_PC_WIDTH+2-1):2 + +// Range of an instruction +`define LM32_INSTRUCTION_WIDTH 32 +`define LM32_INSTRUCTION_RNG (`LM32_INSTRUCTION_WIDTH-1):0 + +// Adder operation +`define LM32_ADDER_OP_ADD 1'b0 +`define LM32_ADDER_OP_SUBTRACT 1'b1 + +// Shift direction +`define LM32_SHIFT_OP_RIGHT 1'b0 +`define LM32_SHIFT_OP_LEFT 1'b1 + +// Derive macro that indicates whether we have single-stepping or not +`ifdef CFG_ROM_DEBUG_ENABLED +`define LM32_SINGLE_STEP_ENABLED +`else +`ifdef CFG_HW_DEBUG_ENABLED +`define LM32_SINGLE_STEP_ENABLED +`endif +`endif + +// Derive macro that indicates whether JTAG interface is required +`ifdef CFG_JTAG_UART_ENABLED +`define LM32_JTAG_ENABLED +`else +`ifdef CFG_DEBUG_ENABLED +`define LM32_JTAG_ENABLED +`else +`endif +`endif + +// Derive macro that indicates whether we have a barrel-shifter or not +`ifdef CFG_PL_BARREL_SHIFT_ENABLED +`define LM32_BARREL_SHIFT_ENABLED +`else // CFG_PL_BARREL_SHIFT_ENABLED +`ifdef CFG_MC_BARREL_SHIFT_ENABLED +`define LM32_BARREL_SHIFT_ENABLED +`else +`define LM32_NO_BARREL_SHIFT +`endif +`endif // CFG_PL_BARREL_SHIFT_ENABLED + +// Derive macro that indicates whether we have a multiplier or not +`ifdef CFG_PL_MULTIPLY_ENABLED +`define LM32_MULTIPLY_ENABLED +`else +`ifdef CFG_MC_MULTIPLY_ENABLED +`define LM32_MULTIPLY_ENABLED +`endif +`endif + +// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required +`ifdef CFG_MC_DIVIDE_ENABLED +`define LM32_MC_ARITHMETIC_ENABLED +`endif +`ifdef CFG_MC_MULTIPLY_ENABLED +`define LM32_MC_ARITHMETIC_ENABLED +`endif +`ifdef CFG_MC_BARREL_SHIFT_ENABLED +`define LM32_MC_ARITHMETIC_ENABLED +`endif + +// Derive macro that indicates if we are using an EBR register file +`ifdef CFG_EBR_POSEDGE_REGISTER_FILE +`define LM32_EBR_REGISTER_FILE +`endif +`ifdef CFG_EBR_NEGEDGE_REGISTER_FILE +`define LM32_EBR_REGISTER_FILE +`endif + +// Revision number +`define LM32_REVISION 6'h02 + +// Logical operations - Function encoded directly in instruction +`define LM32_LOGIC_OP_RNG 3:0 + +// Conditions for conditional branches +`define LM32_CONDITION_WIDTH 3 +`define LM32_CONDITION_RNG (`LM32_CONDITION_WIDTH-1):0 +`define LM32_CONDITION_E 3'b001 +`define LM32_CONDITION_G 3'b010 +`define LM32_CONDITION_GE 3'b011 +`define LM32_CONDITION_GEU 3'b100 +`define LM32_CONDITION_GU 3'b101 +`define LM32_CONDITION_NE 3'b111 +`define LM32_CONDITION_U1 3'b000 +`define LM32_CONDITION_U2 3'b110 + +// Size of load or store instruction - Encoding corresponds to opcode +`define LM32_SIZE_WIDTH 2 +`define LM32_SIZE_RNG 1:0 +`define LM32_SIZE_BYTE 2'b00 +`define LM32_SIZE_HWORD 2'b11 +`define LM32_SIZE_WORD 2'b10 +`define LM32_ADDRESS_LSBS_WIDTH 2 + +// Width and range of a CSR index +`ifdef CFG_DEBUG_ENABLED +`define LM32_CSR_WIDTH 5 +`define LM32_CSR_RNG (`LM32_CSR_WIDTH-1):0 +`else +`ifdef CFG_JTAG_ENABLED +`define LM32_CSR_WIDTH 4 +`define LM32_CSR_RNG (`LM32_CSR_WIDTH-1):0 +`else +`define LM32_CSR_WIDTH 4 // CFG2 is "a" +`define LM32_CSR_RNG (`LM32_CSR_WIDTH-1):0 +`endif +`endif + +// CSR indices +`define LM32_CSR_IE `LM32_CSR_WIDTH'h0 +`define LM32_CSR_IM `LM32_CSR_WIDTH'h1 +`define LM32_CSR_IP `LM32_CSR_WIDTH'h2 +`define LM32_CSR_ICC `LM32_CSR_WIDTH'h3 +`define LM32_CSR_DCC `LM32_CSR_WIDTH'h4 +`define LM32_CSR_CC `LM32_CSR_WIDTH'h5 +`define LM32_CSR_CFG `LM32_CSR_WIDTH'h6 +`define LM32_CSR_EBA `LM32_CSR_WIDTH'h7 +`ifdef CFG_DEBUG_ENABLED +`define LM32_CSR_DC `LM32_CSR_WIDTH'h8 +`define LM32_CSR_DEBA `LM32_CSR_WIDTH'h9 +`endif +`define LM32_CSR_CFG2 `LM32_CSR_WIDTH'ha +`define LM32_CSR_SDB `LM32_CSR_WIDTH'hb +`define LM32_CSR_ERR_ADDR `LM32_CSR_WIDTH'hc +`ifdef CFG_JTAG_ENABLED +`define LM32_CSR_JTX `LM32_CSR_WIDTH'he +`define LM32_CSR_JRX `LM32_CSR_WIDTH'hf +`endif +`ifdef CFG_DEBUG_ENABLED +`define LM32_CSR_BP0 `LM32_CSR_WIDTH'h10 +`define LM32_CSR_BP1 `LM32_CSR_WIDTH'h11 +`define LM32_CSR_BP2 `LM32_CSR_WIDTH'h12 +`define LM32_CSR_BP3 `LM32_CSR_WIDTH'h13 +`define LM32_CSR_WP0 `LM32_CSR_WIDTH'h18 +`define LM32_CSR_WP1 `LM32_CSR_WIDTH'h19 +`define LM32_CSR_WP2 `LM32_CSR_WIDTH'h1a +`define LM32_CSR_WP3 `LM32_CSR_WIDTH'h1b +`endif + +// Values for WPC CSR +`define LM32_WPC_C_RNG 1:0 +`define LM32_WPC_C_DISABLED 2'b00 +`define LM32_WPC_C_READ 2'b01 +`define LM32_WPC_C_WRITE 2'b10 +`define LM32_WPC_C_READ_WRITE 2'b11 + +// Exception IDs +`define LM32_EID_WIDTH 3 +`define LM32_EID_RNG (`LM32_EID_WIDTH-1):0 +`define LM32_EID_RESET 3'h0 +`define LM32_EID_BREAKPOINT 3'd1 +`define LM32_EID_INST_BUS_ERROR 3'h2 +`define LM32_EID_WATCHPOINT 3'd3 +`define LM32_EID_DATA_BUS_ERROR 3'h4 +`define LM32_EID_DIVIDE_BY_ZERO 3'h5 +`define LM32_EID_INTERRUPT 3'h6 +`define LM32_EID_SCALL 3'h7 + +// Pipeline result selection mux controls + +`define LM32_D_RESULT_SEL_0_RNG 0:0 +`define LM32_D_RESULT_SEL_0_REG_0 1'b0 +`define LM32_D_RESULT_SEL_0_NEXT_PC 1'b1 + +`define LM32_D_RESULT_SEL_1_RNG 1:0 +`define LM32_D_RESULT_SEL_1_ZERO 2'b00 +`define LM32_D_RESULT_SEL_1_REG_1 2'b01 +`define LM32_D_RESULT_SEL_1_IMMEDIATE 2'b10 + +`define LM32_USER_OPCODE_WIDTH 11 +`define LM32_USER_OPCODE_RNG (`LM32_USER_OPCODE_WIDTH-1):0 + +// Derive a macro to indicate if either of the caches are implemented +`ifdef CFG_ICACHE_ENABLED +`define LM32_CACHE_ENABLED +`else +`ifdef CFG_DCACHE_ENABLED +`define LM32_CACHE_ENABLED +`endif +`endif + +///////////////////////////////////////////////////// +// Interrupts +///////////////////////////////////////////////////// + +// Currently this is fixed to 32 and should not be changed +`define CFG_INTERRUPTS 32 +`define LM32_INTERRUPT_WIDTH `CFG_INTERRUPTS +`define LM32_INTERRUPT_RNG (`LM32_INTERRUPT_WIDTH-1):0 + +///////////////////////////////////////////////////// +// General +///////////////////////////////////////////////////// + +// Sub-word range types +`define LM32_BYTE_WIDTH 8 +`define LM32_BYTE_RNG 7:0 +`define LM32_HWORD_WIDTH 16 +`define LM32_HWORD_RNG 15:0 + +// Word sub-byte indicies +`define LM32_BYTE_0_RNG 7:0 +`define LM32_BYTE_1_RNG 15:8 +`define LM32_BYTE_2_RNG 23:16 +`define LM32_BYTE_3_RNG 31:24 + +// Word sub-halfword indices +`define LM32_HWORD_0_RNG 15:0 +`define LM32_HWORD_1_RNG 31:16 + +// Use a synchronous reset +`define CFG_RESET_SENSITIVITY + +// Wishbone defines +// Refer to Wishbone System-on-Chip Interconnection Architecture +// These should probably be moved to a Wishbone common file + +// Wishbone cycle types +`define LM32_CTYPE_WIDTH 3 +`define LM32_CTYPE_RNG (`LM32_CTYPE_WIDTH-1):0 +`define LM32_CTYPE_CLASSIC 3'b000 +`define LM32_CTYPE_CONSTANT 3'b001 +`define LM32_CTYPE_INCREMENTING 3'b010 +`define LM32_CTYPE_END 3'b111 + +// Wishbone burst types +`define LM32_BTYPE_WIDTH 2 +`define LM32_BTYPE_RNG (`LM32_BTYPE_WIDTH-1):0 +`define LM32_BTYPE_LINEAR 2'b00 +`define LM32_BTYPE_4_BEAT 2'b01 +`define LM32_BTYPE_8_BEAT 2'b10 +`define LM32_BTYPE_16_BEAT 2'b11 + +`endif diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_logic_op.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_logic_op.v new file mode 100644 index 000000000..af1b752be --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_logic_op.v @@ -0,0 +1,76 @@ +// ============================================================================= +// COPYRIGHT NOTICE +// Copyright 2006 (c) Lattice Semiconductor Corporation +// ALL RIGHTS RESERVED +// This confidential and proprietary software may be used only as authorised by +// a licensing agreement from Lattice Semiconductor Corporation. +// The entire notice above must be reproduced on all authorized copies and +// copies may only be made to the extent permitted by a licensing agreement from +// Lattice Semiconductor Corporation. +// +// Lattice Semiconductor Corporation TEL : 1-800-Lattice (USA and Canada) +// 5555 NE Moore Court 408-826-6000 (other locations) +// Hillsboro, OR 97124 web : http://www.latticesemi.com/ +// U.S.A email: techsupport@latticesemi.com +// =============================================================================/ +// FILE DETAILS +// Project : LatticeMico32 +// File : lm32_logic_op.v +// Title : Logic operations (and / or / not etc) +// Dependencies : lm32_include.v +// Version : 6.1.17 +// : Initial Release +// Version : 7.0SP2, 3.0 +// : No Change +// Version : 3.1 +// : No Change +// ============================================================================= + +`include "lm32_include.v" + +///////////////////////////////////////////////////// +// Module interface +///////////////////////////////////////////////////// + +module lm32_logic_op ( + // ----- Inputs ------- + logic_op_x, + operand_0_x, + operand_1_x, + // ----- Outputs ------- + logic_result_x + ); + +///////////////////////////////////////////////////// +// Inputs +///////////////////////////////////////////////////// + +input [`LM32_LOGIC_OP_RNG] logic_op_x; +input [`LM32_WORD_RNG] operand_0_x; +input [`LM32_WORD_RNG] operand_1_x; + +///////////////////////////////////////////////////// +// Outputs +///////////////////////////////////////////////////// + +output [`LM32_WORD_RNG] logic_result_x; +reg [`LM32_WORD_RNG] logic_result_x; + +///////////////////////////////////////////////////// +// Internal nets and registers +///////////////////////////////////////////////////// + +integer logic_idx; + +///////////////////////////////////////////////////// +// Combinational Logic +///////////////////////////////////////////////////// + +always @(*) +begin + for(logic_idx = 0; logic_idx < `LM32_WORD_WIDTH; logic_idx = logic_idx + 1) + logic_result_x[logic_idx] = logic_op_x[{operand_1_x[logic_idx], operand_0_x[logic_idx]}]; +end + +endmodule + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_ram.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_ram.vhd new file mode 100644 index 000000000..e39dbb999 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_ram.vhd @@ -0,0 +1,66 @@ +-- Work-alike to lm32_ram.v, but using generic_simple_dpram + +library ieee; +use ieee.std_logic_1164.all; + +library work; +use work.genram_pkg.all; + +entity lm32_ram is + generic( + data_width : natural := 1; + address_width : natural := 1); + port( + read_clk : in std_logic; + write_clk : in std_logic; + reset : in std_logic; + enable_read : in std_logic; + read_address : in std_logic_vector(address_width-1 downto 0); + enable_write : in std_logic; + write_address : in std_logic_vector(address_width-1 downto 0); + write_data : in std_logic_vector(data_width -1 downto 0); + write_enable : in std_logic; + read_data : out std_logic_vector(data_width -1 downto 0)); +end lm32_ram; + +architecture syn of lm32_ram is + + signal wea : std_logic; + signal reb : std_logic; + + -- Emulate read-enable using another bypass + signal old_data : std_logic_vector(data_width-1 downto 0); + signal new_data : std_logic_vector(data_width-1 downto 0); + signal data : std_logic_vector(data_width-1 downto 0); + +begin + + wea <= enable_write and write_enable; + ram : generic_simple_dpram + generic map( + g_data_width => data_width, + g_size => 2**address_width, + g_with_byte_enable => false, + g_addr_conflict_resolution => "write_first", + g_dual_clock => false) -- read_clk always = write_clk in LM32 + port map( + clka_i => read_clk, + wea_i => wea, + aa_i => write_address, + da_i => write_data, + clkb_i => write_clk, + ab_i => read_address, + qb_o => new_data); + + data <= old_data when reb='0' else new_data; + read_data <= data; + + main : process(read_clk) is + begin + if rising_edge(read_clk) then + old_data <= data; + reb <= enable_read; + end if; + end process; + +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_shifter.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_shifter.v new file mode 100644 index 000000000..a9f0892b9 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_shifter.v @@ -0,0 +1,138 @@ +// ============================================================================= +// COPYRIGHT NOTICE +// Copyright 2006 (c) Lattice Semiconductor Corporation +// ALL RIGHTS RESERVED +// This confidential and proprietary software may be used only as authorised by +// a licensing agreement from Lattice Semiconductor Corporation. +// The entire notice above must be reproduced on all authorized copies and +// copies may only be made to the extent permitted by a licensing agreement from +// Lattice Semiconductor Corporation. +// +// Lattice Semiconductor Corporation TEL : 1-800-Lattice (USA and Canada) +// 5555 NE Moore Court 408-826-6000 (other locations) +// Hillsboro, OR 97124 web : http://www.latticesemi.com/ +// U.S.A email: techsupport@latticesemi.com +// =============================================================================/ +// FILE DETAILS +// Project : LatticeMico32 +// File : lm32_shifter.v +// Title : Barrel shifter +// Dependencies : lm32_include.v +// Version : 6.1.17 +// : Initial Release +// Version : 7.0SP2, 3.0 +// : No Change +// Version : 3.1 +// : No Change +// ============================================================================= + +`include "lm32_include.v" + +///////////////////////////////////////////////////// +// Module interface +///////////////////////////////////////////////////// + +module lm32_shifter ( + // ----- Inputs ------- + clk_i, + rst_i, + stall_x, + direction_x, + sign_extend_x, + operand_0_x, + operand_1_x, + // ----- Outputs ------- + shifter_result_m + ); + +///////////////////////////////////////////////////// +// Inputs +///////////////////////////////////////////////////// + +input clk_i; // Clock +input rst_i; // Reset +input stall_x; // Stall instruction in X stage +input direction_x; // Direction to shift +input sign_extend_x; // Whether shift is arithmetic (1'b1) or logical (1'b0) +input [`LM32_WORD_RNG] operand_0_x; // Operand to shift +input [`LM32_WORD_RNG] operand_1_x; // Operand that specifies how many bits to shift by + +///////////////////////////////////////////////////// +// Outputs +///////////////////////////////////////////////////// + +output [`LM32_WORD_RNG] shifter_result_m; // Result of shift +wire [`LM32_WORD_RNG] shifter_result_m; + +///////////////////////////////////////////////////// +// Internal nets and registers +///////////////////////////////////////////////////// + +reg direction_m; +wire [`LM32_WORD_WIDTH*2-1:0] right_shift_result_x; +reg [`LM32_WORD_RNG] left_shift_result; +reg [`LM32_WORD_RNG] right_shift_result_m; +reg [`LM32_WORD_RNG] left_shift_operand; +wire [`LM32_WORD_RNG] right_shift_operand; +wire fill_value; +wire [`LM32_WORD_RNG] right_shift_in; + +integer shift_idx_0; +integer shift_idx_1; + +///////////////////////////////////////////////////// +// Combinational Logic +///////////////////////////////////////////////////// + +// Select operands - To perform a left shift, we reverse the bits and perform a right shift +always @(*) +begin + for (shift_idx_0 = 0; shift_idx_0 < `LM32_WORD_WIDTH; shift_idx_0 = shift_idx_0 + 1) + left_shift_operand[`LM32_WORD_WIDTH-1-shift_idx_0] = operand_0_x[shift_idx_0]; +end +assign right_shift_operand = direction_x == `LM32_SHIFT_OP_LEFT ? left_shift_operand : operand_0_x; + +// Determine fill value for right shift - Sign bit for arithmetic shift, or zero for logical shift +assign fill_value = (sign_extend_x == `TRUE) && (direction_x == `LM32_SHIFT_OP_RIGHT) + ? operand_0_x[`LM32_WORD_WIDTH-1] + : 1'b0; + +// Determine bits to shift in for right shift or rotate +assign right_shift_in = {`LM32_WORD_WIDTH{fill_value}}; + +// Determine the result of the shifter +assign right_shift_result_x = {right_shift_in, right_shift_operand} >> operand_1_x[`LM32_SHIFT_RNG]; + +// Reverse bits to get left shift result +always @(*) +begin + for (shift_idx_1 = 0; shift_idx_1 < `LM32_WORD_WIDTH; shift_idx_1 = shift_idx_1 + 1) + left_shift_result[`LM32_WORD_WIDTH-1-shift_idx_1] = right_shift_result_m[shift_idx_1]; +end + +// Select result +assign shifter_result_m = direction_m == `LM32_SHIFT_OP_LEFT ? left_shift_result : right_shift_result_m; + +///////////////////////////////////////////////////// +// Sequential Logic +///////////////////////////////////////////////////// + +// Perform right shift +always @(posedge clk_i `CFG_RESET_SENSITIVITY) +begin + if (rst_i == `TRUE) + begin + right_shift_result_m <= {`LM32_WORD_WIDTH{1'b0}}; + direction_m <= `FALSE; + end + else + begin + if (stall_x == `FALSE) + begin + right_shift_result_m <= right_shift_result_x[`LM32_WORD_RNG]; + direction_m <= direction_x; + end + end +end + +endmodule diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/sockit_owm.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/sockit_owm.v new file mode 100644 index 000000000..b7d0abba9 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/sockit_owm.v @@ -0,0 +1,432 @@ +////////////////////////////////////////////////////////////////////////////// +// // +// Minimalistic 1-wire (onewire) master with Avalon MM bus interface // +// // +// Copyright (C) 2010 Iztok Jeras // +// // +////////////////////////////////////////////////////////////////////////////// +// // +// This RTL is free hardware: you can redistribute it and/or modify // +// it under the terms of the GNU Lesser General Public License // +// as published by the Free Software Foundation, either // +// version 3 of the License, or (at your option) any later version. // +// // +// This RTL is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +// // +////////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////////// +// Modifications: +// 2016-08-24: by Jan Pospisil (j.pospisil@cern.ch) +// * added default values; typos +////////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////////// +// // +// The clock divider parameter is computed with the next formula: // +// // +// CDR_N = f_CLK * BTP_N - 1 (example: CDR_N = 1MHz * 5.0us - 1 = 5-1) // +// CDR_O = f_CLK * BTP_O - 1 (example: CDR_O = 1MHz * 1.0us - 1 = 1-1) // +// // +// If the dividing factor is not a round integer, than the timing of the // +// controller will be slightly off, and would support only a subset of // +// 1-wire devices with timing closer to the typical 30us slot. // +// // +// Base time periods BTP_N = "5.0" and BTP_O = "1.0" are optimized for // +// onewire timing. The default timing restricts the range of available // +// frequences to multiples of 1MHz. // +// // +// If even this restrictions are too strict use timing BTP_N = "6.0" and // +// BTP_O = "0.5", where the actual periods can be in the range: // +// 6.0us <= BTP_N <= 7.5us // +// 0.5us <= BTP_O <= 0.66us // +// // +// A third timing option is available for normal mode BTP_N = "7.5", this // +// option is optimized for logic size. // +// // +////////////////////////////////////////////////////////////////////////////// + +module sockit_owm #( + // enable implementation of optional functionality + parameter OVD_E = 1, // overdrive functionality is implemented by default + parameter CDR_E = 1, // clock divider register is implemented by default + // interface parameters + parameter BDW = 32, // bus data width + parameter OWN = 1, // number of 1-wire ports + // computed bus address port width +`ifdef __ICARUS__ + parameter BAW = (BDW==32) ? 1 : 2, +`else + parameter BAW = 1, // TODO, the above is correct, but does not work well with Altera SOPC Builder +`endif + // base time period + parameter BTP_N = "5.0", // normal mode (5.0us, options are "7.5", "5.0" and "6.0") + parameter BTP_O = "0.5", // overdrive mode (1.0us, options are "1.0", and "0.5") + // normal mode timing + parameter T_RSTH_N = (BTP_N == "7.5") ? 64 : (BTP_N == "5.0") ? 96 : 80, // reset high + parameter T_RSTL_N = (BTP_N == "7.5") ? 64 : (BTP_N == "5.0") ? 96 : 80, // reset low + parameter T_RSTP_N = (BTP_N == "7.5") ? 10 : (BTP_N == "5.0") ? 15 : 10, // reset presence pulse + parameter T_DAT0_N = (BTP_N == "7.5") ? 8 : (BTP_N == "5.0") ? 12 : 10, // bit 0 low + parameter T_DAT1_N = (BTP_N == "7.5") ? 1 : (BTP_N == "5.0") ? 1 : 1, // bit 1 low + parameter T_BITS_N = (BTP_N == "7.5") ? 2 : (BTP_N == "5.0") ? 3 : 2, // bit sample + parameter T_RCVR_N = (BTP_N == "7.5") ? 1 : (BTP_N == "5.0") ? 1 : 1, // recovery + parameter T_IDLE_N = (BTP_N == "7.5") ? 128 : (BTP_N == "5.0") ? 200 : 160, // idle timer + // overdrive mode timing + parameter T_RSTH_O = (BTP_O == "1.0") ? 48 : 96, // reset high + parameter T_RSTL_O = (BTP_O == "1.0") ? 48 : 96, // reset low + parameter T_RSTP_O = (BTP_O == "1.0") ? 10 : 15, // reset presence pulse + parameter T_DAT0_O = (BTP_O == "1.0") ? 6 : 12, // bit 0 low + parameter T_DAT1_O = (BTP_O == "1.0") ? 1 : 2, // bit 1 low + parameter T_BITS_O = (BTP_O == "1.0") ? 2 : 3, // bit sample + parameter T_RCVR_O = (BTP_O == "1.0") ? 2 : 4, // recovery + parameter T_IDLE_O = (BTP_O == "1.0") ? 96 : 192, // idle timer + // clock divider ratios (defaults are for a 1MHz clock) + parameter CDR_N = 5-1, // normal mode + parameter CDR_O = 1-1 // overdrive mode +)( + // system signals + input clk, + input rst, + // CPU bus interface + input bus_ren, // read enable + input bus_wen, // write enable + input [BAW-1:0] bus_adr, // address + input [BDW-1:0] bus_wdt, // write data + output [BDW-1:0] bus_rdt, // read data + output bus_irq, // interrupt request + // 1-wire interface + output [OWN-1:0] owr_p, // output power enable + output [OWN-1:0] owr_e, // output pull down enable + input [OWN-1:0] owr_i // input from bidirectional wire +); + +////////////////////////////////////////////////////////////////////////////// +// local parameters +////////////////////////////////////////////////////////////////////////////// + +function integer clogb2; +input [31:0] value; +begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; +end +endfunction + +// size of combined power and select registers +localparam PDW = (BDW==32) ? 24 : 8; + +// size of boudrate generator counter (divider for normal mode is largest) +localparam CDW = CDR_E ? ((BDW==32) ? 16 : 8) : clogb2(CDR_N); + +// size of port select signal +localparam SDW = clogb2(OWN); + +// size of cycle timing counter +localparam TDW = (T_RSTH_O+T_RSTL_O) > (T_RSTH_N+T_RSTL_N) + ? clogb2(T_RSTH_O+T_RSTL_O) : clogb2(T_RSTH_N+T_RSTL_N); + +////////////////////////////////////////////////////////////////////////////// +// local signals +////////////////////////////////////////////////////////////////////////////// + +// address dependent write enable +wire bus_ren_ctl_sts; +wire bus_wen_ctl_sts; +wire bus_wen_pwr_sel; +wire bus_wen_cdr_n; +wire bus_wen_cdr_o; + +// read data bus segments +wire [7:0] bus_rdt_ctl_sts; +wire [PDW-1:0] bus_rdt_pwr_sel; + +// clock divider +reg [CDW-1:0] div; +reg [CDW-1:0] cdr_n = CDR_N[CDW-1:0]; +reg [CDW-1:0] cdr_o = CDR_O[CDW-1:0]; +wire pls; + +// cycle control and status +reg owr_cyc; // cycle status +reg [TDW-1:0] cnt; // cycle counter + +// port select +//generate if (OWN>1) begin : sel_declaration +reg [SDW-1:0] owr_sel; +//end endgenerate + +// modified input data for overdrive +wire req_ovd; + +// onewire signals +reg [OWN-1:0] owr_pwr; // power +reg owr_ovd; // overdrive +reg owr_rst; // reset +reg owr_dat; // data bit +reg owr_smp; // sample bit + +reg owr_oen; // output enable +wire owr_iln; // input line + +// interrupt signals +reg irq_ena; // interrupt enable +reg irq_sts; // interrupt status + +// timing signals +wire [TDW-1:0] t_idl ; // idle cycle time +wire [TDW-1:0] t_rst ; // reset cycle time +wire [TDW-1:0] t_bit ; // data bit cycle time +wire [TDW-1:0] t_rstp; // reset presence pulse sampling time +wire [TDW-1:0] t_rsth; // reset release time +wire [TDW-1:0] t_dat0; // data bit 0 release time +wire [TDW-1:0] t_dat1; // data bit 1 release time +wire [TDW-1:0] t_bits; // data bit sampling time +wire [TDW-1:0] t_zero; // end of cycle time + +////////////////////////////////////////////////////////////////////////////// +// cycle timing +////////////////////////////////////////////////////////////////////////////// + +// idle time +assign t_idl = req_ovd ? T_IDLE_O[TDW-1:0] : T_IDLE_N[TDW-1:0]; +// reset cycle time (reset low + reset hight) +assign t_rst = req_ovd ? T_RSTL_O[TDW-1:0] + T_RSTH_O[TDW-1:0] : T_RSTL_N[TDW-1:0] + T_RSTH_N[TDW-1:0]; +// data bit cycle time (write 0 + recovery) +assign t_bit = req_ovd ? T_DAT0_O[TDW-1:0] + T_RCVR_O[TDW-1:0] : T_DAT0_N[TDW-1:0] + T_RCVR_N[TDW-1:0]; + +// reset presence pulse sampling time (reset high - reset presence) +assign t_rstp = owr_ovd ? T_RSTH_O[TDW-1:0] - T_RSTP_O[TDW-1:0] : T_RSTH_N[TDW-1:0] - T_RSTP_N[TDW-1:0]; +// reset release time (reset high) +assign t_rsth = owr_ovd ? T_RSTH_O[TDW-1:0] : T_RSTH_N[TDW-1:0]; + +// data bit 0 release time (write bit 0 - write bit 0 + recovery) +assign t_dat0 = owr_ovd ? T_DAT0_O[TDW-1:0] - T_DAT0_O[TDW-1:0] + T_RCVR_O[TDW-1:0] : T_DAT0_N[TDW-1:0] - T_DAT0_N[TDW-1:0] + T_RCVR_N[TDW-1:0]; +// data bit 1 release time (write bit 0 - write bit 1 + recovery) +assign t_dat1 = owr_ovd ? T_DAT0_O[TDW-1:0] - T_DAT1_O[TDW-1:0] + T_RCVR_O[TDW-1:0] : T_DAT0_N[TDW-1:0] - T_DAT1_N[TDW-1:0] + T_RCVR_N[TDW-1:0]; +// data bit sampling time (write bit 0 - write bit 1 + recovery) +assign t_bits = owr_ovd ? T_DAT0_O[TDW-1:0] - T_BITS_O[TDW-1:0] + T_RCVR_O[TDW-1:0] : T_DAT0_N[TDW-1:0] - T_BITS_N[TDW-1:0] + T_RCVR_N[TDW-1:0]; + +// end of cycle time +assign t_zero = 'd0; + +////////////////////////////////////////////////////////////////////////////// +// bus read +////////////////////////////////////////////////////////////////////////////// + +// bus segnemt - controll/status register +assign bus_rdt_ctl_sts = {irq_ena, irq_sts, 1'b0, owr_pwr[0], owr_cyc, owr_ovd, owr_rst, owr_dat}; + +// bus segnemt - power and select register +generate + if (BDW==32) begin + if (OWN>1) begin + assign bus_rdt_pwr_sel = {{16-OWN{1'b0}}, owr_pwr, 4'h0, {4-SDW{1'b0}}, owr_sel}; + end else begin + assign bus_rdt_pwr_sel = 24'h0000_00; + end + end else if (BDW==8) begin + if (OWN>1) begin + assign bus_rdt_pwr_sel = {{ 4-OWN{1'b0}}, owr_pwr, {4-SDW{1'b0}}, owr_sel}; + end else begin + assign bus_rdt_pwr_sel = 8'hxx; + end + end +endgenerate + +// bus read data +generate if (BDW==32) begin + assign bus_rdt = (bus_adr[0]==1'b0) ? {bus_rdt_pwr_sel, bus_rdt_ctl_sts} : (cdr_o << 16 | cdr_n); +end else if (BDW==8) begin + assign bus_rdt = (bus_adr[1]==1'b0) ? ((bus_adr[0]==1'b0) ? bus_rdt_ctl_sts + : bus_rdt_pwr_sel) + : ((bus_adr[0]==1'b0) ? cdr_n + : cdr_o ); +end endgenerate + +////////////////////////////////////////////////////////////////////////////// +// bus write +////////////////////////////////////////////////////////////////////////////// + +// combined write/read enable and address decoder +generate if (BDW==32) begin + assign bus_ren_ctl_sts = bus_ren & bus_adr[0] == 1'b0; + assign bus_wen_ctl_sts = bus_wen & bus_adr[0] == 1'b0; + assign bus_wen_pwr_sel = bus_wen & bus_adr[0] == 1'b0; + assign bus_wen_cdr_n = bus_wen & bus_adr[0] == 1'b1; + assign bus_wen_cdr_o = bus_wen & bus_adr[0] == 1'b1; +end else if (BDW==8) begin + assign bus_ren_ctl_sts = bus_ren & bus_adr[1:0] == 2'b00; + assign bus_wen_ctl_sts = bus_wen & bus_adr[1:0] == 2'b00; + assign bus_wen_pwr_sel = bus_wen & bus_adr[1:0] == 2'b01; + assign bus_wen_cdr_n = bus_wen & bus_adr[1:0] == 2'b10; + assign bus_wen_cdr_o = bus_wen & bus_adr[1:0] == 2'b11; +end endgenerate + +////////////////////////////////////////////////////////////////////////////// +// clock divider +////////////////////////////////////////////////////////////////////////////// + +// clock divider ratio registers +generate + if (CDR_E) begin + if (BDW==32) begin + always @ (posedge clk, posedge rst) + if (rst) begin + cdr_n <= CDR_N[CDW-1:0]; + cdr_o <= CDR_O[CDW-1:0]; + end else begin + if (bus_wen_cdr_n) cdr_n <= bus_wdt[15: 0]; + if (bus_wen_cdr_o) cdr_o <= bus_wdt[31:16]; + end + end else if (BDW==8) begin + always @ (posedge clk, posedge rst) + if (rst) begin + cdr_n <= CDR_N[CDW-1:0]; + cdr_o <= CDR_O[CDW-1:0]; + end else begin + if (bus_wen_cdr_n) cdr_n <= bus_wdt; + if (bus_wen_cdr_o) cdr_o <= bus_wdt; + end + end + end else begin + initial begin + cdr_n = CDR_N[CDW-1:0]; + cdr_o = CDR_O[CDW-1:0]; + end + end +endgenerate + +// clock divider +always @ (posedge clk, posedge rst) +if (rst) div <= {CDW{1'd0}}; +else begin + if (bus_wen) div <= {CDW{1'd0}}; + else div <= pls ? {CDW{1'd0}} : div + owr_cyc; +end + +// divided clock pulse +assign pls = (div == (owr_ovd ? cdr_o : cdr_n)); + +////////////////////////////////////////////////////////////////////////////// +// power and select register +////////////////////////////////////////////////////////////////////////////// + +// select and power register implementation +generate if (OWN>1) begin : sel_implementation + // port select + always @ (posedge clk, posedge rst) + if (rst) owr_sel <= {SDW{1'b0}}; + else if (bus_wen_pwr_sel) owr_sel <= bus_wdt[(BDW==32 ? 8 : 0)+:SDW]; + + // power delivery + always @ (posedge clk, posedge rst) + if (rst) owr_pwr <= {OWN{1'b0}}; + else if (bus_wen_pwr_sel) owr_pwr <= bus_wdt[(BDW==32 ? 16 : 4)+:OWN]; +end else begin + // port select + initial owr_sel <= 'd0; + // power delivery + always @ (posedge clk, posedge rst) + if (rst) owr_pwr <= 1'b0; + else if (bus_wen_ctl_sts) owr_pwr <= bus_wdt[4]; +end endgenerate + +////////////////////////////////////////////////////////////////////////////// +// interrupt logic +////////////////////////////////////////////////////////////////////////////// + +// bus interrupt +assign bus_irq = irq_ena & irq_sts; + +// interrupt enable +always @ (posedge clk, posedge rst) +if (rst) irq_ena <= 1'b0; +else if (bus_wen_ctl_sts) irq_ena <= bus_wdt[7]; + +// transmit status (active after onewire cycle ends) +always @ (posedge clk, posedge rst) +if (rst) irq_sts <= 1'b0; +else begin + if (bus_wen_ctl_sts) irq_sts <= 1'b0; + else if (pls & (cnt == t_zero)) irq_sts <= 1'b1; + else if (bus_ren_ctl_sts) irq_sts <= 1'b0; +end + +////////////////////////////////////////////////////////////////////////////// +// onewire state machine +////////////////////////////////////////////////////////////////////////////// + +assign req_ovd = OVD_E ? bus_wen_ctl_sts & bus_wdt[2] : 1'b0; + +// overdrive +always @ (posedge clk, posedge rst) +if (rst) owr_ovd <= 1'b0; +else if (bus_wen_ctl_sts) owr_ovd <= req_ovd; + +// reset +always @ (posedge clk, posedge rst) +if (rst) owr_rst <= 1'b0; +else if (bus_wen_ctl_sts) owr_rst <= bus_wdt[1]; + +// transmit data, reset, overdrive +always @ (posedge clk, posedge rst) +if (rst) owr_dat <= 1'b0; +else begin + if (bus_wen_ctl_sts) owr_dat <= bus_wdt[0]; + else if (pls & (cnt == t_zero)) owr_dat <= owr_smp; +end + +// onewire cycle status +always @ (posedge clk, posedge rst) +if (rst) owr_cyc <= 1'b0; +else begin + if (bus_wen_ctl_sts) owr_cyc <= bus_wdt[3] & ~&bus_wdt[2:0]; + else if (pls & (cnt == t_zero)) owr_cyc <= 1'b0; +end + +// state counter (initial value depends whether the cycle is reset or data) +always @ (posedge clk, posedge rst) +if (rst) cnt <= 0; +else begin + if (bus_wen_ctl_sts) cnt <= (&bus_wdt[1:0] ? t_idl : bus_wdt[1] ? t_rst : t_bit) - 1'd1; + else if (pls) cnt <= cnt - 1'd1; +end + +// receive data (sampling point depends whether the cycle is reset or data) +always @ (posedge clk) +if (pls) begin + if ( owr_rst & (cnt == t_rstp)) owr_smp <= owr_iln; // presence detect + else if (~owr_rst & (cnt == t_bits)) owr_smp <= owr_iln; // read data bit +end + +// output register (switch point depends whether the cycle is reset or data) +always @ (posedge clk, posedge rst) +if (rst) owr_oen <= 1'b0; +else begin + if (bus_wen_ctl_sts) owr_oen <= ~&bus_wdt[1:0]; + else if (pls) begin + if (owr_rst & (cnt == t_rsth)) owr_oen <= 1'b0; // reset + else if (owr_dat & (cnt == t_dat1)) owr_oen <= 1'b0; // write 1, read + else if ( (cnt == t_dat0)) owr_oen <= 1'b0; // write 0 + end +end + +////////////////////////////////////////////////////////////////////////////// +// IO +////////////////////////////////////////////////////////////////////////////// + +// only one 1-wire line can be accessed at the same time +assign owr_e = owr_oen << owr_sel; +// all 1-wire lines can be powered independently +assign owr_p = owr_pwr; + +// 1-wire line status read multiplexer +assign owr_iln = owr_i [owr_sel]; + +endmodule diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/wb_onewire_master.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/wb_onewire_master.vhd new file mode 100644 index 000000000..b1f5d60b7 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/wb_onewire_master.vhd @@ -0,0 +1,184 @@ +------------------------------------------------------------------------------ +-- Title : Wishbone 1-Wire Master +-- Project : General Cores Library (gencores) +------------------------------------------------------------------------------ +-- Author : Tomasz Wlostowski +-- Company : CERN BE-Co-HT +-- Created : 2010-05-18 +-- Last update: 2012-02-23 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Wishbone Dallas/Maxim Semiconductor 1-Wire master. +------------------------------------------------------------------------------- +-- +-- Based on sockit_owm project Copyright (c) 2010 Iztok Jeras. +-- http://opencores.org/project,sockit_owm +-- +-- sockit_owm RTL is licensed under LGPL 3. + +-- wb_onewire_master.vhd copyright (c) 2011 CERN +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2011-09-18 1.0 twlostow Created +-- 2016-08-24 1.1 jpospisi propagated CDR_N/O generics up the +-- hierarchy; added assignments to (new) +-- unspecified WB signals +------------------------------------------------------------------------------- + +library ieee; +use ieee.STD_LOGIC_1164.all; + +use work.gencores_pkg.all; +use work.wishbone_pkg.all; + +entity wb_onewire_master is + + generic( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_num_ports : integer := 1; + g_ow_btp_normal : string := "5.0"; + g_ow_btp_overdrive : string := "1.0"; + g_CDR_N : integer := 4; -- normal mode + g_CDR_O : integer := 0 -- overdrive mode + ); + + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_adr_i : in std_logic_vector(2 downto 0); + wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_ack_o : out std_logic; + wb_int_o : out std_logic; + wb_stall_o : out std_logic; + + owr_pwren_o : out std_logic_vector(g_num_ports -1 downto 0); + owr_en_o : out std_logic_vector(g_num_ports -1 downto 0); + owr_i : in std_logic_vector(g_num_ports -1 downto 0) + ); + +end wb_onewire_master; + + +architecture rtl of wb_onewire_master is + + component sockit_owm + generic( + BTP_N : string; + BTP_O : string; + OWN : integer; + CDR_N : integer; + CDR_O : integer); + + port( + clk : in std_logic; + rst : in std_logic; + bus_ren : in std_logic; + bus_wen : in std_logic; + bus_adr : in std_logic_vector(0 downto 0); + bus_wdt : in std_logic_vector(31 downto 0); + bus_rdt : out std_logic_vector(31 downto 0); + bus_irq : out std_logic; + owr_p : out std_logic_vector(OWN-1 downto 0); + owr_e : out std_logic_vector(OWN-1 downto 0); + owr_i : in std_logic_vector(OWN-1 downto 0) + ); + end component; + + signal bus_wen : std_logic; + signal bus_ren : std_logic; + signal rst : std_logic; + + signal slave_in : t_wishbone_slave_in; + signal slave_out : t_wishbone_slave_out; + + signal adp_out : t_wishbone_master_out; + signal adp_in : t_wishbone_master_in; + + signal rdat_int : std_logic_vector(31 downto 0); + +begin -- rtl + + slave_in.adr(2 downto 0) <= wb_adr_i; + slave_in.adr(c_wishbone_address_width-1 downto 3) <= (others => '0'); + slave_in.cyc <= wb_cyc_i; + slave_in.stb <= wb_stb_i; + slave_in.sel <= wb_sel_i; + slave_in.dat <= wb_dat_i; + slave_in.we <= wb_we_i; + + wb_int_o <= slave_out.int; + wb_dat_o <= slave_out.dat; + wb_stall_o <= slave_out.stall; + wb_ack_o <= slave_out.ack; + + + U_Slave_adapter : wb_slave_adapter + generic map ( + g_master_use_struct => true, + g_master_mode => CLASSIC, + g_master_granularity => WORD, + g_slave_use_struct => true, + g_slave_mode => g_interface_mode, + g_slave_granularity => g_address_granularity) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + + slave_i => slave_in, + slave_o => slave_out, + master_i => adp_in, + master_o => adp_out); + + + bus_wen <= adp_out.cyc and adp_out.stb and adp_out.we and not adp_in.ack; + bus_ren <= adp_out.cyc and adp_out.stb and not (adp_out.we or adp_in.ack); + + process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + adp_in.ack <= '0'; + else + adp_in.ack <= adp_out.stb and adp_out.cyc and not adp_in.ack; + adp_in.dat <= rdat_int; + end if; + end if; + end process; + + rst <= not rst_n_i; + + Wrapped_1wire : sockit_owm + generic map ( + BTP_N => g_ow_btp_normal, + BTP_O => g_ow_btp_overdrive, + OWN => g_num_ports, + CDR_N => g_CDR_N, + CDR_O => g_CDR_O) + port map ( + clk => clk_sys_i, + rst => rst, + bus_ren => bus_ren, + bus_wen => bus_wen, + bus_adr => adp_out.adr(0 downto 0), + bus_wdt => adp_out.dat, + bus_rdt => rdat_int, + bus_irq => adp_in.int, + owr_p => owr_pwren_o, + owr_e => owr_en_o, + owr_i => owr_i); + + adp_in.err <= '0'; + adp_in.rty <= '0'; + adp_in.stall <= '0'; + +end rtl; + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/xwb_onewire_master.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/xwb_onewire_master.vhd new file mode 100644 index 000000000..3920efd20 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/xwb_onewire_master.vhd @@ -0,0 +1,105 @@ +-------------------------------------------------------------------------------- +-- Modifications: +-- 2016-08-24: by Jan Pospisil (j.pospisil@cern.ch) +-- * propagated CDR_N/O generics up the hierarchy; added assignments +-- to (new) unspecified WB signals +-------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +use work.wishbone_pkg.all; + +entity xwb_onewire_master is + generic( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_num_ports : integer := 1; + g_ow_btp_normal : string := "5.0"; + g_ow_btp_overdrive : string := "1.0"; + g_CDR_N : integer := 4; -- normal mode + g_CDR_O : integer := 0 -- overdrive mode + ); + + port( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + -- Wishbone + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + desc_o : out t_wishbone_device_descriptor; + + owr_pwren_o : out std_logic_vector(g_num_ports -1 downto 0); + owr_en_o : out std_logic_vector(g_num_ports -1 downto 0); + owr_i : in std_logic_vector(g_num_ports -1 downto 0) + + ); + +end xwb_onewire_master; + +architecture rtl of xwb_onewire_master is + + component wb_onewire_master + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_num_ports : integer; + g_ow_btp_normal : string; + g_ow_btp_overdrive : string; + g_CDR_N : integer; + g_CDR_O : integer); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_adr_i : in std_logic_vector(2 downto 0); + wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_ack_o : out std_logic; + wb_int_o : out std_logic; + wb_stall_o : out std_logic; + + owr_pwren_o : out std_logic_vector(g_num_ports -1 downto 0); + owr_en_o : out std_logic_vector(g_num_ports -1 downto 0); + owr_i : in std_logic_vector(g_num_ports -1 downto 0)); + end component; + +begin -- rtl + + U_Wrapped_1W : wb_onewire_master + generic map ( + g_interface_mode => g_interface_mode, + g_address_granularity => g_address_granularity, + g_num_ports => g_num_ports, + g_ow_btp_normal => g_ow_btp_normal, + g_ow_btp_overdrive => g_ow_btp_overdrive, + g_CDR_N => g_CDR_N, + g_CDR_O => g_CDR_O) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + wb_cyc_i => slave_i.cyc, + wb_sel_i => slave_i.sel, + wb_stb_i => slave_i.stb, + wb_we_i => slave_i.we, + wb_adr_i => slave_i.adr(2 downto 0), + wb_dat_i => slave_i.dat, + wb_dat_o => slave_o.dat, + wb_ack_o => slave_o.ack, + wb_int_o => slave_o.int, + wb_stall_o => slave_o.stall, + owr_pwren_o => owr_pwren_o, + owr_en_o => owr_en_o, + owr_i => owr_i); + + slave_o.err <= '0'; + slave_o.rty <= '0'; + + desc_o <= (others => '0'); + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_slave_adapter/wb_slave_adapter.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_slave_adapter/wb_slave_adapter.vhd new file mode 100644 index 000000000..193fc3dc3 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_slave_adapter/wb_slave_adapter.vhd @@ -0,0 +1,232 @@ +------------------------------------------------------------------------------- +-- Title : Wishbone Slave Adapter +-- Project : General Cores +------------------------------------------------------------------------------- +-- File : wb_slave_adapter.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN +-- Platform : FPGA-generics +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- Description: +-- +-- universal "adapter" +-- pipelined <> classic +-- word-aligned/byte-aligned address +------------------------------------------------------------------------------- +-- Copyright (c) 2011-2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.wishbone_pkg.all; + +entity wb_slave_adapter is + + generic ( + g_master_use_struct : boolean; + g_master_mode : t_wishbone_interface_mode; + g_master_granularity : t_wishbone_address_granularity; + g_slave_use_struct : boolean; + g_slave_mode : t_wishbone_interface_mode; + g_slave_granularity : t_wishbone_address_granularity + ); + + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + +-- slave port (i.e. wb_slave_adapter is slave) + sl_adr_i : in std_logic_vector(c_wishbone_address_width-1 downto 0); + sl_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0); + sl_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0); + sl_cyc_i : in std_logic; + sl_stb_i : in std_logic; + sl_we_i : in std_logic; + + + sl_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + sl_err_o : out std_logic; + sl_rty_o : out std_logic; + sl_ack_o : out std_logic; + sl_stall_o : out std_logic; + sl_int_o : out std_logic; + + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + +-- master port (i.e. wb_slave_adapter is master) + ma_adr_o : out std_logic_vector(c_wishbone_address_width-1 downto 0); + ma_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + ma_sel_o : out std_logic_vector(c_wishbone_data_width/8-1 downto 0); + ma_cyc_o : out std_logic; + ma_stb_o : out std_logic; + ma_we_o : out std_logic; + + ma_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0); + ma_err_i : in std_logic; + ma_rty_i : in std_logic; + ma_ack_i : in std_logic; + ma_stall_i : in std_logic; + ma_int_i : in std_logic; + + master_i : in t_wishbone_master_in; + master_o : out t_wishbone_master_out + ); +end wb_slave_adapter; + +architecture rtl of wb_slave_adapter is + + function f_num_byte_address_bits + return integer is + begin + case c_wishbone_data_width is + when 8 => return 0; + when 16 => return 1; + when 32 => return 2; + when 64 => return 3; + when others => + report "wb_slave_adapter: invalid c_wishbone_data_width (we support 8, 16, 32 and 64)" severity failure; + end case; + return 0; + end f_num_byte_address_bits; + + function f_zeros(size : integer) + return std_logic_vector is + begin + return std_logic_vector(to_unsigned(0, size)); + end f_zeros; + + type t_fsm_state is (IDLE, WAIT4ACK); + + signal fsm_state : t_fsm_state := IDLE; + + signal master_in : t_wishbone_master_in; + signal master_out : t_wishbone_master_out; + signal slave_in : t_wishbone_slave_in; + signal slave_out : t_wishbone_slave_out; + signal stored_we : std_logic; + +begin -- rtl + + gen_slave_use_struct : if (g_slave_use_struct) generate + slave_in <= slave_i; + end generate gen_slave_use_struct; + + gen_slave_use_slv : if (not g_slave_use_struct) generate + slave_in.cyc <= sl_cyc_i; + slave_in.stb <= sl_stb_i; + slave_in.we <= sl_we_i; + slave_in.dat <= sl_dat_i; + slave_in.sel <= sl_sel_i; + slave_in.adr <= sl_adr_i; + end generate gen_slave_use_slv; + + slave_o <= slave_out; + sl_ack_o <= slave_out.ack; + sl_rty_o <= slave_out.rty; + sl_err_o <= slave_out.err; + sl_stall_o <= slave_out.stall; + sl_dat_o <= slave_out.dat; + sl_int_o <= slave_out.int; + + + gen_master_use_struct : if (g_master_use_struct) generate + master_in <= master_i; + end generate gen_master_use_struct; + + gen_master_use_slv : if (not g_master_use_struct) generate + master_in <= ( + ack => ma_ack_i, + rty => ma_rty_i, + err => ma_err_i, + dat => ma_dat_i, + stall => ma_stall_i, + int => ma_int_i); + end generate gen_master_use_slv; + + master_o <= master_out; + ma_adr_o <= master_out.adr; + ma_dat_o <= master_out.dat; + ma_sel_o <= master_out.sel; + ma_cyc_o <= master_out.cyc; + ma_stb_o <= master_out.stb; + ma_we_o <= master_out.we; + + p_gen_address : process(slave_in, master_out) + begin + if(g_master_granularity = g_slave_granularity) then + master_out.adr <= slave_in.adr; + elsif(g_master_granularity = BYTE) then -- byte->word + master_out.adr <= slave_in.adr(c_wishbone_address_width-f_num_byte_address_bits-1 downto 0) + & f_zeros(f_num_byte_address_bits); + else + master_out.adr <= f_zeros(f_num_byte_address_bits) + & slave_in.adr(c_wishbone_address_width-1 downto f_num_byte_address_bits); + end if; + end process; + + P2C : if (g_slave_mode = PIPELINED and g_master_mode = CLASSIC) generate + master_out.stb <= slave_in.stb; + slave_out.stall <= not master_in.ack; + end generate; + + C2P : if (g_slave_mode = CLASSIC and g_master_mode = PIPELINED) generate + master_out.stb <= slave_in.stb when fsm_state=IDLE else '0'; + slave_out.stall <= '0'; -- classic will ignore this anyway + + state_machine : process(clk_sys_i) is + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + fsm_state <= IDLE; + else + case fsm_state is + when IDLE => + if slave_in.stb ='1' and slave_in.cyc = '1' and master_in.stall='0' and master_in.ack='0' then + fsm_state <= WAIT4ACK; + end if; + when WAIT4ACK => + if (slave_in.stb = '0' and slave_in.cyc = '0') or master_in.ack='1' or master_in.err='1' then + fsm_state <= IDLE; + end if; + end case; + end if; + end if; + end process; + end generate; + + X2X : if (g_slave_mode = g_master_mode) generate + master_out.stb <= slave_in.stb; + slave_out.stall <= master_in.stall; + end generate; + + master_out.dat <= slave_in.dat; + master_out.cyc <= slave_in.cyc; + master_out.sel <= slave_in.sel; + master_out.we <= slave_in.we; + + slave_out.ack <= master_in.ack; + slave_out.err <= master_in.err; + slave_out.rty <= master_in.rty; + slave_out.dat <= master_in.dat; + slave_out.int <= master_in.int; +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_spi/spi_defines.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_spi/spi_defines.v new file mode 100644 index 000000000..f9afa0f47 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_spi/spi_defines.v @@ -0,0 +1,167 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// spi_define.v //// +//// //// +//// This file is part of the SPI IP core project //// +//// http://www.opencores.org/projects/spi/ //// +//// //// +//// Author(s): //// +//// - Simon Srot (simons@opencores.org) //// +//// //// +//// All additional information is avaliable in the Readme.txt //// +//// file. //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2002 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////// +// +// Modified to use parameters in spi_top instead of constants in this +// file for divider length, max char length and number of slaves, +// G.Daniluk, CERN 2013 +// +////////////////////////////////////////////////////////////////////// + +// +// Number of bits used for devider register. If used in system with +// low frequency of system clock this can be reduced. +// Use SPI_DIVIDER_LEN for fine tuning theexact number. +// +//`define SPI_DIVIDER_LEN_8 +//`define SPI_DIVIDER_LEN_16 +//`define SPI_DIVIDER_LEN_24 +//`define SPI_DIVIDER_LEN_32 +// +//`ifdef SPI_DIVIDER_LEN_8 +// `define SPI_DIVIDER_LEN 8 // Can be set from 1 to 8 +//`endif +//`ifdef SPI_DIVIDER_LEN_16 +// `define SPI_DIVIDER_LEN 16 // Can be set from 9 to 16 +//`endif +//`ifdef SPI_DIVIDER_LEN_24 +// `define SPI_DIVIDER_LEN 24 // Can be set from 17 to 24 +//`endif +//`ifdef SPI_DIVIDER_LEN_32 +// `define SPI_DIVIDER_LEN 32 // Can be set from 25 to 32 +//`endif + +// +// Maximum nuber of bits that can be send/received at once. +// Use SPI_MAX_CHAR for fine tuning the exact number, when using +// SPI_MAX_CHAR_32, SPI_MAX_CHAR_24, SPI_MAX_CHAR_16, SPI_MAX_CHAR_8. +// +//`define SPI_MAX_CHAR_128 +//`define SPI_MAX_CHAR_64 +//`define SPI_MAX_CHAR_32 +//`define SPI_MAX_CHAR_24 +//`define SPI_MAX_CHAR_16 +//`define SPI_MAX_CHAR_8 +// +//`ifdef SPI_MAX_CHAR_128 +// `define SPI_MAX_CHAR 128 // Can only be set to 128 +// `define SPI_CHAR_LEN_BITS 7 +//`endif +//`ifdef SPI_MAX_CHAR_64 +// `define SPI_MAX_CHAR 64 // Can only be set to 64 +// `define SPI_CHAR_LEN_BITS 6 +//`endif +//`ifdef SPI_MAX_CHAR_32 +// `define SPI_MAX_CHAR 32 // Can be set from 25 to 32 +// `define SPI_CHAR_LEN_BITS 5 +//`endif +//`ifdef SPI_MAX_CHAR_24 +// `define SPI_MAX_CHAR 24 // Can be set from 17 to 24 +// `define SPI_CHAR_LEN_BITS 5 +//`endif +//`ifdef SPI_MAX_CHAR_16 +// `define SPI_MAX_CHAR 16 // Can be set from 9 to 16 +// `define SPI_CHAR_LEN_BITS 4 +//`endif +//`ifdef SPI_MAX_CHAR_8 +// `define SPI_MAX_CHAR 8 // Can be set from 1 to 8 +// `define SPI_CHAR_LEN_BITS 3 +//`endif + +// +// Number of device select signals. Use SPI_SS_NB for fine tuning the +// exact number. +// +//`define SPI_SS_NB_8 +//`define SPI_SS_NB_16 +//`define SPI_SS_NB_24 +//`define SPI_SS_NB_32 +// +//`ifdef SPI_SS_NB_8 +// `define SPI_SS_NB 8 // Can be set from 1 to 8 +//`endif +//`ifdef SPI_SS_NB_16 +// `define SPI_SS_NB 16 // Can be set from 9 to 16 +//`endif +//`ifdef SPI_SS_NB_24 +// `define SPI_SS_NB 24 // Can be set from 17 to 24 +//`endif +//`ifdef SPI_SS_NB_32 +// `define SPI_SS_NB 32 // Can be set from 25 to 32 +//`endif + +// +// Bits of WISHBONE address used for partial decoding of SPI registers. +// +`define SPI_OFS_BITS 4:2 + +// +// Register offset +// +`define SPI_RX_0 0 +`define SPI_RX_1 1 +`define SPI_RX_2 2 +`define SPI_RX_3 3 +`define SPI_TX_0 0 +`define SPI_TX_1 1 +`define SPI_TX_2 2 +`define SPI_TX_3 3 +`define SPI_CTRL 4 +`define SPI_DEVIDE 5 +`define SPI_SS 6 + +// +// Number of bits in ctrl register +// +`define SPI_CTRL_BIT_NB 14 + +// +// Control register bit position +// +`define SPI_CTRL_ASS 13 +`define SPI_CTRL_IE 12 +`define SPI_CTRL_LSB 11 +`define SPI_CTRL_TX_NEGEDGE 10 +`define SPI_CTRL_RX_NEGEDGE 9 +`define SPI_CTRL_GO 8 +`define SPI_CTRL_RES_1 7 +`define SPI_CTRL_CHAR_LEN 6:0 + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_spi/timescale.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_spi/timescale.v new file mode 100644 index 000000000..60d4ecbd1 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_spi/timescale.v @@ -0,0 +1,2 @@ +`timescale 1ns / 10ps + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_pkg.vhd new file mode 100644 index 000000000..c2bb19ea4 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_pkg.vhd @@ -0,0 +1,99 @@ +--------------------------------------------------------------------------------------- +-- Title : Wishbone slave core for Simple Wishbone UART +--------------------------------------------------------------------------------------- +-- File : simple_uart_pkg.vhd +-- Author : auto-generated by wbgen2 from simple_uart_wb.wb +-- Created : Tue Aug 15 10:16:30 2017 +-- Standard : VHDL'87 +--------------------------------------------------------------------------------------- +-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE simple_uart_wb.wb +-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY! +--------------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +package uart_wbgen2_pkg is + + + -- Input registers (user design -> WB slave) + + type t_uart_in_registers is record + sr_tx_busy_i : std_logic; + sr_rx_rdy_i : std_logic; + rdr_rx_data_i : std_logic_vector(7 downto 0); + host_tdr_rdy_i : std_logic; + host_rdr_data_i : std_logic_vector(7 downto 0); + host_rdr_rdy_i : std_logic; + host_rdr_count_i : std_logic_vector(15 downto 0); + end record; + + constant c_uart_in_registers_init_value: t_uart_in_registers := ( + sr_tx_busy_i => '0', + sr_rx_rdy_i => '0', + rdr_rx_data_i => (others => '0'), + host_tdr_rdy_i => '0', + host_rdr_data_i => (others => '0'), + host_rdr_rdy_i => '0', + host_rdr_count_i => (others => '0') + ); + + -- Output registers (WB slave -> user design) + + type t_uart_out_registers is record + bcr_o : std_logic_vector(31 downto 0); + bcr_wr_o : std_logic; + tdr_tx_data_o : std_logic_vector(7 downto 0); + tdr_tx_data_wr_o : std_logic; + host_tdr_data_o : std_logic_vector(7 downto 0); + host_tdr_data_wr_o : std_logic; + end record; + + constant c_uart_out_registers_init_value: t_uart_out_registers := ( + bcr_o => (others => '0'), + bcr_wr_o => '0', + tdr_tx_data_o => (others => '0'), + tdr_tx_data_wr_o => '0', + host_tdr_data_o => (others => '0'), + host_tdr_data_wr_o => '0' + ); + function "or" (left, right: t_uart_in_registers) return t_uart_in_registers; + function f_x_to_zero (x:std_logic) return std_logic; + function f_x_to_zero (x:std_logic_vector) return std_logic_vector; +end package; + +package body uart_wbgen2_pkg is +function f_x_to_zero (x:std_logic) return std_logic is +begin +if x = '1' then +return '1'; +else +return '0'; +end if; +end function; +function f_x_to_zero (x:std_logic_vector) return std_logic_vector is +variable tmp: std_logic_vector(x'length-1 downto 0); +begin +for i in 0 to x'length-1 loop +if x(i) = '1' then +tmp(i):= '1'; +else +tmp(i):= '0'; +end if; +end loop; +return tmp; +end function; +function "or" (left, right: t_uart_in_registers) return t_uart_in_registers is +variable tmp: t_uart_in_registers; +begin +tmp.sr_tx_busy_i := f_x_to_zero(left.sr_tx_busy_i) or f_x_to_zero(right.sr_tx_busy_i); +tmp.sr_rx_rdy_i := f_x_to_zero(left.sr_rx_rdy_i) or f_x_to_zero(right.sr_rx_rdy_i); +tmp.rdr_rx_data_i := f_x_to_zero(left.rdr_rx_data_i) or f_x_to_zero(right.rdr_rx_data_i); +tmp.host_tdr_rdy_i := f_x_to_zero(left.host_tdr_rdy_i) or f_x_to_zero(right.host_tdr_rdy_i); +tmp.host_rdr_data_i := f_x_to_zero(left.host_rdr_data_i) or f_x_to_zero(right.host_rdr_data_i); +tmp.host_rdr_rdy_i := f_x_to_zero(left.host_rdr_rdy_i) or f_x_to_zero(right.host_rdr_rdy_i); +tmp.host_rdr_count_i := f_x_to_zero(left.host_rdr_count_i) or f_x_to_zero(right.host_rdr_count_i); +return tmp; +end function; +end package body; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_wb.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_wb.vhd new file mode 100644 index 000000000..62d09a5c1 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_wb.vhd @@ -0,0 +1,315 @@ +--------------------------------------------------------------------------------------- +-- Title : Wishbone slave core for Simple Wishbone UART +--------------------------------------------------------------------------------------- +-- File : simple_uart_wb.vhd +-- Author : auto-generated by wbgen2 from simple_uart_wb.wb +-- Created : Tue Aug 15 10:16:30 2017 +-- Standard : VHDL'87 +--------------------------------------------------------------------------------------- +-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE simple_uart_wb.wb +-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY! +--------------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.uart_wbgen2_pkg.all; + + +entity simple_uart_wb is + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(2 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + rdr_rack_o : out std_logic; + host_rack_o : out std_logic; + regs_i : in t_uart_in_registers; + regs_o : out t_uart_out_registers + ); +end simple_uart_wb; + +architecture syn of simple_uart_wb is + +signal ack_sreg : std_logic_vector(9 downto 0); +signal rddata_reg : std_logic_vector(31 downto 0); +signal wrdata_reg : std_logic_vector(31 downto 0); +signal rwaddr_reg : std_logic_vector(2 downto 0); +signal ack_in_progress : std_logic ; + +begin +-- Some internal signals assignments + wrdata_reg <= wb_dat_i; +-- +-- Main register bank access process. + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + ack_sreg <= "0000000000"; + ack_in_progress <= '0'; + rddata_reg <= "00000000000000000000000000000000"; + regs_o.bcr_wr_o <= '0'; + regs_o.tdr_tx_data_wr_o <= '0'; + rdr_rack_o <= '0'; + regs_o.host_tdr_data_wr_o <= '0'; + host_rack_o <= '0'; + elsif rising_edge(clk_sys_i) then +-- advance the ACK generator shift register + ack_sreg(8 downto 0) <= ack_sreg(9 downto 1); + ack_sreg(9) <= '0'; + if (ack_in_progress = '1') then + if (ack_sreg(0) = '1') then + regs_o.bcr_wr_o <= '0'; + regs_o.tdr_tx_data_wr_o <= '0'; + rdr_rack_o <= '0'; + regs_o.host_tdr_data_wr_o <= '0'; + host_rack_o <= '0'; + ack_in_progress <= '0'; + else + regs_o.bcr_wr_o <= '0'; + regs_o.tdr_tx_data_wr_o <= '0'; + regs_o.host_tdr_data_wr_o <= '0'; + end if; + else + if ((wb_cyc_i = '1') and (wb_stb_i = '1')) then + case rwaddr_reg(2 downto 0) is + when "000" => + if (wb_we_i = '1') then + end if; + rddata_reg(0) <= regs_i.sr_tx_busy_i; + rddata_reg(1) <= regs_i.sr_rx_rdy_i; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "001" => + if (wb_we_i = '1') then + regs_o.bcr_wr_o <= '1'; + end if; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "010" => + if (wb_we_i = '1') then + regs_o.tdr_tx_data_wr_o <= '1'; + end if; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "011" => + if (wb_we_i = '1') then + end if; + rddata_reg(7 downto 0) <= regs_i.rdr_rx_data_i; + rdr_rack_o <= '1'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "100" => + if (wb_we_i = '1') then + regs_o.host_tdr_data_wr_o <= '1'; + end if; + rddata_reg(8) <= regs_i.host_tdr_rdy_i; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "101" => + if (wb_we_i = '1') then + end if; + rddata_reg(7 downto 0) <= regs_i.host_rdr_data_i; + host_rack_o <= '1'; + rddata_reg(8) <= regs_i.host_rdr_rdy_i; + rddata_reg(24 downto 9) <= regs_i.host_rdr_count_i; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when others => +-- prevent the slave from hanging the bus on invalid address + ack_in_progress <= '1'; + ack_sreg(0) <= '1'; + end case; + end if; + end if; + end if; + end process; + + +-- Drive the data output bus + wb_dat_o <= rddata_reg; +-- TX busy +-- RX ready +-- Baudrate divider setting +-- pass-through field: Baudrate divider setting in register: Baudrate control register + regs_o.bcr_o <= wrdata_reg(31 downto 0); +-- Transmit data +-- pass-through field: Transmit data in register: Transmit data regsiter + regs_o.tdr_tx_data_o <= wrdata_reg(7 downto 0); +-- Received data +-- TX Data +-- pass-through field: TX Data in register: Host VUART Tx register + regs_o.host_tdr_data_o <= wrdata_reg(7 downto 0); +-- TX Ready +-- RX Data +-- RX Ready +-- RX FIFO Count + rwaddr_reg <= wb_adr_i; + wb_stall_o <= (not ack_sreg(0)) and (wb_stb_i and wb_cyc_i); +-- ACK signal generation. Just pass the LSB of ACK counter. + wb_ack_o <= ack_sreg(0); +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_rx.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_rx.vhd new file mode 100644 index 000000000..ea996e08e --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_rx.vhd @@ -0,0 +1,229 @@ +------------------------------------------------------------------------------ +-- Title : Simple Wishbone UART - receiver +-- Project : General Cores Collection (gencores) library +------------------------------------------------------------------------------ +-- File : uart_async_rx.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Copyright (c) 2010 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity uart_async_rx is + + + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + baud8_tick_i: in std_logic; + + rxd_i : in std_logic; + rx_ready_o : out std_logic; + rx_error_o : out std_logic; + rx_data_o : out std_logic_vector(7 downto 0) + + ); + +end uart_async_rx; + + +architecture behavioral of uart_async_rx is + + signal Baud8Tick : std_logic; + + signal RxD_sync_inv : std_logic_vector(1 downto 0); + signal RxD_cnt_inv : unsigned(1 downto 0); + signal RxD_bit_inv : std_logic; + + signal state : std_logic_vector(3 downto 0); + signal bit_spacing : std_logic_vector(3 downto 0); + signal next_bit : std_logic; + + signal RxD_data : std_logic_vector(7 downto 0); + signal RxD_data_ready : std_logic; + signal RxD_data_error : std_logic; + + + +begin -- behavioral + + Baud8Tick <= baud8_tick_i; + + + process(clk_sys_i, rst_n_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + RxD_sync_inv <= (others => '0'); + else + if(Baud8Tick = '1') then + RxD_sync_inv <= RxD_sync_inv(0) & (not rxd_i); + end if; + end if; + end if; + end process; + + process(clk_sys_i, rst_n_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + RxD_bit_inv <= '0'; + RxD_cnt_inv <= (others => '0'); + else + if(Baud8Tick = '1') then + if(RxD_sync_inv(1) = '1' and RxD_cnt_inv /= "11") then + RxD_cnt_inv <= RxD_cnt_inv + 1; + elsif (RxD_sync_inv(1) = '0' and RxD_cnt_inv /= "00") then + RxD_cnt_inv <= RxD_cnt_inv - 1; + end if; + + if(RxD_cnt_inv = "00") then + RxD_bit_inv <= '0'; + elsif(RxD_cnt_inv = "11") then + RxD_bit_inv <= '1'; + end if; + end if; + end if; + end if; + end process; + + + next_bit <= '1' when (bit_spacing = x"a") else '0'; + + process(clk_sys_i, rst_n_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + bit_spacing <= (others => '0'); + else + if(state = x"0") then + bit_spacing <= "0000"; + elsif(Baud8Tick = '1') then +-- bit_spacing <= std_logic_vector(resize((unsigned(bit_spacing(2 downto 0)) + 1), 4)) + bit_spacing <= std_logic_vector(unsigned('0' & bit_spacing(2 downto 0)) + 1) + or (bit_spacing(3) & "000"); + end if; + end if; + end if; + end process; + + process(clk_sys_i, rst_n_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + state <= (others => '0'); + else + if(Baud8Tick = '1') then + case state is + when "0000" => + if(RxD_bit_inv = '1') then -- start bit + state <= "1000"; + end if; + when "1000" => + if(next_bit = '1') then + state <= "1001"; -- bit 0 + end if; + when "1001" => + if(next_bit = '1') then + state <= "1010"; -- bit 1 + end if; + when "1010" => + if(next_bit = '1') then + state <= "1011"; -- bit 2 + end if; + when "1011" => + if(next_bit = '1') then + state <= "1100"; -- bit 3 + end if; + when "1100" => + if(next_bit = '1') then + state <= "1101"; -- bit 4 + end if; + when "1101" => + if(next_bit = '1') then + state <= "1110"; -- bit 5 + end if; + when "1110" => + if(next_bit = '1') then + state <= "1111"; -- bit 6 + end if; + when "1111" => + if(next_bit = '1') then + state <= "0001"; -- bit 7 + end if; + when "0001" => + if(next_bit = '1') then + state <= "0000"; -- bit stop + end if; + when others => state <= "0000"; + end case; + end if; + end if; + end if; + end process; + + + process(clk_sys_i, rst_n_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + RxD_data <= (others => '0'); + else + if(Baud8Tick = '1' and next_bit = '1' and state(3) = '1') then + RxD_data <= (not RxD_bit_inv) & RxD_data(7 downto 1); + end if; + end if; + end if; + end process; + + process(clk_sys_i, rst_n_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + RxD_data_error <= '0'; + RxD_data_ready <= '0'; + else + if(Baud8Tick = '1' and next_bit = '1' and state = "0001" and RxD_bit_inv = '0') then + RxD_data_ready <= '1'; + else + RxD_data_ready <= '0'; + end if; + + if(Baud8Tick = '1' and next_bit = '1' and state = "0001" and RxD_bit_inv = '1') then + RxD_data_error <= '1'; + else + RxD_data_error <= '0'; + end if; + end if; + end if; + end process; + + rx_data_o <= RxD_data; + rx_ready_o <= RxD_data_ready; + rx_error_o <= RxD_data_error; + + +end behavioral; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_tx.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_tx.vhd new file mode 100644 index 000000000..d0a743f39 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_tx.vhd @@ -0,0 +1,190 @@ +------------------------------------------------------------------------------ +-- Title : Simple Wishbone UART - tranmitter +-- Project : General Cores Collection (gencores) library +------------------------------------------------------------------------------ +-- File : uart_async_tx.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Copyright (c) 2010 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity uart_async_tx is + + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + baud_tick_i: in std_logic; + + txd_o : out std_logic; + tx_start_p_i : in std_logic; + tx_data_i : in std_logic_vector(7 downto 0); + tx_busy_o : out std_logic + + ); + +end uart_async_tx; + +architecture behavioral of uart_async_tx is + +signal BaudTick : std_logic; + signal TxD_busy : std_logic; + signal TxD_ready : std_logic; + signal state : std_logic_vector(3 downto 0); + + signal TxD_dataReg : std_logic_vector(7 downto 0); + signal TxD_dataD : std_logic_vector(7 downto 0); + signal muxbit : std_logic; + signal TxD : std_logic; + +begin -- behavioral + + + + + TxD_ready <= '1' when state = "0000" else '0'; + TxD_busy <= not TxD_ready; + BaudTick <= baud_tick_i; + + + process(clk_sys_i, rst_n_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + TxD_dataReg <= (others => '0'); + elsif TxD_ready = '1' and tx_start_p_i = '1' then + TxD_dataReg <= tx_data_i; + end if; + end if; + end process; + + TxD_dataD <= TxD_dataReg; + + process(clk_sys_i, rst_n_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + state <= "0000"; + else + case state is + when "0000" => + if (tx_start_p_i = '1') then + state <= "0001"; + end if; + + when "0001" => + if (BaudTick = '1') then + state <= "0100"; + end if; + when "0100" => + if (BaudTick = '1') then + state <= "1000"; + end if; + when "1000" => + if (BaudTick = '1') then + state <= "1001"; + end if; + when "1001" => + if (BaudTick = '1') then + state <= "1010"; + end if; + + when "1010" => + if (BaudTick = '1') then + state <= "1011"; + end if; + when "1011" => + if (BaudTick = '1') then + state <= "1100"; + end if; + when "1100" => + if (BaudTick = '1') then + state <= "1101"; + end if; + when "1101" => + if (BaudTick = '1') then + state <= "1110"; + end if; + when "1110" => + if (BaudTick = '1') then + state <= "1111"; + end if; + + when "1111" => + if (BaudTick = '1') then + state <= "0010"; + end if; + when "0010" => + if (BaudTick = '1') then + state <= "0011"; + end if; + + when "0011" => + if (BaudTick = '1') then + state <= "0000"; + end if; + when others => + state <= "0000"; + end case; + end if; + end if; + end process; + + + process(TxD_dataD, state) + begin + case state(2 downto 0) is + when "000" => muxbit <= TxD_dataD(0); + when "001" => muxbit <= TxD_dataD(1); + when "010" => muxbit <= TxD_dataD(2); + when "011" => muxbit <= TxD_dataD(3); + when "100" => muxbit <= TxD_dataD(4); + when "101" => muxbit <= TxD_dataD(5); + when "110" => muxbit <= TxD_dataD(6); + when "111" => muxbit <= TxD_dataD(7); + when others => null; + end case; + end process; + + process(clk_sys_i, rst_n_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + TxD <= '1'; + else + if(unsigned(state) < to_unsigned(4, state'length) or (state(3) = '1' and muxbit = '1')) then + TxD <= '1'; + else + TxD <= '0'; + end if; + end if; + end if; + end process; + + txd_o <= TxD; + tx_busy_o <= TxD_busy; + +end behavioral; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_baud_gen.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_baud_gen.vhd new file mode 100644 index 000000000..a565c5c20 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_baud_gen.vhd @@ -0,0 +1,89 @@ +------------------------------------------------------------------------------ +-- Title : Simple Wishbone UART - baud generator +-- Project : General Cores Collection (gencores) library +------------------------------------------------------------------------------ +-- File : uart_baud_gen.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Copyright (c) 2010 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity uart_baud_gen is + + generic ( + g_baud_acc_width : integer := 16); + + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + baudrate_i : in std_logic_vector(g_baud_acc_width downto 0); + + baud_tick_o : out std_logic; + baud8_tick_o : out std_logic); + +end uart_baud_gen; + +architecture behavioral of uart_baud_gen is + + signal Baud8GeneratorInc : unsigned(g_baud_acc_width downto 0); + signal Baud8GeneratorAcc : unsigned(g_baud_acc_width downto 0); + signal Baud8Tick : std_logic; + signal Baud_sreg : std_logic_vector(7 downto 0) := "10000000"; + + +begin -- behavioral + + Baud8GeneratorInc <= unsigned(baudrate_i); + + process(clk_sys_i, rst_n_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + Baud8GeneratorAcc <= (others => '0'); + else + Baud8GeneratorAcc <= ('0' & Baud8GeneratorAcc(Baud8GeneratorAcc'high-1 downto 0)) + Baud8GeneratorInc; + end if; + end if; + end process; + + Baud8Tick <= std_logic(Baud8GeneratorAcc(g_baud_acc_width)); + + process(clk_sys_i, rst_n_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + Baud_sreg <= "10000000"; + elsif Baud8Tick = '1' then + Baud_sreg <= Baud_sreg(0) & Baud_sreg(7 downto 1); + end if; + end if; + end process; + + baud_tick_o <= Baud_sreg(0) and Baud8Tick; + baud8_tick_o <= Baud8Tick; + +end behavioral; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/wb_simple_uart.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/wb_simple_uart.vhd new file mode 100644 index 000000000..75379bf69 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/wb_simple_uart.vhd @@ -0,0 +1,323 @@ +------------------------------------------------------------------------------- +-- Title : Simple Wishbone UART +-- Project : General Cores Collection (gencores) library +------------------------------------------------------------------------------- +-- File : wb_simple_uart.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-Co-HT +-- Created : 2011-02-21 +-- Last update: 2017-02-03 +-- Platform : FPGA-generics +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: A simple UART controller, providing two modes of operation +-- (both can be used simultenously): +-- - physical UART (encoding fixed to 8 data bits, no parity and one stop bit) +-- - virtual UART: TXed data is passed via a FIFO to the Wishbone host (and +-- vice versa). +------------------------------------------------------------------------------- +-- Copyright (c) 2011 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2011-02-21 1.0 twlostow Created +-- 2011-10-04 1.1 twlostow merged with VUART, added adapter +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +use work.genram_pkg.all; +use work.wishbone_pkg.all; +use work.UART_wbgen2_pkg.all; + +entity wb_simple_uart is + generic( + g_with_virtual_uart : boolean; + g_with_physical_uart : boolean; + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_vuart_fifo_size : integer := 1024 + ); + port ( + + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + + uart_rxd_i : in std_logic; + uart_txd_o : out std_logic + ); +end wb_simple_uart; + +architecture syn of wb_simple_uart is + + constant c_baud_acc_width : integer := 16; + + component uart_baud_gen + generic ( + g_baud_acc_width : integer); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + baudrate_i : in std_logic_vector(g_baud_acc_width downto 0); + baud_tick_o : out std_logic; + baud8_tick_o : out std_logic); + end component; + + component uart_async_rx + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + baud8_tick_i : in std_logic; + rxd_i : in std_logic; + rx_ready_o : out std_logic; + rx_error_o : out std_logic; + rx_data_o : out std_logic_vector(7 downto 0)); + end component; + + component uart_async_tx + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + baud_tick_i : in std_logic; + txd_o : out std_logic; + tx_start_p_i : in std_logic; + tx_data_i : in std_logic_vector(7 downto 0); + tx_busy_o : out std_logic); + end component; + + component simple_uart_wb + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(2 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + rdr_rack_o : out std_logic; + host_rack_o : out std_logic; + regs_i : in t_uart_in_registers; + regs_o : out t_uart_out_registers + ); + end component; + + signal rx_ready_reg : std_logic; + signal rx_ready : std_logic; + signal uart_bcr : std_logic_vector(31 downto 0); + + signal rdr_rack : std_logic; + signal host_rack : std_logic; + + signal baud_tick : std_logic; + signal baud_tick8 : std_logic; + + signal resized_addr : std_logic_vector(c_wishbone_address_width-1 downto 0); + + signal wb_in : t_wishbone_slave_in; + signal wb_out : t_wishbone_slave_out; + + signal regs_in : t_UART_in_registers; + signal regs_out : t_UART_out_registers; + + signal fifo_empty, fifo_full, fifo_rd, fifo_wr : std_logic; + signal fifo_count : std_logic_vector(f_log2_size(g_vuart_fifo_size)-1 downto 0); + + signal phys_rx_ready, phys_tx_busy : std_logic; + + signal phys_rx_data : std_logic_vector(7 downto 0); + + +begin -- syn + + gen_check_generics : if(not g_with_physical_uart and not g_with_virtual_uart) generate + assert false report "wb_simple_uart: dummy configuration (use virtual, physical or both uarts)" severity failure; + end generate gen_check_generics; + + resized_addr(4 downto 0) <= wb_adr_i; + resized_addr(c_wishbone_address_width-1 downto 5) <= (others => '0'); + + U_Adapter : wb_slave_adapter + generic map ( + g_master_use_struct => true, + g_master_mode => CLASSIC, + g_master_granularity => WORD, + g_slave_use_struct => false, + g_slave_mode => g_interface_mode, + g_slave_granularity => g_address_granularity) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + master_i => wb_out, + master_o => wb_in, + sl_adr_i => resized_addr, + sl_dat_i => wb_dat_i, + sl_sel_i => wb_sel_i, + sl_cyc_i => wb_cyc_i, + sl_stb_i => wb_stb_i, + sl_we_i => wb_we_i, + sl_dat_o => wb_dat_o, + sl_ack_o => wb_ack_o, + sl_stall_o => wb_stall_o); + + U_WB_SLAVE : simple_uart_wb + port map ( + rst_n_i => rst_n_i, + clk_sys_i => clk_sys_i, + wb_adr_i => wb_in.adr(2 downto 0), + wb_dat_i => wb_in.dat, + wb_dat_o => wb_out.dat, + wb_cyc_i => wb_in.cyc, + wb_sel_i => wb_in.sel, + wb_stb_i => wb_in.stb, + wb_we_i => wb_in.we, + wb_ack_o => wb_out.ack, + wb_stall_o => wb_out.stall, + + rdr_rack_o => rdr_rack, + host_rack_o => host_rack, + regs_o => regs_out, + regs_i => regs_in); + + wb_out.err <= '0'; + wb_out.rty <= '0'; + wb_out.int <= '0'; + + gen_phys_uart : if(g_with_physical_uart) generate + + p_bcr_reg : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + uart_bcr <= (others => '0'); + elsif(regs_out.bcr_wr_o = '1')then + uart_bcr <= regs_out.bcr_o; + end if; + end if; + end process; + + U_BAUD_GEN : uart_baud_gen + generic map ( + g_baud_acc_width => c_baud_acc_width) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + baudrate_i => uart_bcr(c_baud_acc_width downto 0), + baud_tick_o => baud_tick, + baud8_tick_o => baud_tick8); + + U_TX : uart_async_tx + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + baud_tick_i => baud_tick, + txd_o => uart_txd_o, + tx_start_p_i => regs_out.tdr_tx_data_wr_o, + tx_data_i => regs_out.tdr_tx_data_o, + tx_busy_o => phys_tx_busy); + + U_RX : uart_async_rx + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + baud8_tick_i => baud_tick8, + rxd_i => uart_rxd_i, + rx_ready_o => phys_rx_ready, + rx_error_o => open, + rx_data_o => phys_rx_data); + + end generate gen_phys_uart; + + gen_vuart : if(g_with_virtual_uart) generate + + fifo_wr <= not fifo_full and regs_out.tdr_tx_data_wr_o; + fifo_rd <= not fifo_empty and not regs_in.host_rdr_rdy_i; + + U_VUART_FIFO : generic_sync_fifo + generic map ( + g_data_width => 8, + g_size => g_vuart_fifo_size, + g_with_count => true) + port map ( + rst_n_i => rst_n_i, + clk_i => clk_sys_i, + d_i => regs_out.tdr_tx_data_o, + we_i => fifo_wr, + q_o => regs_in.host_rdr_data_i, + rd_i => fifo_rd, + empty_o => fifo_empty, + full_o => fifo_full, + count_o => fifo_count); + + regs_in.host_rdr_count_i(fifo_count'left downto 0) <= fifo_count; + regs_in.host_rdr_count_i(15 downto fifo_count'length) <= (others => '0'); + + p_vuart_rx_ready : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + regs_in.host_rdr_rdy_i <= '0'; + elsif(fifo_rd = '1') then + regs_in.host_rdr_rdy_i <= '1'; + elsif(host_rack = '1') then + regs_in.host_rdr_rdy_i <= '0'; + end if; + end if; + end process; + + end generate gen_vuart; + + p_drive_rx_ready : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + regs_in.sr_rx_rdy_i <= '0'; + regs_in.rdr_rx_data_i <= (others => '0'); + else + if(rdr_rack = '1' and phys_rx_ready = '0' and regs_out.host_tdr_data_wr_o = '0') then + regs_in.sr_rx_rdy_i <= '0'; + elsif(phys_rx_ready = '1' and g_with_physical_uart) then + regs_in.sr_rx_rdy_i <= '1'; + regs_in.rdr_rx_data_i <= phys_rx_data; + elsif(regs_out.host_tdr_data_wr_o = '1' and g_with_virtual_uart) then + regs_in.sr_rx_rdy_i <= '1'; + regs_in.rdr_rx_data_i <= regs_out.host_tdr_data_o; + end if; + end if; + end if; + end process; + + regs_in.sr_tx_busy_i <= phys_tx_busy when (g_with_physical_uart) else '0'; + regs_in.host_tdr_rdy_i <= not regs_in.sr_rx_rdy_i; + +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/xwb_simple_uart.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/xwb_simple_uart.vhd new file mode 100644 index 000000000..5914773d2 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/xwb_simple_uart.vhd @@ -0,0 +1,129 @@ +------------------------------------------------------------------------------ +-- Title : Simple Wishbone UART +-- Project : General Cores Collection (gencores) library +------------------------------------------------------------------------------ +-- File : xwb_simple_uart.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-Co-HT +-- Created : 2010-05-18 +-- Last update: 2017-02-03 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: A simple UART controller, providing two modes of operation +-- (both can be used simultenously): +-- - physical UART (encoding fixed to 8 data bits, no parity and one stop bit) +-- - virtual UART: TXed data is passed via a FIFO to the Wishbone host (and +-- vice versa). +------------------------------------------------------------------------------- +-- Copyright (c) 2010 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2010-05-18 1.0 twlostow Created +-- 2011-10-04 1.1 twlostow xwb module +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +library work; +use work.wishbone_pkg.all; + +entity xwb_simple_uart is + generic( + g_with_virtual_uart : boolean := true; + g_with_physical_uart : boolean := true; + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_vuart_fifo_size : integer := 1024 + ); + + port( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + -- Wishbone + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + desc_o : out t_wishbone_device_descriptor; + + uart_rxd_i: in std_logic; + uart_txd_o: out std_logic + + ); + +end xwb_simple_uart; + +architecture rtl of xwb_simple_uart is + + component wb_simple_uart + generic ( + g_with_virtual_uart : boolean; + g_with_physical_uart : boolean; + g_interface_mode : t_wishbone_interface_mode; + g_address_granularity : t_wishbone_address_granularity; + g_vuart_fifo_size : integer); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + uart_rxd_i : in std_logic; + uart_txd_o : out std_logic); + end component; + +begin -- rtl + + U_Wrapped_UART: wb_simple_uart + generic map ( + g_with_virtual_uart => g_with_virtual_uart, + g_with_physical_uart => g_with_physical_uart, + g_interface_mode => g_interface_mode, + g_address_granularity => g_address_granularity, + g_vuart_fifo_size => g_vuart_fifo_size) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + wb_adr_i => slave_i.adr(4 downto 0), + wb_dat_i => slave_i.dat, + wb_dat_o => slave_o.dat, + wb_cyc_i => slave_i.cyc, + wb_sel_i => slave_i.sel, + wb_stb_i => slave_i.stb, + wb_we_i => slave_i.we, + wb_ack_o => slave_o.ack, + wb_stall_o => slave_o.stall, + uart_rxd_i => uart_rxd_i, + uart_txd_o => uart_txd_o); + + slave_o.err <= '0'; + slave_o.rty <= '0'; + slave_o.int <='0'; + + desc_o <= (others => '0'); + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_eic.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_eic.vhd new file mode 100644 index 000000000..7962e6b6f --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_eic.vhd @@ -0,0 +1,241 @@ +------------------------------------------------------------------------------- +-- Title : WBGEN components +-- Project : General Cores +------------------------------------------------------------------------------- +-- File : wbgen2_eic.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN +-- Platform : FPGA-generics +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- Copyright (c) 2011 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + + +use work.wbgen2_pkg.all; + +entity wbgen2_eic is + + generic ( + g_num_interrupts : natural := 1; + + g_irq00_mode : integer := 0; + g_irq01_mode : integer := 0; + g_irq02_mode : integer := 0; + g_irq03_mode : integer := 0; + g_irq04_mode : integer := 0; + g_irq05_mode : integer := 0; + g_irq06_mode : integer := 0; + g_irq07_mode : integer := 0; + g_irq08_mode : integer := 0; + g_irq09_mode : integer := 0; + g_irq0a_mode : integer := 0; + g_irq0b_mode : integer := 0; + g_irq0c_mode : integer := 0; + g_irq0d_mode : integer := 0; + g_irq0e_mode : integer := 0; + g_irq0f_mode : integer := 0; + g_irq10_mode : integer := 0; + g_irq11_mode : integer := 0; + g_irq12_mode : integer := 0; + g_irq13_mode : integer := 0; + g_irq14_mode : integer := 0; + g_irq15_mode : integer := 0; + g_irq16_mode : integer := 0; + g_irq17_mode : integer := 0; + g_irq18_mode : integer := 0; + g_irq19_mode : integer := 0; + g_irq1a_mode : integer := 0; + g_irq1b_mode : integer := 0; + g_irq1c_mode : integer := 0; + g_irq1d_mode : integer := 0; + g_irq1e_mode : integer := 0; + g_irq1f_mode : integer := 0 + ); + port( + rst_n_i : in std_logic; -- reset & system clock, as always :) + clk_i : in std_logic; + + -- raw interrupt inputs + irq_i : in std_logic_vector(g_num_interrupts-1 downto 0); + + -- interrupt acknowledge signal, used for level-active interrupts to + -- indicate that the interrupt has been handled + irq_ack_o: out std_logic_vector(g_num_interrupts-1 downto 0); + +-- interrupt mask regsiter (slv/bus read-only) + reg_imr_o : out std_logic_vector(g_num_interrupts-1 downto 0); + +-- interrupt enable/disable registers (slv/bus pass-through) + reg_ier_i : in std_logic_vector(g_num_interrupts-1 downto 0); + reg_ier_wr_stb_i : in std_logic; + + reg_idr_i : in std_logic_vector(g_num_interrupts-1 downto 0); + reg_idr_wr_stb_i : in std_logic; + +-- interrupt status register (slv/bus write with LOAD_EXT) + reg_isr_o : out std_logic_vector(g_num_interrupts-1 downto 0); + reg_isr_i : in std_logic_vector(g_num_interrupts-1 downto 0); + reg_isr_wr_stb_i : in std_logic; + +-- multiplexed wishbone irq output + wb_irq_o : out std_logic + + ); + +end wbgen2_eic; + +architecture syn of wbgen2_eic is + + subtype t_irq_mode is integer; + type t_irq_mode_vec is array (0 to 31) of t_irq_mode; + + constant c_IRQ_MODE_RISING_EDGE : t_irq_mode := 0; + constant c_IRQ_MODE_FALLING_EDGE : t_irq_mode := 1; + constant c_IRQ_MODE_LEVEL_0 : t_irq_mode := 2; + constant c_IRQ_MODE_LEVEL_1 : t_irq_mode := 3; + + + signal irq_mode : t_irq_mode_vec; + + signal irq_mask : std_logic_vector(g_num_interrupts-1 downto 0); + signal irq_pending : std_logic_vector(g_num_interrupts-1 downto 0); + + signal irq_i_d0 : std_logic_vector(g_num_interrupts-1 downto 0); + signal irq_i_d1 : std_logic_vector(g_num_interrupts-1 downto 0); + signal irq_i_d2 : std_logic_vector(g_num_interrupts-1 downto 0); + +begin -- syn + + irq_mode(0) <= g_irq00_mode; + irq_mode(1) <= g_irq01_mode; + irq_mode(2) <= g_irq02_mode; + irq_mode(3) <= g_irq03_mode; + irq_mode(4) <= g_irq04_mode; + irq_mode(5) <= g_irq05_mode; + irq_mode(6) <= g_irq06_mode; + irq_mode(7) <= g_irq07_mode; + irq_mode(8) <= g_irq08_mode; + irq_mode(9) <= g_irq09_mode; + irq_mode(10) <= g_irq0a_mode; + irq_mode(11) <= g_irq0b_mode; + irq_mode(12) <= g_irq0c_mode; + irq_mode(13) <= g_irq0d_mode; + irq_mode(14) <= g_irq0e_mode; + irq_mode(15) <= g_irq0f_mode; + irq_mode(16) <= g_irq10_mode; + irq_mode(17) <= g_irq11_mode; + irq_mode(18) <= g_irq12_mode; + irq_mode(19) <= g_irq13_mode; + irq_mode(20) <= g_irq14_mode; + irq_mode(21) <= g_irq15_mode; + irq_mode(22) <= g_irq16_mode; + irq_mode(23) <= g_irq17_mode; + irq_mode(24) <= g_irq18_mode; + irq_mode(25) <= g_irq19_mode; + irq_mode(26) <= g_irq1a_mode; + irq_mode(27) <= g_irq1b_mode; + irq_mode(28) <= g_irq1c_mode; + irq_mode(29) <= g_irq1d_mode; + irq_mode(30) <= g_irq1e_mode; + irq_mode(31) <= g_irq1f_mode; + + + process(clk_i, rst_n_i) + begin + if(rst_n_i = '0') then + irq_i_d0 <= (others => '0'); + irq_i_d1 <= (others => '0'); + irq_i_d1 <= (others => '0'); + irq_pending <= (others => '0'); + irq_mask <= (others => '0'); + + elsif rising_edge(clk_i) then + + for i in 0 to g_num_interrupts-1 loop + + irq_i_d0(i) <= irq_i(i); + irq_i_d1(i) <= irq_i_d0(i); + irq_i_d2(i) <= irq_i_d1(i); + + + if((reg_isr_i(i) = '1' and reg_isr_wr_stb_i = '1') or irq_mask(i) = '0') then + irq_pending(i) <= '0'; + irq_i_d0(i) <= '0'; + irq_i_d1(i) <= '0'; + irq_i_d2(i) <= '0'; + + else + + case irq_mode(i) is + when c_IRQ_MODE_LEVEL_0 => irq_pending(i) <= not irq_i_d2(i); + when c_IRQ_MODE_LEVEL_1 => irq_pending(i) <= irq_i_d2(i); + when c_IRQ_MODE_RISING_EDGE => irq_pending(i) <= irq_pending(i) or ((not irq_i_d2(i)) and irq_i_d1(i)); + when c_IRQ_MODE_FALLING_EDGE => irq_pending(i) <= irq_pending(i) or ((not irq_i_d1(i)) and irq_i_d2(i)); + when others => null; + end case; + end if; + end loop; -- i + + if(reg_ier_wr_stb_i = '1') then + for i in 0 to g_num_interrupts-1 loop + if(reg_ier_i(i) = '1') then + irq_mask(i) <= '1'; + end if; + end loop; + end if; + + if(reg_idr_wr_stb_i = '1') then + for i in 0 to g_num_interrupts-1 loop + if(reg_idr_i(i) = '1') then + irq_mask(i) <= '0'; + end if; + end loop; + end if; + end if; + end process; + + -- generation of wb_irq_o + + process(clk_i, rst_n_i) + begin + if(rst_n_i = '0') then + wb_irq_o <= '0'; + elsif rising_edge(clk_i) then + if(irq_pending = std_logic_vector(to_unsigned(0, g_num_interrupts))) then + wb_irq_o <= '0'; + else + wb_irq_o <= '1'; + end if; + + end if; + end process; + + gen_irq_ack: for i in 0 to g_num_interrupts-1 generate + irq_ack_o(i) <= '1' when (reg_isr_wr_stb_i = '1' and reg_isr_i(i) = '1') else '0'; + end generate gen_irq_ack; + + reg_imr_o <= irq_mask; + reg_isr_o <= irq_pending; + +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_fifo_sync.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_fifo_sync.vhd new file mode 100644 index 000000000..8905cc9dc --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_fifo_sync.vhd @@ -0,0 +1,144 @@ +------------------------------------------------------------------------------- +-- Title : WBGEN components +-- Project : General Cores +------------------------------------------------------------------------------- +-- File : wbgen2_fifo_sync.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN +-- Platform : FPGA-generics +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- Copyright (c) 2011 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +use work.wbgen2_pkg.all; + + +entity wbgen2_fifo_sync is + generic ( + g_width : integer; + g_size : integer; + g_usedw_size : integer); + + port + ( + + clk_i : in std_logic; + rst_n_i : in std_logic := '1'; + + wr_data_i : in std_logic_vector(g_width-1 downto 0); + wr_req_i : in std_logic; + + rd_data_o : out std_logic_vector(g_width-1 downto 0); + rd_req_i : in std_logic; + + wr_empty_o : out std_logic; + wr_full_o : out std_logic; + wr_usedw_o : out std_logic_vector(g_usedw_size -1 downto 0); + + rd_empty_o : out std_logic; + rd_full_o : out std_logic; + rd_usedw_o : out std_logic_vector(g_usedw_size -1 downto 0) + + ); +end wbgen2_fifo_sync; + + +architecture rtl of wbgen2_fifo_sync is + + + function f_log2_size (A : natural) return natural is + begin + for I in 1 to 64 loop -- Works for up to 64 bits + if (2**I > A) then + return(I-1); + end if; + end loop; + return(63); + end function f_log2_size; + + component generic_sync_fifo + generic ( + g_data_width : natural; + g_size : natural; + g_show_ahead : boolean; + g_with_empty : boolean; + g_with_full : boolean; + g_with_almost_empty : boolean; + g_with_almost_full : boolean; + g_with_count : boolean; + g_almost_empty_threshold : integer := 0; + g_almost_full_threshold : integer := 0); + port ( + rst_n_i : in std_logic := '1'; + clk_i : in std_logic; + d_i : in std_logic_vector(g_data_width-1 downto 0); + we_i : in std_logic; + q_o : out std_logic_vector(g_data_width-1 downto 0); + rd_i : in std_logic; + empty_o : out std_logic; + full_o : out std_logic; + almost_empty_o : out std_logic; + almost_full_o : out std_logic; + count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0)); + end component; + + signal empty_int : std_logic; + signal full_int : std_logic; + signal usedw_int : std_logic_vector(g_usedw_size-1 downto 0); + +begin + + wrapped_fifo: generic_sync_fifo + generic map ( + g_data_width => g_width, + g_size => g_size, + g_show_ahead => false, + g_with_empty => true, + g_with_full => true, + g_with_almost_empty => false, + g_with_almost_full => false, + g_with_count => true) + port map ( + rst_n_i => rst_n_i, + clk_i => clk_i, + d_i => wr_data_i, + we_i => wr_req_i, + q_o => rd_data_o, + rd_i => rd_req_i, + empty_o => empty_int, + full_o => full_int, + almost_empty_o => open, + almost_full_o => open, + count_o => usedw_int); + + + rd_empty_o <= empty_int; + rd_full_o <= full_int; + rd_usedw_o <= usedw_int; + + wr_empty_o <= empty_int; + wr_full_o <= full_int; + wr_usedw_o <= usedw_int; + + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_pkg.vhd new file mode 100644 index 000000000..aabce15a7 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_pkg.vhd @@ -0,0 +1,154 @@ +------------------------------------------------------------------------------- +-- Title : WBGEN components +-- Project : General Cores +------------------------------------------------------------------------------- +-- File : wbgen2_pkg.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN +-- Platform : FPGA-generics +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- Copyright (c) 2011-2012 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +package wbgen2_pkg is + + + component wbgen2_dpssram + generic ( + g_data_width : natural; + g_size : natural; + g_addr_width : natural; + g_dual_clock : boolean; + g_use_bwsel : boolean); + port ( + clk_a_i : in std_logic; + clk_b_i : in std_logic; + addr_a_i : in std_logic_vector(g_addr_width-1 downto 0); + addr_b_i : in std_logic_vector(g_addr_width-1 downto 0); + data_a_i : in std_logic_vector(g_data_width-1 downto 0); + data_b_i : in std_logic_vector(g_data_width-1 downto 0); + data_a_o : out std_logic_vector(g_data_width-1 downto 0); + data_b_o : out std_logic_vector(g_data_width-1 downto 0); + bwsel_a_i : in std_logic_vector((g_data_width+7)/8-1 downto 0); + bwsel_b_i : in std_logic_vector((g_data_width+7)/8-1 downto 0); + rd_a_i : in std_logic; + rd_b_i : in std_logic; + wr_a_i : in std_logic; + wr_b_i : in std_logic); + end component; + + + component wbgen2_eic + generic ( + g_num_interrupts : natural; + g_irq00_mode : integer; + g_irq01_mode : integer; + g_irq02_mode : integer; + g_irq03_mode : integer; + g_irq04_mode : integer; + g_irq05_mode : integer; + g_irq06_mode : integer; + g_irq07_mode : integer; + g_irq08_mode : integer; + g_irq09_mode : integer; + g_irq0a_mode : integer; + g_irq0b_mode : integer; + g_irq0c_mode : integer; + g_irq0d_mode : integer; + g_irq0e_mode : integer; + g_irq0f_mode : integer; + g_irq10_mode : integer; + g_irq11_mode : integer; + g_irq12_mode : integer; + g_irq13_mode : integer; + g_irq14_mode : integer; + g_irq15_mode : integer; + g_irq16_mode : integer; + g_irq17_mode : integer; + g_irq18_mode : integer; + g_irq19_mode : integer; + g_irq1a_mode : integer; + g_irq1b_mode : integer; + g_irq1c_mode : integer; + g_irq1d_mode : integer; + g_irq1e_mode : integer; + g_irq1f_mode : integer); + port ( + rst_n_i : in std_logic; + clk_i : in std_logic; + irq_i : in std_logic_vector(g_num_interrupts-1 downto 0); + irq_ack_o : out std_logic_vector(g_num_interrupts-1 downto 0); + reg_imr_o : out std_logic_vector(g_num_interrupts-1 downto 0); + reg_ier_i : in std_logic_vector(g_num_interrupts-1 downto 0); + reg_ier_wr_stb_i : in std_logic; + reg_idr_i : in std_logic_vector(g_num_interrupts-1 downto 0); + reg_idr_wr_stb_i : in std_logic; + reg_isr_o : out std_logic_vector(g_num_interrupts-1 downto 0); + reg_isr_i : in std_logic_vector(g_num_interrupts-1 downto 0); + reg_isr_wr_stb_i : in std_logic; + wb_irq_o : out std_logic); + end component; + + component wbgen2_fifo_async + generic ( + g_size : integer; + g_width : integer; + g_usedw_size : integer); + port ( + rst_n_i : in std_logic := '1'; + rd_clk_i : in std_logic; + rd_req_i : in std_logic; + rd_data_o : out std_logic_vector(g_width-1 downto 0); + rd_empty_o : out std_logic; + rd_full_o : out std_logic; + rd_usedw_o : out std_logic_vector(g_usedw_size -1 downto 0); + wr_clk_i : in std_logic; + wr_req_i : in std_logic; + wr_data_i : in std_logic_vector(g_width-1 downto 0); + wr_empty_o : out std_logic; + wr_full_o : out std_logic; + wr_usedw_o : out std_logic_vector(g_usedw_size -1 downto 0)); + end component; + + + component wbgen2_fifo_sync + generic ( + g_width : integer; + g_size : integer; + g_usedw_size : integer); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic := '1'; + wr_data_i : in std_logic_vector(g_width-1 downto 0); + wr_req_i : in std_logic; + rd_data_o : out std_logic_vector(g_width-1 downto 0); + rd_req_i : in std_logic; + wr_empty_o : out std_logic; + wr_full_o : out std_logic; + wr_usedw_o : out std_logic_vector(g_usedw_size -1 downto 0); + rd_empty_o : out std_logic; + rd_full_o : out std_logic; + rd_usedw_o : out std_logic_vector(g_usedw_size -1 downto 0)); + end component; + +end wbgen2_pkg; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wishbone_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wishbone_pkg.vhd new file mode 100644 index 000000000..b7dfdfafc --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wishbone_pkg.vhd @@ -0,0 +1,2130 @@ +------------------------------------------------------------------------------- +-- Title : Wishbone package +-- Project : General Cores +------------------------------------------------------------------------------- +-- File : wishbone_pkg.vhd +-- Company : CERN +-- Platform : FPGA-generics +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- Copyright (c) 2011-2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- + +library ieee; + +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.genram_pkg.all; + +package wishbone_pkg is + + constant c_wishbone_address_width : integer := 32; + constant c_wishbone_data_width : integer := 32; + + subtype t_wishbone_address is + std_logic_vector(c_wishbone_address_width-1 downto 0); + subtype t_wishbone_data is + std_logic_vector(c_wishbone_data_width-1 downto 0); + subtype t_wishbone_byte_select is + std_logic_vector((c_wishbone_address_width/8)-1 downto 0); + subtype t_wishbone_cycle_type is + std_logic_vector(2 downto 0); + subtype t_wishbone_burst_type is + std_logic_vector(1 downto 0); + + type t_wishbone_interface_mode is (CLASSIC, PIPELINED); + type t_wishbone_address_granularity is (BYTE, WORD); + + type t_wishbone_master_out is record + cyc : std_logic; + stb : std_logic; + adr : t_wishbone_address; + sel : t_wishbone_byte_select; + we : std_logic; + dat : t_wishbone_data; + end record t_wishbone_master_out; + + subtype t_wishbone_slave_in is t_wishbone_master_out; + + type t_wishbone_slave_out is record + ack : std_logic; + err : std_logic; + rty : std_logic; + stall : std_logic; + int : std_logic; + dat : t_wishbone_data; + end record t_wishbone_slave_out; + subtype t_wishbone_master_in is t_wishbone_slave_out; + + subtype t_wishbone_device_descriptor is std_logic_vector(255 downto 0); + + type t_wishbone_byte_select_array is array(natural range <>) of t_wishbone_byte_select; + type t_wishbone_data_array is array(natural range <>) of t_wishbone_data; + type t_wishbone_address_array is array(natural range <>) of t_wishbone_address; + type t_wishbone_master_out_array is array (natural range <>) of t_wishbone_master_out; + --type t_wishbone_slave_in_array is array (natural range <>) of t_wishbone_slave_in; + subtype t_wishbone_slave_in_array is t_wishbone_master_out_array; + type t_wishbone_slave_out_array is array (natural range <>) of t_wishbone_slave_out; + --type t_wishbone_master_in_array is array (natural range <>) of t_wishbone_master_in; + subtype t_wishbone_master_in_array is t_wishbone_slave_out_array; + + constant cc_dummy_address : std_logic_vector(c_wishbone_address_width-1 downto 0) := + (others => 'X'); + constant cc_dummy_data : std_logic_vector(c_wishbone_data_width-1 downto 0) := + (others => 'X'); + constant cc_dummy_sel : std_logic_vector(c_wishbone_data_width/8-1 downto 0) := + (others => 'X'); + constant cc_dummy_slave_in : t_wishbone_slave_in := + ('0', '0', cc_dummy_address, cc_dummy_sel, 'X', cc_dummy_data); + constant cc_dummy_master_out : t_wishbone_master_out := cc_dummy_slave_in; + + -- Dangerous! Will stall a bus. + constant cc_dummy_slave_out : t_wishbone_slave_out := + ('X', 'X', 'X', 'X', 'X', cc_dummy_data); + constant cc_dummy_master_in : t_wishbone_master_in := cc_dummy_slave_out; + + constant cc_dummy_address_array : t_wishbone_address_array(0 downto 0) := (0 => cc_dummy_address); + + -- A generally useful function. + function f_ceil_log2(x : natural) return natural; + function f_bits2string(s : std_logic_vector) return string; + + function f_string2bits(s : string) return std_logic_vector; + function f_string2svl (s : string) return std_logic_vector; + function f_slv2string (slv : std_logic_vector) return string; + + function f_string_fix_len( s : string; ret_len : natural := 10; fill_char : character := '0'; justify_right : boolean := true ) return string; + function f_hot_to_bin(x : std_logic_vector) return natural; + + -- *** Wishbone slave interface functions *** + -- f_wb_wr: + -- processes an incoming write reqest to a register while honoring the select lines + -- valid modes are overwrite "owr", set "set" (bits are or'ed) and clear "clr" (bits are nand'ed) + function f_wb_wr(pval : std_logic_vector; ival : std_logic_vector; sel : std_logic_vector; mode : string := "owr") return std_logic_vector; +------------------------------------------------------------------------------ +-- SDB declaration +------------------------------------------------------------------------------ + + constant c_sdb_device_length : natural := 512; -- bits + subtype t_sdb_record is std_logic_vector(c_sdb_device_length-1 downto 0); + type t_sdb_record_array is array(natural range <>) of t_sdb_record; + + type t_sdb_product is record + vendor_id : std_logic_vector(63 downto 0); + device_id : std_logic_vector(31 downto 0); + version : std_logic_vector(31 downto 0); + date : std_logic_vector(31 downto 0); + name : string(1 to 19); + end record t_sdb_product; + + type t_sdb_component is record + addr_first : std_logic_vector(63 downto 0); + addr_last : std_logic_vector(63 downto 0); + product : t_sdb_product; + end record t_sdb_component; + + constant c_sdb_endian_big : std_logic := '0'; + constant c_sdb_endian_little : std_logic := '1'; + type t_sdb_device is record + abi_class : std_logic_vector(15 downto 0); + abi_ver_major : std_logic_vector(7 downto 0); + abi_ver_minor : std_logic_vector(7 downto 0); + wbd_endian : std_logic; -- 0 = big, 1 = little + wbd_width : std_logic_vector(3 downto 0); -- 3=64-bit, 2=32-bit, 1=16-bit, 0=8-bit + sdb_component : t_sdb_component; + end record t_sdb_device; + + type t_sdb_msi is record + wbd_endian : std_logic; -- 0 = big, 1 = little + wbd_width : std_logic_vector(3 downto 0); -- 3=64-bit, 2=32-bit, 1=16-bit, 0=8-bit + sdb_component : t_sdb_component; + end record t_sdb_msi; + + type t_sdb_bridge is record + sdb_child : std_logic_vector(63 downto 0); + sdb_component : t_sdb_component; + end record t_sdb_bridge; + + type t_sdb_integration is record + product : t_sdb_product; + end record t_sdb_integration; + + type t_sdb_repo_url is record + repo_url : string(1 to 63); + end record t_sdb_repo_url; + + type t_sdb_synthesis is record + syn_module_name : string(1 to 16); + syn_commit_id : string(1 to 32); + syn_tool_name : string(1 to 8); + syn_tool_version : std_logic_vector(31 downto 0); + syn_date : std_logic_vector(31 downto 0); + syn_username : string(1 to 15); + end record t_sdb_synthesis; + + -- If you have a Wishbone master that does not receive MSI, + -- list it in the layout as 'f_sdb_auto_msi(c_null_msi, false)' + constant c_null_msi : t_sdb_msi := ( + wbd_endian => c_sdb_endian_big, + wbd_width => x"0", + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"0000000000000000", + product => ( + vendor_id => x"0000000000000000", + device_id => x"00000000", + version => x"00000000", + date => x"00000000", + name => " "))); + + -- general crossbar building functions + function f_sdb_create_array(g_enum_dev_id : boolean := false; + g_dev_id_offs : natural := 0; + g_enum_dev_name : boolean := false; + g_dev_name_offs : natural := 0; + device : t_sdb_device; + instances : natural := 1) return t_sdb_record_array; + function f_sdb_join_arrays(a : t_sdb_record_array; b : t_sdb_record_array) return t_sdb_record_array; + function f_sdb_extract_base_addr(sdb_record : t_sdb_record) return std_logic_vector; + function f_sdb_extract_end_addr(sdb_record : t_sdb_record) return std_logic_vector; + function f_sdb_automap_array(sdb_array : t_sdb_record_array; start_offset : t_wishbone_address := (others => '0')) return t_sdb_record_array; + function f_align_addr_offset(offs : unsigned; this_rng : unsigned; prev_rng : unsigned) return unsigned; + function f_sdb_create_rom_addr(sdb_array : t_sdb_record_array) return t_wishbone_address; + + + -- Used to configure a device at a certain address + function f_sdb_embed_device(device : t_sdb_device; address : t_wishbone_address) return t_sdb_record; + function f_sdb_embed_bridge(bridge : t_sdb_bridge; address : t_wishbone_address) return t_sdb_record; + function f_sdb_embed_msi(msi : t_sdb_msi; address : t_wishbone_address) return t_sdb_record; + function f_sdb_embed_integration(integr : t_sdb_integration) return t_sdb_record; + function f_sdb_embed_repo_url(url : t_sdb_repo_url) return t_sdb_record; + function f_sdb_embed_synthesis(syn : t_sdb_synthesis) return t_sdb_record; + + function f_sdb_extract_device(sdb_record : t_sdb_record) return t_sdb_device; + function f_sdb_extract_bridge(sdb_record : t_sdb_record) return t_sdb_bridge; + function f_sdb_extract_msi(sdb_record : t_sdb_record) return t_sdb_msi; + function f_sdb_extract_integration(sdb_record : t_sdb_record) return t_sdb_integration; + function f_sdb_extract_repo_url(sdb_record : t_sdb_record) return t_sdb_repo_url; + function f_sdb_extract_synthesis(sdb_record : t_sdb_record) return t_sdb_synthesis; + + -- Automatic crossbar mapping functions + function f_sdb_auto_device(device : t_sdb_device; enable : boolean := true; name: string := "") return t_sdb_record; + function f_sdb_auto_bridge(bridge : t_sdb_bridge; enable : boolean := true; name: string := "") return t_sdb_record; + function f_sdb_auto_msi (msi : t_sdb_msi; enable : boolean := true) return t_sdb_record; + function f_sdb_auto_layout(records: t_sdb_record_array) return t_sdb_record_array; + function f_sdb_auto_layout(slaves : t_sdb_record_array; masters : t_sdb_record_array) return t_sdb_record_array; + function f_sdb_auto_sdb (records: t_sdb_record_array) return t_wishbone_address; + function f_sdb_auto_sdb (slaves : t_sdb_record_array; masters : t_sdb_record_array) return t_wishbone_address; + + -- For internal use by the crossbar + function f_sdb_bus_end(g_wraparound : boolean; g_layout : t_sdb_record_array; g_sdb_addr : t_wishbone_address; msi : boolean) return unsigned; + function f_sdb_embed_product(product : t_sdb_product) return std_logic_vector; -- (319 downto 8) + function f_sdb_embed_component(sdb_component : t_sdb_component; address : t_wishbone_address) return std_logic_vector; -- (447 downto 8) + function f_sdb_extract_product(sdb_record : std_logic_vector(319 downto 8)) return t_sdb_product; + function f_sdb_extract_component(sdb_record : std_logic_vector(447 downto 8)) return t_sdb_component; + +------------------------------------------------------------------------------ +-- Components declaration +------------------------------------------------------------------------------- + + component wb_slave_adapter + generic ( + g_master_use_struct : boolean; + g_master_mode : t_wishbone_interface_mode; + g_master_granularity : t_wishbone_address_granularity; + g_slave_use_struct : boolean; + g_slave_mode : t_wishbone_interface_mode; + g_slave_granularity : t_wishbone_address_granularity); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + sl_adr_i : in std_logic_vector(c_wishbone_address_width-1 downto 0) := cc_dummy_address; + sl_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0) := cc_dummy_data; + sl_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0) := cc_dummy_sel; + sl_cyc_i : in std_logic := '0'; + sl_stb_i : in std_logic := '0'; + sl_we_i : in std_logic := '0'; + sl_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + sl_err_o : out std_logic; + sl_rty_o : out std_logic; + sl_ack_o : out std_logic; + sl_stall_o : out std_logic; + sl_int_o : out std_logic; + slave_i : in t_wishbone_slave_in := cc_dummy_slave_in; + slave_o : out t_wishbone_slave_out; + ma_adr_o : out std_logic_vector(c_wishbone_address_width-1 downto 0); + ma_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + ma_sel_o : out std_logic_vector(c_wishbone_data_width/8-1 downto 0); + ma_cyc_o : out std_logic; + ma_stb_o : out std_logic; + ma_we_o : out std_logic; + ma_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0) := cc_dummy_data; + ma_err_i : in std_logic := '0'; + ma_rty_i : in std_logic := '0'; + ma_ack_i : in std_logic := '0'; + ma_stall_i : in std_logic := '0'; + ma_int_i : in std_logic := '0'; + master_i : in t_wishbone_master_in := cc_dummy_slave_out; + master_o : out t_wishbone_master_out); + end component; + + component wb_async_bridge + generic ( + g_simulation : integer; + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_cpu_address_width : integer); + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + cpu_cs_n_i : in std_logic; + cpu_wr_n_i : in std_logic; + cpu_rd_n_i : in std_logic; + cpu_bs_n_i : in std_logic_vector(3 downto 0); + cpu_addr_i : in std_logic_vector(g_cpu_address_width-1 downto 0); + cpu_data_b : inout std_logic_vector(31 downto 0); + cpu_nwait_o : out std_logic; + wb_adr_o : out std_logic_vector(c_wishbone_address_width - 1 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_stb_o : out std_logic; + wb_we_o : out std_logic; + wb_sel_o : out std_logic_vector(3 downto 0); + wb_cyc_o : out std_logic; + wb_dat_i : in std_logic_vector (c_wishbone_data_width-1 downto 0); + wb_ack_i : in std_logic; + wb_stall_i : in std_logic := '0'); + end component; + + component xwb_async_bridge + generic ( + g_simulation : integer; + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_cpu_address_width : integer); + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + cpu_cs_n_i : in std_logic; + cpu_wr_n_i : in std_logic; + cpu_rd_n_i : in std_logic; + cpu_bs_n_i : in std_logic_vector(3 downto 0); + cpu_addr_i : in std_logic_vector(g_cpu_address_width-1 downto 0); + cpu_data_b : inout std_logic_vector(31 downto 0); + cpu_nwait_o : out std_logic; + master_o : out t_wishbone_master_out; + master_i : in t_wishbone_master_in); + end component; + + component xwb_bus_fanout + generic ( + g_num_outputs : natural; + g_bits_per_slave : integer; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_slave_interface_mode : t_wishbone_interface_mode := CLASSIC); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + master_i : in t_wishbone_master_in_array(0 to g_num_outputs-1); + master_o : out t_wishbone_master_out_array(0 to g_num_outputs-1)); + end component; + + component xwb_crossbar + generic ( + g_num_masters : integer; + g_num_slaves : integer; + g_registered : boolean; + g_address : t_wishbone_address_array; + g_mask : t_wishbone_address_array); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in_array(g_num_masters-1 downto 0); + slave_o : out t_wishbone_slave_out_array(g_num_masters-1 downto 0); + master_i : in t_wishbone_master_in_array(g_num_slaves-1 downto 0); + master_o : out t_wishbone_master_out_array(g_num_slaves-1 downto 0); + sdb_sel_o : out std_logic_vector(g_num_masters-1 downto 0)); -- leave open! + end component; + + -- Use the f_xwb_bridge_*_sdb to bridge a crossbar to another + function f_xwb_bridge_manual_sdb( -- take a manual bus size + g_size : t_wishbone_address; + g_sdb_addr : t_wishbone_address) return t_sdb_bridge; + + function f_xwb_bridge_layout_sdb( -- determine bus size from layout + g_wraparound : boolean := true; + g_layout : t_sdb_record_array; + g_sdb_addr : t_wishbone_address) return t_sdb_bridge; + + function f_xwb_msi_manual_sdb( -- take a manual bus size + g_size : t_wishbone_address) return t_sdb_msi; + + function f_xwb_msi_layout_sdb( -- determine MSI size from layout + g_layout : t_sdb_record_array) return t_sdb_msi; + + component xwb_sdb_crossbar + generic ( + g_num_masters : integer; + g_num_slaves : integer; + g_registered : boolean := false; + g_wraparound : boolean := true; + g_layout : t_sdb_record_array; + g_sdb_addr : t_wishbone_address; + g_sdb_name : string := "WB4-Crossbar-GSI "); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in_array (g_num_masters-1 downto 0); + slave_o : out t_wishbone_slave_out_array (g_num_masters-1 downto 0); + msi_master_i : in t_wishbone_master_in_array (g_num_masters-1 downto 0) := (others => cc_dummy_master_in); + msi_master_o : out t_wishbone_master_out_array(g_num_masters-1 downto 0); + master_i : in t_wishbone_master_in_array (g_num_slaves -1 downto 0); + master_o : out t_wishbone_master_out_array(g_num_slaves -1 downto 0); + msi_slave_i : in t_wishbone_slave_in_array (g_num_slaves -1 downto 0) := (others => cc_dummy_slave_in); + msi_slave_o : out t_wishbone_slave_out_array (g_num_slaves -1 downto 0)); + end component; + + component xwb_register_link -- puts a register of delay between crossbars + port( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + master_i : in t_wishbone_master_in; + master_o : out t_wishbone_master_out); + end component; + + -- skidpad. acts like a fifo in wb flow control, but costs less + component wb_skidpad is + generic( + g_adrbits : natural := 32 + ); + Port( + clk_i : std_logic; + rst_n_i : std_logic; + + push_i : in std_logic; + pop_i : in std_logic; + full_o : out std_logic; + empty_o : out std_logic; + + adr_i : in std_logic_vector(g_adrbits-1 downto 0); + dat_i : in std_logic_vector(32-1 downto 0); + sel_i : in std_logic_vector(4-1 downto 0); + we_i : in std_logic; + + adr_o : out std_logic_vector(g_adrbits-1 downto 0); + dat_o : out std_logic_vector(32-1 downto 0); + sel_o : out std_logic_vector(4-1 downto 0); + we_o : out std_logic + ); + end component; + + component sdb_rom is + generic( + g_layout : t_sdb_record_array; + g_masters : natural; + g_bus_end : unsigned(63 downto 0); + g_sdb_name : string := "WB4-Crossbar-GSI "); + port( + clk_sys_i : in std_logic; + master_i : in std_logic_vector(g_masters-1 downto 0); + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out); + end component; + + constant c_xwb_dma_sdb : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"00", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"000000000000001f", + product => ( + vendor_id => x"0000000000000651", -- GSI + device_id => x"cababa56", + version => x"00000001", + date => x"20120518", + name => "WB4-Streaming-DMA_0"))); + component xwb_dma is + generic( + -- Value 0 cannot stream + -- Value 1 only slaves with async ACK can stream + -- Value 2 only slaves with combined latency <= 2 can stream + -- Value 3 only slaves with combined latency <= 6 can stream + -- Value 4 only slaves with combined latency <= 14 can stream + -- .... + logRingLen : integer := 4 + ); + port( + -- Common wishbone signals + clk_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + -- Master reader port + r_master_i : in t_wishbone_master_in; + r_master_o : out t_wishbone_master_out; + -- Master writer port + w_master_i : in t_wishbone_master_in; + w_master_o : out t_wishbone_master_out; + -- Pulsed high completion signal + interrupt_o : out std_logic + ); + end component; + + -- If you reset one clock domain, you must reset BOTH! + -- Release of the reset lines may be arbitrarily out-of-phase + component xwb_clock_crossing is + generic( + g_size : natural := 16); + port( + -- Slave control port + slave_clk_i : in std_logic; + slave_rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + -- Master reader port + master_clk_i : in std_logic; + master_rst_n_i : in std_logic; + master_i : in t_wishbone_master_in; + master_o : out t_wishbone_master_out; + -- Flow control back-channel for acks + slave_ready_o : out std_logic; + slave_stall_i : in std_logic := '0'); + end component; + + -- g_size is in words + function f_xwb_dpram(g_size : natural) return t_sdb_device; + component xwb_dpram + generic ( + g_size : natural; + g_init_file : string := ""; + g_must_have_init_file : boolean := true; + g_slave1_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_slave2_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_slave1_granularity : t_wishbone_address_granularity := WORD; + g_slave2_granularity : t_wishbone_address_granularity := WORD); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave1_i : in t_wishbone_slave_in; + slave1_o : out t_wishbone_slave_out; + slave2_i : in t_wishbone_slave_in; + slave2_o : out t_wishbone_slave_out); + end component; + + component xwb_dpram_mixed + generic( + g_size : natural := 16384; + g_init_file : string := ""; + g_must_have_init_file : boolean := true; + g_swap_word_endianness : boolean := true; + g_slave1_interface_mode : t_wishbone_interface_mode; + g_slave2_interface_mode : t_wishbone_interface_mode; + g_dpram_port_a_width : integer := 16; + g_dpram_port_b_width : integer := 32; + g_slave1_granularity : t_wishbone_address_granularity; + g_slave2_granularity : t_wishbone_address_granularity); + port( + clk_slave1_i : in std_logic; + clk_slave2_i : in std_logic; + rst_n_i : in std_logic; + + slave1_i : in t_wishbone_slave_in; + slave1_o : out t_wishbone_slave_out; + slave2_i : in t_wishbone_slave_in; + slave2_o : out t_wishbone_slave_out); + end component; + + -- Just like the DMA controller, but constantly at address 0 + component xwb_streamer is + generic( + -- Value 0 cannot stream + -- Value 1 only slaves with async ACK can stream + -- Value 2 only slaves with combined latency = 2 can stream + -- Value 3 only slaves with combined latency = 6 can stream + -- Value 4 only slaves with combined latency = 14 can stream + -- .... + logRingLen : integer := 4 + ); + port( + -- Common wishbone signals + clk_i : in std_logic; + rst_n_i : in std_logic; + -- Master reader port + r_master_i : in t_wishbone_master_in; + r_master_o : out t_wishbone_master_out; + -- Master writer port + w_master_i : in t_wishbone_master_in; + w_master_o : out t_wishbone_master_out); + end component; + + + constant c_xwb_gpio_port_sdb : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"01", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"00000000000000ff", + product => ( + vendor_id => x"000000000000CE42", -- CERN + device_id => x"441c5143", + version => x"00000001", + date => x"20121129", + name => "WB-GPIO-Port "))); + + + component wb_gpio_port + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_num_pins : natural range 1 to 256; + g_with_builtin_tristates : boolean := false); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0); + wb_cyc_i : in std_logic; + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_adr_i : in std_logic_vector(7 downto 0); + wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + gpio_b : inout std_logic_vector(g_num_pins-1 downto 0); + gpio_out_o : out std_logic_vector(g_num_pins-1 downto 0); + gpio_in_i : in std_logic_vector(g_num_pins-1 downto 0); + gpio_oen_o : out std_logic_vector(g_num_pins-1 downto 0)); + end component; + + component xwb_gpio_port + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_num_pins : natural range 1 to 256; + g_with_builtin_tristates : boolean); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + desc_o : out t_wishbone_device_descriptor; + gpio_b : inout std_logic_vector(g_num_pins-1 downto 0); + gpio_out_o : out std_logic_vector(g_num_pins-1 downto 0); + gpio_in_i : in std_logic_vector(g_num_pins-1 downto 0); + gpio_oen_o : out std_logic_vector(g_num_pins-1 downto 0)); + end component; + + constant c_xwb_i2c_master_sdb : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"01", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"00000000000000ff", + product => ( + vendor_id => x"000000000000CE42", -- CERN + device_id => x"123c5443", + version => x"00000001", + date => x"20121129", + name => "WB-I2C-Master "))); + + + component wb_i2c_master + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_num_interfaces : integer := 1); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_cyc_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_int_o : out std_logic; + wb_stall_o : out std_logic; + scl_pad_i : in std_logic_vector(g_num_interfaces-1 downto 0); + scl_pad_o : out std_logic_vector(g_num_interfaces-1 downto 0); + scl_padoen_o : out std_logic_vector(g_num_interfaces-1 downto 0); + sda_pad_i : in std_logic_vector(g_num_interfaces-1 downto 0); + sda_pad_o : out std_logic_vector(g_num_interfaces-1 downto 0); + sda_padoen_o : out std_logic_vector(g_num_interfaces-1 downto 0)); + end component; + + component xwb_i2c_master + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_num_interfaces : integer := 1); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + desc_o : out t_wishbone_device_descriptor; + scl_pad_i : in std_logic_vector(g_num_interfaces-1 downto 0); + scl_pad_o : out std_logic_vector(g_num_interfaces-1 downto 0); + scl_padoen_o : out std_logic_vector(g_num_interfaces-1 downto 0); + sda_pad_i : in std_logic_vector(g_num_interfaces-1 downto 0); + sda_pad_o : out std_logic_vector(g_num_interfaces-1 downto 0); + sda_padoen_o : out std_logic_vector(g_num_interfaces-1 downto 0)); + end component; + + component xwb_lm32 + generic ( + g_profile : string; + g_reset_vector : std_logic_vector(31 downto 0) := x"00000000"; + g_sdb_address : std_logic_vector(31 downto 0) := x"00000000"); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + irq_i : in std_logic_vector(31 downto 0); + dwb_o : out t_wishbone_master_out; + dwb_i : in t_wishbone_master_in; + iwb_o : out t_wishbone_master_out; + iwb_i : in t_wishbone_master_in); + end component; + + constant c_xwb_onewire_master_sdb : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"01", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"00000000000000ff", + product => ( + vendor_id => x"000000000000CE42", -- CERN + device_id => x"779c5443", + version => x"00000001", + date => x"20121129", + name => "WB-OneWire-Master "))); + + component wb_onewire_master + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_num_ports : integer; + g_ow_btp_normal : string := "1.0"; + g_ow_btp_overdrive : string := "5.0"); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_adr_i : in std_logic_vector(2 downto 0); + wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_ack_o : out std_logic; + wb_int_o : out std_logic; + wb_stall_o : out std_logic; + owr_pwren_o : out std_logic_vector(g_num_ports -1 downto 0); + owr_en_o : out std_logic_vector(g_num_ports -1 downto 0); + owr_i : in std_logic_vector(g_num_ports -1 downto 0)); + end component; + + component xwb_onewire_master + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_num_ports : integer; + g_ow_btp_normal : string := "5.0"; + g_ow_btp_overdrive : string := "1.0"); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + desc_o : out t_wishbone_device_descriptor; + owr_pwren_o : out std_logic_vector(g_num_ports -1 downto 0); + owr_en_o : out std_logic_vector(g_num_ports -1 downto 0); + owr_i : in std_logic_vector(g_num_ports -1 downto 0)); + end component; + + constant c_xwb_spi_sdb : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"01", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"000000000000001F", + product => ( + vendor_id => x"000000000000CE42", -- CERN + device_id => x"e503947e", -- echo "WB-SPI.Control " | md5sum | cut -c1-8 + version => x"00000001", + date => x"20121116", + name => "WB-SPI.Control "))); + + component wb_spi + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_divider_len : integer := 16; + g_max_char_len : integer := 128; + g_num_slaves : integer := 8); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_cyc_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_err_o : out std_logic; + wb_int_o : out std_logic; + wb_stall_o : out std_logic; + pad_cs_o : out std_logic_vector(g_num_slaves-1 downto 0); + pad_sclk_o : out std_logic; + pad_mosi_o : out std_logic; + pad_miso_i : in std_logic); + end component; + + component xwb_spi + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_divider_len : integer := 16; + g_max_char_len : integer := 128; + g_num_slaves : integer := 8); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + desc_o : out t_wishbone_device_descriptor; + pad_cs_o : out std_logic_vector(g_num_slaves-1 downto 0); + pad_sclk_o : out std_logic; + pad_mosi_o : out std_logic; + pad_miso_i : in std_logic); + end component; + + component wb_simple_uart + generic ( + g_with_virtual_uart : boolean := false; + g_with_physical_uart : boolean := true; + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_vuart_fifo_size : integer := 1024); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + uart_rxd_i : in std_logic := '1'; + uart_txd_o : out std_logic); + end component; + + component xwb_simple_uart + generic ( + g_with_virtual_uart : boolean := false; + g_with_physical_uart : boolean := true; + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_vuart_fifo_size : integer := 1024); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + desc_o : out t_wishbone_device_descriptor; + uart_rxd_i : in std_logic := '1'; + uart_txd_o : out std_logic); + end component; + + component wb_simple_pwm + generic ( + g_num_channels : integer range 1 to 8; + g_regs_size : integer range 1 to 16 := 16; + g_default_period : integer range 0 to 255 := 0; + g_default_presc : integer range 0 to 255 := 0; + g_default_val : integer range 0 to 255 := 0; + g_interface_mode : t_wishbone_interface_mode := PIPELINED; + g_address_granularity : t_wishbone_address_granularity := BYTE); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + wb_adr_i : in std_logic_vector(5 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + pwm_o : out std_logic_vector(g_num_channels-1 downto 0)); + end component; + + component xwb_simple_pwm + generic ( + g_num_channels : integer range 1 to 8; + g_regs_size : integer range 1 to 16 := 16; + g_default_period : integer range 0 to 255 := 0; + g_default_presc : integer range 0 to 255 := 0; + g_default_val : integer range 0 to 255 := 0; + g_interface_mode : t_wishbone_interface_mode := PIPELINED; + g_address_granularity : t_wishbone_address_granularity := BYTE); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + pwm_o : out std_logic_vector(g_num_channels-1 downto 0)); + end component; + + component wb_tics + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_period : integer); + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(3 downto 0); + wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic); + end component; + + component xwb_tics + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_period : integer); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + desc_o : out t_wishbone_device_descriptor); + end component; + + component wb_vic + generic ( + g_interface_mode : t_wishbone_interface_mode; + g_address_granularity : t_wishbone_address_granularity; + g_num_interrupts : natural; + g_init_vectors : t_wishbone_address_array := cc_dummy_address_array; + g_retry_timeout : integer := 0 + ); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + wb_adr_i : in std_logic_vector(c_wishbone_address_width-1 downto 0); + wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + irqs_i : in std_logic_vector(g_num_interrupts-1 downto 0); + irq_master_o : out std_logic); + end component; + + constant c_xwb_vic_sdb : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"01", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"00000000000000ff", + product => ( + vendor_id => x"000000000000CE42", -- CERN + device_id => x"00000013", + version => x"00000002", + date => x"20120113", + name => "WB-VIC-Int.Control "))); + + component xwb_vic + generic ( + g_interface_mode : t_wishbone_interface_mode; + g_address_granularity : t_wishbone_address_granularity; + g_num_interrupts : natural; + g_init_vectors : t_wishbone_address_array := cc_dummy_address_array; + g_retry_timeout : integer := 0); + + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + irqs_i : in std_logic_vector(g_num_interrupts-1 downto 0); + irq_master_o : out std_logic); + end component; + + constant c_wb_serial_lcd_sdb : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"00", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"00000000000000ff", + product => ( + vendor_id => x"0000000000000651", -- GSI + device_id => x"b77a5045", + version => x"00000001", + date => x"20130222", + name => "SERIAL-LCD-DISPLAY "))); + component wb_serial_lcd + generic( + g_cols : natural := 40; + g_rows : natural := 24; + g_hold : natural := 15; -- How many times to repeat a line (for sharpness) + g_wait : natural := 1); -- How many cycles per state change (for 20MHz timing) + port( + slave_clk_i : in std_logic; + slave_rstn_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + di_clk_i : in std_logic; + di_scp_o : out std_logic; + di_lp_o : out std_logic; + di_flm_o : out std_logic; + di_dat_o : out std_logic); + end component; + + function f_wb_spi_flash_sdb(g_bits : natural) return t_sdb_device; + component wb_spi_flash is + generic( + g_port_width : natural := 1; -- 1 for EPCS, 4 for EPCQ + g_addr_width : natural := 24; -- log of memory (24=16MB) + g_idle_time : natural := 3; + g_dummy_time : natural := 8; + -- leave these at defaults if you have: + -- a) slow clock, b) valid constraints, or c) registered in/outputs + g_input_latch_edge : std_logic := '1'; -- rising + g_output_latch_edge : std_logic := '0'; -- falling + g_input_to_output_cycles : natural := 1); -- between 1 and 8 + port( + clk_i : in std_logic; + rstn_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + + -- For properly constrained designs, set clk_out_i = clk_in_i. + clk_out_i : in std_logic; + clk_in_i : in std_logic; + ncs_o : out std_logic; + oe_o : out std_logic_vector(g_port_width-1 downto 0); + asdi_o : out std_logic_vector(g_port_width-1 downto 0); + data_i : in std_logic_vector(g_port_width-1 downto 0); + + external_request_i : in std_logic := '0'; -- JTAG wants to use SPI? + external_granted_o : out std_logic); + end component; + + ----------------------------------------------------------------------------- + -- I2C to Wishbone bridge, following protocol defined with ELMA + ----------------------------------------------------------------------------- + component wb_i2c_bridge is + generic + ( + -- FSM watchdog timeout, see Appendix A in the component documentation for + -- an example of setting this generic + g_fsm_wdt : positive + ); + port + ( + -- Clock, reset + clk_i : in std_logic; + rst_n_i : in std_logic; + + -- I2C lines + scl_i : in std_logic; + scl_o : out std_logic; + scl_en_o : out std_logic; + sda_i : in std_logic; + sda_o : out std_logic; + sda_en_o : out std_logic; + + -- I2C address + i2c_addr_i : in std_logic_vector(6 downto 0); + + -- Status outputs + -- TIP : Transfer In Progress + -- '1' when the I2C slave detects a matching I2C address, thus a + -- transfer is in progress + -- '0' when idle + -- ERR : Error + -- '1' when the SysMon attempts to access an invalid WB slave + -- '0' when idle + -- WDTO : Watchdog timeout (single clock cycle pulse) + -- '1' -- timeout of watchdog occured + -- '0' -- when idle + tip_o : out std_logic; + err_p_o : out std_logic; + wdto_p_o : out std_logic; + + -- Wishbone master signals + wbm_stb_o : out std_logic; + wbm_cyc_o : out std_logic; + wbm_sel_o : out std_logic_vector(3 downto 0); + wbm_we_o : out std_logic; + wbm_dat_i : in std_logic_vector(31 downto 0); + wbm_dat_o : out std_logic_vector(31 downto 0); + wbm_adr_o : out std_logic_vector(31 downto 0); + wbm_ack_i : in std_logic; + wbm_rty_i : in std_logic; + wbm_err_i : in std_logic + ); + end component wb_i2c_bridge; + + ------------------------------------------------------------------------------ + -- MultiBoot component + ------------------------------------------------------------------------------ + component xwb_xil_multiboot is + port + ( + -- Clock and reset input ports + clk_i : in std_logic; + rst_n_i : in std_logic; + + -- Wishbone ports + wbs_i : in t_wishbone_slave_in; + wbs_o : out t_wishbone_slave_out; + + -- SPI ports + spi_cs_n_o : out std_logic; + spi_sclk_o : out std_logic; + spi_mosi_o : out std_logic; + spi_miso_i : in std_logic + ); + end component xwb_xil_multiboot; + + constant c_xwb_xil_multiboot_sdb : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"00", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"000000000000001f", + product => ( + vendor_id => x"000000000000CE42", -- CERN + device_id => x"11da333d", -- echo "WB-Xilinx-MultiBoot" | md5sum | cut -c1-8 + version => x"00000001", + date => x"20140313", + name => "WB-Xilinx-MultiBoot"))); + + constant cc_dummy_sdb_device : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"01", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"00000000000000ff", + product => ( + vendor_id => x"000000000000CE42", -- CERN + device_id => x"ffffffff", + version => x"00000001", + date => x"20150722", + name => "Unused-Device "))); + + +end wishbone_pkg; + +package body wishbone_pkg is + -- f_wb_wr: processes a write reqest to a slave register with select lines. valid modes are "owr", "set" and "clr" + function f_wb_wr(pval : std_logic_vector; ival : std_logic_vector; sel : std_logic_vector; mode : string := "owr") return std_logic_vector is + variable n_sel : std_logic_vector(pval'range); + variable n_val : std_logic_vector(pval'range); + variable result : std_logic_vector(pval'range); + begin + for i in pval'range loop + n_sel(i) := sel((i-pval'low) / 8); -- subtract the low index for when register width > wishbone data width + n_val(i) := ival(i-pval'low); + end loop; + + if(mode = "set") then + result := pval or (n_val and n_sel); + elsif (mode = "clr") then + result := pval and not (n_val and n_sel); + else + result := (pval and not n_sel) or (n_val and n_sel); + end if; + + return result; + end f_wb_wr; + + function f_ceil_log2(x : natural) return natural is + begin + if x <= 1 + then return 0; + else return f_ceil_log2((x+1)/2) +1; + end if; + end f_ceil_log2; + + function f_sdb_embed_product(product : t_sdb_product) + return std_logic_vector -- (319 downto 8) + is + variable result : std_logic_vector(319 downto 8); + begin + result(319 downto 256) := product.vendor_id; + result(255 downto 224) := product.device_id; + result(223 downto 192) := product.version; + result(191 downto 160) := product.date; + for i in 0 to 18 loop -- string to ascii + result(159-i*8 downto 152-i*8) := + std_logic_vector(to_unsigned(character'pos(product.name(i+1)), 8)); + end loop; + return result; + end; + + function f_sdb_extract_product(sdb_record : std_logic_vector(319 downto 8)) + return t_sdb_product + is + variable result : t_sdb_product; + begin + result.vendor_id := sdb_record(319 downto 256); + result.device_id := sdb_record(255 downto 224); + result.version := sdb_record(223 downto 192); + result.date := sdb_record(191 downto 160); + for i in 0 to 18 loop -- ascii to string + result.name(i+1) := character'val(to_integer(unsigned(sdb_record(159-i*8 downto 152-i*8)))); + end loop; + return result; + end; + + function f_sdb_embed_component(sdb_component : t_sdb_component; address : t_wishbone_address) + return std_logic_vector -- (447 downto 8) + is + variable result : std_logic_vector(447 downto 8); + + constant first : unsigned(63 downto 0) := unsigned(sdb_component.addr_first); + constant last : unsigned(63 downto 0) := unsigned(sdb_component.addr_last); + variable base : unsigned(63 downto 0) := (others => '0'); + begin + base(address'length-1 downto 0) := unsigned(address); + + result(447 downto 384) := std_logic_vector(base); + result(383 downto 320) := std_logic_vector(base + last - first); + result(319 downto 8) := f_sdb_embed_product(sdb_component.product); + return result; + end; + + function f_sdb_extract_component(sdb_record : std_logic_vector(447 downto 8)) + return t_sdb_component + is + variable result : t_sdb_component; + begin + result.addr_first := sdb_record(447 downto 384); + result.addr_last := sdb_record(383 downto 320); + result.product := f_sdb_extract_product(sdb_record(319 downto 8)); + return result; + end; + + function f_sdb_embed_device(device : t_sdb_device; address : t_wishbone_address) + return t_sdb_record + is + variable result : t_sdb_record; + begin + result(511 downto 496) := device.abi_class; + result(495 downto 488) := device.abi_ver_major; + result(487 downto 480) := device.abi_ver_minor; + result(479 downto 456) := (others => '0'); + result(455) := device.wbd_endian; + result(454 downto 452) := (others => '0'); + result(451 downto 448) := device.wbd_width; + result(447 downto 8) := f_sdb_embed_component(device.sdb_component, address); + result(7 downto 0) := x"01"; -- device + return result; + end; + + function f_sdb_extract_device(sdb_record : t_sdb_record) + return t_sdb_device + is + variable result : t_sdb_device; + begin + result.abi_class := sdb_record(511 downto 496); + result.abi_ver_major := sdb_record(495 downto 488); + result.abi_ver_minor := sdb_record(487 downto 480); + result.wbd_endian := sdb_record(452); + result.wbd_width := sdb_record(451 downto 448); + result.sdb_component := f_sdb_extract_component(sdb_record(447 downto 8)); + + assert sdb_record(7 downto 0) = x"01" + report "Cannot extract t_sdb_device from record of type " & integer'image(to_integer(unsigned(sdb_record(7 downto 0)))) & "." + severity failure; + + return result; + end; + + function f_sdb_embed_msi(msi : t_sdb_msi; address : t_wishbone_address) + return t_sdb_record + is + variable result : t_sdb_record; + begin + result(511 downto 456) := (others => '0'); + result(455) := msi.wbd_endian; + result(454 downto 452) := (others => '0'); + result(451 downto 448) := msi.wbd_width; + result(447 downto 8) := f_sdb_embed_component(msi.sdb_component, address); + result(7 downto 0) := x"03"; -- msi + return result; + end; + + function f_sdb_extract_msi(sdb_record : t_sdb_record) + return t_sdb_msi + is + variable result : t_sdb_msi; + begin + result.wbd_endian := sdb_record(452); + result.wbd_width := sdb_record(451 downto 448); + result.sdb_component := f_sdb_extract_component(sdb_record(447 downto 8)); + + assert sdb_record(7 downto 0) = x"03" + report "Cannot extract t_sdb_msi from record of type " & integer'image(to_integer(unsigned(sdb_record(7 downto 0)))) & "." + severity failure; + + return result; + end; + + function f_sdb_embed_integration(integr : t_sdb_integration) + return t_sdb_record + is + variable result : t_sdb_record; + begin + result(511 downto 320) := (others => '0'); + result(319 downto 8) := f_sdb_embed_product(integr.product); + result(7 downto 0) := x"80"; -- integration record + return result; + end f_sdb_embed_integration; + + function f_sdb_extract_integration(sdb_record : t_sdb_record) + return t_sdb_integration + is + variable result : t_sdb_integration; + begin + result.product := f_sdb_extract_product(sdb_record(319 downto 8)); + + assert sdb_record(7 downto 0) = x"80" + report "Cannot extract t_sdb_integration from record of type " & Integer'image(to_integer(unsigned(sdb_record(7 downto 0)))) & "." + severity Failure; + + return result; + end f_sdb_extract_integration; + + function f_sdb_embed_repo_url(url : t_sdb_repo_url) + return t_sdb_record + is + variable result : t_sdb_record; + begin + result(511 downto 8) := f_string2svl(url.repo_url); + result( 7 downto 0) := x"81"; -- repo_url record + return result; + end; + + function f_sdb_extract_repo_url(sdb_record : t_sdb_record) + return t_sdb_repo_url + is + variable result : t_sdb_repo_url; + begin + result.repo_url := f_slv2string(sdb_record(511 downto 8)); + + assert sdb_record(7 downto 0) = x"81" + report "Cannot extract t_sdb_repo_url from record of type " & Integer'image(to_integer(unsigned(sdb_record(7 downto 0)))) & "." + severity Failure; + + return result; + end; + + function f_sdb_embed_synthesis(syn : t_sdb_synthesis) + return t_sdb_record + is + variable result : t_sdb_record; + begin + result(511 downto 384) := f_string2svl(syn.syn_module_name); + result(383 downto 256) := f_string2bits(syn.syn_commit_id); + result(255 downto 192) := f_string2svl(syn.syn_tool_name); + result(191 downto 160) := syn.syn_tool_version; + result(159 downto 128) := syn.syn_date; + result(127 downto 8) := f_string2svl(syn.syn_username); + result( 7 downto 0) := x"82"; -- synthesis record + return result; + end; + + function f_sdb_extract_synthesis(sdb_record : t_sdb_record) + return t_sdb_synthesis + is + variable result : t_sdb_synthesis; + begin + result.syn_module_name := f_slv2string(sdb_record(511 downto 384)); + result.syn_commit_id := f_bits2string(sdb_record(383 downto 256)); + result.syn_tool_name := f_slv2string(sdb_record(255 downto 192)); + result.syn_tool_version := sdb_record(191 downto 160); + result.syn_date := sdb_record(159 downto 128); + result.syn_username := f_slv2string(sdb_record(127 downto 8)); + + assert sdb_record(7 downto 0) = x"82" + report "Cannot extract t_sdb_repo_url from record of type " & Integer'image(to_integer(unsigned(sdb_record(7 downto 0)))) & "." + severity Failure; + + return result; + end; + + function f_sdb_embed_bridge(bridge : t_sdb_bridge; address : t_wishbone_address) + return t_sdb_record + is + variable result : t_sdb_record; + + constant first : unsigned(63 downto 0) := unsigned(bridge.sdb_component.addr_first); + constant child : unsigned(63 downto 0) := unsigned(bridge.sdb_child); + variable base : unsigned(63 downto 0) := (others => '0'); + begin + base(address'length-1 downto 0) := unsigned(address); + + result(511 downto 448) := std_logic_vector(base + child - first); + result(447 downto 8) := f_sdb_embed_component(bridge.sdb_component, address); + result(7 downto 0) := x"02"; -- bridge + return result; + end; + + function f_sdb_extract_bridge(sdb_record : t_sdb_record) + return t_sdb_bridge + is + variable result : t_sdb_bridge; + begin + result.sdb_child := sdb_record(511 downto 448); + result.sdb_component := f_sdb_extract_component(sdb_record(447 downto 8)); + + assert sdb_record(7 downto 0) = x"02" + report "Cannot extract t_sdb_bridge from record of type " & integer'image(to_integer(unsigned(sdb_record(7 downto 0)))) & "." + severity failure; + + return result; + end; + + function f_sdb_auto_device(device : t_sdb_device; enable : boolean := true; name: string := "") + return t_sdb_record + is + constant c_zero : t_wishbone_address := (others => '0'); + variable v_device: t_sdb_device := device; + variable v_empty : t_sdb_record := (others => '0'); + begin + v_empty(7 downto 0) := x"f1"; + if name /= "" then + v_device.sdb_component.product.name := f_string_fix_len(name , 19, ' ', false); + end if; + if enable then + v_empty := f_sdb_embed_device(v_device, c_zero); + end if; + return v_empty; + end f_sdb_auto_device; + + function f_sdb_auto_bridge(bridge : t_sdb_bridge; enable : boolean := true; name: string := "") + return t_sdb_record + is + constant c_zero : t_wishbone_address := (others => '0'); + variable v_bridge: t_sdb_bridge := bridge; + variable v_empty : t_sdb_record := (others => '0'); + begin + v_empty(7 downto 0) := x"f2"; + if name /= "" then + v_bridge.sdb_component.product.name := f_string_fix_len(name , 19, ' ', false); + end if; + if enable then + v_empty := f_sdb_embed_bridge(v_bridge, c_zero); + end if; + return v_empty; + end f_sdb_auto_bridge; + + function f_sdb_auto_msi(msi : t_sdb_msi; enable : boolean := true) + return t_sdb_record + is + constant c_zero : t_wishbone_address := (others => '0'); + variable v_empty : t_sdb_record := (others => '0'); + begin + v_empty(7 downto 0) := x"f3"; + if enable then + return f_sdb_embed_msi(msi, c_zero); + else + return v_empty; + end if; + end f_sdb_auto_msi; + + subtype t_usdb_address is unsigned(63 downto 0); + type t_usdb_address_array is array(natural range <>) of t_usdb_address; + + -- We map devices by placing the smallest ones first. + -- This is guaranteed to pack the maximum number of devices in the smallest space. + -- If a device has an address != 0, we leave it alone and let the crossbar confirm + -- that the address does not cause a conflict. + function f_sdb_auto_layout_helper(records : t_sdb_record_array) + return t_usdb_address_array + is + alias c_records : t_sdb_record_array(records'length-1 downto 0) is records; + constant c_zero : t_usdb_address := (others => '0'); + + constant c_used_entries : natural := c_records'length + 1; + constant c_rom_entries : natural := 2**f_ceil_log2(c_used_entries); + constant c_rom_bytes : natural := c_rom_entries * c_sdb_device_length / 8; + + variable v_component : t_sdb_component; + variable v_sizes : t_usdb_address_array(c_records'length downto 0); + variable v_address : t_usdb_address_array(c_records'length downto 0); + variable v_bus_map : std_logic_vector(c_records'length downto 0) := (others => '0'); + variable v_bus_cursor: unsigned(63 downto 0) := (others => '0'); + variable v_msi_map : std_logic_vector(c_records'length downto 0) := (others => '0'); + variable v_msi_cursor: unsigned(63 downto 0) := (others => '0'); + variable v_increment : unsigned(63 downto 0) := (others => '0'); + variable v_type : std_logic_vector(7 downto 0); + begin + -- First, extract the length of the devices, ignoring those not to be mapped + for i in c_records'range loop + v_component := f_sdb_extract_component(c_records(i)(447 downto 8)); + v_sizes(i) := unsigned(v_component.addr_last); + v_address(i) := unsigned(v_component.addr_first); + + -- Silently round up to a power of two; the crossbar will give a warning for us + for j in 62 downto 0 loop + v_sizes(i)(j) := v_sizes(i)(j+1) or v_sizes(i)(j); + end loop; + + -- Only map devices/bridges at address zero + if v_address(i) = c_zero then + v_type := c_records(i)(7 downto 0); + case v_type is + when x"01" => v_bus_map(i) := '1'; + when x"02" => v_bus_map(i) := '1'; + when x"03" => v_msi_map(i) := '1'; + when others => null; + end case; + end if; + end loop; + + -- Assign the SDB record a spot as well + v_address(c_records'length) := (others => '0'); + v_sizes(c_records'length) := to_unsigned(c_rom_bytes-1, 64); + v_bus_map(c_records'length) := '1'; + + -- Start assigning addresses + for j in 0 to 63 loop + v_increment := (others => '0'); + v_increment(j) := '1'; + + for i in 0 to c_records'length loop + if v_bus_map(i) = '1' and v_sizes(i)(j) = '0' then + v_bus_map(i) := '0'; + v_address(i) := v_bus_cursor; + v_bus_cursor := v_bus_cursor + v_increment; + end if; + if v_msi_map(i) = '1' and v_sizes(i)(j) = '0' then + v_msi_map(i) := '0'; + v_address(i) := v_msi_cursor; + v_msi_cursor := v_msi_cursor + v_increment; + end if; + end loop; + + -- Round up to the next required alignment + if v_bus_cursor(j) = '1' then + v_bus_cursor := v_bus_cursor + v_increment; + end if; + if v_msi_cursor(j) = '1' then + v_msi_cursor := v_msi_cursor + v_increment; + end if; + end loop; + + return v_address; + end f_sdb_auto_layout_helper; + + function f_sdb_auto_layout(records : t_sdb_record_array) + return t_sdb_record_array + is + alias c_records : t_sdb_record_array(records'length-1 downto 0) is records; + variable v_typ : std_logic_vector(7 downto 0); + variable v_result : t_sdb_record_array(c_records'range) := c_records; + constant c_address : t_usdb_address_array := f_sdb_auto_layout_helper(c_records); + variable v_address : t_wishbone_address; + begin + -- Put the addresses into the mapping + for i in v_result'range loop + v_typ := c_records(i)(7 downto 0); + v_address := std_logic_vector(c_address(i)(t_wishbone_address'range)); + + case v_typ is + when x"01" => v_result(i) := f_sdb_embed_device(f_sdb_extract_device(v_result(i)), v_address); + when x"02" => v_result(i) := f_sdb_embed_bridge(f_sdb_extract_bridge(v_result(i)), v_address); + when x"03" => v_result(i) := f_sdb_embed_msi (f_sdb_extract_msi (v_result(i)), v_address); + when others => null; + end case; + end loop; + + return v_result; + end f_sdb_auto_layout; + + function f_sdb_auto_layout(slaves : t_sdb_record_array; masters : t_sdb_record_array) + return t_sdb_record_array + is begin + return f_sdb_auto_layout(masters & slaves); + end f_sdb_auto_layout; + + function f_sdb_auto_sdb(records : t_sdb_record_array) + return t_wishbone_address + is + alias c_records : t_sdb_record_array(records'length-1 downto 0) is records; + constant c_address : t_usdb_address_array(c_records'length downto 0) := f_sdb_auto_layout_helper(c_records); + begin + return std_logic_vector(c_address(c_records'length)(t_wishbone_address'range)); + end f_sdb_auto_sdb; + + function f_sdb_auto_sdb(slaves : t_sdb_record_array; masters : t_sdb_record_array) + return t_wishbone_address + is begin + return f_sdb_auto_sdb(masters & slaves); + end f_sdb_auto_sdb; + +--**************************************************************************************************************************-- +-- START MAT's NEW FUNCTIONS FROM 18th Oct 2013 +------------------------------------------------------------------------------------------------------------------------------ + + + function f_sdb_create_array(g_enum_dev_id : boolean := false; + g_dev_id_offs : natural := 0; + g_enum_dev_name : boolean := false; + g_dev_name_offs : natural := 0; + device : t_sdb_device; + instances : natural := 1) + return t_sdb_record_array is + variable result : t_sdb_record_array(instances-1 downto 0); + variable i,j, pos : natural; + variable dev, newdev : t_sdb_device; + variable serial_no : string(1 to 3); + variable text_possible : boolean := false; + begin + dev := device; + + report "### Creating " & integer'image(instances) & " x " & dev.sdb_component.product.name + severity note; + for i in 0 to instances-1 loop + newdev := dev; + if(g_enum_dev_id) then + dev.sdb_component.product.device_id := + std_logic_vector( unsigned(dev.sdb_component.product.device_id) + + to_unsigned(i+g_dev_id_offs, dev.sdb_component.product.device_id'length)); + end if; + if(g_enum_dev_name) then + -- find end of name + + for j in dev.sdb_component.product.name'length downto 1 loop + if(dev.sdb_component.product.name(j) /= ' ') then + pos := j; + exit; + end if; + end loop; + -- convert i+g_dev_name_offs to string + serial_no := f_string_fix_len(integer'image(i+g_dev_name_offs), serial_no'length); + report "### Now: " & serial_no & " of " & dev.sdb_component.product.name severity note; + -- check if space is sufficient + assert (serial_no'length+1 <= dev.sdb_component.product.name'length - pos) + report "Not enough space in namestring of sdb_device " & dev.sdb_component.product.name + & " to add serial number " & serial_no & ". Space available " & + integer'image(dev.sdb_component.product.name'length-pos-1) & ", required " + & integer'image(serial_no'length+1) + severity Failure; + end if; + if(g_enum_dev_name) then + newdev.sdb_component.product.name(pos+1) := '_'; + for j in 1 to serial_no'length loop + newdev.sdb_component.product.name(pos+1+j) := serial_no(j); + end loop; + end if; + + -- insert + report "### to: " & newdev.sdb_component.product.name severity note; + result(i) := f_sdb_embed_device(newdev, (others=>'0')); + end loop; + return result; + end f_sdb_create_array; + + function f_sdb_join_arrays(a : t_sdb_record_array; b : t_sdb_record_array) return t_sdb_record_array is + variable result : t_sdb_record_array(a'length+b'length-1 downto 0); + variable i : natural; + begin + for i in 0 to a'left loop + result(i) := a(i); + end loop; + for i in 0 to b'left loop + result(i+a'length) := b(i); + end loop; + return result; + end f_sdb_join_arrays; + + + function f_sdb_extract_base_addr(sdb_record : t_sdb_record) return std_logic_vector is + begin + return sdb_record(447 downto 384); + end f_sdb_extract_base_addr; + + function f_sdb_extract_end_addr(sdb_record : t_sdb_record) return std_logic_vector is + begin + return sdb_record(383 downto 320); + end f_sdb_extract_end_addr; + + + function f_align_addr_offset(offs : unsigned; this_rng : unsigned; prev_rng : unsigned) + return unsigned is + variable this_pow, prev_pow : natural; + variable start, env, result : unsigned(63 downto 0) := (others => '0'); + begin + start(offs'left downto 0) := offs; + --calculate address envelopes (next power of 2) for previous and this component and choose the larger one + this_pow := f_hot_to_bin(std_logic_vector(this_rng)); + prev_pow := f_hot_to_bin(std_logic_vector(prev_rng)); + -- no max(). thank you very much, std_numeric :-/ + if(this_pow >= prev_pow) then + env(this_pow) := '1'; + else + env(prev_pow) := '1'; + end if; + --round up to the next multiple of the envelope... + if(prev_rng /= 0) then + result := start + env - (start mod env); + else + result := start; --...except for first element, result is start. + end if; + return result; + end f_align_addr_offset; + + + -- generates aligned address map for an sdb_record_array, accepts optional start offset + function f_sdb_automap_array(sdb_array : t_sdb_record_array; start_offset : t_wishbone_address := (others => '0')) + return t_sdb_record_array is + constant len : natural := sdb_array'length; + variable this_rng : unsigned(63 downto 0) := (others => '0'); + variable prev_rng : unsigned(63 downto 0) := (others => '0'); + variable prev_offs : unsigned(63 downto 0) := (others => '0'); + variable this_offs : unsigned(63 downto 0) := (others => '0'); + variable device : t_sdb_device; + variable bridge : t_sdb_bridge; + variable sdb_type : std_logic_vector(7 downto 0); + variable i : natural; + variable result : t_sdb_record_array(sdb_array'length-1 downto 0); -- last + begin + + prev_offs(start_offset'left downto 0) := unsigned(start_offset); + --traverse the array + for i in 0 to len-1 loop + -- find the fitting extraction function by evaling the type byte. + -- could also use the component, but it's safer to use Wes' embed and extract functions. + sdb_type := sdb_array(i)(7 downto 0); + case sdb_type is + --device + when x"01" => device := f_sdb_extract_device(sdb_array(i)); + this_rng := unsigned(device.sdb_component.addr_last) - unsigned(device.sdb_component.addr_first); + this_offs := f_align_addr_offset(prev_offs, this_rng, prev_rng); + result(i) := f_sdb_embed_device(device, std_logic_vector(this_offs(31 downto 0))); + --bridge + when x"02" => bridge := f_sdb_extract_bridge(sdb_array(i)); + this_rng := unsigned(bridge.sdb_component.addr_last) - unsigned(bridge.sdb_component.addr_first); + this_offs := f_align_addr_offset(prev_offs, this_rng, prev_rng); + result(i) := f_sdb_embed_bridge(bridge, std_logic_vector(this_offs(31 downto 0)) ); + --other + when others => result(i) := sdb_array(i); + end case; + -- doesnt hurt because this_* doesnt change if its not a device or bridge + prev_rng := this_rng; + prev_offs := this_offs; + end loop; + report "##* " & integer'image(sdb_array'length) & " Elements, last address: " & f_bits2string(std_logic_vector(this_offs+this_rng)) severity Note; + return result; + end f_sdb_automap_array; + + + -- find place for sdb rom on crossbar and return address. try to put it in an address gap. + function f_sdb_create_rom_addr(sdb_array : t_sdb_record_array) return t_wishbone_address is + constant len : natural := sdb_array'length; + constant rom_bytes : natural := (2**f_ceil_log2(sdb_array'length + 1)) * (c_sdb_device_length / 8); + variable result : t_wishbone_address := (others => '0'); + variable this_base, this_end : unsigned(63 downto 0) := (others => '0'); + variable prev_base, prev_end : unsigned(63 downto 0) := (others => '0'); + variable rom_base : unsigned(63 downto 0) := (others => '0'); + variable sdb_type : std_logic_vector(7 downto 0); + begin + --traverse the array + for i in 0 to len-1 loop + sdb_type := sdb_array(i)(7 downto 0); + if(sdb_type = x"01" or sdb_type = x"02") then + -- get + this_base := unsigned(f_sdb_extract_base_addr(sdb_array(i))); + this_end := unsigned(f_sdb_extract_end_addr(sdb_array(i))); + if(unsigned(result) = 0) then + rom_base := f_align_addr_offset(prev_base, to_unsigned(rom_bytes-1, 64), (prev_end-prev_base)); + if(rom_base + to_unsigned(rom_bytes, 64) <= this_base) then + result := std_logic_vector(rom_base(t_wishbone_address'left downto 0)); + end if; + end if; + prev_base := this_base; + prev_end := this_end; + end if; + end loop; + -- if there was no gap to fit the sdb rom, place it at the end + if(unsigned(result) = 0) then + result := std_logic_vector(f_align_addr_offset(this_base, to_unsigned(rom_bytes-1, 64), + this_end-this_base)(t_wishbone_address'left downto 0)); + end if; + return result; + end f_sdb_create_rom_addr; +------------------------------------------------------------------------------------------------------------------------------ +-- END MAT's NEW FUNCTIONS FROM 18th Oct 2013 +------------------------------------------------------------------------------------------------------------------------------ + + function f_sdb_bus_end( + g_wraparound : boolean; + g_layout : t_sdb_record_array; + g_sdb_addr : t_wishbone_address; + msi : boolean) return unsigned + is + alias c_layout : t_sdb_record_array(g_layout'length-1 downto 0) is g_layout; + + -- How much space does the ROM need? + constant c_used_entries : natural := c_layout'length + 1; + constant c_rom_entries : natural := 2**f_ceil_log2(c_used_entries); -- next power of 2 + constant c_sdb_bytes : natural := c_sdb_device_length / 8; + constant c_rom_bytes : natural := c_rom_entries * c_sdb_bytes; + + variable result : unsigned(63 downto 0) := (others => '0'); + variable typ : std_logic_vector(7 downto 0); + variable last : unsigned(63 downto 0); + begin + if not msi then + -- The ROM will be an addressed slave as well + result := (others => '0'); + result(g_sdb_addr'range) := unsigned(g_sdb_addr); + result := result + to_unsigned(c_rom_bytes, 64) - 1; + end if; + + for i in c_layout'range loop + typ := c_layout(i)(7 downto 0); + last := unsigned(f_sdb_extract_component(c_layout(i)(447 downto 8)).addr_last); + case typ is + when x"01" => if not msi and last > result then result := last; end if; + when x"02" => if not msi and last > result then result := last; end if; + when x"03" => if msi and last > result then result := last; end if; + when others => null; + end case; + end loop; + + -- round result up to a power of two -1 + for i in 62 downto 0 loop + result(i) := result(i) or result(i+1); + end loop; + + if not g_wraparound then + result := (others => '0'); + for i in 0 to c_wishbone_address_width-1 loop + result(i) := '1'; + end loop; + end if; + + return result; + end f_sdb_bus_end; + + function f_xwb_bridge_manual_sdb( + g_size : t_wishbone_address; + g_sdb_addr : t_wishbone_address) return t_sdb_bridge + is + variable result : t_sdb_bridge; + begin + result.sdb_child := (others => '0'); + result.sdb_child(c_wishbone_address_width-1 downto 0) := g_sdb_addr; + + result.sdb_component.addr_first := (others => '0'); + result.sdb_component.addr_last := (others => '0'); + result.sdb_component.addr_last(c_wishbone_address_width-1 downto 0) := g_size; + + result.sdb_component.product.vendor_id := x"0000000000000651"; -- GSI + result.sdb_component.product.device_id := x"eef0b198"; + result.sdb_component.product.version := x"00000001"; + result.sdb_component.product.date := x"20120511"; + result.sdb_component.product.name := "WB4-Bridge-GSI "; + + return result; + end f_xwb_bridge_manual_sdb; + + function f_xwb_bridge_layout_sdb( -- determine bus size from layout + g_wraparound : boolean := true; + g_layout : t_sdb_record_array; + g_sdb_addr : t_wishbone_address) return t_sdb_bridge + is + variable address : t_wishbone_address; + begin + address := std_logic_vector(f_sdb_bus_end(g_wraparound, g_layout, g_sdb_addr, false)(address'range)); + return f_xwb_bridge_manual_sdb(address, g_sdb_addr); + end f_xwb_bridge_layout_sdb; + + function f_xwb_msi_manual_sdb( + g_size : t_wishbone_address) return t_sdb_msi + is + variable result : t_sdb_msi; + begin + result.wbd_endian := '0'; + result.wbd_width := x"7"; + + result.sdb_component.addr_first := (others => '0'); + result.sdb_component.addr_last := (others => '0'); + result.sdb_component.addr_last(c_wishbone_address_width-1 downto 0) := g_size; + + result.sdb_component.product.vendor_id := x"0000000000000651"; -- GSI + result.sdb_component.product.device_id := x"aa7bfb3c"; + result.sdb_component.product.version := x"00000001"; + result.sdb_component.product.date := x"20160422"; + result.sdb_component.product.name := "WB4-MSI-Bridge-GSI "; + + return result; + end f_xwb_msi_manual_sdb; + + function f_xwb_msi_layout_sdb( -- determine MSI size from layout + g_layout : t_sdb_record_array) return t_sdb_msi + is + constant zero : t_wishbone_address := (others => '0'); + variable address : t_wishbone_address; + begin + address := std_logic_vector(f_sdb_bus_end(true, g_layout, zero, true)(address'range)); + return f_xwb_msi_manual_sdb(address); + end f_xwb_msi_layout_sdb; + + function f_xwb_dpram(g_size : natural) return t_sdb_device + is + variable result : t_sdb_device; + begin + result.abi_class := x"0001"; -- RAM device + result.abi_ver_major := x"01"; + result.abi_ver_minor := x"00"; + result.wbd_width := x"7"; -- 32/16/8-bit supported + result.wbd_endian := c_sdb_endian_big; + + result.sdb_component.addr_first := (others => '0'); + result.sdb_component.addr_last := std_logic_vector(to_unsigned(g_size*4-1, 64)); + + result.sdb_component.product.vendor_id := x"000000000000CE42"; -- CERN + result.sdb_component.product.device_id := x"66cfeb52"; + result.sdb_component.product.version := x"00000001"; + result.sdb_component.product.date := x"20120305"; + result.sdb_component.product.name := "WB4-BlockRAM "; + + return result; + end f_xwb_dpram; + + function f_bits2string(s : std_logic_vector) return string is + --- extend length to full hex nibble + variable result : string((s'length+7)/4 downto 1); + variable s_norm : std_logic_vector(result'length*4-1 downto 0) := (others=>'0'); + variable cut : natural; + variable nibble: std_logic_vector(3 downto 0); + constant len : natural := result'length; + begin + s_norm(s'length-1 downto 0) := s; + for i in len-1 downto 0 loop + nibble := s_norm(i*4+3 downto i*4); + case nibble is + when "0000" => result(i+1) := '0'; + when "0001" => result(i+1) := '1'; + when "0010" => result(i+1) := '2'; + when "0011" => result(i+1) := '3'; + when "0100" => result(i+1) := '4'; + when "0101" => result(i+1) := '5'; + when "0110" => result(i+1) := '6'; + when "0111" => result(i+1) := '7'; + when "1000" => result(i+1) := '8'; + when "1001" => result(i+1) := '9'; + when "1010" => result(i+1) := 'a'; + when "1011" => result(i+1) := 'b'; + when "1100" => result(i+1) := 'c'; + when "1101" => result(i+1) := 'd'; + when "1110" => result(i+1) := 'e'; + when "1111" => result(i+1) := 'f'; + when others => result(i+1) := 'X'; + end case; + end loop; + + -- trim leading 0s + strip : for i in result'length downto 1 loop + cut := i; + exit strip when result(i) /= '0'; + end loop; + + return "0x" & result(cut downto 1); + end f_bits2string; + + -- Converts string (hex number, without leading 0x) to std_logic_vector + function f_string2bits(s : string) return std_logic_vector is + constant len : natural := s'length; + variable slv : std_logic_vector(s'length*4-1 downto 0); + variable nibble : std_logic_vector(3 downto 0); + begin + for i in 0 to len-1 loop + case s(i+1) is + when '0' => nibble := X"0"; + when '1' => nibble := X"1"; + when '2' => nibble := X"2"; + when '3' => nibble := X"3"; + when '4' => nibble := X"4"; + when '5' => nibble := X"5"; + when '6' => nibble := X"6"; + when '7' => nibble := X"7"; + when '8' => nibble := X"8"; + when '9' => nibble := X"9"; + when 'a' => nibble := X"A"; + when 'A' => nibble := X"A"; + when 'b' => nibble := X"B"; + when 'B' => nibble := X"B"; + when 'c' => nibble := X"C"; + when 'C' => nibble := X"C"; + when 'd' => nibble := X"D"; + when 'D' => nibble := X"D"; + when 'e' => nibble := X"E"; + when 'E' => nibble := X"E"; + when 'f' => nibble := X"F"; + when 'F' => nibble := X"F"; + when others => nibble := "XXXX"; + end case; + if s'ascending then + slv(slv'length-(i*4)-1 downto slv'length-(i+1)*4) := nibble; + else + slv(((i+1)*4)-1 downto i*4) := nibble; + end if; + end loop; + return slv; + end f_string2bits; + + -- Converts string to ascii (std_logic_vector) + function f_string2svl (s : string) return std_logic_vector is + constant len : natural := s'length; + variable slv : std_logic_vector((s'length * 8) - 1 downto 0); + begin + for i in 0 to len-1 loop + slv(slv'high-i*8 downto (slv'high-7)-i*8) := + std_logic_vector(to_unsigned(character'pos(s(i+1)), 8)); + end loop; + return slv; + end f_string2svl; + + -- Converts ascii (std_logic_vector) to string + function f_slv2string (slv : std_logic_vector) return string is + constant len : natural := slv'length; + variable s : string(1 to slv'length/8); + begin + for i in 0 to (len/8)-1 loop + s(i+1) := character'val(to_integer(unsigned(slv(slv'high-i*8 downto (slv'high-7)-i*8)))); + end loop; + return s; + end f_slv2string; + + -- pads a string of unknown length to a given length (useful for integer'image) + function f_string_fix_len ( s : string; ret_len : natural := 10; fill_char : character := '0'; justify_right : boolean := true ) return string is + variable ret_v : string (1 to ret_len); + constant pad_len : integer := ret_len - s'length ; + variable pad_v : string (1 to abs(pad_len)); + begin + if pad_len < 1 then + ret_v := s(ret_v'range); + else + pad_v := (others => fill_char); + if justify_right then + ret_v := pad_v & s; + else + ret_v := s & pad_v ; + end if; + end if; + return ret_v; + end f_string_fix_len; + + -- do not synthesize + function f_hot_to_bin(x : std_logic_vector) return natural is + variable rv : natural; + begin + rv := 0; + -- if there are few ones set in _x_ then the most significant will be + -- translated to bin + for i in 0 to x'left loop + if x(i) = '1' then + rv := i+1; + end if; + end loop; + return rv; + end function; + + function f_wb_spi_flash_sdb(g_bits : natural) return t_sdb_device is + variable result : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"02", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"0000000000ffffff", + product => ( + vendor_id => x"0000000000000651", -- GSI + device_id => x"5cf12a1c", + version => x"00000002", + date => x"20140417", + name => "SPI-FLASH-16M-MMAP "))); + begin + result.sdb_component.addr_last := std_logic_vector(to_unsigned(2**g_bits-1, 64)); + return result; + end f_wb_spi_flash_sdb; + +end wishbone_pkg; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/wr_fabric_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/wr_fabric_pkg.vhd new file mode 100644 index 000000000..3e15d94cc --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/wr_fabric_pkg.vhd @@ -0,0 +1,220 @@ +------------------------------------------------------------------------------- +-- Title : Wishbone Packet Fabric package +-- Project : WR Cores Collection +------------------------------------------------------------------------------- +-- File : wr_fabric_pkg.vhd +-- Author : Grzegorz Daniluk +-- Company : CERN BE-CO-HT +-- Platform : +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2012-2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use work.wishbone_pkg.all; + + +package wr_fabric_pkg is + + constant c_WRF_DATA : std_logic_vector(1 downto 0) := "00"; + constant c_WRF_OOB : std_logic_vector(1 downto 0) := "01"; + constant c_WRF_STATUS : std_logic_vector(1 downto 0) := "10"; + constant c_WRF_USER : std_logic_vector(1 downto 0) := "11"; + + constant c_WRF_OOB_TYPE_RX : std_logic_vector(3 downto 0) := "0000"; + constant c_WRF_OOB_TYPE_TX : std_logic_vector(3 downto 0) := "0001"; + + type t_wrf_mux_class is array (natural range <>) of std_logic_vector(7 downto 0); + + type t_wrf_status_reg is record + is_hp : std_logic; + has_smac : std_logic; + has_crc : std_logic; + error : std_logic; + tag_me : std_logic; + match_class : std_logic_vector(7 downto 0); + end record; + + type t_wrf_source_out is record + adr : std_logic_vector(1 downto 0); + dat : std_logic_vector(15 downto 0); + cyc : std_logic; + stb : std_logic; + we : std_logic; + sel : std_logic_vector(1 downto 0); + end record; + + type t_wrf_source_in is record + ack : std_logic; + stall : std_logic; + err : std_logic; + rty : std_logic; + end record; + + + type t_wrf_oob is record + valid: std_logic; + oob_type : std_logic_vector(3 downto 0); + ts_r : std_logic_vector(27 downto 0); + ts_f : std_logic_vector(3 downto 0); + frame_id : std_logic_vector(15 downto 0); + port_id : std_logic_vector(5 downto 0); + end record; + + subtype t_wrf_sink_in is t_wrf_source_out; + subtype t_wrf_sink_out is t_wrf_source_in; + + type t_wrf_source_in_array is array (natural range <>) of t_wrf_source_in; + type t_wrf_source_out_array is array (natural range <>) of t_wrf_source_out; + + subtype t_wrf_sink_in_array is t_wrf_source_out_array; + subtype t_wrf_sink_out_array is t_wrf_source_in_array; + + function f_marshall_wrf_status (stat : t_wrf_status_reg) return std_logic_vector; + function f_unmarshall_wrf_status(stat : std_logic_vector) return t_wrf_status_reg; + + constant c_wrf_status_init_value : t_wrf_status_reg := + ('0', '0', '0', '0', '0', (others => '0')); + + constant c_dummy_src_in : t_wrf_source_in := + ('0', '0', '0', '0'); + constant c_dummy_snk_in : t_wrf_sink_in := + ("XX", "XXXXXXXXXXXXXXXX", '0', '0', '0', "XX"); + + + ----------------------------------------------------------------------------- + -- WRF MUX + ----------------------------------------------------------------------------- + component xwrf_mux is + generic( + g_muxed_ports : integer := 2); + port( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + --ENDPOINT + ep_src_o : out t_wrf_source_out; + ep_src_i : in t_wrf_source_in; + ep_snk_o : out t_wrf_sink_out; + ep_snk_i : in t_wrf_sink_in; + --Muxed ports + mux_src_o : out t_wrf_source_out_array(g_muxed_ports-1 downto 0); + mux_src_i : in t_wrf_source_in_array(g_muxed_ports-1 downto 0); + mux_snk_o : out t_wrf_sink_out_array(g_muxed_ports-1 downto 0); + mux_snk_i : in t_wrf_sink_in_array(g_muxed_ports-1 downto 0); + -- + mux_class_i : in t_wrf_mux_class(g_muxed_ports-1 downto 0) + ); + end component; + + component xwrf_reg is + generic( + g_adr_width : integer := 2; + g_dat_width : integer :=16); + port( + rst_n_i : in std_logic; + clk_i : in std_logic; + snk_i : in t_wrf_sink_in; + snk_o : out t_wrf_sink_out; + src_i : in t_wrf_source_in; + src_o : out t_wrf_source_out); + end component; + + component xwrf_loopback + generic( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD); + port( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + wrf_snk_i : in t_wrf_sink_in; + wrf_snk_o : out t_wrf_sink_out; + wrf_src_o : out t_wrf_source_out; + wrf_src_i : in t_wrf_source_in; + + wb_i : in t_wishbone_slave_in; + wb_o : out t_wishbone_slave_out); + end component; + + component xwb_fabric_sink + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + snk_i : in t_wrf_sink_in; + snk_o : out t_wrf_sink_out; + addr_o : out std_logic_vector(1 downto 0); + data_o : out std_logic_vector(15 downto 0); + dvalid_o : out std_logic; + sof_o : out std_logic; + eof_o : out std_logic; + error_o : out std_logic; + bytesel_o : out std_logic; + dreq_i : in std_logic); + end component; + + component xwb_fabric_source + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + src_i : in t_wrf_source_in; + src_o : out t_wrf_source_out; + addr_i : in std_logic_vector(1 downto 0); + data_i : in std_logic_vector(15 downto 0); + dvalid_i : in std_logic; + sof_i : in std_logic; + eof_i : in std_logic; + error_i : in std_logic; + bytesel_i : in std_logic; + dreq_o : out std_logic); + end component; + +end wr_fabric_pkg; + +package body wr_fabric_pkg is + + function f_marshall_wrf_status(stat : t_wrf_status_reg) + return std_logic_vector is + variable tmp : std_logic_vector(15 downto 0); + begin + tmp(0) := stat.is_hp; + tmp(1) := stat.error; + tmp(2) := stat.has_smac; + tmp(3) := stat.has_crc; + tmp(15 downto 8) := stat.match_class; + return tmp; + end function; + + function f_unmarshall_wrf_status(stat : std_logic_vector) return t_wrf_status_reg is + variable tmp : t_wrf_status_reg; + begin + tmp.is_hp := stat(0); + tmp.error := stat(1); + tmp.has_smac := stat(2); + tmp.has_crc := stat(3); + tmp.match_class := stat(15 downto 8); + return tmp; + + end function; + + +end wr_fabric_pkg; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwb_fabric_sink.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwb_fabric_sink.vhd new file mode 100644 index 000000000..978516c38 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwb_fabric_sink.vhd @@ -0,0 +1,265 @@ +------------------------------------------------------------------------------- +-- Title : Wishbone Packet Fabric buffered packet sink +-- Project : WR Cores Collection +------------------------------------------------------------------------------- +-- File : xwb_fabric_sink.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2012-01-16 +-- Last update: 2012-01-22 +-- Platform : +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: A simple WB packet streaming sink with builtin FIFO buffer. +-- Outputs a trivial interface (start-of-packet, end-of-packet, data-valid) +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2011 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2011-01-16 1.0 twlostow Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +use work.genram_pkg.all; +use work.wr_fabric_pkg.all; + +entity xwb_fabric_sink is + + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + + -- Wishbone Fabric Interface I/O + snk_i : in t_wrf_sink_in; + snk_o : out t_wrf_sink_out; + + -- Decoded & buffered fabric + addr_o : out std_logic_vector(1 downto 0); + data_o : out std_logic_vector(15 downto 0); + dvalid_o : out std_logic; + sof_o : out std_logic; + eof_o : out std_logic; + error_o : out std_logic; + bytesel_o : out std_logic; + dreq_i : in std_logic + ); + +end xwb_fabric_sink; + +architecture rtl of xwb_fabric_sink is + + constant c_fifo_width : integer := 16 + 2 + 4; + + signal q_valid, full, we, rd : std_logic; + signal fin, fout, fout_reg : std_logic_vector(c_fifo_width-1 downto 0); + signal cyc_d0, rd_d0 : std_logic; + + signal pre_sof, pre_eof, pre_bytesel, pre_dvalid : std_logic; + signal post_sof, post_dvalid : std_logic; + signal post_addr : std_logic_vector(1 downto 0); + signal post_data : std_logic_vector(15 downto 0); + + signal snk_out : t_wrf_sink_out; + +begin -- rtl + + + p_delay_cyc_and_rd : process(clk_i) + begin + if rising_edge(clk_i) then + if rst_n_i = '0' then + cyc_d0 <= '0'; + rd_d0 <= '0'; + else + if(full = '0') then + cyc_d0 <= snk_i.cyc; + end if; + + rd_d0 <= rd; + end if; + end if; + end process; + + + pre_sof <= snk_i.cyc and not cyc_d0; -- sof + pre_eof <= not snk_i.cyc and cyc_d0; -- eof + pre_bytesel <= not snk_i.sel(0); -- bytesel + pre_dvalid <= snk_i.stb and snk_i.we and snk_i.cyc and not snk_out.stall; -- data valid + + fin(15 downto 0) <= snk_i.dat; + fin(17 downto 16) <= snk_i.adr; + fin(21 downto 18) <= pre_sof & pre_eof & pre_bytesel & pre_dvalid; + + + snk_out.stall <= full or (snk_i.cyc and not cyc_d0); + snk_out.err <= '0'; + snk_out.rty <= '0'; + + p_gen_ack : process(clk_i) + begin + if rising_edge(clk_i) then + if rst_n_i = '0' then + snk_out.ack <= '0'; + else + snk_out.ack <= snk_i.cyc and snk_i.stb and snk_i.we and not snk_out.stall; + end if; + end if; + end process; + + snk_o <= snk_out; + + we <= '1' when fin(21 downto 18) /= "0000" and full = '0' else '0'; + rd <= q_valid and dreq_i and not post_sof; + + U_FIFO : generic_shiftreg_fifo + generic map ( + g_data_width => c_fifo_width, + g_size => 16) + port map ( + rst_n_i => rst_n_i, + clk_i => clk_i, + d_i => fin, + we_i => we, + q_o => fout, + rd_i => rd, + almost_full_o => full, + q_valid_o => q_valid); + + p_fout_reg : process(clk_i) + begin + if rising_edge(clk_i) then + if rst_n_i = '0' then + fout_reg <= (others => '0'); + elsif(rd = '1') then + fout_reg <= fout; + end if; + end if; + end process; + + + post_data <= fout_reg(15 downto 0); + post_addr <= fout_reg(17 downto 16); + post_sof <= fout_reg(21) and rd_d0; --and q_valid; + + post_dvalid <= fout_reg(18); + + sof_o <= post_sof and rd_d0; + dvalid_o <= post_dvalid and rd_d0; + error_o <= '1' when rd_d0 = '1' and (post_addr = c_WRF_STATUS) and (f_unmarshall_wrf_status(post_data).error = '1') else '0'; + eof_o <= fout_reg(20) and rd_d0; + bytesel_o <= fout_reg(19); + data_o <= post_data; + addr_o <= post_addr; + + +end rtl; + +library ieee; +use ieee.std_logic_1164.all; + +use work.genram_pkg.all; +use work.wr_fabric_pkg.all; + + +entity wb_fabric_sink is + + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + + snk_dat_i : in std_logic_vector(15 downto 0); + snk_adr_i : in std_logic_vector(1 downto 0); + snk_sel_i : in std_logic_vector(1 downto 0); + snk_cyc_i : in std_logic; + snk_stb_i : in std_logic; + snk_we_i : in std_logic; + snk_stall_o : out std_logic; + snk_ack_o : out std_logic; + snk_err_o : out std_logic; + snk_rty_o : out std_logic; + + -- Decoded & buffered fabric + addr_o : out std_logic_vector(1 downto 0); + data_o : out std_logic_vector(15 downto 0); + dvalid_o : out std_logic; + sof_o : out std_logic; + eof_o : out std_logic; + error_o : out std_logic; + bytesel_o : out std_logic; + dreq_i : in std_logic + ); + +end wb_fabric_sink; + +architecture wrapper of wb_fabric_sink is + + component xwb_fabric_sink + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + snk_i : in t_wrf_sink_in; + snk_o : out t_wrf_sink_out; + addr_o : out std_logic_vector(1 downto 0); + data_o : out std_logic_vector(15 downto 0); + dvalid_o : out std_logic; + sof_o : out std_logic; + eof_o : out std_logic; + error_o : out std_logic; + bytesel_o : out std_logic; + dreq_i : in std_logic); + end component; + + signal snk_in : t_wrf_sink_in; + signal snk_out : t_wrf_sink_out; + +begin -- wrapper + + U_Wrapped_Sink : xwb_fabric_sink + port map ( + clk_i => clk_i, + rst_n_i => rst_n_i, + snk_i => snk_in, + snk_o => snk_out, + addr_o => addr_o, + data_o => data_o, + dvalid_o => dvalid_o, + sof_o => sof_o, + eof_o => eof_o, + error_o => error_o, + bytesel_o => bytesel_o, + dreq_i => dreq_i); + + snk_in.adr <= snk_adr_i; + snk_in.dat <= snk_dat_i; + snk_in.stb <= snk_stb_i; + snk_in.we <= snk_we_i; + snk_in.cyc <= snk_cyc_i; + snk_in.sel <= snk_sel_i; + + snk_stall_o <= snk_out.stall; + snk_ack_o <= snk_out.ack; + snk_err_o <= snk_out.err; + snk_rty_o <= snk_out.rty; + +end wrapper; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwb_fabric_source.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwb_fabric_source.vhd new file mode 100644 index 000000000..ec79fb316 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwb_fabric_source.vhd @@ -0,0 +1,229 @@ +------------------------------------------------------------------------------- +-- Title : Wishbone Packet Fabric buffered packet source +-- Project : WR Cores Collection +------------------------------------------------------------------------------- +-- File : xwb_fabric_source.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2012-01-16 +-- Last update: 2012-01-22 +-- Platform : +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2011 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +use work.genram_pkg.all; +use work.wr_fabric_pkg.all; + +entity xwb_fabric_source is + + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + + -- Wishbone Fabric Interface I/O + src_i : in t_wrf_source_in; + src_o : out t_wrf_source_out; + + -- Decoded & buffered fabric + addr_i : in std_logic_vector(1 downto 0); + data_i : in std_logic_vector(15 downto 0); + dvalid_i : in std_logic; + sof_i : in std_logic; + eof_i : in std_logic; + error_i : in std_logic; + bytesel_i : in std_logic; + dreq_o : out std_logic + ); + +end xwb_fabric_source; + +architecture rtl of xwb_fabric_source is + + constant c_fifo_width : integer := 16 + 2 + 4; + + signal q_valid, full, we, rd, rd_d0 : std_logic; + signal fin, fout : std_logic_vector(c_fifo_width-1 downto 0); + + signal pre_dvalid : std_logic; + signal pre_eof : std_logic; + signal pre_data : std_logic_vector(15 downto 0); + signal pre_addr : std_logic_vector(1 downto 0); + + signal post_dvalid, post_eof, post_bytesel, post_sof : std_logic; + + signal err_status : t_wrf_status_reg; + signal cyc_int : std_logic; + +begin -- rtl + + err_status.error <= '1'; + + dreq_o <= not full; + + rd <= not src_i.stall; + we <= sof_i or eof_i or error_i or dvalid_i; + + pre_dvalid <= dvalid_i or error_i; + pre_data <= data_i when (error_i = '0') else f_marshall_wrf_status(err_status); + pre_addr <= addr_i when (error_i = '0') else c_WRF_STATUS; + pre_eof <= error_i or eof_i; + + fin <= sof_i & pre_eof & bytesel_i & pre_dvalid & pre_addr & pre_data; + + U_FIFO : generic_shiftreg_fifo + generic map ( + g_data_width => c_fifo_width, + g_size => 16) + port map ( + rst_n_i => rst_n_i, + clk_i => clk_i, + d_i => fin, + we_i => we, + q_o => fout, + rd_i => rd, + almost_full_o => full, + q_valid_o => q_valid); + + post_sof <= fout(21); + post_eof <= fout(20); + post_dvalid <= fout(18); + + p_gen_cyc : process(clk_i) + begin + if rising_edge(clk_i) then + if rst_n_i = '0' then + cyc_int <= '0'; + else + if( q_valid = '1') then + if(post_sof = '1')then + cyc_int <= '1'; + elsif(post_eof = '1') then + cyc_int <= '0'; + end if; + end if; + end if; + end if; + end process; + + src_o.cyc <= cyc_int; + src_o.we <= '1'; + src_o.stb <= post_dvalid and q_valid; + src_o.sel <= '1' & not fout(19); + src_o.dat <= fout(15 downto 0); + src_o.adr <= fout(17 downto 16); + +end rtl; + + + +library ieee; +use ieee.std_logic_1164.all; + +use work.wr_fabric_pkg.all; + +entity wb_fabric_source is + + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + + -- Wishbone Fabric Interface I/O + + src_dat_o : out std_logic_vector(15 downto 0); + src_adr_o : out std_logic_vector(1 downto 0); + src_sel_o : out std_logic_vector(1 downto 0); + src_cyc_o : out std_logic; + src_stb_o : out std_logic; + src_we_o : out std_logic; + src_stall_i : in std_logic; + src_ack_i : in std_logic; + src_err_i : in std_logic; + + -- Decoded & buffered fabric + addr_i : in std_logic_vector(1 downto 0); + data_i : in std_logic_vector(15 downto 0); + dvalid_i : in std_logic; + sof_i : in std_logic; + eof_i : in std_logic; + error_i : in std_logic; + bytesel_i : in std_logic; + dreq_o : out std_logic + ); + +end wb_fabric_source; + +architecture wrapper of wb_fabric_source is + component xwb_fabric_source + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + src_i : in t_wrf_source_in; + src_o : out t_wrf_source_out; + addr_i : in std_logic_vector(1 downto 0); + data_i : in std_logic_vector(15 downto 0); + dvalid_i : in std_logic; + sof_i : in std_logic; + eof_i : in std_logic; + error_i : in std_logic; + bytesel_i : in std_logic; + dreq_o : out std_logic); + end component; + + signal src_in : t_wrf_source_in; + signal src_out : t_wrf_source_out; + +begin -- wrapper + + + U_Wrapped_Source : xwb_fabric_source + port map ( + clk_i => clk_i, + rst_n_i => rst_n_i, + src_i => src_in, + src_o => src_out, + addr_i => addr_i, + data_i => data_i, + dvalid_i => dvalid_i, + sof_i => sof_i, + eof_i => eof_i, + error_i => error_i, + bytesel_i => bytesel_i, + dreq_o => dreq_o); + + src_cyc_o <= src_out.cyc; + src_stb_o <= src_out.stb; + src_we_o <= src_out.we; + src_sel_o <= src_out.sel; + src_adr_o <= src_out.adr; + src_dat_o <= src_out.dat; + + src_in.rty <= '0'; + src_in.err <= src_err_i; + src_in.ack <= src_ack_i; + src_in.stall <= src_stall_i; + + +end wrapper; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwrf_mux.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwrf_mux.vhd new file mode 100644 index 000000000..5ff1594e1 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwrf_mux.vhd @@ -0,0 +1,307 @@ +------------------------------------------------------------------------------- +-- Title : Simple Pipelined Wishbone MUX/DEMUX for WRPC +-- Project : WhiteRabbit +------------------------------------------------------------------------------- +-- File : xwrf_mux.vhd +-- Author : Grzegorz Daniluk +-- Company : CERN BE-CO-HT +-- Created : 2011-08-11 +-- Last update: 2017-02-03 +-- Platform : FPGA-generics +-- Standard : VHDL +------------------------------------------------------------------------------- +-- Description: +-- This is the simple multiplexer/demultiplexer for WR Fabric interface +-- (Pipelined Wishbone interface). It forwards ethernet frames between +-- WR endpoint, Mini-NIC and external Fabric interface in both directions. +-- In the direction 'from' WR endpoint it also decides whether the packet +-- has to be forwarded to Mini-NIC (if it is the PTP message) or to the +-- external interface (others). +------------------------------------------------------------------------------- +-- Copyright (c) 2012-2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2011-08-11 1.0 greg.d Created +-- 2012-10-16 2.0 greg.d generic number of ports +------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_misc.all; + +use ieee.numeric_std.all; + +library work; +use work.wr_fabric_pkg.all; +use work.genram_pkg.all; + +entity xwrf_mux is + generic( + g_muxed_ports : integer := 2); + port( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + --ENDPOINT + ep_src_o : out t_wrf_source_out; + ep_src_i : in t_wrf_source_in; + ep_snk_o : out t_wrf_sink_out; + ep_snk_i : in t_wrf_sink_in; + --Muxed ports + mux_src_o : out t_wrf_source_out_array(g_muxed_ports-1 downto 0); + mux_src_i : in t_wrf_source_in_array(g_muxed_ports-1 downto 0); + mux_snk_o : out t_wrf_sink_out_array(g_muxed_ports-1 downto 0); + mux_snk_i : in t_wrf_sink_in_array(g_muxed_ports-1 downto 0); + -- + mux_class_i : in t_wrf_mux_class(g_muxed_ports-1 downto 0) + ); +end xwrf_mux; + +architecture behaviour of xwrf_mux is + + function f_hot_to_bin(x : std_logic_vector(g_muxed_ports-1 downto 0)) + return integer is + variable rv : integer; + begin + rv := 0; + -- if there are few ones set in _x_ then the least significant will be + -- translated to bin + for i in g_muxed_ports-1 downto 0 loop + if x(i) = '1' then + rv := i; + end if; + end loop; + return rv; + end function; + + function f_match_class(port_mask, pkt_mask : std_logic_vector(7 downto 0)) return std_logic is + variable ret : std_logic; + begin + if((port_mask and pkt_mask) /= x"00") then + return '1'; + else + return '0'; + end if; + end function; + + --==================================-- + -- Masters to Endpoint mux signals -- + --==================================-- + type t_mux is (MUX_SEL, MUX_TRANSFER); + signal mux : t_mux; + signal mux_cycs : std_logic_vector(g_muxed_ports-1 downto 0); + signal mux_rrobin : std_logic_vector(g_muxed_ports-1 downto 0); + signal mux_select : std_logic_vector(g_muxed_ports-1 downto 0); + + --==================================-- + -- Endpoint to Slaves demux signals -- + --==================================-- + type t_demux is (DMUX_WAIT, DMUX_STATUS, DMUX_PAYLOAD); + signal demux : t_demux; + signal dmux_sel : std_logic_vector(g_muxed_ports-1 downto 0); + signal dmux_status_reg : std_logic_vector(15 downto 0); + signal dmux_select : std_logic_vector(g_muxed_ports-1 downto 0); + signal dmux_others : std_logic_vector(g_muxed_ports-1 downto 0); + signal dmux_sel_zero : std_logic; + signal dmux_snd_stat : std_logic_vector(g_muxed_ports-1 downto 0); + signal ep_stall_mask : std_logic; + signal ep_snk_out_stall : std_logic; + +begin + + --=============================================-- + -- -- + -- Many Fabric Masters talking to ENDPOINT -- + -- -- + --=============================================-- + GEN_MUX_CYCS_REG : for I in 0 to g_muxed_ports-1 generate + mux_cycs(I) <= mux_snk_i(I).cyc; + end generate; + + p_mux : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if (rst_n_i = '0') then + mux_rrobin(0) <= '1'; + mux_rrobin(g_muxed_ports-1 downto 1) <= (others => '0'); + mux <= MUX_SEL; + else + case mux is + when MUX_SEL => + if (unsigned(mux_cycs and mux_rrobin) /= 0)then + mux_select <= mux_cycs and mux_rrobin; + mux <= MUX_TRANSFER; + else + mux_select <= (others => '0'); + mux_rrobin <= mux_rrobin(0) & mux_rrobin(g_muxed_ports-1 downto 1); + end if; + + when MUX_TRANSFER => + if(unsigned(mux_cycs and mux_select) = 0) then --cycle end + mux_rrobin <= mux_rrobin(0) & mux_rrobin(g_muxed_ports-1 downto 1); + mux <= MUX_SEL; + end if; + end case; + + end if; + end if; + end process; + + + GEN_MUX_CONNS : for J in 0 to g_muxed_ports-1 generate + mux_snk_o(J).ack <= ep_src_i.ack when(mux /= MUX_SEL and mux_select(J) = '1') else + '0'; + mux_snk_o(J).stall <= ep_src_i.stall when(mux /= MUX_SEL and mux_select(J) = '1') else + '1'; + mux_snk_o(J).err <= ep_src_i.err when(mux /= MUX_SEL and mux_select(J) = '1') else + '0'; + mux_snk_o(J).rty <= '0'; + end generate; + + ep_src_o.cyc <= mux_snk_i(f_hot_to_bin(mux_select)).cyc when(mux /= MUX_SEL) else + '0'; + ep_src_o.stb <= mux_snk_i(f_hot_to_bin(mux_select)).stb when(mux /= MUX_SEL) else + '0'; + ep_src_o.adr <= mux_snk_i(f_hot_to_bin(mux_select)).adr; + ep_src_o.dat <= mux_snk_i(f_hot_to_bin(mux_select)).dat; + ep_src_o.sel <= mux_snk_i(f_hot_to_bin(mux_select)).sel; + ep_src_o.we <= '1'; + + + --=============================================-- + -- -- + -- ENDPOINT talking to many Fabric Slaves -- + -- -- + --=============================================-- + + CLASS_MATCH : for I in 0 to g_muxed_ports-1 generate + dmux_sel(I) <= f_match_class(mux_class_i(I), f_unmarshall_wrf_status(dmux_status_reg).match_class); + end generate; + + DMUX_FSM : process(clk_sys_i) + variable sel : integer range 0 to g_muxed_ports-1; + begin + if rising_edge(clk_sys_i) then + if(rst_n_i = '0') then + dmux_select <= (others => '0'); + dmux_snd_stat <= (others => '0'); + dmux_status_reg <= (others => '0'); + ep_stall_mask <= '0'; + demux <= DMUX_WAIT; + else + case demux is + --------------------------------------------------------------- + --State DMUX_WAIT: Wait for the WRF cycle to start and then + -- wait for the STATUS word + --------------------------------------------------------------- + when DMUX_WAIT => + dmux_select <= (others => '0'); + dmux_snd_stat <= (others => '0'); + dmux_status_reg <= (others => '0'); + ep_stall_mask <= '0'; + if(ep_snk_i.cyc = '1' and ep_snk_i.stb = '1' and ep_snk_i.adr = c_WRF_STATUS) then + ep_stall_mask <= '1'; + dmux_status_reg <= ep_snk_i.dat; + demux <= DMUX_STATUS; + end if; + + --------------------------------------------------------------- + --State DMUX_STATUS: Send Status word to appropriate interface + --------------------------------------------------------------- + when DMUX_STATUS => + ep_stall_mask <= '1'; + + if(to_integer(unsigned(dmux_sel)) = 0) then --class not matched to anything, pass pkt to last port + dmux_select(g_muxed_ports-1) <= '1'; + dmux_snd_stat(g_muxed_ports-1) <= '1'; + sel := g_muxed_ports-1; + else + dmux_select <= dmux_sel; + dmux_snd_stat <= dmux_sel; + sel := f_hot_to_bin(dmux_sel); + end if; + if(mux_src_i(sel).stall = '0') then + demux <= DMUX_PAYLOAD; + end if; + + --------------------------------------------------------------- + --State DMUX_PAYLOAD: Just wait here till the end of the + -- current transfer + --------------------------------------------------------------- + when DMUX_PAYLOAD => + dmux_snd_stat <= (others => '0'); + ep_stall_mask <= '0'; + + if(ep_snk_i.cyc = '0') then + demux <= DMUX_WAIT; + end if; + + when others => + demux <= DMUX_WAIT; + end case; + end if; + end if; + end process; + + dmux_sel_zero <= '1' when(to_integer(unsigned(dmux_select)) = 0) else + '0'; + + -- dmux_others signal says for given interface I if any other interface was + -- also matched to packet class + dmux_others(0) <= '0'; + GEN_DMUX_OTHERS : for I in 1 to g_muxed_ports-1 generate + dmux_others(I) <= or_reduce(dmux_select(I-1 downto 0)); + end generate; + + + GEN_DMUX_CONN : for I in 0 to g_muxed_ports-1 generate + mux_src_o(I).cyc <= ep_snk_i.cyc when(dmux_select(I) = '1' and dmux_others(I) = '0') else + '0'; + mux_src_o(I).stb <= '1' when(dmux_snd_stat(I) = '1' and dmux_others(I) = '0') else + ep_snk_i.stb when(dmux_select(I) = '1' and dmux_others(I) = '0') else + '0'; + mux_src_o(I).adr <= c_WRF_STATUS when(dmux_snd_stat(I) = '1' and dmux_others(I) = '0') else + ep_snk_i.adr when(dmux_select(I) = '1' and dmux_others(I) = '0') else + (others => '0'); + mux_src_o(I).dat <= dmux_status_reg when(dmux_snd_stat(I) = '1' and dmux_others(I) = '0') else + ep_snk_i.dat when(dmux_select(I) = '1' and dmux_others(I) = '0') else + (others => '0'); + mux_src_o(I).sel <= (others => '1') when(dmux_snd_stat(I) = '1' and dmux_others(I) = '0') else + ep_snk_i.sel when(dmux_select(I) = '1' and dmux_others(I) = '0') else + (others => '1'); + mux_src_o(I).we <= '1'; + end generate; + + + ep_snk_o.ack <= ep_snk_i.cyc and ep_snk_i.stb and not ep_snk_out_stall when(dmux_sel_zero = '1') else + mux_src_i(f_hot_to_bin(dmux_select)).ack; + + ep_snk_o.err <= '0' when(dmux_sel_zero = '1') else + mux_src_i(f_hot_to_bin(dmux_select)).err; + + ep_snk_out_stall <= '1' when(ep_stall_mask = '1') else + '0' when(dmux_sel_zero = '1') else + mux_src_i(f_hot_to_bin(dmux_select)).stall; + + ep_snk_o.stall <= ep_snk_out_stall; + + ep_snk_o.rty <= '0'; + +end behaviour; + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/dmtd_phase_meas.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/dmtd_phase_meas.vhd new file mode 100644 index 000000000..2cabc4426 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/dmtd_phase_meas.vhd @@ -0,0 +1,290 @@ +------------------------------------------------------------------------------- +-- Title : Digital DMTD Phase Measurement Unit +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : dmtd_phase_meas.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-Co-HT +-- Created : 2010-02-25 +-- Last update: 2017-02-20 +-- Platform : FPGA-generic +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- Description: Module measures phase shift between the two input clocks +-- using a DDMTD phase detector. The raw measurement can be further averaged to +-- increase the accuracy. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2009 - 2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2010-02-25 1.0 twlostow Created +-- 2011-04-18 1.1 twlostow Added comments and header +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.NUMERIC_STD.all; + +library work; +use work.gencores_pkg.all; + +entity dmtd_phase_meas is + generic ( +-- DDMTD deglitcher threshold (in clk_dmtd_i) clock cycles + g_deglitcher_threshold: integer; +-- Phase tag counter size (see dmtd_with_deglitcher.vhd for explanation) + g_counter_bits : integer := 14); + + port ( +-- resets + rst_sys_n_i : in std_logic; + rst_dmtd_n_i : in std_logic; + +-- system clock + clk_sys_i : in std_logic; +-- Input clocks + clk_a_i : in std_logic; + clk_b_i : in std_logic; + clk_dmtd_i : in std_logic; + + + en_i : in std_logic; + + navg_i : in std_logic_vector(11 downto 0); + phase_meas_o : out std_logic_vector(31 downto 0); + phase_meas_p_o : out std_logic + ); + +end dmtd_phase_meas; + +architecture syn of dmtd_phase_meas is + + component dmtd_with_deglitcher + generic ( + g_counter_bits : natural); + port ( + rst_n_dmtdclk_i : in std_logic; + rst_n_sysclk_i : in std_logic; + clk_in_i : in std_logic; + clk_dmtd_i : in std_logic; + clk_sys_i : in std_logic; + shift_en_i : in std_logic; + shift_dir_i : in std_logic; + deglitch_threshold_i : in std_logic_vector(15 downto 0); + dbg_dmtdout_o : out std_logic; + tag_o : out std_logic_vector(g_counter_bits-1 downto 0); + tag_stb_p1_o : out std_logic); + end component; + + type t_pd_state is (PD_WAIT_TAG, PD_WAIT_A, PD_WAIT_B); + + signal tag_a : std_logic_vector(g_counter_bits-1 downto 0); + signal tag_b : std_logic_vector(g_counter_bits-1 downto 0); + + signal tag_a_p : std_logic; + signal tag_b_p : std_logic; + + signal acc : unsigned(31 downto 0); + signal avg_cnt : unsigned(11 downto 0); + + signal phase_raw_p : std_logic; + signal phase_raw : unsigned(g_counter_bits-1 downto 0); + signal pd_state : t_pd_state; + + signal phase_hi, phase_lo : std_logic; + signal ph_acq_valid : std_logic; + + + signal stored_sign : std_logic; + signal preserve_sign : std_logic; + +begin -- syn + + DMTD_A : dmtd_with_deglitcher + generic map ( + g_counter_bits => g_counter_bits) + port map ( + rst_n_dmtdclk_i => rst_dmtd_n_i, + rst_n_sysclk_i => rst_sys_n_i, + clk_dmtd_i => clk_dmtd_i, + clk_sys_i => clk_sys_i, + clk_in_i => clk_a_i, + tag_o => tag_a, + tag_stb_p1_o => tag_a_p, + shift_en_i => '0', + shift_dir_i => '0', + deglitch_threshold_i => std_logic_vector(to_unsigned(g_deglitcher_threshold, 16)), + dbg_dmtdout_o => open); + + DMTD_B : dmtd_with_deglitcher + generic map ( + g_counter_bits => g_counter_bits) + port map ( + rst_n_dmtdclk_i => rst_dmtd_n_i, + rst_n_sysclk_i => rst_sys_n_i, + clk_dmtd_i => clk_dmtd_i, + clk_sys_i => clk_sys_i, + clk_in_i => clk_b_i, + tag_o => tag_b, + tag_stb_p1_o => tag_b_p, + shift_en_i => '0', + shift_dir_i => '0', + deglitch_threshold_i => std_logic_vector(to_unsigned(g_deglitcher_threshold, 16)), + dbg_dmtdout_o => open); + + + collect_tags : process (clk_sys_i) + begin -- process + if rising_edge(clk_sys_i) then + if(rst_sys_n_i = '0' or en_i = '0') then + phase_raw <= (others => '0'); + phase_raw_p <= '0'; + ph_acq_valid <= '0'; + pd_state <= PD_WAIT_TAG; + + else + + case pd_state is + when PD_WAIT_TAG => + + if(tag_a_p = '1' and tag_b_p = '1') then + phase_raw <= unsigned(tag_b) - unsigned(tag_a); + phase_raw_p <= '1'; + elsif(tag_a_p = '1') then + phase_raw <= unsigned(tag_a); + phase_raw_p <= '0'; + pd_state <= PD_WAIT_B; + elsif (tag_b_p = '1') then + phase_raw <= (not unsigned(tag_b)) + 1; + phase_raw_p <= '0'; + pd_state <= PD_WAIT_A; + else + phase_raw_p <= '0'; + end if; + + when PD_WAIT_A => + if(tag_a_p = '1') then + phase_raw <= phase_raw + unsigned(tag_a); + phase_raw_p <= '1'; + pd_state <= PD_WAIT_TAG; + end if; + + when PD_WAIT_B => + if(tag_b_p = '1') then + phase_raw <= phase_raw - unsigned(tag_b); + phase_raw_p <= '1'; + pd_state <= PD_WAIT_TAG; + end if; + + + when others => null; + end case; + + --if(tag_a_p = '1' and tag_b_p = '1') then + -- phase_raw <= unsigned(tag_b) - unsigned(tag_a); + -- phase_raw_p <= '1'; + -- ph_acq_valid <= '0'; + --elsif(tag_a_p = '1' and tag_b_p = '0' and ph_acq_valid ='1') then + -- phase_raw <= phase_raw - unsigned(tag_a); + -- phase_raw_p <= '1'; + -- ph_acq_valid <= '0'; + --elsif(tag_a_p = '0' and tag_b_p = '1') then + -- phase_raw_p <= '0'; + -- phase_raw <= unsigned(tag_b); + -- ph_acq_valid <= '1'; + --else + -- phase_raw_p <= '0'; + --end if; + + + end if; + end if; + end process; + + + phase_hi <= '1' when phase_raw(phase_raw'high downto phase_raw'high-1) = "11" else '0'; + phase_lo <= '1' when phase_raw(phase_raw'high downto phase_raw'high-1) = "00" else '0'; + + + calc_error : process (clk_sys_i) + begin -- process calc_error + if rising_edge(clk_sys_i) then + if(rst_sys_n_i = '0' or en_i = '0') then + acc <= (others => '0'); + avg_cnt <= (others => '0'); + phase_meas_p_o <= '0'; + phase_meas_o <= (others => '0'); + stored_sign <= '0'; + else + + + if(phase_raw_p = '1') then + if(avg_cnt = to_unsigned(0, avg_cnt'length)) then + acc <= resize(phase_raw, acc'length); + + if(phase_lo = '1') then + preserve_sign <= '1'; + stored_sign <= '0'; + elsif(phase_hi = '1') then + preserve_sign <= '1'; + stored_sign <= '1'; + else + preserve_sign <= '0'; + end if; + + avg_cnt <= avg_cnt + 1; + phase_meas_p_o <= '0'; + elsif (avg_cnt = unsigned(navg_i)) then + avg_cnt <= (others => '0'); + phase_meas_o <= std_logic_vector(acc); + phase_meas_p_o <= '1'; + else + avg_cnt <= avg_cnt + 1; + phase_meas_p_o <= '0'; + + + + if(preserve_sign = '1') then + if(phase_lo = '1' and stored_sign = '1') then + -- report "preserve_sign1"; + acc <= acc + resize(phase_raw, acc'length) + to_unsigned(2**g_counter_bits, acc'length); + elsif (phase_hi = '1' and stored_sign = '0') then + + --report "preserve_sign0"; + acc <= acc + resize(phase_raw, acc'length) - to_unsigned(2**g_counter_bits, acc'length); + else + acc <= acc + resize(phase_raw, acc'length); + end if; + else + acc <= acc + resize(phase_raw, acc'length); + end if; + end if; + else + phase_meas_p_o <= '0'; + end if; + end if; + end if; + end process calc_error; + + +end syn; + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/dmtd_with_deglitcher.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/dmtd_with_deglitcher.vhd new file mode 100644 index 000000000..e1f4528db --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/dmtd_with_deglitcher.vhd @@ -0,0 +1,353 @@ +------------------------------------------------------------------------------- +-- Title : Digital DMTD Edge Tagger +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : dmtd_with_deglitcher.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-Co-HT +-- Created : 2010-02-25 +-- Last update: 2014-07-15 +-- Platform : FPGA-generic +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- Description: Single-channel DDMTD phase tagger with integrated bit-median +-- deglitcher. Contains a DDMTD detector, which output signal is deglitched and +-- tagged with a counter running in DMTD offset clock domain. Phase tags are +-- generated for each rising edge in DDMTD output with an internal counter +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2009 - 2011 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2009-01-24 1.0 twlostow Created +-- 2011-18-04 1.1 twlostow Bit-median type deglitcher, comments +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.NUMERIC_STD.all; + +library work; +use work.gencores_pkg.all; + +entity dmtd_with_deglitcher is + generic ( + -- Size of the phase tag counter. Must be big enough to cover at least one + -- full period of the DDMTD detector output. Given the frequencies of clk_in_i + -- and clk_dmtd_i are respectively f_in an f_dmtd, it can be calculated with + -- the following formula: + -- g_counter_bits = log2(f_in / abs(f_in - f_dmtd)) + 1 + g_counter_bits : natural := 17; + g_chipscope : boolean := false; + + -- Divides the inputs by 2 (effectively passing the clock through a flip flop) + -- before it gets to the DMTD, effectively removing Place&Route warnings + -- (at the cost of detector bandwidth) + g_divide_input_by_2 : boolean := false; + + -- reversed mode: samples clk_dmtd with clk_in. + g_reverse : boolean := false + ); + port ( + -- resets for different clock domains + rst_n_dmtdclk_i : in std_logic; + rst_n_sysclk_i : in std_logic; + + -- input clock + clk_in_i : in std_logic; + + -- DMTD sampling clock + clk_dmtd_i : in std_logic; + + -- system clock + clk_sys_i : in std_logic; + + -- async counter resync input: resets only the DDMTD state machine and free + -- running counter, synchronized to clk_dmtd_i + resync_p_a_i : in std_logic := '0'; + + -- [clk_dmtd_i] counter resync output, pulses when free_cntr == 0 + resync_p_o : out std_logic; + + -- [clk_sys_i] starts resynchronization + resync_start_p_i : in std_logic := '0'; + + -- [clk_sys_i] 1: resynchonization done + resync_done_o : out std_logic; + + -- [clk_dmtd_i] phase shifter enable, HI level shifts the internal counter + -- forward/backward by 1 clk_dmtd_i cycle, effectively shifting the tag + -- value by +-1. + shift_en_i : in std_logic := '0'; + + -- [clk_dmtd_i] phase shift direction: 1 - forward, 0 - backward + shift_dir_i : in std_logic := '0'; + + -- DMTD clock enable, active high. Can be used to reduce the DMTD sampling + -- frequency - for example, two 10 MHz signals cannot be sampled directly + -- with a 125 MHz clock, but it's possible with a 5 MHz reference, obtained + -- by asserting clk_dmtd_en_i every 25 clk_dmtd_i cycles. + + clk_dmtd_en_i : in std_logic := '1'; + + -- [clk_dmtd_i] deglitcher threshold + deglitch_threshold_i : in std_logic_vector(15 downto 0); + + -- [clk_dmtd_i] raw DDMTD output (for debugging purposes) + dbg_dmtdout_o : out std_logic; + + -- [clk_sys_i] deglitched edge tag value + tag_o : out std_logic_vector(g_counter_bits-1 downto 0); + + -- [clk_sys_i] pulse indicates new phase tag on tag_o + tag_stb_p1_o : out std_logic; + dbg_clk_d3_o : out std_logic + ); + +end dmtd_with_deglitcher; + +architecture rtl of dmtd_with_deglitcher is + + type t_state is (WAIT_STABLE_0, WAIT_EDGE, GOT_EDGE); + + signal state : t_state; + + signal stab_cntr : unsigned(15 downto 0); + signal free_cntr : unsigned(g_counter_bits-1 downto 0); + + signal s_one : std_logic; + + signal clk_in : std_logic; + signal clk_i_d0, clk_i_d1, clk_i_d2, clk_i_d3, clk_i_dx : std_logic; + + attribute keep : string; + attribute keep of clk_in : signal is "true"; + attribute keep of clk_i_d0 : signal is "true"; + attribute keep of clk_i_d1 : signal is "true"; + attribute keep of clk_i_d2 : signal is "true"; + attribute keep of clk_i_d3 : signal is "true"; + + signal new_edge_sreg : std_logic_vector(5 downto 0); + signal new_edge_p : std_logic; + + signal tag_int : unsigned(g_counter_bits-1 downto 0); + signal resync_p_dmtd : std_logic; + + signal resync_start_p_dmtd, resync_done_dmtd, resync_p_int : std_logic; + +begin -- rtl + + U_Sync_Resync_Pulse : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_dmtd_i, + rst_n_i => rst_n_dmtdclk_i, + data_i => resync_p_a_i, + synced_o => resync_p_dmtd); + + U_Sync_Start_Pulse : gc_pulse_synchronizer + port map ( + clk_in_i => clk_sys_i, + clk_out_i => clk_dmtd_i, + rst_n_i => rst_n_dmtdclk_i, + d_ready_o => open, + d_p_i => resync_start_p_i, + q_p_o => resync_start_p_dmtd); + + U_Sync_Resync_Done : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_sysclk_i, + data_i => resync_done_dmtd, + synced_o => resync_done_o); + + + gen_straight : if(g_reverse = false) generate + + gen_input_div2 : if(g_divide_input_by_2 = true) generate + p_divide_input_clock : process(clk_in_i, rst_n_sysclk_i) + begin + if rst_n_sysclk_i = '0' then + clk_in <= '0'; + elsif rising_edge(clk_in_i) then + clk_in <= not clk_in; + end if; + end process; + end generate gen_input_div2; + + gen_input_straight : if(g_divide_input_by_2 = false) generate + clk_in <= clk_in_i; + end generate gen_input_straight; + + p_the_dmtd_itself : process(clk_dmtd_i) + begin + if rising_edge(clk_dmtd_i) then + clk_i_d0 <= clk_in; + clk_i_d1 <= clk_i_d0; + clk_i_d2 <= clk_i_d1; + clk_i_d3 <= clk_i_d2; + end if; + end process; + + end generate gen_straight; + + gen_reverse : if(g_reverse = true) generate + + assert (not g_divide_input_by_2) report "dmtd_with_deglitcher: g_reverse implies g_divide_input_by_2 == false" severity failure; + + clk_in <= clk_in_i; + + p_the_dmtd_itself : process(clk_in) + begin + if rising_edge(clk_in) then + clk_i_d0 <= clk_dmtd_i; + clk_i_d1 <= clk_i_d0; + end if; + end process; + + p_sync : process(clk_dmtd_i) + begin + if rising_edge(clk_dmtd_i) then + clk_i_dx <= clk_i_d1; + clk_i_d2 <= not clk_i_dx; + clk_i_d3 <= clk_i_d2; + end if; + end process; + + end generate gen_reverse; + +-- glitchproof DMTD output edge detection + p_deglitch : process (clk_dmtd_i) + begin -- process deglitch + + if rising_edge(clk_dmtd_i) then -- rising clock edge + + if (rst_n_dmtdclk_i = '0' or (resync_p_dmtd = '1' and resync_done_dmtd = '0')) then -- synchronous reset (active low) + stab_cntr <= (others => '0'); + state <= WAIT_STABLE_0; + free_cntr <= (others => '0'); + new_edge_sreg <= (others => '0'); + elsif(clk_dmtd_en_i = '1') then + + if (shift_en_i = '0') then -- phase shifter + free_cntr <= free_cntr + 1; + elsif (shift_dir_i = '1') then + free_cntr <= free_cntr + 2; + end if; + + case state is + when WAIT_STABLE_0 => -- out-of-sync + new_edge_sreg <= '0' & new_edge_sreg(new_edge_sreg'length-1 downto 1); + + if clk_i_d3 /= '0' then + stab_cntr <= (others => '0'); + else + stab_cntr <= stab_cntr + 1; + end if; + + -- DMTD output stable counter hit the LOW level threshold? + if stab_cntr = unsigned(deglitch_threshold_i) then + state <= WAIT_EDGE; + end if; + + when WAIT_EDGE => + if (clk_i_d3 /= '0') then -- got a glitch? + state <= GOT_EDGE; + tag_int <= free_cntr; + stab_cntr <= (others => '0'); + end if; + + when GOT_EDGE => + if (clk_i_d3 = '0') then + tag_int <= tag_int + 1; + end if; + + if stab_cntr = unsigned(deglitch_threshold_i) then + state <= WAIT_STABLE_0; + tag_o <= std_logic_vector(tag_int); + new_edge_sreg <= (others => '1'); + stab_cntr <= (others => '0'); + elsif (clk_i_d3 = '0') then + stab_cntr <= (others => '0'); + else + stab_cntr <= stab_cntr + 1; + end if; + + + end case; + end if; + end if; + end process p_deglitch; + + p_resync_pulse_output : process(clk_dmtd_i) + begin + if rising_edge(clk_dmtd_i) then + if(unsigned(free_cntr(free_cntr'length-1 downto 3)) = 0) then + resync_p_o <= '1'; + else + resync_p_o <= '0'; + end if; + end if; + end process; + + p_resync_pulse_trigger : process(clk_dmtd_i) + begin + if rising_edge(clk_dmtd_i) then + if rst_n_dmtdclk_i = '0' then + resync_done_dmtd <= '1'; + else + if(resync_start_p_dmtd = '1') then + resync_done_dmtd <= '0'; + elsif(resync_p_dmtd = '1') then + resync_done_dmtd <= '1'; + end if; + end if; + end if; + end process; + + U_sync_tag_strobe : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_sysclk_i, + data_i => new_edge_sreg(0), + synced_o => open, + npulse_o => open, + ppulse_o => new_edge_p); + + tag_stb_p1_o <= new_edge_p; + + U_Extend_Debug_Pulses : gc_extend_pulse + generic map ( + g_width => 3000) + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_sysclk_i, + pulse_i => new_edge_p, + extended_o => dbg_dmtdout_o); + + dbg_clk_d3_o <= clk_i_d3; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/pulse_stamper.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/pulse_stamper.vhd new file mode 100644 index 000000000..fb55da00c --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/pulse_stamper.vhd @@ -0,0 +1,161 @@ +------------------------------------------------------------------------------- +-- Entity: pulse_stamper +-- File: pulse_stamper.vhd +-- Description: a time-tagger which associates a time-tag with an asyncrhonous +-- input pulse. +-- Author: Javier Serrano (Javier.Serrano@cern.ch) +-- Date: 24 January 2012 +-- Version: 0.01 +-- Todo: Factor out syncrhonizer in a separate reusable block. +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- GNU LESSER GENERAL PUBLIC LICENSE +-- ----------------------------------- +-- This source file is free software; you can redistribute it and/or modify it +-- under the terms of the GNU Lesser General Public License as published by the +-- Free Software Foundation; either version 2.1 of the License, or (at your +-- option) any later version. +-- This source is distributed in the hope that it will be useful, but WITHOUT +-- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +-- FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License +-- for more details. You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it from +-- http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- + + + +library ieee; +use ieee.std_logic_1164.all; + +entity pulse_stamper is + + generic ( + -- reference clock frequency + g_ref_clk_rate : integer := 125000000); + + port( + clk_ref_i : in std_logic; -- timing reference clock + clk_sys_i : in std_logic; -- data output reference clock + rst_n_i : in std_logic; -- system reset + + pulse_a_i : in std_logic; -- pulses to be stamped + + ------------------------------------------------------------------------------- + -- Timing input (from WRPC), clk_ref_i domain + ------------------------------------------------------------------------------ + + -- 1: time given on tm_utc_i and tm_cycles_i is valid (otherwise, don't timestamp) + tm_time_valid_i : in std_logic; + -- number of seconds + tm_tai_i : in std_logic_vector(39 downto 0); + -- number of clk_ref_i cycles + tm_cycles_i : in std_logic_vector(27 downto 0); + + + --------------------------------------------------------------------------- + -- Time tag output (clk_sys_i domain) + --------------------------------------------------------------------------- + tag_tai_o : out std_logic_vector(39 downto 0); + tag_cycles_o : out std_logic_vector(27 downto 0); + -- single-cycle pulse: strobe tag on tag_utc_o and tag_cycles_o + tag_valid_o : out std_logic + ); + + +end pulse_stamper; + +architecture rtl of pulse_stamper is + + -- Signals for input anti-metastability ffs + signal pulse_ref : std_logic_vector(2 downto 0); + signal pulse_ref_p1 : std_logic; + signal pulse_ref_p1_d1 : std_logic; + + -- Time tagger signals + signal tag_utc_ref : std_logic_vector(39 downto 0); + signal tag_cycles_ref : std_logic_vector(27 downto 0); + + -- Signals for synchronizer + signal rst_from_sync : std_logic; + signal pulse_ref_d2 : std_logic; + signal pulse_sys : std_logic_vector(2 downto 0); + signal pulse_sys_p1 : std_logic; + signal pulse_back : std_logic_vector(2 downto 0); + +begin -- architecture rtl + + -- Synchronization of external pulse into the clk_ref_i clock domain + sync_ext_pulse: process (clk_ref_i) + begin + if clk_ref_i'event and clk_ref_i='1' then + pulse_ref <= pulse_ref(1 downto 0) & pulse_a_i; + pulse_ref_p1 <= pulse_ref(1) and not pulse_ref(2); + pulse_ref_p1_d1 <= pulse_ref_p1 and tm_time_valid_i; + end if; + end process sync_ext_pulse; + + -- Time tagging of the pulse, still in the clk_ref_i domain + tagger: process (clk_ref_i) + begin + if clk_ref_i'event and clk_ref_i='1' then + if pulse_ref_p1='1' and tm_time_valid_i='1' then + tag_utc_ref <= tm_tai_i; + tag_cycles_ref <= tm_cycles_i; + end if; + end if; + end process tagger; + + -- Synchronizer to pass UTC register data to the system clock domain + -- This synchronizer is made with the following three processes + + -- First one FF with async reset, still in the clk_ref_i domain + sync_first_ff: process (clk_ref_i, rst_n_i, rst_from_sync) + begin + if rst_n_i='0' or rst_from_sync='1' then + pulse_ref_d2 <= '0'; + elsif clk_ref_i'event and clk_ref_i='1' then + if pulse_ref_p1_d1='1' then + pulse_ref_d2 <= '1'; + end if; + end if; + end process sync_first_ff; + + -- Then three FFs to take the strobe safely into the clk_sys_i domain + sync_sys: process (clk_sys_i) + begin + if clk_sys_i'event and clk_sys_i='1' then + pulse_sys <= pulse_sys(1 downto 0) & pulse_ref_d2; + pulse_sys_p1 <= pulse_sys(1) and not pulse_sys(2); + end if; + end process sync_sys; + + -- And then back into the clk_ref_i domain + sync_ref: process (clk_ref_i) + begin + if clk_ref_i'event and clk_ref_i='1' then + pulse_back <= pulse_back(1 downto 0) & pulse_sys(2); + rst_from_sync <= pulse_back(2); + end if; + end process sync_ref; + + -- Now we can take the time tags into the clk_sys_i domain + sys_tags: process (clk_sys_i) + begin + if clk_sys_i'event and clk_sys_i='1' then + if rst_n_i='0' then + tag_tai_o <= (others=>'0'); + tag_cycles_o <= (others=>'0'); + tag_valid_o <= '0'; + elsif pulse_sys_p1='1' then + tag_tai_o <= tag_utc_ref; + tag_cycles_o <= tag_cycles_ref; + tag_valid_o <= '1'; + else + tag_valid_o <='0'; + end if; + end if; + end process sys_tags; + +end architecture rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_dacs/spec_serial_dac.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_dacs/spec_serial_dac.vhd new file mode 100644 index 000000000..c28410f68 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_dacs/spec_serial_dac.vhd @@ -0,0 +1,209 @@ +------------------------------------------------------------------------------- +-- Title : Serial DAC interface +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : spec_serial_dac.vhd +-- Author : paas, slayer +-- Company : CERN BE-Co-HT +-- Created : 2010-02-25 +-- Last update: 2011-05-10 +-- Platform : fpga-generic +-- Standard : VHDL'87 +------------------------------------------------------------------------------- +-- Description: The dac unit provides an interface to a 16 bit serial Digital +-- to Analogue converter (max5441, SPI?/QSPI?/MICROWIRE? compatible) +-- +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2010 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions :1 +-- Date Version Author Description +-- 2009-01-24 1.0 paas Created +-- 2010-02-25 1.1 slayer Modified for rev 1.1 switch +------------------------------------------------------------------------------- + + +library IEEE; + +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + + +entity spec_serial_dac is + + generic ( + g_num_data_bits : integer := 16; + g_num_extra_bits : integer := 8; + g_num_cs_select : integer := 2 + ); + + port ( +-- clock & reset + clk_i : in std_logic; + rst_n_i : in std_logic; + +-- channel 1 value and value load strobe + value_i : in std_logic_vector(g_num_data_bits-1 downto 0); + cs_sel_i : in std_logic_vector(g_num_cs_select-1 downto 0); + load_i : in std_logic; + +-- SCLK divider: 000 = clk_i/8 ... 111 = clk_i/1024 + sclk_divsel_i : in std_logic_vector(2 downto 0); + +-- DAC I/F + dac_cs_n_o : out std_logic_vector(g_num_cs_select-1 downto 0); + dac_sclk_o : out std_logic; + dac_sdata_o : out std_logic; + + xdone_o : out std_logic + ); +end spec_serial_dac; + + +architecture syn of spec_serial_dac is + + signal divider : unsigned(11 downto 0); + signal dataSh : std_logic_vector(g_num_data_bits + g_num_extra_bits-1 downto 0); + signal bitCounter : std_logic_vector(g_num_data_bits + g_num_extra_bits+1 downto 0); + signal endSendingData : std_logic; + signal sendingData : std_logic; + signal iDacClk : std_logic; + signal iValidValue : std_logic; + + signal divider_muxed : std_logic; + + signal cs_sel_reg : std_logic_vector(g_num_cs_select-1 downto 0); + +begin + + select_divider : process (divider, sclk_divsel_i) + begin -- process + case sclk_divsel_i is + when "000" => divider_muxed <= divider(1); -- sclk = clk_i/8 + when "001" => divider_muxed <= divider(2); -- sclk = clk_i/16 + when "010" => divider_muxed <= divider(3); -- sclk = clk_i/32 + when "011" => divider_muxed <= divider(4); -- sclk = clk_i/64 + when "100" => divider_muxed <= divider(5); -- sclk = clk_i/128 + when "101" => divider_muxed <= divider(6); -- sclk = clk_i/256 + when "110" => divider_muxed <= divider(7); -- sclk = clk_i/512 + when "111" => divider_muxed <= divider(8); -- sclk = clk_i/1024 + when others => null; + end case; + end process; + + + iValidValue <= load_i; + + process(clk_i, rst_n_i) + begin + if rising_edge(clk_i) then + if rst_n_i = '0' then + sendingData <= '0'; + else + if iValidValue = '1' and sendingData = '0' then + sendingData <= '1'; + elsif endSendingData = '1' then + sendingData <= '0'; + end if; + end if; + end if; + end process; + + process(clk_i) + begin + if rising_edge(clk_i) then + if iValidValue = '1' then + divider <= (others => '0'); + elsif sendingData = '1' then + if(divider_muxed = '1') then + divider <= (others => '0'); + else + divider <= divider + 1; + end if; + elsif endSendingData = '1' then + divider <= (others => '0'); + end if; + end if; + end process; + + + process(clk_i, rst_n_i) + begin + if rising_edge(clk_i) then + if rst_n_i = '0' then + iDacClk <= '1'; -- 0 + else + if iValidValue = '1' then + iDacClk <= '1'; -- 0 + elsif divider_muxed = '1' then + iDacClk <= not(iDacClk); + elsif endSendingData = '1' then + iDacClk <= '1'; -- 0 + end if; + end if; + end if; + end process; + + process(clk_i, rst_n_i) + begin + if rising_edge(clk_i) then + if rst_n_i = '0' then + dataSh <= (others => '0'); + else + if iValidValue = '1' and sendingData = '0' then + cs_sel_reg <= cs_sel_i; + dataSh(g_num_data_bits-1 downto 0) <= value_i; + dataSh(dataSh'left downto g_num_data_bits) <= (others => '0'); + elsif sendingData = '1' and divider_muxed = '1' and iDacClk = '0' then + dataSh(0) <= dataSh(dataSh'left); + dataSh(dataSh'left downto 1) <= dataSh(dataSh'left - 1 downto 0); + end if; + end if; + end if; + end process; + + process(clk_i) + begin + if rising_edge(clk_i) then + if iValidValue = '1' and sendingData = '0' then + bitCounter(0) <= '1'; + bitCounter(bitCounter'left downto 1) <= (others => '0'); + elsif sendingData = '1' and to_integer(divider) = 0 and iDacClk = '1' then + bitCounter(0) <= '0'; + bitCounter(bitCounter'left downto 1) <= bitCounter(bitCounter'left - 1 downto 0); + end if; + end if; + end process; + + endSendingData <= bitCounter(bitCounter'left); + + xdone_o <= not SendingData; + + dac_sdata_o <= dataSh(dataSh'left); + + gen_cs_out : for i in 0 to g_num_cs_select-1 generate + dac_cs_n_o(i) <= not(sendingData) or (not cs_sel_reg(i)); + end generate gen_cs_out; + + dac_sclk_o <= iDacClk; + + +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_dacs/spec_serial_dac_arb.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_dacs/spec_serial_dac_arb.vhd new file mode 100644 index 000000000..511bb27b7 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_dacs/spec_serial_dac_arb.vhd @@ -0,0 +1,187 @@ +------------------------------------------------------------------------------- +-- Title : SPEC serial DAC interface with arbiter +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : spec_serial_dac.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-Co-HT +-- Platform : fpga-generic +-- Standard : VHDL'87 +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2011 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + + +entity spec_serial_dac_arb is + generic( + g_invert_sclk : boolean; + g_num_extra_bits : integer + ); + port( + clk_i : in std_logic; + rst_n_i : in std_logic; + + val1_i : in std_logic_vector(15 downto 0); + load1_i : in std_logic; + val2_i : in std_logic_vector(15 downto 0); + load2_i : in std_logic; + + dac_cs_n_o : out std_logic_vector(1 downto 0); + dac_clr_n_o : out std_logic; + dac_sclk_o : out std_logic; + dac_din_o : out std_logic); + +end spec_serial_dac_arb; + +architecture behavioral of spec_serial_dac_arb is + + component spec_serial_dac + generic ( + g_num_data_bits : integer; + g_num_extra_bits : integer; + g_num_cs_select : integer); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + value_i : in std_logic_vector(g_num_data_bits-1 downto 0); + cs_sel_i : in std_logic_vector(g_num_cs_select-1 downto 0); + load_i : in std_logic; + sclk_divsel_i : in std_logic_vector(2 downto 0); + dac_cs_n_o : out std_logic_vector(g_num_cs_select-1 downto 0); + dac_sclk_o : out std_logic; + dac_sdata_o : out std_logic; + xdone_o : out std_logic); + end component; + + signal d1, d2 : std_logic_vector(15 downto 0); + signal d1_ready, d2_ready : std_logic; + + + signal dac_data : std_logic_vector(15 downto 0); + signal dac_load : std_logic; + signal dac_cs_sel : std_logic_vector(1 downto 0); + signal dac_done : std_logic; + signal dac_sclk_int : std_logic; + + type t_state is (WAIT_DONE, LOAD_DAC, WAIT_DATA); + + signal state : t_state; + + signal trig0 : std_logic_vector(31 downto 0); + signal trig1 : std_logic_vector(31 downto 0); + signal trig2 : std_logic_vector(31 downto 0); + signal trig3 : std_logic_vector(31 downto 0); + signal CONTROL0 : std_logic_vector(35 downto 0); + +begin -- behavioral + + dac_clr_n_o <= '1'; + + U_DAC : spec_serial_dac + generic map ( + g_num_data_bits => 16, + g_num_extra_bits => g_num_extra_bits, + g_num_cs_select => 2) + port map ( + clk_i => clk_i, + rst_n_i => rst_n_i, + value_i => dac_data, + cs_sel_i => dac_cs_sel, + load_i => dac_load, + sclk_divsel_i => "001", + dac_cs_n_o => dac_cs_n_o, + dac_sclk_o => dac_sclk_int, + dac_sdata_o => dac_din_o, + xdone_o => dac_done); + + + p_drive_sclk: process(dac_sclk_int) + begin + if(g_invert_sclk) then + dac_sclk_o <= not dac_sclk_int; + else + dac_sclk_o <= dac_sclk_int; + end if; + end process; + + process(clk_i) + begin + if rising_edge(clk_i) then + if rst_n_i = '0' then + d1 <= (others => '0'); + d1_ready <= '0'; + d2 <= (others => '0'); + d2_ready <= '0'; + dac_load <= '0'; + dac_cs_sel <= (others => '0'); + state <= WAIT_DATA; + else + + if(load1_i = '1' or load2_i = '1') then + + if(load1_i = '1') then + d1_ready <= '1'; + d1 <= val1_i; + end if; + + if(load2_i = '1') then + d2_ready <= '1'; + d2 <= val2_i; + end if; + else + case state is + when WAIT_DATA => + if(d1_ready = '1') then + dac_cs_sel <= "01"; + dac_data <= d1; + dac_load <= '1'; + d1_ready <= '0'; + state <= LOAD_DAC; + elsif(d2_ready = '1') then + dac_cs_sel <= "10"; + dac_data <= d2; + dac_load <= '1'; + d2_ready <= '0'; + state <= LOAD_DAC; + end if; + + when LOAD_DAC=> + dac_load <= '0'; + state <= WAIT_DONE; + + when WAIT_DONE => + if(dac_done = '1') then + state <= WAIT_DATA; + end if; + when others => null; + end case; + end if; + end if; + end if; + end process; + + + + +end behavioral; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/endpoint_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/endpoint_pkg.vhd new file mode 100644 index 000000000..5d1a794ad --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/endpoint_pkg.vhd @@ -0,0 +1,469 @@ +------------------------------------------------------------------------------- +-- Title : 1000base-X MAC/Endpoint +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : endpoint_pkg.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2010-04-26 +-- Last update: 2017-02-20 +-- Platform : FPGA-generic +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- Description: Public package for the WR Endpoint. Contains public data +-- structures and component declarations. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2011-2017 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.wishbone_pkg.all; +use work.wr_fabric_pkg.all; + +package endpoint_pkg is + + function f_pcs_data_width(pcs_16 : boolean) return integer; + function f_pcs_k_width(pcs_16 : boolean) return integer; + function f_pcs_bts_width(pcs_16 : boolean) return integer; + function f_pcs_clock_rate(pcs_16 : boolean) return integer; + + type t_txtsu_timestamp is record + stb : std_logic; + tsval : std_logic_vector(31 downto 0); + port_id : std_logic_vector(5 downto 0); + frame_id : std_logic_vector(15 downto 0); + incorrect : std_logic; + end record; + + type t_txtsu_timestamp_array is array(integer range <>) of t_txtsu_timestamp; + + -- Endpoint's internal fabric used to connect the submodules with each other. + -- Easier to handle than pipelined Wishbone. + type t_ep_internal_fabric is record + sof : std_logic; + eof : std_logic; + error : std_logic; + dvalid : std_logic; + bytesel : std_logic; + has_rx_timestamp : std_logic; + rx_timestamp_valid : std_logic; + data : std_logic_vector(15 downto 0); + addr : std_logic_vector(1 downto 0); + end record; + type t_fab_pipe is array(integer range <>) of t_ep_internal_fabric; + + ----------------------------- + -- Phy i/f types + ----------------------------- + -- 8-bit Serdes + type t_phy_8bits_to_wrc is record + ref_clk : std_logic; + tx_disparity : std_logic; + tx_enc_err : std_logic; + rx_data : std_logic_vector(7 downto 0); + rx_clk : std_logic; + rx_k : std_logic_vector(0 downto 0); + rx_enc_err : std_logic; + rx_bitslide : std_logic_vector(3 downto 0); + rdy : std_logic; + sfp_tx_fault : std_logic; + sfp_los : std_logic; + end record; + type t_phy_8bits_from_wrc is record + rst : std_logic; + loopen : std_logic; + tx_data : std_logic_vector(7 downto 0); + tx_k : std_logic_vector(0 downto 0); + loopen_vec : std_logic_vector(2 downto 0); + tx_prbs_sel : std_logic_vector(2 downto 0); + sfp_tx_disable : std_logic; + end record; + + constant c_dummy_phy8_to_wrc : t_phy_8bits_to_wrc := + ('0', '0', '0', (others=>'0'), '0', (others=>'0'), '0', + (others=>'0'), '0', '0', '0'); + constant c_dummy_phy8_from_wrc : t_phy_8bits_from_wrc := + ('0', '0', (others=>'0'), (others=>'0'), (others=>'0'), + (others=>'0'), '0'); + + -- 16-bit Serdes + type t_phy_16bits_to_wrc is record + ref_clk : std_logic; + tx_disparity : std_logic; + tx_enc_err : std_logic; + rx_data : std_logic_vector(15 downto 0); + rx_clk : std_logic; + rx_k : std_logic_vector(1 downto 0); + rx_enc_err : std_logic; + rx_bitslide : std_logic_vector(4 downto 0); + rdy : std_logic; + sfp_tx_fault : std_logic; + sfp_los : std_logic; + end record; + type t_phy_16bits_from_wrc is record + rst : std_logic; + loopen : std_logic; + tx_data : std_logic_vector(15 downto 0); + tx_k : std_logic_vector(1 downto 0); + loopen_vec : std_logic_vector(2 downto 0); + tx_prbs_sel : std_logic_vector(2 downto 0); + sfp_tx_disable : std_logic; + end record; + + constant c_dummy_phy16_to_wrc : t_phy_16bits_to_wrc := + ('0', '0', '0', (others=>'0'), '0', (others=>'0'), '0', + (others=>'0'), '0', '0', '0'); + constant c_dummy_phy16_from_wrc : t_phy_16bits_from_wrc := + ('0', '0', (others=>'0'), (others=>'0'), (others=>'0'), + (others=>'0'), '0'); + + + -- debug CS types + type t_dbg_ep_rxpcs is record + fsm : std_logic_vector(2 downto 0); + end record; + + type t_dbg_ep_pcs is record + rx : t_dbg_ep_rxpcs; + end record; + + type t_dbg_ep_rxpath is record + fab_pipe : t_fab_pipe(9 downto 0); + dreq_pipe : std_logic_vector(9 downto 0); + pcs_fifo_afull : std_logic; + pcs_fifo_empty : std_logic; + pcs_fifo_full : std_logic; + rxbuf_full : std_logic; + end record; + + type t_dbg_ep is record + pcs : t_dbg_ep_pcs; + rxpath : t_dbg_ep_rxpath; + end record; + ------------------------------------ + + constant c_epevents_sz : integer := 29; --how many events the endpoint generates + + component xwr_endpoint + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_simulation : boolean := false; + g_pcs_16bit : boolean := false; + g_records_for_phy : boolean := false; + g_tx_force_gap_length : integer := 0; + g_tx_runt_padding : boolean := false; + g_rx_buffer_size : integer := 1024; + g_with_rx_buffer : boolean := true; + g_with_flow_control : boolean := true; + g_with_timestamper : boolean := true; + g_with_dpi_classifier : boolean := false; + g_with_vlans : boolean := false; + g_with_rtu : boolean := false; + g_with_leds : boolean := false; + g_with_dmtd : boolean := false; + g_with_packet_injection : boolean := false; + g_use_new_rxcrc : boolean := false; + g_use_new_txcrc : boolean := false; + g_with_stop_traffic : boolean := false); + port ( + clk_ref_i : in std_logic; + clk_sys_i : in std_logic; + clk_dmtd_i : in std_logic := '0'; + rst_sys_n_i : in std_logic; + rst_ref_n_i : in std_logic; + rst_dmtd_n_i : in std_logic; + rst_txclk_n_i : in std_logic; + rst_rxclk_n_i : in std_logic; + pps_csync_p1_i : in std_logic := '0'; + pps_valid_i : in std_logic := '1'; + phy_rst_o : out std_logic; + phy_loopen_o : out std_logic; + phy_loopen_vec_o : out std_logic_vector(2 downto 0); + phy_tx_prbs_sel_o : out std_logic_vector(2 downto 0); + phy_sfp_tx_fault_i : in std_logic := '0'; + phy_sfp_los_i : in std_logic := '0'; + phy_sfp_tx_disable_o : out std_logic; + phy_rdy_i : in std_logic; + phy_ref_clk_i : in std_logic := '0'; + phy_tx_data_o : out std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0); + phy_tx_k_o : out std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0); + phy_tx_disparity_i : in std_logic := '0'; + phy_tx_enc_err_i : in std_logic := '0'; + phy_rx_data_i : in std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0) := (others=>'0'); + phy_rx_clk_i : in std_logic := '0'; + phy_rx_k_i : in std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0) := (others=>'0'); + phy_rx_enc_err_i : in std_logic := '0'; + phy_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_pcs_16bit)-1 downto 0) := (others=>'0'); + phy8_o : out t_phy_8bits_from_wrc; + phy8_i : in t_phy_8bits_to_wrc := c_dummy_phy8_to_wrc; + phy16_o : out t_phy_16bits_from_wrc; + phy16_i : in t_phy_16bits_to_wrc := c_dummy_phy16_to_wrc; + gmii_tx_clk_i : in std_logic := '0'; + gmii_txd_o : out std_logic_vector(7 downto 0); + gmii_tx_en_o : out std_logic; + gmii_tx_er_o : out std_logic; + gmii_rx_clk_i : in std_logic := '0'; + gmii_rxd_i : in std_logic_vector(7 downto 0) := x"00"; + gmii_rx_er_i : in std_logic := '0'; + gmii_rx_dv_i : in std_logic := '0'; + src_o : out t_wrf_source_out; + src_i : in t_wrf_source_in; + snk_o : out t_wrf_sink_out; + snk_i : in t_wrf_sink_in; + txtsu_port_id_o : out std_logic_vector(4 downto 0); + txtsu_frame_id_o : out std_logic_vector(16 -1 downto 0); + txtsu_ts_value_o : out std_logic_vector(28 + 4 - 1 downto 0); + txtsu_ts_incorrect_o : out std_logic; + txtsu_stb_o : out std_logic; + txtsu_ack_i : in std_logic := '1'; + rtu_full_i : in std_logic := '0'; + rtu_almost_full_i : in std_logic := '0'; + rtu_rq_strobe_p1_o : out std_logic; + rtu_rq_abort_o : out std_logic; + rtu_rq_smac_o : out std_logic_vector(48 - 1 downto 0); + rtu_rq_dmac_o : out std_logic_vector(48 - 1 downto 0); + rtu_rq_vid_o : out std_logic_vector(12 - 1 downto 0); + rtu_rq_has_vid_o : out std_logic; + rtu_rq_prio_o : out std_logic_vector(3 - 1 downto 0); + rtu_rq_has_prio_o : out std_logic; + wb_i : in t_wishbone_slave_in; + wb_o : out t_wishbone_slave_out; + pfilter_pclass_o : out std_logic_vector(7 downto 0); + pfilter_drop_o : out std_logic; + pfilter_done_o : out std_logic; + fc_tx_pause_req_i : in std_logic := '0'; + fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000"; + fc_tx_pause_ready_o : out std_logic; + fc_rx_pause_start_p_o : out std_logic; + fc_rx_pause_quanta_o : out std_logic_vector(15 downto 0); + fc_rx_pause_prio_mask_o : out std_logic_vector(7 downto 0); + fc_rx_buffer_occupation_o : out std_logic_vector(7 downto 0); + inject_req_i : in std_logic := '0'; + inject_ready_o : out std_logic; + inject_packet_sel_i : in std_logic_vector(2 downto 0) := "000"; + inject_user_value_i : in std_logic_vector(15 downto 0) := x"0000"; + rmon_events_o : out std_logic_vector(c_epevents_sz-1 downto 0); + txts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration + rxts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration + led_link_o : out std_logic; + led_act_o : out std_logic; + link_kill_i : in std_logic := '0'; + link_up_o : out std_logic; + stop_traffic_i : in std_logic := '0'; + dbg_tx_pcs_wr_count_o : out std_logic_vector(5+4 downto 0); + dbg_tx_pcs_rd_count_o : out std_logic_vector(5+4 downto 0); + nice_dbg_o : out t_dbg_ep); + end component; + + component wr_endpoint + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_tx_force_gap_length : integer := 0; + g_tx_runt_padding : boolean := false; + g_simulation : boolean := false; + g_pcs_16bit : boolean := true; + g_rx_buffer_size : integer := 1024; + g_with_rx_buffer : boolean := true; + g_with_flow_control : boolean := true; + g_with_timestamper : boolean := true; + g_with_dpi_classifier : boolean := false; + g_with_vlans : boolean := true; + g_with_rtu : boolean := true; + g_with_leds : boolean := true; + g_with_dmtd : boolean := false; + g_with_packet_injection : boolean := false; + g_use_new_rxcrc : boolean := false; + g_use_new_txcrc : boolean := false; + g_with_stop_traffic : boolean := false); + port ( + clk_ref_i : in std_logic; + clk_sys_i : in std_logic; + clk_dmtd_i : in std_logic; + rst_sys_n_i : in std_logic; + rst_ref_n_i : in std_logic; + rst_dmtd_n_i : in std_logic; + rst_txclk_n_i : in std_logic; + rst_rxclk_n_i : in std_logic; + pps_csync_p1_i : in std_logic; + pps_valid_i : in std_logic := '1'; + phy_rst_o : out std_logic; + phy_loopen_o : out std_logic; + phy_loopen_vec_o : out std_logic_vector(2 downto 0); + phy_tx_prbs_sel_o : out std_logic_vector(2 downto 0); + phy_sfp_tx_fault_i : in std_logic := '0'; + phy_sfp_los_i : in std_logic := '0'; + phy_sfp_tx_disable_o : out std_logic; + phy_rdy_i : in std_logic; + phy_ref_clk_i : in std_logic; + phy_tx_data_o : out std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0); + phy_tx_k_o : out std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0); + phy_tx_disparity_i : in std_logic; + phy_tx_enc_err_i : in std_logic; + phy_rx_data_i : in std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0) := (others=>'0'); + phy_rx_clk_i : in std_logic; + phy_rx_k_i : in std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0) := (others=>'0'); + phy_rx_enc_err_i : in std_logic; + phy_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_pcs_16bit)-1 downto 0) := (others=>'0'); + gmii_tx_clk_i : in std_logic := '0'; + gmii_txd_o : out std_logic_vector(7 downto 0) := x"00"; + gmii_tx_en_o : out std_logic := '0'; + gmii_tx_er_o : out std_logic := '0'; + gmii_rx_clk_i : in std_logic := '0'; + gmii_rxd_i : in std_logic_vector(7 downto 0) := x"00"; + gmii_rx_er_i : in std_logic := '0'; + gmii_rx_dv_i : in std_logic := '0'; + src_dat_o : out std_logic_vector(15 downto 0); + src_adr_o : out std_logic_vector(1 downto 0); + src_sel_o : out std_logic_vector(1 downto 0); + src_cyc_o : out std_logic; + src_stb_o : out std_logic; + src_we_o : out std_logic; + src_stall_i : in std_logic; + src_ack_i : in std_logic; + src_err_i : in std_logic; + snk_dat_i : in std_logic_vector(15 downto 0); + snk_adr_i : in std_logic_vector(1 downto 0); + snk_sel_i : in std_logic_vector(1 downto 0); + snk_cyc_i : in std_logic; + snk_stb_i : in std_logic; + snk_we_i : in std_logic; + snk_stall_o : out std_logic; + snk_ack_o : out std_logic; + snk_err_o : out std_logic; + snk_rty_o : out std_logic; + txtsu_port_id_o : out std_logic_vector(4 downto 0); + txtsu_frame_id_o : out std_logic_vector(16 -1 downto 0); + txtsu_ts_value_o : out std_logic_vector(28 + 4 - 1 downto 0); + txtsu_ts_incorrect_o : out std_logic; + txtsu_stb_o : out std_logic; + txtsu_ack_i : in std_logic; + rtu_full_i : in std_logic; + rtu_almost_full_i : in std_logic; + rtu_rq_strobe_p1_o : out std_logic; + rtu_rq_abort_o : out std_logic; + rtu_rq_smac_o : out std_logic_vector(48 - 1 downto 0); + rtu_rq_dmac_o : out std_logic_vector(48 - 1 downto 0); + rtu_rq_vid_o : out std_logic_vector(12 - 1 downto 0); + rtu_rq_has_vid_o : out std_logic; + rtu_rq_prio_o : out std_logic_vector(3 - 1 downto 0); + rtu_rq_has_prio_o : out std_logic; + wb_cyc_i : in std_logic; + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_adr_i : in std_logic_vector(7 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + pfilter_pclass_o : out std_logic_vector(7 downto 0); + pfilter_drop_o : out std_logic; + pfilter_done_o : out std_logic; + fc_tx_pause_req_i : in std_logic := '0'; + fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000"; + fc_tx_pause_ready_o : out std_logic; + fc_rx_pause_start_p_o : out std_logic; + fc_rx_pause_quanta_o : out std_logic_vector(15 downto 0); + fc_rx_pause_prio_mask_o : out std_logic_vector(7 downto 0); + fc_rx_buffer_occupation_o : out std_logic_vector(7 downto 0); + inject_req_i : in std_logic := '0'; + inject_ready_o : out std_logic; + inject_packet_sel_i : in std_logic_vector(2 downto 0) := "000"; + inject_user_value_i : in std_logic_vector(15 downto 0) := x"0000"; + rmon_events_o : out std_logic_vector(c_epevents_sz-1 downto 0); + txts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration + rxts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration + led_link_o : out std_logic; + led_act_o : out std_logic; + link_kill_i : in std_logic := '0'; + link_up_o : out std_logic; + stop_traffic_i : in std_logic := '0'; + dbg_tx_pcs_wr_count_o : out std_logic_vector(5+4 downto 0); + dbg_tx_pcs_rd_count_o : out std_logic_vector(5+4 downto 0); + nice_dbg_o : out t_dbg_ep); + end component; + + constant c_xwr_endpoint_sdb : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"01", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"00000000000000ff", + product => ( + vendor_id => x"000000000000CE42", -- CERN + device_id => x"650c2d4f", + version => x"00000002", + date => x"20121116", + name => "WR-Endpoint "))); + +end endpoint_pkg; + +package body endpoint_pkg is + + function f_pcs_data_width(pcs_16 : boolean) + return integer is + begin + if (pcs_16) then + return 16; + else + return 8; + end if; + end function; + + function f_pcs_k_width(pcs_16 : boolean) + return integer is + begin + if (pcs_16) then + return 2; + else + return 1; + end if; + end function; + + function f_pcs_bts_width(pcs_16 : boolean) + return integer is + begin + if (pcs_16) then + return 5; + else + return 4; + end if; + end function; + + function f_pcs_clock_rate(pcs_16 : boolean) + return integer is + begin + if (pcs_16) then + return 62500000; + else + return 125000000; + end if; + end function; + +end package body endpoint_pkg; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/endpoint_private_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/endpoint_private_pkg.vhd new file mode 100644 index 000000000..3191e71cb --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/endpoint_private_pkg.vhd @@ -0,0 +1,930 @@ +------------------------------------------------------------------------------- +-- Title : Private constants/types/functions package +-- Project : White Rabbit MAC/Endpoint +------------------------------------------------------------------------------- +-- File : endpoint_private_pkg.vhd +-- Author : Tomasz Włostowski +-- Company : CERN BE-CO-HT +-- Created : 2010-11-18 +-- Last update: 2017-02-20 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Endpoint private definitions: +-- - 8B10B codes +-- - VLAN control registers +-- - Data types: internal fabric, RMON, RTU +-- - 18-bit FIFO fabric packing/unpacking functions +-- - Endpoint subcomponents declarations +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2009-2011 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.ep_wbgen2_pkg.all; +use work.wr_fabric_pkg.all; +use work.endpoint_pkg.all; +use work.genram_pkg.all; + +package endpoint_private_pkg is + + -- special/control characters + constant c_k28_5 : std_logic_vector(7 downto 0) := "10111100"; -- bc + constant c_k23_7 : std_logic_vector(7 downto 0) := "11110111"; -- f7 + constant c_k27_7 : std_logic_vector(7 downto 0) := "11111011"; -- fb + constant c_k29_7 : std_logic_vector(7 downto 0) := "11111101"; -- fd + constant c_k30_7 : std_logic_vector(7 downto 0) := "11111110"; -- fe + constant c_k28_7 : std_logic_vector(7 downto 0) := "11111100"; -- fc + constant c_d21_5 : std_logic_vector(7 downto 0) := "10110101"; -- b5 + + constant c_d2_2 : std_logic_vector(7 downto 0) := "01000010"; -- 42 + constant c_d5_6 : std_logic_vector(7 downto 0) := "11000101"; -- c5 + constant c_d16_2 : std_logic_vector(7 downto 0) := "01010000"; -- 50 + constant c_preamble_char : std_logic_vector(7 downto 0) := "01010101"; + constant c_preamble_sfd : std_logic_vector(7 downto 0) := "11010101"; + + constant c_QMODE_PORT_ACCESS : std_logic_vector(1 downto 0) := "00"; + constant c_QMODE_PORT_TRUNK : std_logic_vector(1 downto 0) := "01"; + constant c_QMODE_PORT_UNQUALIFIED : std_logic_vector(1 downto 0) := "11"; + constant c_QMODE_PORT_VLAN_DISABLED : std_logic_vector(1 downto 0) := "10"; + + -- fixme: remove these along with the non-WB version of the endpoint + constant c_wrsw_ctrl_none : std_logic_vector(4 - 1 downto 0) := x"0"; + constant c_wrsw_ctrl_dst_mac : std_logic_vector(4 - 1 downto 0) := x"1"; + constant c_wrsw_ctrl_src_mac : std_logic_vector(4 - 1 downto 0) := x"2"; + constant c_wrsw_ctrl_ethertype : std_logic_vector(4 - 1 downto 0) := x"3"; + constant c_wrsw_ctrl_vid_prio : std_logic_vector(4 - 1 downto 0) := x"4"; + constant c_wrsw_ctrl_tx_oob : std_logic_vector(4 - 1 downto 0) := x"5"; + constant c_wrsw_ctrl_rx_oob : std_logic_vector(4 - 1 downto 0) := x"6"; + constant c_wrsw_ctrl_payload : std_logic_vector(4 - 1 downto 0) := x"7"; + constant c_wrsw_ctrl_fcs : std_logic_vector(4 - 1 downto 0) := x"8"; + + type t_ep_internal_rtu_request is record + smac : std_logic_vector(47 downto 0); + dmac : std_logic_vector(47 downto 0); + vid : std_logic_vector(11 downto 0); + prio : std_logic_vector(2 downto 0); + has_vid : std_logic; + has_prio : std_logic; + hash : std_logic_vector(15 downto 0); + end record; + + type t_rmon_triggers is record + rx_sync_lost : std_logic; + rx_invalid_code : std_logic; + rx_overrun : std_logic; + rx_crc_err : std_logic; + rx_ok : std_logic; + rx_pfilter_drop : std_logic; + rx_runt : std_logic; + rx_giant : std_logic; + rx_pause : std_logic; + rx_pcs_err : std_logic; + rx_buffer_overrun : std_logic; + rx_rtu_overrun : std_logic; + rx_path_timing_failure : std_logic; + tx_pause : std_logic; + tx_underrun : std_logic; + rx_pclass : std_logic_vector(7 downto 0); -- packet class (from filter) + rx_tclass : std_logic_vector(7 downto 0); -- traffic class (priority) + tx_frame : std_logic; + rx_frame : std_logic; + rx_drop_at_rtu_full : std_logic; + end record; + + component ep_1000basex_pcs + generic ( + g_simulation : boolean; + g_16bit : boolean); + port ( + rst_sys_n_i : in std_logic; + rst_txclk_n_i : in std_logic; + rst_rxclk_n_i : in std_logic; + clk_sys_i : in std_logic; + rxpcs_fab_o : out t_ep_internal_fabric; + rxpcs_fifo_almostfull_i : in std_logic; + rxpcs_busy_o : out std_logic; + rxpcs_timestamp_trigger_p_a_o : out std_logic; + rxpcs_timestamp_i : in std_logic_vector(31 downto 0); + rxpcs_timestamp_stb_i : in std_logic; + rxpcs_timestamp_valid_i : in std_logic; + txpcs_fab_i : in t_ep_internal_fabric; + txpcs_error_o : out std_logic; + txpcs_busy_o : out std_logic; + txpcs_dreq_o : out std_logic; + txpcs_timestamp_trigger_p_a_o : out std_logic; + link_ok_o : out std_logic; + link_ctr_i : in std_logic := '1'; + serdes_rst_o : out std_logic; + serdes_loopen_o : out std_logic; + serdes_loopen_vec_o : out std_logic_vector(2 downto 0); + serdes_tx_prbs_sel_o : out std_logic_vector(2 downto 0); + serdes_sfp_tx_fault_i : in std_logic; + serdes_sfp_los_i : in std_logic; + serdes_sfp_tx_disable_o : out std_logic; + serdes_rdy_i : in std_logic; + serdes_tx_clk_i : in std_logic; + serdes_tx_data_o : out std_logic_vector(f_pcs_data_width(g_16bit)-1 downto 0); + serdes_tx_k_o : out std_logic_vector(f_pcs_k_width(g_16bit)-1 downto 0); + serdes_tx_disparity_i : in std_logic; + serdes_tx_enc_err_i : in std_logic; + serdes_rx_clk_i : in std_logic; + serdes_rx_data_i : in std_logic_vector(f_pcs_data_width(g_16bit)-1 downto 0); + serdes_rx_k_i : in std_logic_vector(f_pcs_k_width(g_16bit)-1 downto 0); + serdes_rx_enc_err_i : in std_logic; + serdes_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_16bit)-1 downto 0); + rmon_o : out t_rmon_triggers; + mdio_addr_i : in std_logic_vector(15 downto 0); + mdio_data_i : in std_logic_vector(15 downto 0); + mdio_data_o : out std_logic_vector(15 downto 0); + mdio_stb_i : in std_logic; + mdio_rw_i : in std_logic; + mdio_ready_o : out std_logic; + dbg_tx_pcs_wr_count_o : out std_logic_vector(5+4 downto 0); + dbg_tx_pcs_rd_count_o : out std_logic_vector(5+4 downto 0); + nice_dbg_o : out t_dbg_ep_pcs); + end component; + + component ep_tx_pcs_8bit + port ( + rst_n_i : in std_logic; + rst_txclk_n_i : in std_logic; + clk_sys_i : in std_logic; + pcs_fab_i : in t_ep_internal_fabric; + pcs_error_o : out std_logic; + pcs_busy_o : out std_logic; + pcs_dreq_o : out std_logic; + mdio_mcr_reset_i : in std_logic; + mdio_mcr_pdown_i : in std_logic; + mdio_wr_spec_tx_cal_i : in std_logic; + an_tx_en_i : in std_logic; + an_tx_val_i : in std_logic_vector(15 downto 0); + timestamp_trigger_p_a_o : out std_logic; + rmon_tx_underrun : out std_logic; + phy_tx_clk_i : in std_logic; + phy_tx_data_o : out std_logic_vector(7 downto 0); + phy_tx_k_o : out std_logic; + phy_tx_disparity_i : in std_logic; + phy_tx_enc_err_i : in std_logic); + end component; + + component ep_tx_pcs_16bit + port ( + rst_n_i : in std_logic; + rst_txclk_n_i : in std_logic; + clk_sys_i : in std_logic; + pcs_fab_i : in t_ep_internal_fabric; + pcs_error_o : out std_logic; + pcs_busy_o : out std_logic; + pcs_dreq_o : out std_logic; + mdio_mcr_reset_i : in std_logic; + mdio_mcr_pdown_i : in std_logic; + mdio_wr_spec_tx_cal_i : in std_logic; + an_tx_en_i : in std_logic; + an_tx_val_i : in std_logic_vector(15 downto 0); + timestamp_trigger_p_a_o : out std_logic; + rmon_tx_underrun : out std_logic; + phy_tx_clk_i : in std_logic; + phy_tx_data_o : out std_logic_vector(15 downto 0); + phy_tx_k_o : out std_logic_vector(1 downto 0); + phy_tx_disparity_i : in std_logic; + phy_tx_enc_err_i : in std_logic; + dbg_wr_count_o : out std_logic_vector(5+4 downto 0); + dbg_rd_count_o : out std_logic_vector(5+4 downto 0)); + end component; + + component ep_rx_pcs_8bit + generic ( + g_simulation : boolean); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + rst_rxclk_n_i : in std_logic; + pcs_fifo_almostfull_i : in std_logic; + pcs_busy_o : out std_logic; + pcs_fab_o : out t_ep_internal_fabric; + timestamp_trigger_p_a_o : out std_logic; -- strobe for RX timestamping + timestamp_i : in std_logic_vector(31 downto 0); + timestamp_stb_i : in std_logic; + timestamp_valid_i : in std_logic; + phy_rdy_i : in std_logic; + phy_rx_clk_i : in std_logic; + phy_rx_data_i : in std_logic_vector(7 downto 0); + phy_rx_k_i : in std_logic; + phy_rx_enc_err_i : in std_logic; + mdio_mcr_reset_i : in std_logic; + mdio_mcr_pdown_i : in std_logic; + mdio_wr_spec_cal_crst_i : in std_logic; + mdio_wr_spec_rx_cal_stat_o : out std_logic; + synced_o : out std_logic; + sync_lost_o : out std_logic; + an_rx_en_i : in std_logic; + an_rx_val_o : out std_logic_vector(15 downto 0); + an_rx_valid_o : out std_logic; + an_idle_match_o : out std_logic; + rmon_rx_overrun : out std_logic; + rmon_rx_inv_code : out std_logic; + rmon_rx_sync_lost : out std_logic); + end component; + + component ep_rx_pcs_16bit + generic ( + g_simulation : boolean); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + rst_rxclk_n_i : in std_logic; + pcs_fifo_almostfull_i : in std_logic; + pcs_busy_o : out std_logic; + pcs_fab_o : out t_ep_internal_fabric; + timestamp_trigger_p_a_o : out std_logic; -- strobe for RX timestamping + timestamp_i : in std_logic_vector(31 downto 0); + timestamp_stb_i : in std_logic; + timestamp_valid_i : in std_logic; + phy_rdy_i : in std_logic; + phy_rx_clk_i : in std_logic; + phy_rx_data_i : in std_logic_vector(15 downto 0); + phy_rx_k_i : in std_logic_vector(1 downto 0); + phy_rx_enc_err_i : in std_logic; + mdio_mcr_reset_i : in std_logic; + mdio_mcr_pdown_i : in std_logic; + mdio_wr_spec_cal_crst_i : in std_logic; + mdio_wr_spec_rx_cal_stat_o : out std_logic; + synced_o : out std_logic; + sync_lost_o : out std_logic; + an_rx_en_i : in std_logic; + an_rx_val_o : out std_logic_vector(15 downto 0); + an_rx_valid_o : out std_logic; + an_idle_match_o : out std_logic; + rmon_rx_overrun : out std_logic; + rmon_rx_inv_code : out std_logic; + rmon_rx_sync_lost : out std_logic; + nice_dbg_o : out t_dbg_ep_rxpcs); + end component; + + component ep_autonegotiation + generic ( + g_simulation : boolean); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + pcs_synced_i : in std_logic; + pcs_los_i : in std_logic; + pcs_link_ok_o : out std_logic; + an_idle_match_i : in std_logic; + an_rx_en_o : out std_logic; + an_rx_val_i : in std_logic_vector(15 downto 0); + an_rx_valid_i : in std_logic; + an_tx_en_o : out std_logic; + an_tx_val_o : out std_logic_vector(15 downto 0); + mdio_mcr_anrestart_i : in std_logic; + mdio_mcr_anenable_i : in std_logic; + mdio_msr_anegcomplete_o : out std_logic; + mdio_advertise_pause_i : in std_logic_vector(1 downto 0); + mdio_advertise_rfault_i : in std_logic_vector(1 downto 0); + mdio_lpa_full_o : out std_logic; + mdio_lpa_half_o : out std_logic; + mdio_lpa_pause_o : out std_logic_vector(1 downto 0); + mdio_lpa_rfault_o : out std_logic_vector(1 downto 0); + mdio_lpa_lpack_o : out std_logic; + mdio_lpa_npage_o : out std_logic); + end component; + + component ep_pcs_tbi_mdio_wb + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + tx_clk_i : in std_logic; + rx_clk_i : in std_logic; + mdio_mcr_uni_en_o : out std_logic; + mdio_mcr_anrestart_o : out std_logic; + mdio_mcr_pdown_o : out std_logic; + mdio_mcr_anenable_o : out std_logic; + mdio_mcr_reset_o : out std_logic; + mdio_mcr_loopback_o : out std_logic; + mdio_msr_lstatus_i : in std_logic; + lstat_read_notify_o : out std_logic; + mdio_msr_rfault_i : in std_logic; + mdio_msr_anegcomplete_i : in std_logic; + mdio_advertise_pause_o : out std_logic_vector(1 downto 0); + mdio_advertise_rfault_o : out std_logic_vector(1 downto 0); + mdio_lpa_full_i : in std_logic; + mdio_lpa_half_i : in std_logic; + mdio_lpa_pause_i : in std_logic_vector(1 downto 0); + mdio_lpa_rfault_i : in std_logic_vector(1 downto 0); + mdio_lpa_lpack_i : in std_logic; + mdio_lpa_npage_i : in std_logic; + mdio_wr_spec_tx_cal_o : out std_logic; + mdio_wr_spec_rx_cal_stat_i : in std_logic; + mdio_wr_spec_cal_crst_o : out std_logic; + mdio_wr_spec_bslide_i : in std_logic_vector(4 downto 0); + mdio_ectrl_lpbck_vec_o : out std_logic_vector(2 downto 0); + mdio_ectrl_sfp_tx_fault_i : in std_logic; + mdio_ectrl_sfp_loss_i : in std_logic; + mdio_ectrl_sfp_tx_disable_o : out std_logic; + mdio_ectrl_tx_prbs_sel_o : out std_logic_vector(2 downto 0)); + end component; + + component ep_tx_header_processor + generic ( + g_with_packet_injection : boolean; + g_with_timestamper : boolean; + g_force_gap_length : integer; + g_runt_padding : boolean); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + pcs_busy_i : in std_logic; + pcs_error_i : in std_logic; + wb_snk_i : in t_wrf_sink_in; + wb_snk_o : out t_wrf_sink_out; + fc_pause_req_i : in std_logic; + fc_pause_delay_i : in std_logic_vector(15 downto 0); + fc_pause_ready_o : out std_logic; + fc_flow_enable_i : in std_logic; + txtsu_port_id_o : out std_logic_vector(4 downto 0); + txtsu_fid_o : out std_logic_vector(16 -1 downto 0); + txtsu_ts_value_o : out std_logic_vector(28 + 4 - 1 downto 0); + txtsu_ts_incorrect_o : out std_logic; + txtsu_stb_o : out std_logic; + txtsu_ack_i : in std_logic; + txts_timestamp_i : in std_logic_vector(31 downto 0); + txts_timestamp_valid_i : in std_logic; + ep_ctrl_i : in std_logic; + regs_i : in t_ep_out_registers); + end component; + + component ep_tx_vlan_unit + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + inject_mem_addr_i : in std_logic_vector(9 downto 0); + inject_mem_data_o : out std_logic_vector(17 downto 0); + uram_offset_wr_i : in std_logic; + uram_offset_i : in std_logic_vector(9 downto 0); + uram_data_i : in std_logic_vector(17 downto 0)); + end component; + + component ep_timestamping_unit + generic ( + g_timestamp_bits_r : natural; + g_timestamp_bits_f : natural; + g_ref_clock_rate : integer); + port ( + clk_ref_i : in std_logic; + clk_sys_i : in std_logic; + clk_rx_i : in std_logic; + rst_n_rx_i : in std_logic; + rst_n_ref_i : in std_logic; + rst_n_sys_i : in std_logic; + pps_csync_p1_i : in std_logic; + pps_valid_i : in std_logic; + tx_timestamp_trigger_p_a_i : in std_logic; + rx_timestamp_trigger_p_a_i : in std_logic; + rxts_timestamp_o : out std_logic_vector(31 downto 0); + rxts_timestamp_stb_o : out std_logic; + rxts_timestamp_valid_o : out std_logic; + txts_timestamp_o : out std_logic_vector(31 downto 0); + txts_timestamp_stb_o : out std_logic; + txts_timestamp_valid_o : out std_logic; + txts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration + rxts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration + regs_i : in t_ep_out_registers; + regs_o : out t_ep_in_registers); + end component; + + component ep_flow_control + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + rx_pause_p1_i : in std_logic; + rx_pause_delay_i : in std_logic_vector(15 downto 0); + tx_pause_o : out std_logic; + tx_pause_delay_o : out std_logic_vector(15 downto 0); + tx_pause_ack_i : in std_logic; + tx_flow_enable_o : out std_logic; + rx_buffer_used_i : in std_logic_vector(7 downto 0); + ep_fcr_txpause_i : in std_logic; + ep_fcr_rxpause_i : in std_logic; + ep_fcr_tx_thr_i : in std_logic_vector(7 downto 0); + ep_fcr_tx_quanta_i : in std_logic_vector(15 downto 0); + rmon_rcvd_pause_o : out std_logic; + rmon_sent_pause_o : out std_logic); + end component; + + component ep_wishbone_controller + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + tx_clk_i : in std_logic; + rx_clk_i : in std_logic; + regs_o : out t_ep_out_registers; + regs_i : in t_ep_in_registers); + end component; + + component ep_leds_controller + generic ( + g_blink_period_log2 : integer); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + dvalid_tx_i : in std_logic; + dvalid_rx_i : in std_logic; + link_ok_i : in std_logic; + led_link_o : out std_logic; + led_act_o : out std_logic); + end component; + + component ep_tx_packet_injection + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + inject_req_i : in std_logic; + inject_ready_o : out std_logic; + inject_packet_sel_i : in std_logic_vector(2 downto 0); + inject_user_value_i : in std_logic_vector(15 downto 0); + inject_mode_i : in std_logic_vector(1 downto 0); + mem_addr_o : out std_logic_vector(9 downto 0); + mem_data_i : in std_logic_vector(17 downto 0)); + end component; + + component ep_rtu_header_extract + generic ( + g_with_rtu : boolean); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + mbuf_is_pause_i : in std_logic; + vlan_class_i : in std_logic_vector(2 downto 0); + vlan_vid_i : in std_logic_vector(11 downto 0); + vlan_tag_done_i : in std_logic; + vlan_is_tagged_i : in std_logic; + rmon_drp_at_rtu_full_o: out std_logic; + rtu_rq_o : out t_ep_internal_rtu_request; + rtu_full_i : in std_logic; + rtu_rq_abort_o : out std_logic; + rtu_rq_valid_o : out std_logic; + rxbuf_full_i : in std_logic); + end component; + + component ep_rx_early_address_match + port ( + clk_sys_i : in std_logic; + clk_rx_i : in std_logic; + rst_n_sys_i : in std_logic; + rst_n_rx_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + src_fab_o : out t_ep_internal_fabric; + match_done_o : out std_logic; + match_is_hp_o : out std_logic; + match_is_pause_o : out std_logic; + match_pause_quanta_o : out std_logic_vector(15 downto 0); + match_pause_prio_mask_o : out std_logic_vector(7 downto 0); + match_pause_p_o : out std_logic; + regs_i : in t_ep_out_registers); + end component; + + component ep_clock_alignment_fifo + generic ( + g_size : integer; + g_almostfull_threshold : integer); + port ( + rst_n_rd_i : in std_logic; + rst_n_wr_i : in std_logic; + clk_wr_i : in std_logic; + clk_rd_i : in std_logic; + dreq_i : in std_logic; + fab_i : in t_ep_internal_fabric; + fab_o : out t_ep_internal_fabric; + full_o : out std_logic; + empty_o : out std_logic; + almostfull_o : out std_logic; + pass_threshold_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0)); + end component; + + component ep_packet_filter + port ( + clk_rx_i : in std_logic; + clk_sys_i : in std_logic; + rst_n_rx_i : in std_logic; + rst_n_sys_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + src_fab_o : out t_ep_internal_fabric; + done_o : out std_logic; + pclass_o : out std_logic_vector(7 downto 0); + drop_o : out std_logic; + regs_i : in t_ep_out_registers); + end component; + + component ep_rx_vlan_unit + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + tclass_o : out std_logic_vector(2 downto 0); + vid_o : out std_logic_vector(11 downto 0); + tag_done_o : out std_logic; + is_tagged_o : out std_logic; + regs_i : in t_ep_out_registers; + regs_o : out t_ep_in_registers); + end component; + + component ep_rx_oob_insert + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + regs_i : in t_ep_out_registers); + end component; + + component ep_rx_crc_size_check + generic ( + g_use_new_crc : boolean := false); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + regs_i : in t_ep_out_registers; + rmon_pcs_err_o : out std_logic; + rmon_giant_o : out std_logic; + rmon_runt_o : out std_logic; + rmon_crc_err_o : out std_logic); + end component; + + component ep_rx_wb_master + generic ( + g_ignore_ack : boolean; + g_cyc_on_stall : boolean := false); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + src_wb_i : in t_wrf_source_in; + src_wb_o : out t_wrf_source_out); + end component; + + component ep_rx_status_reg_insert + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + mbuf_valid_i : in std_logic; + mbuf_ack_o : out std_logic; + mbuf_drop_i : in std_logic; + mbuf_pclass_i : in std_logic_vector(7 downto 0); + mbuf_is_hp_i : in std_logic; + mbuf_is_pause_i : in std_logic; + rmon_pfilter_drop_o : out std_logic); + end component; + + component ep_rx_buffer + generic ( + g_size : integer; + g_with_fc : boolean := false); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + level_o : out std_logic_vector(7 downto 0); + full_o : out std_logic; + drop_req_i : in std_logic; + dropped_o : out std_logic; + regs_i : in t_ep_out_registers); + end component; + + + component ep_rx_path + generic ( + g_with_vlans : boolean; + g_with_dpi_classifier : boolean; + g_with_rtu : boolean; + g_with_rx_buffer : boolean; + g_rx_buffer_size : integer; + g_use_new_crc : boolean); + port ( + clk_sys_i : in std_logic; + clk_rx_i : in std_logic; + rst_n_sys_i : in std_logic; + rst_n_rx_i : in std_logic; + pcs_fab_i : in t_ep_internal_fabric; + pcs_fifo_almostfull_o : out std_logic; + pcs_busy_i : in std_logic; + src_wb_o : out t_wrf_source_out; + src_wb_i : in t_wrf_source_in; + fc_pause_p_o : out std_logic; + fc_pause_quanta_o : out std_logic_vector(15 downto 0); + fc_pause_prio_mask_o : out std_logic_vector(7 downto 0); + fc_buffer_occupation_o : out std_logic_vector(7 downto 0); + rmon_o : out t_rmon_triggers; + regs_i : in t_ep_out_registers; + regs_o : out t_ep_in_registers; + pfilter_pclass_o : out std_logic_vector(7 downto 0); + pfilter_drop_o : out std_logic; + pfilter_done_o : out std_logic; + rtu_rq_o : out t_ep_internal_rtu_request; + rtu_full_i : in std_logic; + rtu_rq_valid_o : out std_logic; + rtu_rq_abort_o : out std_logic; + nice_dbg_o : out t_dbg_ep_rxpath); + end component; + + component ep_tx_path + generic ( + g_with_vlans : boolean; + g_with_timestamper : boolean; + g_with_packet_injection : boolean; + g_force_gap_length : integer; + g_runt_padding : boolean; + g_use_new_crc : boolean := false); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + pcs_fab_o : out t_ep_internal_fabric; + pcs_error_i : in std_logic; + pcs_busy_i : in std_logic; + pcs_dreq_i : in std_logic; + snk_i : in t_wrf_sink_in; + snk_o : out t_wrf_sink_out; + fc_pause_req_i : in std_logic; + fc_pause_delay_i : in std_logic_vector(15 downto 0); + fc_pause_ready_o : out std_logic; + fc_flow_enable_i : in std_logic; + txtsu_port_id_o : out std_logic_vector(4 downto 0); + txtsu_fid_o : out std_logic_vector(16 -1 downto 0); + txtsu_ts_value_o : out std_logic_vector(28 + 4 - 1 downto 0); + txtsu_ts_incorrect_o : out std_logic; + txtsu_stb_o : out std_logic; + txtsu_ack_i : in std_logic; + txts_timestamp_i : in std_logic_vector(31 downto 0); + txts_timestamp_valid_i : in std_logic; + inject_req_i : in std_logic := '0'; + inject_ready_o : out std_logic; + inject_packet_sel_i : in std_logic_vector(2 downto 0) := "000"; + inject_user_value_i : in std_logic_vector(15 downto 0) := x"0000"; + ep_ctrl_i : in std_logic := '1'; + regs_i : in t_ep_out_registers; + regs_o : out t_ep_in_registers; + dbg_o : out std_logic_vector(33 downto 0)); + end component; + + component ep_tx_crc_inserter + generic( + g_use_new_crc : boolean := false); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + dbg_o : out std_logic_vector(2 downto 0)); + end component; + + component ep_tx_inject_ctrl + generic( + g_min_if_gap_length : integer + ); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + inject_req_o : out std_logic; + inject_ready_i : in std_logic; + inject_packet_sel_o : out std_logic_vector(2 downto 0); + inject_user_value_o : out std_logic_vector(15 downto 0); + inject_ctr_ena_o : out std_logic; + inject_ctr_mode_o : out std_logic_vector(1 downto 0); + regs_i : in t_ep_out_registers; + regs_o : out t_ep_in_registers); + end component; + + + procedure f_pack_fifo_contents ( + signal fab : in t_ep_internal_fabric; + signal dout : out std_logic_vector; + signal dout_valid : out std_logic; + early_eof : boolean := false); + + + procedure f_unpack_fifo_contents ( + signal din : in std_logic_vector; + constant din_valid : in std_logic; + signal fab : out t_ep_internal_fabric; + early_eof : boolean := false); + + + procedure f_pack_rmon_triggers ( + signal trig_in : in t_rmon_triggers; + signal trig_out : out std_logic_vector(c_epevents_sz-1 downto 0)); + +end endpoint_private_pkg; + +------------------------------------------------------------------------------- + +package body endpoint_private_pkg is + + procedure f_pack_fifo_contents + ( + signal fab : in t_ep_internal_fabric; + signal dout : out std_logic_vector; + signal dout_valid : out std_logic; + early_eof : boolean := false) is + begin + -- the encodings are slightly different: + -- - if early_eof == 1, the target needs the EOF information along with the last data word. + -- This is the case for ep_tx_pcs. + -- - if early_eof == 0, EOF is an independent transfer + if(early_eof) then + if(fab.sof = '1' or fab.error = '1') then + -- tag = 01 + dout(17 downto 16) <= "01"; + dout(15) <= fab.sof; + dout(14) <= 'X'; + dout(13) <= fab.error; + dout(12 downto 0) <= (others => 'X'); + dout_valid <= '1'; + elsif(fab.eof = '1' and + fab.dvalid = '1') then -- ML: it happened that the last word was "stalled" by PCS (dreq_i LOW) + -- at the EOF... CRC indiated that this word is not valid (dvalid LOW) + -- but this information was ignored... and tx was hanging the tree + -- tag = 1x + dout(17) <= '1'; + dout(16) <= fab.bytesel; + dout(15 downto 0) <= fab.data; + dout_valid <= '1'; + elsif(fab.dvalid = '1') then + -- tag = 00 + dout(17) <= '0'; + dout(16) <= '0'; + dout(15 downto 0) <= fab.data; + dout_valid <= '1'; + else + dout(17 downto 0) <= (others => 'X'); + dout_valid <= '0'; + end if; + else + if(fab.sof = '1' or fab.error = '1' or fab.eof = '1' or fab.has_rx_timestamp = '1') then + -- tag = 01 + dout(17) <= 'X'; + dout(16) <= '1'; + dout(15) <= fab.sof; + dout(14) <= fab.eof; + dout(13) <= fab.error; + dout(12) <= fab.has_rx_timestamp; + dout(11) <= fab.rx_timestamp_valid; + dout(10 downto 0) <= (others => 'X'); + dout_valid <= '1'; + elsif(fab.dvalid = '1') then + dout(17) <= fab.bytesel; + dout(16) <= '0'; + dout(15 downto 0) <= fab.data; + dout_valid <= '1'; + else + dout(17 downto 0) <= (others => 'X'); + dout_valid <= '0'; + end if; + + end if; + end f_pack_fifo_contents; + + procedure f_unpack_fifo_contents + ( + signal din : in std_logic_vector; + constant din_valid : in std_logic; + signal fab : out t_ep_internal_fabric; + early_eof : boolean := false) is + begin + + fab.data <= din(15 downto 0); + fab.addr <= (others => '0'); + if(din_valid = '1') then + if(early_eof) then + fab.dvalid <= not (not din(17) and din(16)); + fab.sof <= not din(17) and din(16) and din(15); + fab.eof <= din(17); + fab.error <= not din(17) and din(16) and din(13); + fab.has_rx_timestamp <= '0'; + fab.rx_timestamp_valid <= '0'; + fab.bytesel <= din(17) and din(16); + + else + fab.dvalid <= not din(16); + fab.sof <= din(16) and din(15); + fab.eof <= din(16) and din(14); + fab.error <= din(16) and din(13); + fab.has_rx_timestamp <= din(16) and din(12); + fab.rx_timestamp_valid <= din(16) and din(11); + fab.bytesel <= (not din(16)) and din(17); + end if; + else + fab.bytesel <= 'X'; + fab.dvalid <= '0'; + fab.sof <= '0'; + fab.eof <= '0'; + fab.error <= '0'; + fab.has_rx_timestamp <= '0'; + fab.rx_timestamp_valid <= '0'; + fab.data <= (others => 'X'); + end if; + end f_unpack_fifo_contents; + + + procedure f_pack_rmon_triggers + ( + signal trig_in : in t_rmon_triggers; + signal trig_out : out std_logic_vector(c_epevents_sz-1 downto 0)) is + begin + --from 1000base pcs + trig_out(0) <= trig_in.tx_underrun; + trig_out(1) <= trig_in.rx_overrun; + trig_out(2) <= trig_in.rx_invalid_code; + trig_out(3) <= trig_in.rx_sync_lost; + trig_out(4) <= trig_in.rx_pause; + trig_out(5) <= trig_in.rx_pfilter_drop; + trig_out(6) <= trig_in.rx_pcs_err; + trig_out(7) <= trig_in.rx_giant; + trig_out(8) <= trig_in.rx_runt; + trig_out(9) <= trig_in.rx_crc_err; + trig_out(17 downto 10) <= trig_in.rx_pclass(7 downto 0); + trig_out(18)<= trig_in.tx_frame; + trig_out(19)<= trig_in.rx_frame; + trig_out(20)<= trig_in.rx_drop_at_rtu_full; + trig_out(28 downto 21) <= trig_in.rx_tclass(7 downto 0); + end f_pack_rmon_triggers; + + +end endpoint_private_pkg; + +------------------------------------------------------------------------------- diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_1000basex_pcs.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_1000basex_pcs.vhd new file mode 100644 index 000000000..900726f69 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_1000basex_pcs.vhd @@ -0,0 +1,635 @@ +------------------------------------------------------------------------------- +-- Title : 1000Base-X Physical Coding Sublayer (PCS) +-- Project : White Rabbit MAC/Endpoint +------------------------------------------------------------------------------- +-- File : ep_1000basex_pcs.vhd +-- Author : Tomasz Włostowski +-- Company : CERN BE-CO-HT +-- Created : 2010-11-18 +-- Last update: 2017-02-20 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Module implements the top level of a 1000Base-X compliant PCS +-- (Physical Coding Sublayer) with precise RX/TX timestamping. The PCS module +-- incorporates: +-- - configurable 8/16-bit RX/TX data paths, +-- - TX clock alignment FIFO, +-- - 802.3 autonegotiation. +-- - White Rabbit serdes-specific features (calibration patterns & bitslide) +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2009-2017 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2010-11-18 0.4 twlostow Created (separeted from wrsw_endpoint) +-- 2011-02-07 0.5 twlostow Tested on Spartan6 GTP +-- 2011-10-18 0.6 twlostow Virtex-6 GTX port +-- 2012-01-24 0.7 twlostow Redone TX timestamping +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; +use work.gencores_pkg.all; + +entity ep_1000basex_pcs is + + generic ( + -- simulation mode: when true, all internal timeouts are reduced by few orders of + -- magnitude to speed up simulations. + g_simulation : boolean; + -- PCS datapath width selection: true = 16-bit (Virtex-6), false = 8-bit + -- (Spartan-6 or TBI). + g_16bit : boolean); + + port ( + + --------------------------------------------------------------------------- + -- System clock & resets (system + rx/tx) + --------------------------------------------------------------------------- + + rst_sys_n_i : in std_logic; + rst_txclk_n_i : in std_logic; + rst_rxclk_n_i : in std_logic; + clk_sys_i : in std_logic; + + --------------------------------------------------------------------------- + -- PCS <-> MAC Interface + --------------------------------------------------------------------------- + + -- Internal data output (incoming data). + rxpcs_fab_o : out t_ep_internal_fabric; + + -- 1: RX FIFO is almost full (drop the packet). + rxpcs_fifo_almostfull_i : in std_logic; + + -- 1: RX PCS is busy receiving a packet or waiting for its' timestamp. + rxpcs_busy_o : out std_logic; + + -- 1-pulse: RX timestamp trigger (to timestamping unit). + rxpcs_timestamp_trigger_p_a_o : out std_logic; + + -- RX timestamp value (4 falling : 28 rising edge bits). + rxpcs_timestamp_i : in std_logic_vector(31 downto 0); + + rxpcs_timestamp_stb_i : in std_logic; + + -- 1: timestamp on rxpcs_timestamp_i is valid). + rxpcs_timestamp_valid_i : in std_logic; + + -- Internal data input (data to be TXed). + txpcs_fab_i : in t_ep_internal_fabric; + + -- 1: TX error occured. + txpcs_error_o : out std_logic; + + -- 1: TX PCS is busy transmitting a packet. + txpcs_busy_o : out std_logic; + + -- 1: TX PCS requests another transfer on txpcs_fab_i. + txpcs_dreq_o : out std_logic; + + -- 1-pulse: TX timestamp trigger (to timestamping unit). + txpcs_timestamp_trigger_p_a_o : out std_logic; + + link_ok_o : out std_logic; + link_ctr_i : in std_logic; + ----------------------------------------------------------------------------- + -- GTP/GTX/TBI Serdes interface + --------------------------------------------------------------------------- + + -- 1: serdes is reset, 0: serdes is operating normally. + serdes_rst_o : out std_logic; + + -- 1: serdes near-end PMA loopback is enabled. + serdes_loopen_o : out std_logic; + + -- 000: loopback vector "normal operation" (see Serdes User Guide) + serdes_loopen_vec_o : out std_logic_vector(2 downto 0); + + -- 000: "normal operation" (see Serdes User Guide) + serdes_tx_prbs_sel_o : out std_logic_vector(2 downto 0); + + -- 1: indicates laser fault + serdes_sfp_tx_fault_i : in std_logic; + + -- 1: indicates Loss Of Signal + serdes_sfp_los_i : in std_logic; + + -- 1: Disables the transmitter + serdes_sfp_tx_disable_o : out std_logic; + + -- 1: serdes is locked and aligned + serdes_rdy_i : in std_logic; + + --------------------------------------------------------------------------- + -- Serdes TX path (all synchronous to serdes_tx_clk_i) + --------------------------------------------------------------------------- + + -- Transmit path clock: + -- 62.5 MHz in 16-bit mode, 125 MHz in 8-bit mode. + serdes_tx_clk_i : in std_logic; + + -- TX Code group. In 16-bit mode, the MSB is TXed first (tx_data_o[15:8], + -- then tx_data_o[7:0]). In 8-bit mode only bits [7:0] are used. + serdes_tx_data_o : out std_logic_vector(f_pcs_data_width(g_16bit)-1 downto 0); + + -- TX Control Code: When 1, a K-character is transmitted. In 16-bit mode, + -- bit 1 goes first, in 8-bit mode only bit 0 is used. + serdes_tx_k_o : out std_logic_vector(f_pcs_k_width(g_16bit)-1 downto 0); + + -- TX Disparity input: 1 = last transmitted code group ended with negative + -- running disparity, 0 = positive RD. + serdes_tx_disparity_i : in std_logic; + + -- TX Encoding Error: 1 = PHY encountered a transmission error, drop the current + -- packet. + serdes_tx_enc_err_i : in std_logic; + + ------------------------------------------------------------------------------- + -- Serdes RX path (all synchronous to serdes_rx_clk_i) + ------------------------------------------------------------------------------- + + -- RX recovered clock. MUST be synchronous to incoming serial data stream + -- for proper PTP/SyncE operation. 62.5 MHz in 16-bit mode, 125 MHz in 8-bit mode. + serdes_rx_clk_i : in std_logic; + serdes_rx_data_i : in std_logic_vector(f_pcs_data_width(g_16bit)-1 downto 0); + serdes_rx_k_i : in std_logic_vector(f_pcs_k_width(g_16bit)-1 downto 0); + serdes_rx_enc_err_i : in std_logic; + serdes_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_16bit)-1 downto 0); + + -- RMON events, aligned to clk_sys + rmon_o : out t_rmon_triggers; + + -- MDIO interface + + mdio_addr_i : in std_logic_vector(15 downto 0); + mdio_data_i : in std_logic_vector(15 downto 0); + mdio_data_o : out std_logic_vector(15 downto 0); + mdio_stb_i : in std_logic; + mdio_rw_i : in std_logic; + mdio_ready_o : out std_logic; + + dbg_tx_pcs_wr_count_o : out std_logic_vector(5+4 downto 0); + dbg_tx_pcs_rd_count_o : out std_logic_vector(5+4 downto 0); + nice_dbg_o : out t_dbg_ep_pcs); + +end ep_1000basex_pcs; + +architecture rtl of ep_1000basex_pcs is + + alias rst_n_i : std_logic is rst_sys_n_i; + + signal mdio_mcr_anrestart : std_logic; + signal mdio_mcr_pdown : std_logic; + signal mdio_mcr_pdown_cpu : std_logic; + signal mdio_mcr_anenable : std_logic; + signal mdio_mcr_reset : std_logic; + signal mdio_msr_lstatus : std_logic; + signal mdio_msr_rfault : std_logic; + signal mdio_msr_anegcomplete : std_logic; + signal mdio_advertise_pause : std_logic_vector(1 downto 0); + signal mdio_advertise_rfault : std_logic_vector(1 downto 0); + signal mdio_lpa_full : std_logic; + signal mdio_lpa_half : std_logic; + signal mdio_lpa_pause : std_logic_vector(1 downto 0); + signal mdio_lpa_rfault : std_logic_vector(1 downto 0); + signal mdio_lpa_lpack : std_logic; + signal mdio_lpa_npage : std_logic; + signal mdio_wr_spec_tx_cal : std_logic; + signal mdio_wr_spec_rx_cal_stat : std_logic; + signal mdio_wr_spec_cal_crst : std_logic; + signal mdio_wr_spec_bslide : std_logic_vector(4 downto 0); + signal mdio_data_in : std_logic_vector(31 downto 0); + signal mdio_data_out : std_logic_vector(31 downto 0); + + signal lstat_read_notify : std_logic; + +------------------------------------------------------------------------------- +-- Autonegotiation signals +------------------------------------------------------------------------------- + + signal an_tx_en : std_logic; + signal an_rx_en : std_logic; + signal an_tx_val : std_logic_vector(15 downto 0); + signal an_rx_val : std_logic_vector(15 downto 0); + signal an_rx_valid : std_logic; + signal an_idle_match : std_logic; + + signal pcs_enable : std_logic; + signal synced, sync_lost : std_logic; + signal synced_d1 : std_logic; + + signal txpcs_busy_int : std_logic; + signal link_ok : std_logic; + + signal pcs_reset_n : std_logic; + + signal wb_stb, wb_ack : std_logic; + + signal tx_clk, rx_clk : std_logic; + + --RMON events + signal rmon_tx_underrun : std_logic; + signal rmon_rx_overrun : std_logic; + signal rmon_rx_inv_code : std_logic; + signal rmon_rx_sync_lost: std_logic; + +begin -- rtl + + pcs_reset_n <= '0' when (mdio_mcr_reset = '1' or rst_n_i = '0') else '1'; + + gen_16bit : if(g_16bit) generate + U_TX_PCS : ep_tx_pcs_16bit + port map ( + rst_n_i => pcs_reset_n, + clk_sys_i => clk_sys_i, + + rst_txclk_n_i => rst_txclk_n_i, + + pcs_fab_i => txpcs_fab_i, + pcs_error_o => txpcs_error_o, + pcs_busy_o => txpcs_busy_int, + pcs_dreq_o => txpcs_dreq_o, + + mdio_mcr_reset_i => mdio_mcr_reset, + mdio_mcr_pdown_i => mdio_mcr_pdown, + mdio_wr_spec_tx_cal_i => mdio_wr_spec_tx_cal, + + an_tx_en_i => an_tx_en, + an_tx_val_i => an_tx_val, + timestamp_trigger_p_a_o => txpcs_timestamp_trigger_p_a_o, + rmon_tx_underrun => rmon_tx_underrun, + + phy_tx_clk_i => serdes_tx_clk_i, + phy_tx_data_o => serdes_tx_data_o, + phy_tx_k_o => serdes_tx_k_o, + phy_tx_disparity_i => serdes_tx_disparity_i, + phy_tx_enc_err_i => serdes_tx_enc_err_i, + dbg_wr_count_o => dbg_tx_pcs_wr_count_o, + dbg_rd_count_o => dbg_tx_pcs_rd_count_o + ); + + U_RX_PCS : ep_rx_pcs_16bit + generic map ( + g_simulation => g_simulation) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => pcs_reset_n, + + rst_rxclk_n_i => rst_rxclk_n_i, + + pcs_busy_o => rxpcs_busy_o, + pcs_fab_o => rxpcs_fab_o, + pcs_fifo_almostfull_i => rxpcs_fifo_almostfull_i, + + timestamp_trigger_p_a_o => rxpcs_timestamp_trigger_p_a_o, + timestamp_i => rxpcs_timestamp_i, + timestamp_valid_i => rxpcs_timestamp_valid_i, + timestamp_stb_i => rxpcs_timestamp_stb_i, + + mdio_mcr_reset_i => mdio_mcr_reset, + mdio_mcr_pdown_i => mdio_mcr_pdown, + mdio_wr_spec_cal_crst_i => mdio_wr_spec_cal_crst, + mdio_wr_spec_rx_cal_stat_o => mdio_wr_spec_rx_cal_stat, + + synced_o => synced, + sync_lost_o => sync_lost, + an_rx_en_i => an_rx_en, + an_rx_val_o => an_rx_val, + an_rx_valid_o => an_rx_valid, + an_idle_match_o => an_idle_match, + + rmon_rx_overrun => rmon_rx_overrun, + rmon_rx_inv_code => rmon_rx_inv_code, + rmon_rx_sync_lost=> rmon_rx_sync_lost, + + phy_rdy_i => serdes_rdy_i, + phy_rx_clk_i => serdes_rx_clk_i, + phy_rx_data_i => serdes_rx_data_i, + phy_rx_k_i => serdes_rx_k_i, + phy_rx_enc_err_i => serdes_rx_enc_err_i, + + nice_dbg_o => nice_dbg_o.rx + ); + + mdio_wr_spec_bslide <= serdes_rx_bitslide_i(4 downto 0); + + end generate gen_16bit; + + gen_8bit : if(not g_16bit) generate + U_TX_PCS : ep_tx_pcs_8bit + port map ( + rst_n_i => pcs_reset_n, + clk_sys_i => clk_sys_i, + + rst_txclk_n_i => rst_txclk_n_i, + + pcs_fab_i => txpcs_fab_i, + pcs_error_o => txpcs_error_o, + pcs_busy_o => txpcs_busy_int, + pcs_dreq_o => txpcs_dreq_o, + + mdio_mcr_reset_i => mdio_mcr_reset, + mdio_mcr_pdown_i => mdio_mcr_pdown, + mdio_wr_spec_tx_cal_i => mdio_wr_spec_tx_cal, + + an_tx_en_i => an_tx_en, + an_tx_val_i => an_tx_val, + timestamp_trigger_p_a_o => txpcs_timestamp_trigger_p_a_o, + rmon_tx_underrun => rmon_tx_underrun, + + phy_tx_clk_i => serdes_tx_clk_i, + phy_tx_data_o => serdes_tx_data_o(7 downto 0), + phy_tx_k_o => serdes_tx_k_o(0), + phy_tx_disparity_i => serdes_tx_disparity_i, + phy_tx_enc_err_i => serdes_tx_enc_err_i + ); + + U_RX_PCS : ep_rx_pcs_8bit + generic map ( + g_simulation => g_simulation) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => pcs_reset_n, + + rst_rxclk_n_i => rst_rxclk_n_i, + + pcs_busy_o => rxpcs_busy_o, + pcs_fab_o => rxpcs_fab_o, + pcs_fifo_almostfull_i => rxpcs_fifo_almostfull_i, + + timestamp_trigger_p_a_o => rxpcs_timestamp_trigger_p_a_o, + timestamp_i => rxpcs_timestamp_i, + timestamp_valid_i => rxpcs_timestamp_valid_i, + timestamp_stb_i => rxpcs_timestamp_stb_i, + + mdio_mcr_reset_i => mdio_mcr_reset, + mdio_mcr_pdown_i => mdio_mcr_pdown, + mdio_wr_spec_cal_crst_i => mdio_wr_spec_cal_crst, + mdio_wr_spec_rx_cal_stat_o => mdio_wr_spec_rx_cal_stat, + + synced_o => synced, + sync_lost_o => sync_lost, + an_rx_en_i => an_rx_en, + an_rx_val_o => an_rx_val, + an_rx_valid_o => an_rx_valid, + an_idle_match_o => an_idle_match, + + rmon_rx_overrun => rmon_rx_overrun, + rmon_rx_inv_code => rmon_rx_inv_code, + rmon_rx_sync_lost=> rmon_rx_sync_lost, + + phy_rdy_i => serdes_rdy_i, + phy_rx_clk_i => serdes_rx_clk_i, + phy_rx_data_i => serdes_rx_data_i(7 downto 0), + phy_rx_k_i => serdes_rx_k_i(0), + phy_rx_enc_err_i => serdes_rx_enc_err_i + ); + + mdio_wr_spec_bslide <= '0' & serdes_rx_bitslide_i(3 downto 0); + + dbg_tx_pcs_rd_count_o <= (others => '0'); + dbg_tx_pcs_wr_count_o <= (others => '0'); + nice_dbg_o.rx.fsm <= (others => '0'); + + end generate gen_8bit; + + txpcs_busy_o <= txpcs_busy_int; + + -- to enable killing of link (by ML) + mdio_mcr_pdown <= mdio_mcr_pdown_cpu or (not link_ctr_i); + + -- keep PHY reset also when SFP reports LOS (DL) + serdes_rst_o <= (not pcs_reset_n) or mdio_mcr_pdown or serdes_sfp_los_i; + + U_MDIO_WB : ep_pcs_tbi_mdio_wb + port map ( + rst_n_i => rst_n_i, + clk_sys_i => clk_sys_i, + wb_adr_i => mdio_addr_i(4 downto 0), + wb_dat_i => mdio_data_in, + wb_dat_o => mdio_data_out, + + wb_cyc_i => wb_stb, + wb_sel_i => "1111", + wb_stb_i => wb_stb, + wb_we_i => mdio_rw_i, + wb_ack_o => wb_ack, + wb_stall_o => open, + tx_clk_i => serdes_tx_clk_i, + rx_clk_i => serdes_rx_clk_i, + + mdio_mcr_uni_en_o => open, + mdio_mcr_anrestart_o => mdio_mcr_anrestart, + mdio_mcr_pdown_o => mdio_mcr_pdown_cpu, + mdio_mcr_anenable_o => mdio_mcr_anenable, + mdio_mcr_reset_o => mdio_mcr_reset, + mdio_mcr_loopback_o => serdes_loopen_o, + mdio_msr_lstatus_i => mdio_msr_lstatus, + mdio_msr_rfault_i => mdio_msr_rfault, + mdio_msr_anegcomplete_i => mdio_msr_anegcomplete, + mdio_advertise_pause_o => mdio_advertise_pause, + mdio_advertise_rfault_o => mdio_advertise_rfault, + mdio_lpa_full_i => mdio_lpa_full, + mdio_lpa_half_i => mdio_lpa_half, + mdio_lpa_pause_i => mdio_lpa_pause, + mdio_lpa_rfault_i => mdio_lpa_rfault, + mdio_lpa_lpack_i => mdio_lpa_lpack, + mdio_lpa_npage_i => mdio_lpa_npage, + mdio_wr_spec_tx_cal_o => mdio_wr_spec_tx_cal, + mdio_wr_spec_rx_cal_stat_i => mdio_wr_spec_rx_cal_stat, + mdio_wr_spec_cal_crst_o => mdio_wr_spec_cal_crst, + mdio_wr_spec_bslide_i => mdio_wr_spec_bslide, + mdio_ectrl_lpbck_vec_o => serdes_loopen_vec_o, + mdio_ectrl_sfp_tx_fault_i => serdes_sfp_tx_fault_i, + mdio_ectrl_sfp_loss_i => serdes_sfp_los_i, + mdio_ectrl_sfp_tx_disable_o => serdes_sfp_tx_disable_o, + mdio_ectrl_tx_prbs_sel_o => serdes_tx_prbs_sel_o, + + lstat_read_notify_o => lstat_read_notify + ); + + + mdio_data_in <= X"0000" & mdio_data_i; + mdio_data_o <= mdio_data_out(15 downto 0); + + mdio_msr_rfault <= '0'; + + U_AUTONEGOTIATION : ep_autonegotiation + generic map ( + g_simulation => g_simulation) + + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => pcs_reset_n, + + pcs_synced_i => synced, + pcs_los_i => sync_lost, + pcs_link_ok_o => link_ok, + + an_idle_match_i => an_idle_match, + an_rx_en_o => an_rx_en, + an_rx_val_i => an_rx_val, + an_rx_valid_i => an_rx_valid, + an_tx_en_o => an_tx_en, + an_tx_val_o => an_tx_val, + mdio_mcr_anrestart_i => mdio_mcr_anrestart, + mdio_mcr_anenable_i => mdio_mcr_anenable, + mdio_msr_anegcomplete_o => mdio_msr_anegcomplete, + mdio_advertise_pause_i => mdio_advertise_pause, + mdio_advertise_rfault_i => mdio_advertise_rfault, + mdio_lpa_full_o => mdio_lpa_full, + mdio_lpa_half_o => mdio_lpa_half, + mdio_lpa_pause_o => mdio_lpa_pause, + mdio_lpa_rfault_o => mdio_lpa_rfault, + mdio_lpa_lpack_o => mdio_lpa_lpack, + mdio_lpa_npage_o => mdio_lpa_npage + ); + + -- process: translates the MDIO reads/writes into Wishbone read/writes + -- inputs: mdio_stb_i, wb_ack + -- ouputs: mdio_ready_o, wb_stb + p_translate_mdio_wb : process(clk_sys_i, rst_n_i) + begin + if rising_edge(clk_sys_i) then + if (rst_n_i = '0') then + wb_stb <= '0'; + mdio_ready_o <= '1'; + else + if(mdio_stb_i = '1' and wb_stb = '0') then + wb_stb <= '1'; + mdio_ready_o <= '0'; + elsif(wb_stb = '1' and wb_ack = '1') then + mdio_ready_o <= '1'; + wb_stb <= '0'; + end if; + end if; + end if; + end process; + + -- process: handles the LSTATUS bit in MSR register + -- inputs: sync_lost, synced, lstat_read_notify + -- outputs: mdio_msr_lstatus + p_gen_link_status : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if(pcs_reset_n = '0') then + mdio_msr_lstatus <= '0'; + else + if(sync_lost = '1') then + mdio_msr_lstatus <= '0'; + elsif(lstat_read_notify = '1') then + mdio_msr_lstatus <= synced and link_ok; + end if; + end if; + end if; + end process; + + -- The process delays by 1 cyc synced signal. This delayed synced, called synced_d1 + -- is then used to produce link_ok_o (below he process). + -- This is done to avoid 1-cycle glitches of link_ok_o. Such glitch happened after + -- the autonegotation FSM was in pseudo AN_ENABLED state caused by synced=LOW (in + -- this state, link_ok is HIGH). When synced goes HIGH, the FSM enters "proper" + -- AN_ENABLED state, it drives link_ok LOW.s All in all, this glitch is avoided + -- when we use delayed synced_d1 to produce the final link_ok_o + p_delay_synced: process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if(pcs_reset_n = '0') then + synced_d1 <= '0'; + else + synced_d1 <= synced; + end if; + end if; + end process; + + link_ok_o <= link_ok and synced_d1; + + --RMON events + U_sync_tx_underrun: gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + data_i => rmon_tx_underrun, + synced_o => open, + npulse_o => open, + ppulse_o => rmon_o.tx_underrun); + + U_sync_rx_overrun: gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + data_i => rmon_rx_overrun, + synced_o => open, + npulse_o => open, + ppulse_o => rmon_o.rx_overrun); + + U_sync_rx_inv_code: gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + data_i => rmon_rx_inv_code, + synced_o => open, + npulse_o => open, + ppulse_o => rmon_o.rx_invalid_code); + + U_sync_rx_sync_lost: gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + data_i => rmon_rx_sync_lost, + synced_o => open, + npulse_o => open, + ppulse_o => rmon_o.rx_sync_lost); + + -- drive unused outputs + rmon_o.rx_crc_err <= '0'; + rmon_o.rx_ok <= '0'; + rmon_o.rx_pfilter_drop <= '0'; + rmon_o.rx_runt <= '0'; + rmon_o.rx_giant <= '0'; + rmon_o.rx_pause <= '0'; + rmon_o.rx_pcs_err <= '0'; + rmon_o.rx_buffer_overrun <= '0'; + rmon_o.rx_rtu_overrun <= '0'; + rmon_o.rx_path_timing_failure <= '0'; + rmon_o.tx_pause <= '0'; + rmon_o.rx_pclass <= (others => '0'); + rmon_o.rx_tclass <= (others => '0'); + rmon_o.tx_frame <= '0'; + rmon_o.rx_frame <= '0'; + rmon_o.rx_drop_at_rtu_full <= '0'; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_autonegotiation.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_autonegotiation.vhd new file mode 100644 index 000000000..69dbe4c06 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_autonegotiation.vhd @@ -0,0 +1,281 @@ +------------------------------------------------------------------------------- +-- Title : 1000Base-X Autonegotiation +-- Project : White Rabbit MAC/Endpoint +------------------------------------------------------------------------------- +-- File : ep_autonegotiation.vhd +-- Author : Tomasz Włostowski +-- Company : CERN BE-CO-HT +-- Created : 2010-11-18 +-- Last update: 2017-02-21 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Module implements the 1000Base-X autonegotiation engine as +-- defined in IEEE802.3. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2009 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1l.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2010-11-18 0.4 twlostow Initial release +-- 2011-02-07 0.5 twlostow Tested on Spartan6 GTP +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.endpoint_private_pkg.all; + +entity ep_autonegotiation is + generic ( + g_simulation : boolean); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + -- RX PCS signals + pcs_synced_i : in std_logic; + pcs_los_i : in std_logic; + pcs_link_ok_o : out std_logic; + + an_idle_match_i : in std_logic; + an_rx_en_o : out std_logic; + an_rx_val_i : in std_logic_vector(15 downto 0); + an_rx_valid_i : in std_logic; + + -- TX PCS signals + an_tx_en_o : out std_logic; + an_tx_val_o : out std_logic_vector(15 downto 0); + + mdio_mcr_anrestart_i : in std_logic; + mdio_mcr_anenable_i : in std_logic; + mdio_msr_anegcomplete_o : out std_logic; + + mdio_advertise_pause_i : in std_logic_vector(1 downto 0); + mdio_advertise_rfault_i : in std_logic_vector(1 downto 0); + + mdio_lpa_full_o : out std_logic; + mdio_lpa_half_o : out std_logic; + mdio_lpa_pause_o : out std_logic_vector(1 downto 0); + mdio_lpa_rfault_o : out std_logic_vector(1 downto 0); + mdio_lpa_lpack_o : out std_logic; + mdio_lpa_npage_o : out std_logic + ); + +end ep_autonegotiation; + +architecture syn of ep_autonegotiation is + + type t_autoneg_state is (AN_ENABLE, AN_RESTART, AN_ABILITY_DETECT, AN_DISABLE_LINK_OK, AN_ACKNOWLEDGE_DETECT, AN_COMPLETE_ACKNOWLEDGE, AN_IDLE_DETECT, AN_LINK_OK); + + signal state : t_autoneg_state; + + + function f_eval_link_timer_size + return integer is + begin -- f_eval_link_timer_size + if(g_simulation = false) then + return 20; + else + return 11; + end if; + end f_eval_link_timer_size; + + constant c_link_timer_bits : integer := f_eval_link_timer_size; + + signal link_timer : unsigned(c_link_timer_bits downto 0); -- 23 for normal operation + + + signal link_timer_restart : std_logic; + signal link_timer_expired : std_logic; + + signal an_enable_changed, an_enable_d0 : std_logic; + signal toggle_tx, toggle_rx : std_logic; + + signal rx_config_reg : std_logic_vector(15 downto 0); + + signal acknowledge_match : std_logic; + signal ability_match : std_logic; + signal consistency_match : std_logic; + + + +begin -- syn + + + -- process: link timer (counts until MSB of link_timer == 1). + -- inputs: link_timer_restart + -- outputs: link_timer_expired + p_link_timer : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' or link_timer_restart ='1' then + link_timer <= (others => '0'); + else + if(link_timer_expired = '0') then + link_timer <= link_timer + 1; + end if; + end if; + end if; + end process; + + link_timer_expired <= std_logic(link_timer(link_timer'high)) and (not link_timer_restart); + + + -- process: detects the changes of Autonegotiation Enable bit. + -- inputs: mdio_mcr_anenable_i + -- outputs: an_enable_changed + p_detect_enable_changed : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + an_enable_d0 <= mdio_mcr_anenable_i; + an_enable_changed <= an_enable_d0 xor mdio_mcr_anenable_i; + end if; + end process; + + + -- generate some FSM conditions combinatorially outside the FSM process to + -- make the code more readable + ability_match <= an_rx_valid_i; + acknowledge_match <= an_rx_valid_i and an_rx_val_i(14); + consistency_match <= '1' when (an_rx_valid_i = '1' and rx_config_reg (15) = an_rx_val_i(15) and rx_config_reg(13 downto 0) = an_rx_val_i(13 downto 0)); + + +-- process: main auto-negotiation state machine. More or less compatible with +-- IEEE 802.3. + p_autonegotation_fsm : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + link_timer_restart <= '0'; + state <= AN_ENABLE; + pcs_link_ok_o <= '0'; + + an_tx_en_o <= '0'; + an_rx_en_o <= '1'; + an_tx_val_o <= (others => '0'); + + mdio_lpa_lpack_o <= '0'; + mdio_msr_anegcomplete_o <= '0'; + rx_config_reg <= (others => '0'); + else + + if(mdio_mcr_anrestart_i = '1' or an_enable_changed = '1' or pcs_synced_i = '0') then + state <= AN_ENABLE; + else + + case state is + when AN_ENABLE => + mdio_msr_anegcomplete_o <= '0'; + pcs_link_ok_o <= '0'; + + if mdio_mcr_anenable_i = '1' then + an_tx_val_o <= (others => '0'); -- send breaklink + an_tx_en_o <= '1'; + link_timer_restart <= '1'; + state <= AN_RESTART; + else + state <= AN_DISABLE_LINK_OK; + end if; + + when AN_DISABLE_LINK_OK => + an_tx_en_o <= '0'; + pcs_link_ok_o <= '1'; + + when AN_RESTART => + link_timer_restart <= '0'; + if(link_timer_expired = '1') then + state <= AN_ABILITY_DETECT; + end if; + + + when AN_ABILITY_DETECT => +-- toggle_tx <= mr_adv_ability<12> -- ??? + an_rx_en_o <= '1'; + an_tx_en_o <= '1'; + an_tx_val_o (15) <= '0'; + an_tx_val_o (14) <= '0'; + an_tx_val_o (13 downto 12) <= mdio_advertise_rfault_i; + an_tx_val_o (11 downto 9) <= (others => '0'); + an_tx_val_o (8 downto 7) <= mdio_advertise_pause_i; + an_tx_val_o (6) <= '0'; -- hdx not supported + an_tx_val_o (5) <= '1'; -- fdx supported + an_tx_val_o (4 downto 0) <= (others => '0'); + + if(an_rx_valid_i = '1' and an_rx_val_i /= x"0000") then -- ability_match=true + state <= AN_ACKNOWLEDGE_DETECT; + rx_config_reg <= an_rx_val_i; + end if; + + when AN_ACKNOWLEDGE_DETECT => + an_tx_val_o(14) <= '1'; + if(acknowledge_match = '1' and consistency_match = '0') + or (ability_match = '1' and an_rx_val_i = x"0000") then + state <= AN_ENABLE; + elsif(acknowledge_match = '1' and consistency_match = '1') then + state <= AN_COMPLETE_ACKNOWLEDGE; + link_timer_restart <= '1'; + end if; + + when AN_COMPLETE_ACKNOWLEDGE => + link_timer_restart <= '0'; + + mdio_lpa_npage_o <= an_rx_val_i(15); + mdio_lpa_lpack_o <= an_rx_val_i(14); + mdio_lpa_rfault_o <= an_rx_val_i(13 downto 12); + mdio_lpa_pause_o <= an_rx_val_i (8 downto 7); + mdio_lpa_half_o <= an_rx_val_i(6); + mdio_lpa_full_o <= an_rx_val_i(5); + + + if(ability_match = '1' and an_rx_val_i = x"0000")then + state <= AN_ENABLE; + elsif(link_timer_expired = '1' and (ability_match = '0' or an_rx_val_i /= x"0000")) then + link_timer_restart <= '1'; + state <= AN_IDLE_DETECT; + end if; + + when AN_IDLE_DETECT => + link_timer_restart <= '0'; + an_tx_en_o <= '0'; + if(ability_match = '1' and an_rx_val_i = x"0000") then + state <= AN_ENABLE; + elsif (an_idle_match_i = '1' and link_timer_expired = '1') then + state <= AN_LINK_OK; + end if; + + + when AN_LINK_OK => + mdio_msr_anegcomplete_o <= '1'; + pcs_link_ok_o <= '1'; + if(ability_match = '1') then + state <= AN_ENABLE; + end if; + + when others => null; + end case; + end if; + end if; + end if; + end process; +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_clock_alignment_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_clock_alignment_fifo.vhd new file mode 100644 index 000000000..09a214467 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_clock_alignment_fifo.vhd @@ -0,0 +1,127 @@ +------------------------------------------------------------------------------- +-- Title : RX Clock Alignment FIFO +-- Project : White Rabbit MAC/Endpoint +------------------------------------------------------------------------------- +-- File : ep_clock_alignment_fifo.vhd +-- Author : Tomasz Włostowski +-- Company : CERN BE-CO-HT +-- Created : 2010-11-18 +-- Last update: 2012-08-28 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Asynchronous FIFO with internal fabric (t_ep_internal_fabric) +-- interface used to pass packet data between the RX clock->system clock +-- domains. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2009-2011 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.genram_pkg.all; +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; + +entity ep_clock_alignment_fifo is + + generic( + g_size : integer := 64; + g_almostfull_threshold : integer := 56); + + port( + rst_n_rd_i : in std_logic; + rst_n_wr_i : in std_logic; + clk_wr_i : in std_logic; + clk_rd_i : in std_logic; + + dreq_i : in std_logic; + fab_i : in t_ep_internal_fabric; + fab_o : out t_ep_internal_fabric; + + full_o : out std_logic; + empty_o : out std_logic; + almostfull_o : out std_logic; + + -- number of data words which enables the output. Used + -- to control the minimum latency + pass_threshold_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0) + ); +end ep_clock_alignment_fifo; + +architecture structural of ep_clock_alignment_fifo is + signal fifo_in : std_logic_vector(17 downto 0); + signal fifo_out : std_logic_vector(17 downto 0); + signal rx_rdreq : std_logic; + signal empty_int : std_logic; + signal valid_int : std_logic; + + + signal fab_int : t_ep_internal_fabric; + signal fifo_we : std_logic; +begin + + f_pack_fifo_contents (fab_i, fifo_in, fifo_we, false); + +-- Clock adjustment FIFO + U_FIFO : generic_async_fifo + generic map ( + g_data_width => 18, + g_size => g_size, + g_with_wr_almost_full => true, + g_almost_full_threshold => g_almostfull_threshold + ) + port map ( + rst_n_i => rst_n_wr_i, + clk_wr_i => clk_wr_i, + d_i => fifo_in, + we_i => fifo_we, + wr_full_o => full_o, + wr_almost_full_o => almostfull_o, + clk_rd_i => clk_rd_i, + q_o => fifo_out, + rd_i => rx_rdreq, + rd_empty_o => empty_int); + + + rx_rdreq <= (not empty_int) and dreq_i; -- and dreq_mask; + + + p_readout : process (clk_rd_i) + begin + if rising_edge(clk_rd_i) then + if(rst_n_rd_i = '0') then + valid_int <= '0'; + else + valid_int <= rx_rdreq; + end if; + end if; + end process; + + -- FIFO output data formatting + f_unpack_fifo_contents(fifo_out, valid_int, fab_int, false); + + fab_o <= fab_int; + empty_o <= empty_int; + +end structural; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_crc32_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_crc32_pkg.vhd new file mode 100644 index 000000000..c51f95827 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_crc32_pkg.vhd @@ -0,0 +1,128 @@ +------------------------------------------------------------------------------- +-- Title : CRC32 package +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : ep_crc32_pkg.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Platform : FPGA-generic +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2012-2013 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +package ep_crc32_pkg is + + + constant c_CRC32_RESIDUE_FULL : std_logic_vector(31 downto 0) := x"1cdf4421"; + constant c_CRC32_RESIDUE_HALF : std_logic_vector(31 downto 0) := x"1df722c6"; + constant c_CRC32_INIT_VALUE : std_logic_vector(31 downto 0) := x"00000000"; + + function f_update_crc32_d16(d : std_logic_vector; data_in : std_logic_vector) return std_logic_vector; + function f_update_crc32_d8(d : std_logic_vector(31 downto 0); data_in : std_logic_vector(7 downto 0)) return std_logic_vector; + +end ep_crc32_pkg; + +package body ep_crc32_pkg is + + + function f_update_crc32_d16(d : std_logic_vector; data_in : std_logic_vector) return std_logic_vector is + variable q : std_logic_vector(d'length-1 downto 0); + begin + q(7) := not ((not d(23)) xor (not d(17)) xor (not d(30)) xor (not d(29)) xor (not d(27)) xor data_in(7) xor data_in(1) xor data_in(14) xor data_in(13) xor data_in(11)); + q(6) := not ((not d(23)) xor (not d(22)) xor (not d(17)) xor (not d(16)) xor (not d(30)) xor (not d(28)) xor (not d(27)) xor (not d(26)) xor data_in(7) xor data_in(6) xor data_in(1) xor data_in(0) xor data_in(14) xor data_in(12) xor data_in(11) xor data_in(10)); + q(5) := not ((not d(23)) xor (not d(22)) xor (not d(21)) xor (not d(17)) xor (not d(16)) xor (not d(31)) xor (not d(30)) xor (not d(26)) xor (not d(25)) xor data_in(7) xor data_in(6) xor data_in(5) xor data_in(1) xor data_in(0) xor data_in(15) xor data_in(14) xor data_in(10) xor data_in(9)); + q(4) := not ((not d(22)) xor (not d(21)) xor (not d(20)) xor (not d(16)) xor (not d(31)) xor (not d(30)) xor (not d(29)) xor (not d(25)) xor (not d(24)) xor data_in(6) xor data_in(5) xor data_in(4) xor data_in(0) xor data_in(15) xor data_in(14) xor data_in(13) xor data_in(9) xor data_in(8)); + q(3) := not ((not d(23)) xor (not d(21)) xor (not d(20)) xor (not d(19)) xor (not d(17)) xor (not d(31)) xor (not d(28)) xor (not d(27)) xor (not d(24)) xor data_in(7) xor data_in(5) xor data_in(4) xor data_in(3) xor data_in(1) xor data_in(15) xor data_in(12) xor data_in(11) xor data_in(8)); + q(2) := not ((not d(23)) xor (not d(22)) xor (not d(20)) xor (not d(19)) xor (not d(18)) xor (not d(17)) xor (not d(16)) xor (not d(29)) xor (not d(26)) xor data_in(7) xor data_in(6) xor data_in(4) xor data_in(3) xor data_in(2) xor data_in(1) xor data_in(0) xor data_in(13) xor data_in(10)); + q(1) := not ((not d(22)) xor (not d(21)) xor (not d(19)) xor (not d(18)) xor (not d(17)) xor (not d(16)) xor (not d(31)) xor (not d(28)) xor (not d(25)) xor data_in(6) xor data_in(5) xor data_in(3) xor data_in(2) xor data_in(1) xor data_in(0) xor data_in(15) xor data_in(12) xor data_in(9)); + q(0) := not ((not d(23)) xor (not d(21)) xor (not d(20)) xor (not d(18)) xor (not d(16)) xor (not d(31)) xor (not d(29)) xor (not d(24)) xor data_in(7) xor data_in(5) xor data_in(4) xor data_in(2) xor data_in(0) xor data_in(15) xor data_in(13) xor data_in(8)); + q(15) := not ((not d(23)) xor (not d(22)) xor (not d(20)) xor (not d(19)) xor (not d(31)) xor (not d(29)) xor (not d(28)) xor (not d(27)) xor data_in(7) xor data_in(6) xor data_in(4) xor data_in(3) xor data_in(15) xor data_in(13) xor data_in(12) xor data_in(11)); + q(14) := not ((not d(22)) xor (not d(21)) xor (not d(19)) xor (not d(18)) xor (not d(30)) xor (not d(28)) xor (not d(27)) xor (not d(26)) xor data_in(6) xor data_in(5) xor data_in(3) xor data_in(2) xor data_in(14) xor data_in(12) xor data_in(11) xor data_in(10)); + q(13) := not ((not d(23)) xor (not d(21)) xor (not d(20)) xor (not d(18)) xor (not d(30)) xor (not d(26)) xor (not d(25)) xor data_in(7) xor data_in(5) xor data_in(4) xor data_in(2) xor data_in(14) xor data_in(10) xor data_in(9)); + q(12) := not ((not d(23)) xor (not d(22)) xor (not d(20)) xor (not d(19)) xor (not d(30)) xor (not d(27)) xor (not d(25)) xor (not d(24)) xor data_in(7) xor data_in(6) xor data_in(4) xor data_in(3) xor data_in(14) xor data_in(11) xor data_in(9) xor data_in(8)); + q(11) := not ((not d(23)) xor (not d(22)) xor (not d(21)) xor (not d(19)) xor (not d(18)) xor (not d(17)) xor (not d(30)) xor (not d(27)) xor (not d(26)) xor (not d(24)) xor data_in(7) xor data_in(6) xor data_in(5) xor data_in(3) xor data_in(2) xor data_in(1) xor data_in(14) xor data_in(11) xor data_in(10) xor data_in(8)); + q(10) := not ((not d(22)) xor (not d(21)) xor (not d(20)) xor (not d(18)) xor (not d(17)) xor (not d(16)) xor (not d(29)) xor (not d(26)) xor (not d(25)) xor data_in(6) xor data_in(5) xor data_in(4) xor data_in(2) xor data_in(1) xor data_in(0) xor data_in(13) xor data_in(10) xor data_in(9)); + q(9) := not ((not d(21)) xor (not d(20)) xor (not d(19)) xor (not d(17)) xor (not d(16)) xor (not d(31)) xor (not d(28)) xor (not d(25)) xor (not d(24)) xor data_in(5) xor data_in(4) xor data_in(3) xor data_in(1) xor data_in(0) xor data_in(15) xor data_in(12) xor data_in(9) xor data_in(8)); + q(8) := not ((not d(20)) xor (not d(19)) xor (not d(18)) xor (not d(16)) xor (not d(31)) xor (not d(30)) xor (not d(27)) xor (not d(24)) xor data_in(4) xor data_in(3) xor data_in(2) xor data_in(0) xor data_in(15) xor data_in(14) xor data_in(11) xor data_in(8)); + q(23) := not ((not d(7)) xor (not d(23)) xor (not d(19)) xor (not d(18)) xor (not d(31)) xor (not d(27)) xor (not d(26)) xor data_in(7) xor data_in(3) xor data_in(2) xor data_in(15) xor data_in(11) xor data_in(10)); + q(22) := not ((not d(6)) xor (not d(22)) xor (not d(18)) xor (not d(17)) xor (not d(30)) xor (not d(26)) xor (not d(25)) xor data_in(6) xor data_in(2) xor data_in(1) xor data_in(14) xor data_in(10) xor data_in(9)); + q(21) := not ((not d(5)) xor (not d(21)) xor (not d(17)) xor (not d(16)) xor (not d(29)) xor (not d(25)) xor (not d(24)) xor data_in(5) xor data_in(1) xor data_in(0) xor data_in(13) xor data_in(9) xor data_in(8)); + q(20) := not ((not d(4)) xor (not d(20)) xor (not d(16)) xor (not d(31)) xor (not d(28)) xor (not d(24)) xor data_in(4) xor data_in(0) xor data_in(15) xor data_in(12) xor data_in(8)); + q(19) := not ((not d(3)) xor (not d(19)) xor (not d(31)) xor (not d(30)) xor (not d(27)) xor data_in(3) xor data_in(15) xor data_in(14) xor data_in(11)); + q(18) := not ((not d(2)) xor (not d(18)) xor (not d(30)) xor (not d(29)) xor (not d(26)) xor data_in(2) xor data_in(14) xor data_in(13) xor data_in(10)); + q(17) := not ((not d(1)) xor (not d(23)) xor (not d(30)) xor (not d(28)) xor (not d(27)) xor (not d(25)) xor data_in(7) xor data_in(14) xor data_in(12) xor data_in(11) xor data_in(9)); + q(16) := not ((not d(0)) xor (not d(23)) xor (not d(22)) xor (not d(17)) xor (not d(30)) xor (not d(26)) xor (not d(24)) xor data_in(7) xor data_in(6) xor data_in(1) xor data_in(14) xor data_in(10) xor data_in(8)); + q(31) := not ((not d(15)) xor (not d(22)) xor (not d(21)) xor (not d(16)) xor (not d(29)) xor (not d(25)) xor data_in(6) xor data_in(5) xor data_in(0) xor data_in(13) xor data_in(9)); + q(30) := not ((not d(14)) xor (not d(21)) xor (not d(20)) xor (not d(31)) xor (not d(28)) xor (not d(24)) xor data_in(5) xor data_in(4) xor data_in(15) xor data_in(12) xor data_in(8)); + q(29) := not ((not d(13)) xor (not d(23)) xor (not d(20)) xor (not d(19)) xor (not d(17)) xor (not d(29)) xor data_in(7) xor data_in(4) xor data_in(3) xor data_in(1) xor data_in(13)); + q(28) := not ((not d(12)) xor (not d(22)) xor (not d(19)) xor (not d(18)) xor (not d(16)) xor (not d(28)) xor data_in(6) xor data_in(3) xor data_in(2) xor data_in(0) xor data_in(12)); + q(27) := not ((not d(11)) xor (not d(21)) xor (not d(18)) xor (not d(17)) xor (not d(31)) xor (not d(27)) xor data_in(5) xor data_in(2) xor data_in(1) xor data_in(15) xor data_in(11)); + q(26) := not ((not d(10)) xor (not d(20)) xor (not d(17)) xor (not d(16)) xor (not d(30)) xor (not d(26)) xor data_in(4) xor data_in(1) xor data_in(0) xor data_in(14) xor data_in(10)); + q(25) := not ((not d(9)) xor (not d(19)) xor (not d(16)) xor (not d(31)) xor (not d(29)) xor (not d(25)) xor data_in(3) xor data_in(0) xor data_in(15) xor data_in(13) xor data_in(9)); + q(24) := not ((not d(8)) xor (not d(18)) xor (not d(31)) xor (not d(30)) xor (not d(28)) xor (not d(24)) xor data_in(2) xor data_in(15) xor data_in(14) xor data_in(12) xor data_in(8)); + + return q; + end f_update_crc32_d16; + + + function f_update_crc32_d8(d : std_logic_vector(31 downto 0); data_in : std_logic_vector(7 downto 0)) return std_logic_vector is + variable q : std_logic_vector(31 downto 0); + begin + q(7) := not ((not d(31)) xor (not d(25)) xor data_in(7) xor data_in(1)); + q(6) := not ((not d(31)) xor (not d(30)) xor (not d(25)) xor (not d(24)) xor data_in(7) xor data_in(6) xor data_in(1) xor data_in(0)); + q(5) := not ((not d(31)) xor (not d(30)) xor (not d(29)) xor (not d(25)) xor (not d(24)) xor data_in(7) xor data_in(6) xor data_in(5) xor data_in(1) xor data_in(0)); + q(4) := not ((not d(30)) xor (not d(29)) xor (not d(28)) xor (not d(24)) xor data_in(6) xor data_in(5) xor data_in(4) xor data_in(0)); + q(3) := not ((not d(31)) xor (not d(29)) xor (not d(28)) xor (not d(27)) xor (not d(25)) xor data_in(7) xor data_in(5) xor data_in(4) xor data_in(3) xor data_in(1)); + q(2) := not ((not d(31)) xor (not d(30)) xor (not d(28)) xor (not d(27)) xor (not d(26)) xor (not d(25)) xor (not d(24)) xor data_in(7) xor data_in(6) xor data_in(4) xor data_in(3) xor data_in(2) xor data_in(1) xor data_in(0)); + q(1) := not ((not d(30)) xor (not d(29)) xor (not d(27)) xor (not d(26)) xor (not d(25)) xor (not d(24)) xor data_in(6) xor data_in(5) xor data_in(3) xor data_in(2) xor data_in(1) xor data_in(0)); + q(0) := not ((not d(31)) xor (not d(29)) xor (not d(28)) xor (not d(26)) xor (not d(24)) xor data_in(7) xor data_in(5) xor data_in(4) xor data_in(2) xor data_in(0)); + q(15) := not ((not d(7)) xor (not d(31)) xor (not d(30)) xor (not d(28)) xor (not d(27)) xor data_in(7) xor data_in(6) xor data_in(4) xor data_in(3)); + q(14) := not ((not d(6)) xor (not d(30)) xor (not d(29)) xor (not d(27)) xor (not d(26)) xor data_in(6) xor data_in(5) xor data_in(3) xor data_in(2)); + q(13) := not ((not d(5)) xor (not d(31)) xor (not d(29)) xor (not d(28)) xor (not d(26)) xor data_in(7) xor data_in(5) xor data_in(4) xor data_in(2)); + q(12) := not ((not d(4)) xor (not d(31)) xor (not d(30)) xor (not d(28)) xor (not d(27)) xor data_in(7) xor data_in(6) xor data_in(4) xor data_in(3)); + q(11) := not ((not d(3)) xor (not d(31)) xor (not d(30)) xor (not d(29)) xor (not d(27)) xor (not d(26)) xor (not d(25)) xor data_in(7) xor data_in(6) xor data_in(5) xor data_in(3) xor data_in(2) xor data_in(1)); + q(10) := not ((not d(2)) xor (not d(30)) xor (not d(29)) xor (not d(28)) xor (not d(26)) xor (not d(25)) xor (not d(24)) xor data_in(6) xor data_in(5) xor data_in(4) xor data_in(2) xor data_in(1) xor data_in(0)); + q(9) := not ((not d(1)) xor (not d(29)) xor (not d(28)) xor (not d(27)) xor (not d(25)) xor (not d(24)) xor data_in(5) xor data_in(4) xor data_in(3) xor data_in(1) xor data_in(0)); + q(8) := not ((not d(0)) xor (not d(28)) xor (not d(27)) xor (not d(26)) xor (not d(24)) xor data_in(4) xor data_in(3) xor data_in(2) xor data_in(0)); + q(23) := not ((not d(15)) xor (not d(31)) xor (not d(27)) xor (not d(26)) xor data_in(7) xor data_in(3) xor data_in(2)); + q(22) := not ((not d(14)) xor (not d(30)) xor (not d(26)) xor (not d(25)) xor data_in(6) xor data_in(2) xor data_in(1)); + q(21) := not ((not d(13)) xor (not d(29)) xor (not d(25)) xor (not d(24)) xor data_in(5) xor data_in(1) xor data_in(0)); + q(20) := not ((not d(12)) xor (not d(28)) xor (not d(24)) xor data_in(4) xor data_in(0)); + q(19) := not ((not d(11)) xor (not d(27)) xor data_in(3)); + q(18) := not ((not d(10)) xor (not d(26)) xor data_in(2)); + q(17) := not ((not d(9)) xor (not d(31)) xor data_in(7)); + q(16) := not ((not d(8)) xor (not d(31)) xor (not d(30)) xor (not d(25)) xor data_in(7) xor data_in(6) xor data_in(1)); + q(31) := not ((not d(23)) xor (not d(30)) xor (not d(29)) xor (not d(24)) xor data_in(6) xor data_in(5) xor data_in(0)); + q(30) := not ((not d(22)) xor (not d(29)) xor (not d(28)) xor data_in(5) xor data_in(4)); + q(29) := not ((not d(21)) xor (not d(31)) xor (not d(28)) xor (not d(27)) xor (not d(25)) xor data_in(7) xor data_in(4) xor data_in(3) xor data_in(1)); + q(28) := not ((not d(20)) xor (not d(30)) xor (not d(27)) xor (not d(26)) xor (not d(24)) xor data_in(6) xor data_in(3) xor data_in(2) xor data_in(0)); + q(27) := not ((not d(19)) xor (not d(29)) xor (not d(26)) xor (not d(25)) xor data_in(5) xor data_in(2) xor data_in(1)); + q(26) := not ((not d(18)) xor (not d(28)) xor (not d(25)) xor (not d(24)) xor data_in(4) xor data_in(1) xor data_in(0)); + q(25) := not ((not d(17)) xor (not d(27)) xor (not d(24)) xor data_in(3) xor data_in(0)); + q(24) := not ((not d(16)) xor (not d(26)) xor data_in(2)); + return q; + end f_update_crc32_d8; +end ep_crc32_pkg; + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_leds_controller.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_leds_controller.vhd new file mode 100644 index 000000000..28582fb52 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_leds_controller.vhd @@ -0,0 +1,129 @@ +------------------------------------------------------------------------------- +-- Title : Endpoint LEDs controller +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : ep_leds_controller.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Platform : FPGA-generic +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2012 - 2017 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.endpoint_private_pkg.all; +use work.gencores_pkg.all; + +entity ep_leds_controller is + + generic ( + g_blink_period_log2 : integer := 21); + + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + -- data valid (from PCS <> framers) + dvalid_tx_i : in std_logic; + dvalid_rx_i : in std_logic; + + link_ok_i : in std_logic; + + led_link_o : out std_logic; + led_act_o : out std_logic + ); + +end ep_leds_controller; + +architecture rtl of ep_leds_controller is + + type t_state is (INACTIVE, BLINKING); + + signal cnt : unsigned(g_blink_period_log2-1 downto 0); + signal cnt_reset, cnt_expired : std_logic; + signal state : t_state; + signal led_act : std_logic; + signal last_cycle_act : std_logic; + signal txrx : std_logic; +begin -- rtl + + led_link_o <= link_ok_i; + + txrx <= dvalid_rx_i or dvalid_tx_i; + + p_counter : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + + if(rst_n_i = '0' or cnt_reset = '1')then + cnt <= (others => '0'); + else + cnt <= cnt + 1; + if((not cnt) = 0) then + cnt_expired <= '1'; + else + cnt_expired <= '0'; + end if; + end if; + end if; + end process; + + p_gen_act_led : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + state <= INACTIVE; + led_act <= '0'; + cnt_reset <= '0'; + else + case state is + when INACTIVE => + if(txrx = '1') then + state <= BLINKING; + led_act <= '1'; + cnt_reset <= '1'; + end if; + when BLINKING => + cnt_reset <= '0'; + if(cnt_expired = '1') then + led_act <= not led_act; + if(last_cycle_act = '0') then + led_act <= '0'; + state <= INACTIVE; + end if; + last_cycle_act <= '0'; + else + if(txrx = '1') then + last_cycle_act <= '1'; + end if; + end if; + end case; + end if; + end if; + end process; + + led_act_o <= led_act; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_packet_filter.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_packet_filter.vhd new file mode 100644 index 000000000..79b4c4cbd --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_packet_filter.vhd @@ -0,0 +1,371 @@ +------------------------------------------------------------------------------- +-- Title : Programmable Packet Filter/Inspector +-- Project : White Rabbit MAC/Endpoint +------------------------------------------------------------------------------- +-- File : ep_packet_filter.vhd +-- Author : Tomasz Włostowski +-- Company : CERN BE-CO-HT +-- Created : 2010-11-18 +-- Last update: 2017-02-02 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: A simple packet inspection CPU, capable of classifying incoming +-- packets to 8 different packet classes. The microcode format and programming +-- constaints are described in detail in the Endpoint's manual. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2011-2017 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1l.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.gencores_pkg.all; +use work.genram_pkg.all; +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; +use work.ep_wbgen2_pkg.all; + +entity ep_packet_filter is + + port ( + clk_rx_i : in std_logic; + clk_sys_i : in std_logic; + rst_n_rx_i : in std_logic; + rst_n_sys_i : in std_logic; + + snk_fab_i : in t_ep_internal_fabric; + src_fab_o : out t_ep_internal_fabric; + + done_o : out std_logic; + pclass_o : out std_logic_vector(7 downto 0); + drop_o : out std_logic; + + regs_i : in t_ep_out_registers + ); + +end ep_packet_filter; + +architecture behavioral of ep_packet_filter is + + constant c_PC_SIZE : integer := 6; + + constant c_MODE_LOGIC : std_logic := '1'; + constant c_MODE_COMPARE : std_logic := '0'; + + type t_microcode_instruction is record + fin : std_logic; + mode : std_logic; + cmp_bit : std_logic; + cmp_mask : std_logic_vector(3 downto 0); + cmp_value : std_logic_vector(15 downto 0); + offset : std_logic_vector(5 downto 0); + op : std_logic_vector(2 downto 0); + op2 : std_logic_vector(2 downto 0); + + rd : std_logic_vector(4 downto 0); + ra : std_logic_vector(4 downto 0); + rb : std_logic_vector(4 downto 0); + rc : std_logic_vector(4 downto 0); + end record; + + function f_decode_insn + (ir : std_logic_vector) return t_microcode_instruction is + variable insn : t_microcode_instruction; + begin + insn.fin := ir(35); + insn.mode := ir(34); + insn.cmp_bit := ir(33); + insn.cmp_mask := ir(32 downto 29); + insn.cmp_value := ir(28 downto 13); + insn.offset := ir(12 downto 7); + insn.rd(3 downto 0) := ir(6 downto 3); + insn.op := ir(2 downto 0); + insn.rd(4) := ir(34) and ir(7); + insn.ra := ir(12 downto 8); + insn.rb := ir(17 downto 13); + insn.rc := ir(22 downto 18); + insn.op2 := ir(25 downto 23); + return insn; + end f_decode_insn; + + function f_eval + ( + a, b : std_logic; + op : std_logic_vector + ) return std_logic is + variable r : std_logic; + variable op_t : std_logic_vector(2 downto 0); + begin + op_t := op; + case op_t is + when "000" => r := a and b; + when "100" => r := a nand b; + when "001" => r := a or b; + when "101" => r := a nor b; + when "010" => r := a xor b; + when "110" => r := a xnor b; + when "011" => r := a; + when "111" => r := not a; + when others => null; + end case; + return r; + end f_eval; + + function f_pick_reg(regs : std_logic_vector; index : std_logic_vector)return std_logic is + variable idx_int : integer; + begin + idx_int := to_integer(unsigned(index)); + return regs(idx_int); + end f_pick_reg; + + + + signal pc : unsigned(c_PC_SIZE-1 downto 0); + signal ir, ir_d : std_logic_vector(35 downto 0); + signal insn, insn_d : t_microcode_instruction; + signal insn_predecoded : t_microcode_instruction; + + signal done_int : std_logic; + signal regs : std_logic_vector(31 downto 0); + + signal result_cmp : std_logic; + signal mask : std_logic_vector(15 downto 0); + + signal ra, rb, rc, result1, result2, rd : std_logic; + + signal pmem_rdata : std_logic_vector(15 downto 0); + + signal mm_write : std_logic; + signal mm_rdata, mm_wdata : std_logic_vector(35 downto 0); + + type t_state is (WAIT_FRAME, PROCESS_FRAME, GEN_OUTPUT); + + signal stage1, stage2, stage3 : std_logic; + signal r_pfcr1_mm_data_lsb : std_logic_vector(11 downto 0); + + signal pfcr0_enable_rxclk : std_logic; + +begin -- behavioral + + U_sync_pfcr0_enable : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_rx_i, + rst_n_i => '1', + data_i => regs_i.pfcr0_enable_o, + synced_o => pfcr0_enable_rxclk, + npulse_o => open, + ppulse_o => open); + + process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if(regs_i.pfcr1_mm_data_lsb_wr_o = '1') then + r_pfcr1_mm_data_lsb <= regs_i.pfcr1_mm_data_lsb_o; + end if; + end if; + end process; + + + mm_write <= not regs_i.pfcr0_enable_o and regs_i.pfcr0_mm_write_o and regs_i.pfcr0_mm_write_wr_o; + mm_wdata <= regs_i.pfcr0_mm_data_msb_o & r_pfcr1_mm_data_lsb; + + U_microcode_ram : generic_dpram + generic map ( + g_data_width => 36, + g_size => 2**c_PC_SIZE, + g_dual_clock => true) + port map ( + rst_n_i => rst_n_sys_i, + clka_i => clk_rx_i, + bwea_i => "00000", + wea_i => '0', + aa_i => std_logic_vector(pc), + da_i => x"000000000", + qa_o => mm_rdata, + clkb_i => clk_sys_i, + bweb_i => "11111", + web_i => mm_write, + ab_i => regs_i.pfcr0_mm_addr_o, + db_i => mm_wdata + ); + + + + U_backlog_ram : generic_dpram + generic map ( + g_data_width => 16, + g_size => 2**c_PC_SIZE, + g_with_byte_enable => false, + g_dual_clock => false) + port map ( + rst_n_i => rst_n_rx_i, + clka_i => clk_rx_i, + bwea_i => "11", + wea_i => snk_fab_i.dvalid, + aa_i => std_logic_vector(pc), + da_i => snk_fab_i.data, + qa_o => open, + clkb_i => clk_rx_i, + bweb_i => "00", + web_i => '0', + ab_i => insn_predecoded.offset, + db_i => x"0000", + qb_o => pmem_rdata); + + insn_predecoded <= f_decode_insn(mm_rdata); + + src_fab_o <= snk_fab_i; + + p_pc_counter : process(clk_rx_i) + begin + if rising_edge(clk_rx_i) then + if rst_n_rx_i = '0' or snk_fab_i.eof = '1' or snk_fab_i.error = '1' or done_int = '1' then + pc <= (others => '0'); + stage1 <= '0'; + elsif(snk_fab_i.dvalid = '1') then + pc <= pc + 1; + stage1 <= '1'; + else + stage1 <= '0'; + end if; + end if; + end process; + + p_stage2 : process(clk_rx_i) + begin + if rising_edge(clk_rx_i) then + if rst_n_rx_i = '0' or done_int = '1' or snk_fab_i.error = '1' then + stage2 <= '0'; + ir <= (others => '0'); + else + stage2 <= stage1; + ir <= mm_rdata; + end if; + end if; + end process; + + p_gen_mask : process(insn) + begin + if(insn.cmp_bit = '0') then + mask <= (3 downto 0 => insn.cmp_mask(0), + 7 downto 4 => insn.cmp_mask(1), + 11 downto 8 => insn.cmp_mask(2), + 15 downto 12 => insn.cmp_mask(3)); + else + case insn.cmp_mask is + when x"0" => mask <= x"0001"; + when x"1" => mask <= x"0002"; + when x"2" => mask <= x"0004"; + when x"3" => mask <= x"0008"; + when x"4" => mask <= x"0010"; + when x"5" => mask <= x"0020"; + when x"6" => mask <= x"0040"; + when x"7" => mask <= x"0080"; + when x"8" => mask <= x"0100"; + when x"9" => mask <= x"0200"; + when x"a" => mask <= x"0400"; + when x"b" => mask <= x"0800"; + when x"c" => mask <= x"1000"; + when x"d" => mask <= x"2000"; + when x"e" => mask <= x"4000"; + when x"f" => mask <= x"8000"; + when others => mask <= (others => 'X'); + end case; + end if; + end process; + + p_compare : process(clk_rx_i) + begin + if rising_edge(clk_rx_i) then + if stage2 = '1' then + stage3 <= '1'; + ir_d <= ir; + if (((pmem_rdata and mask) = insn.cmp_value)) then + result_cmp <= '1'; + else + result_cmp <= '0'; + end if; + + else + stage3 <= '0'; + end if; + end if; + end process; + + insn <= f_decode_insn(ir); + insn_d <= f_decode_insn(ir_d); + ra <= f_pick_reg(regs, insn_d.ra) when insn_d.mode = c_MODE_LOGIC else result_cmp; + rb <= f_pick_reg(regs, insn_d.rb) when insn_d.mode = c_MODE_LOGIC else f_pick_reg(regs, insn_d.rd); + rc <= f_pick_reg(regs, insn_d.rc); + + result1 <= f_eval(ra, rb, insn_d.op); + result2 <= f_eval(result1, rc, insn_d.op2); + + rd <= result2 when insn_d.mode = c_MODE_LOGIC else result1; + + + p_execute : process(clk_rx_i) + begin + if rising_edge(clk_rx_i) then + if rst_n_rx_i = '0' or snk_fab_i.eof = '1' or snk_fab_i.error = '1' or done_int = '1' then + regs <= (others => '0'); + else + if(stage3 = '1') then + regs(to_integer(unsigned(insn_d.rd))) <= rd; + end if; + end if; + end if; + end process; + + p_gen_status : process(clk_rx_i) + begin + if rising_edge(clk_rx_i) then + if (rst_n_rx_i = '0' or snk_fab_i.sof = '1') then + done_int <= '0'; + drop_o <= '0'; + else + if(pfcr0_enable_rxclk = '0') then + done_int <= '0'; + drop_o <= '0'; + pclass_o <= (others => '0'); + elsif( (stage3 = '1' and insn_d.fin = '1') or + ((snk_fab_i.error = '1' or snk_fab_i.eof = '1') and done_int = '0') ) then + done_int <= '1'; + pclass_o <= regs(31 downto 24); + drop_o <= regs(23); + end if; + end if; + end if; + end process; + + U_Sync_Done : gc_pulse_synchronizer + port map ( + clk_in_i => clk_rx_i, + clk_out_i => clk_sys_i, + rst_n_i => rst_n_rx_i, + d_p_i => done_int, + q_p_o => done_o); + +end behavioral; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_pcs_tbi_mdio_wb.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_pcs_tbi_mdio_wb.vhd new file mode 100644 index 000000000..f94b29b11 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_pcs_tbi_mdio_wb.vhd @@ -0,0 +1,627 @@ +--------------------------------------------------------------------------------------- +-- Title : Wishbone slave core for WR Endpoint 1000base-X TBI PCS register block +--------------------------------------------------------------------------------------- +-- File : ep_pcs_tbi_mdio_wb.vhd +-- Author : auto-generated by wbgen2 from pcs_regs.wb +-- Created : Wed Aug 16 22:43:42 2017 +-- Standard : VHDL'87 +--------------------------------------------------------------------------------------- +-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE pcs_regs.wb +-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY! +--------------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity ep_pcs_tbi_mdio_wb is + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + tx_clk_i : in std_logic; + rx_clk_i : in std_logic; +-- Port for BIT field: 'Unidirectional Enable' in reg: 'MDIO Control Register' + mdio_mcr_uni_en_o : out std_logic; +-- Port for MONOSTABLE field: 'Restart Auto-Negotiation' in reg: 'MDIO Control Register' + mdio_mcr_anrestart_o : out std_logic; +-- Port for BIT field: 'Power Down' in reg: 'MDIO Control Register' + mdio_mcr_pdown_o : out std_logic; +-- Port for BIT field: 'Auto-Negotiation Enable' in reg: 'MDIO Control Register' + mdio_mcr_anenable_o : out std_logic; +-- Port for BIT field: 'Loopback' in reg: 'MDIO Control Register' + mdio_mcr_loopback_o : out std_logic; +-- Port for MONOSTABLE field: 'Reset' in reg: 'MDIO Control Register' + mdio_mcr_reset_o : out std_logic; +-- Port for BIT field: 'Link Status' in reg: 'MDIO Status Register' + mdio_msr_lstatus_i : in std_logic; + lstat_read_notify_o : out std_logic; +-- Port for BIT field: 'Remote Fault' in reg: 'MDIO Status Register' + mdio_msr_rfault_i : in std_logic; +-- Port for BIT field: 'Auto-Negotiation Complete' in reg: 'MDIO Status Register' + mdio_msr_anegcomplete_i : in std_logic; +-- Port for std_logic_vector field: 'Pause' in reg: 'MDIO Auto-Negotiation Advertisement Register' + mdio_advertise_pause_o : out std_logic_vector(1 downto 0); +-- Port for std_logic_vector field: 'Remote Fault' in reg: 'MDIO Auto-Negotiation Advertisement Register' + mdio_advertise_rfault_o : out std_logic_vector(1 downto 0); +-- Port for BIT field: 'Full Duplex' in reg: 'MDIO Auto-Negotiation Link Partner Ability Register' + mdio_lpa_full_i : in std_logic; +-- Port for BIT field: 'Half Duplex' in reg: 'MDIO Auto-Negotiation Link Partner Ability Register' + mdio_lpa_half_i : in std_logic; +-- Port for std_logic_vector field: 'Pause' in reg: 'MDIO Auto-Negotiation Link Partner Ability Register' + mdio_lpa_pause_i : in std_logic_vector(1 downto 0); +-- Port for std_logic_vector field: 'Remote Fault' in reg: 'MDIO Auto-Negotiation Link Partner Ability Register' + mdio_lpa_rfault_i : in std_logic_vector(1 downto 0); +-- Port for BIT field: 'Acknowledge' in reg: 'MDIO Auto-Negotiation Link Partner Ability Register' + mdio_lpa_lpack_i : in std_logic; +-- Port for BIT field: 'Next Page' in reg: 'MDIO Auto-Negotiation Link Partner Ability Register' + mdio_lpa_npage_i : in std_logic; +-- Port for asynchronous (clock: tx_clk_i) BIT field: 'TX Calibration Pattern' in reg: 'WhiteRabbit-specific Configuration Register' + mdio_wr_spec_tx_cal_o : out std_logic; +-- Port for asynchronous (clock: rx_clk_i) BIT field: 'Calibration Pattern RX Status' in reg: 'WhiteRabbit-specific Configuration Register' + mdio_wr_spec_rx_cal_stat_i : in std_logic; +-- Port for asynchronous (clock: rx_clk_i) MONOSTABLE field: 'Reset calibration counter' in reg: 'WhiteRabbit-specific Configuration Register' + mdio_wr_spec_cal_crst_o : out std_logic; +-- Port for asynchronous (clock: rx_clk_i) std_logic_vector field: 'GTP RX Bitslide' in reg: 'WhiteRabbit-specific Configuration Register' + mdio_wr_spec_bslide_i : in std_logic_vector(4 downto 0); +-- Port for std_logic_vector field: 'Loopback - detailed' in reg: 'MDIO Extended Control Register' + mdio_ectrl_lpbck_vec_o : out std_logic_vector(2 downto 0); +-- Port for BIT field: 'SFP TX Fault Status' in reg: 'MDIO Extended Control Register' + mdio_ectrl_sfp_tx_fault_i : in std_logic; +-- Port for BIT field: 'SFP LOS' in reg: 'MDIO Extended Control Register' + mdio_ectrl_sfp_loss_i : in std_logic; +-- Port for BIT field: 'SFP TX Disable' in reg: 'MDIO Extended Control Register' + mdio_ectrl_sfp_tx_disable_o : out std_logic; +-- Port for std_logic_vector field: 'tx_prbs_sel' in reg: 'MDIO Extended Control Register' + mdio_ectrl_tx_prbs_sel_o : out std_logic_vector(2 downto 0) + ); +end ep_pcs_tbi_mdio_wb; + +architecture syn of ep_pcs_tbi_mdio_wb is + +signal mdio_mcr_uni_en_int : std_logic ; +signal mdio_mcr_anrestart_dly0 : std_logic ; +signal mdio_mcr_anrestart_int : std_logic ; +signal mdio_mcr_pdown_int : std_logic ; +signal mdio_mcr_anenable_int : std_logic ; +signal mdio_mcr_loopback_int : std_logic ; +signal mdio_mcr_reset_dly0 : std_logic ; +signal mdio_mcr_reset_int : std_logic ; +signal mdio_advertise_pause_int : std_logic_vector(1 downto 0); +signal mdio_advertise_rfault_int : std_logic_vector(1 downto 0); +signal mdio_wr_spec_tx_cal_int : std_logic ; +signal mdio_wr_spec_tx_cal_sync0 : std_logic ; +signal mdio_wr_spec_tx_cal_sync1 : std_logic ; +signal mdio_wr_spec_rx_cal_stat_sync0 : std_logic ; +signal mdio_wr_spec_rx_cal_stat_sync1 : std_logic ; +signal mdio_wr_spec_cal_crst_int : std_logic ; +signal mdio_wr_spec_cal_crst_int_delay : std_logic ; +signal mdio_wr_spec_cal_crst_sync0 : std_logic ; +signal mdio_wr_spec_cal_crst_sync1 : std_logic ; +signal mdio_wr_spec_cal_crst_sync2 : std_logic ; +signal mdio_wr_spec_bslide_int : std_logic_vector(4 downto 0); +signal mdio_wr_spec_bslide_lwb : std_logic ; +signal mdio_wr_spec_bslide_lwb_delay : std_logic ; +signal mdio_wr_spec_bslide_lwb_in_progress : std_logic ; +signal mdio_wr_spec_bslide_lwb_s0 : std_logic ; +signal mdio_wr_spec_bslide_lwb_s1 : std_logic ; +signal mdio_wr_spec_bslide_lwb_s2 : std_logic ; +signal mdio_ectrl_lpbck_vec_int : std_logic_vector(2 downto 0); +signal mdio_ectrl_sfp_tx_disable_int : std_logic ; +signal mdio_ectrl_tx_prbs_sel_int : std_logic_vector(2 downto 0); +signal ack_sreg : std_logic_vector(9 downto 0); +signal rddata_reg : std_logic_vector(31 downto 0); +signal wrdata_reg : std_logic_vector(31 downto 0); +signal rwaddr_reg : std_logic_vector(4 downto 0); +signal ack_in_progress : std_logic ; + +begin +-- Some internal signals assignments + wrdata_reg <= wb_dat_i; +-- +-- Main register bank access process. + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + ack_sreg <= "0000000000"; + ack_in_progress <= '0'; + rddata_reg <= "00000000000000000000000000000000"; + mdio_mcr_uni_en_int <= '0'; + mdio_mcr_anrestart_int <= '0'; + mdio_mcr_pdown_int <= '0'; + mdio_mcr_anenable_int <= '0'; + mdio_mcr_loopback_int <= '0'; + mdio_mcr_reset_int <= '0'; + lstat_read_notify_o <= '0'; + mdio_advertise_pause_int <= "00"; + mdio_advertise_rfault_int <= "00"; + mdio_wr_spec_tx_cal_int <= '0'; + mdio_wr_spec_cal_crst_int <= '0'; + mdio_wr_spec_cal_crst_int_delay <= '0'; + mdio_wr_spec_bslide_lwb <= '0'; + mdio_wr_spec_bslide_lwb_delay <= '0'; + mdio_wr_spec_bslide_lwb_in_progress <= '0'; + mdio_ectrl_lpbck_vec_int <= "000"; + mdio_ectrl_sfp_tx_disable_int <= '0'; + mdio_ectrl_tx_prbs_sel_int <= "000"; + elsif rising_edge(clk_sys_i) then +-- advance the ACK generator shift register + ack_sreg(8 downto 0) <= ack_sreg(9 downto 1); + ack_sreg(9) <= '0'; + if (ack_in_progress = '1') then + if (ack_sreg(0) = '1') then + mdio_mcr_anrestart_int <= '0'; + mdio_mcr_reset_int <= '0'; + lstat_read_notify_o <= '0'; + ack_in_progress <= '0'; + else + mdio_wr_spec_cal_crst_int <= mdio_wr_spec_cal_crst_int_delay; + mdio_wr_spec_cal_crst_int_delay <= '0'; + mdio_wr_spec_bslide_lwb <= mdio_wr_spec_bslide_lwb_delay; + mdio_wr_spec_bslide_lwb_delay <= '0'; + if ((ack_sreg(1) = '1') and (mdio_wr_spec_bslide_lwb_in_progress = '1')) then + rddata_reg(8 downto 4) <= mdio_wr_spec_bslide_int; + mdio_wr_spec_bslide_lwb_in_progress <= '0'; + end if; + end if; + else + if ((wb_cyc_i = '1') and (wb_stb_i = '1')) then + case rwaddr_reg(4 downto 0) is + when "00000" => + if (wb_we_i = '1') then + mdio_mcr_uni_en_int <= wrdata_reg(5); + mdio_mcr_anrestart_int <= wrdata_reg(9); + mdio_mcr_pdown_int <= wrdata_reg(11); + mdio_mcr_anenable_int <= wrdata_reg(12); + mdio_mcr_loopback_int <= wrdata_reg(14); + mdio_mcr_reset_int <= wrdata_reg(15); + end if; + rddata_reg(4 downto 0) <= "00000"; + rddata_reg(5) <= mdio_mcr_uni_en_int; + rddata_reg(6) <= '1'; + rddata_reg(7) <= '0'; + rddata_reg(8) <= '1'; + rddata_reg(9) <= '0'; + rddata_reg(10) <= '0'; + rddata_reg(11) <= mdio_mcr_pdown_int; + rddata_reg(12) <= mdio_mcr_anenable_int; + rddata_reg(13) <= '0'; + rddata_reg(14) <= mdio_mcr_loopback_int; + rddata_reg(15) <= '0'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(2) <= '1'; + ack_in_progress <= '1'; + when "00001" => + if (wb_we_i = '1') then + end if; + rddata_reg(0) <= '0'; + rddata_reg(1) <= '0'; + rddata_reg(2) <= mdio_msr_lstatus_i; + lstat_read_notify_o <= '1'; + rddata_reg(3) <= '1'; + rddata_reg(4) <= mdio_msr_rfault_i; + rddata_reg(5) <= mdio_msr_anegcomplete_i; + rddata_reg(6) <= '0'; + rddata_reg(7) <= '1'; + rddata_reg(8) <= '1'; + rddata_reg(9) <= '0'; + rddata_reg(10) <= '0'; + rddata_reg(11) <= '0'; + rddata_reg(12) <= '0'; + rddata_reg(13) <= '0'; + rddata_reg(14) <= '0'; + rddata_reg(15) <= '0'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00010" => + if (wb_we_i = '1') then + end if; + rddata_reg(15 downto 0) <= "0000000000000000"; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00011" => + if (wb_we_i = '1') then + end if; + rddata_reg(3 downto 0) <= "0000"; + rddata_reg(9 downto 4) <= "000000"; + rddata_reg(15 downto 10) <= "000000"; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00100" => + if (wb_we_i = '1') then + mdio_advertise_pause_int <= wrdata_reg(8 downto 7); + mdio_advertise_rfault_int <= wrdata_reg(13 downto 12); + end if; + rddata_reg(4 downto 0) <= "00000"; + rddata_reg(5) <= '1'; + rddata_reg(6) <= '0'; + rddata_reg(8 downto 7) <= mdio_advertise_pause_int; + rddata_reg(11 downto 9) <= "000"; + rddata_reg(13 downto 12) <= mdio_advertise_rfault_int; + rddata_reg(14) <= '0'; + rddata_reg(15) <= '0'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00101" => + if (wb_we_i = '1') then + end if; + rddata_reg(4 downto 0) <= "00000"; + rddata_reg(5) <= mdio_lpa_full_i; + rddata_reg(6) <= mdio_lpa_half_i; + rddata_reg(8 downto 7) <= mdio_lpa_pause_i; + rddata_reg(11 downto 9) <= "000"; + rddata_reg(13 downto 12) <= mdio_lpa_rfault_i; + rddata_reg(14) <= mdio_lpa_lpack_i; + rddata_reg(15) <= mdio_lpa_npage_i; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00110" => + if (wb_we_i = '1') then + end if; + rddata_reg(0) <= '0'; + rddata_reg(1) <= '0'; + rddata_reg(2) <= '0'; + rddata_reg(15 downto 3) <= "0000000000000"; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01111" => + if (wb_we_i = '1') then + end if; + rddata_reg(11 downto 0) <= "000000000000"; + rddata_reg(12) <= '0'; + rddata_reg(13) <= '0'; + rddata_reg(14) <= '0'; + rddata_reg(15) <= '1'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "10000" => + if (wb_we_i = '1') then + mdio_wr_spec_tx_cal_int <= wrdata_reg(0); + mdio_wr_spec_cal_crst_int <= wrdata_reg(2); + mdio_wr_spec_cal_crst_int_delay <= wrdata_reg(2); + end if; + rddata_reg(0) <= mdio_wr_spec_tx_cal_int; + rddata_reg(1) <= mdio_wr_spec_rx_cal_stat_sync1; + rddata_reg(2) <= '0'; + if (wb_we_i = '0') then + mdio_wr_spec_bslide_lwb <= '1'; + mdio_wr_spec_bslide_lwb_delay <= '1'; + mdio_wr_spec_bslide_lwb_in_progress <= '1'; + end if; + rddata_reg(3) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(5) <= '1'; + ack_in_progress <= '1'; + when "10001" => + if (wb_we_i = '1') then + mdio_ectrl_lpbck_vec_int <= wrdata_reg(2 downto 0); + mdio_ectrl_sfp_tx_disable_int <= wrdata_reg(5); + mdio_ectrl_tx_prbs_sel_int <= wrdata_reg(10 downto 8); + end if; + rddata_reg(2 downto 0) <= mdio_ectrl_lpbck_vec_int; + rddata_reg(3) <= mdio_ectrl_sfp_tx_fault_i; + rddata_reg(4) <= mdio_ectrl_sfp_loss_i; + rddata_reg(5) <= mdio_ectrl_sfp_tx_disable_int; + rddata_reg(10 downto 8) <= mdio_ectrl_tx_prbs_sel_int; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when others => +-- prevent the slave from hanging the bus on invalid address + ack_in_progress <= '1'; + ack_sreg(0) <= '1'; + end case; + end if; + end if; + end if; + end process; + + +-- Drive the data output bus + wb_dat_o <= rddata_reg; +-- Unidirectional Enable + mdio_mcr_uni_en_o <= mdio_mcr_uni_en_int; +-- Restart Auto-Negotiation + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + mdio_mcr_anrestart_dly0 <= '0'; + mdio_mcr_anrestart_o <= '0'; + elsif rising_edge(clk_sys_i) then + mdio_mcr_anrestart_dly0 <= mdio_mcr_anrestart_int; + mdio_mcr_anrestart_o <= mdio_mcr_anrestart_int and (not mdio_mcr_anrestart_dly0); + end if; + end process; + + +-- Power Down + mdio_mcr_pdown_o <= mdio_mcr_pdown_int; +-- Auto-Negotiation Enable + mdio_mcr_anenable_o <= mdio_mcr_anenable_int; +-- Loopback + mdio_mcr_loopback_o <= mdio_mcr_loopback_int; +-- Reset + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + mdio_mcr_reset_dly0 <= '0'; + mdio_mcr_reset_o <= '0'; + elsif rising_edge(clk_sys_i) then + mdio_mcr_reset_dly0 <= mdio_mcr_reset_int; + mdio_mcr_reset_o <= mdio_mcr_reset_int and (not mdio_mcr_reset_dly0); + end if; + end process; + + +-- Link Status +-- Remote Fault +-- Auto-Negotiation Complete +-- Pause + mdio_advertise_pause_o <= mdio_advertise_pause_int; +-- Remote Fault + mdio_advertise_rfault_o <= mdio_advertise_rfault_int; +-- Full Duplex +-- Half Duplex +-- Pause +-- Remote Fault +-- Acknowledge +-- Next Page +-- TX Calibration Pattern +-- synchronizer chain for field : TX Calibration Pattern (type RW/RO, clk_sys_i <-> tx_clk_i) + process (tx_clk_i, rst_n_i) + begin + if (rst_n_i = '0') then + mdio_wr_spec_tx_cal_o <= '0'; + mdio_wr_spec_tx_cal_sync0 <= '0'; + mdio_wr_spec_tx_cal_sync1 <= '0'; + elsif rising_edge(tx_clk_i) then + mdio_wr_spec_tx_cal_sync0 <= mdio_wr_spec_tx_cal_int; + mdio_wr_spec_tx_cal_sync1 <= mdio_wr_spec_tx_cal_sync0; + mdio_wr_spec_tx_cal_o <= mdio_wr_spec_tx_cal_sync1; + end if; + end process; + + +-- Calibration Pattern RX Status +-- synchronizer chain for field : Calibration Pattern RX Status (type RO/WO, rx_clk_i -> clk_sys_i) + process (rx_clk_i, rst_n_i) + begin + if (rst_n_i = '0') then + mdio_wr_spec_rx_cal_stat_sync0 <= '0'; + mdio_wr_spec_rx_cal_stat_sync1 <= '0'; + elsif rising_edge(rx_clk_i) then + mdio_wr_spec_rx_cal_stat_sync0 <= mdio_wr_spec_rx_cal_stat_i; + mdio_wr_spec_rx_cal_stat_sync1 <= mdio_wr_spec_rx_cal_stat_sync0; + end if; + end process; + + +-- Reset calibration counter + process (rx_clk_i, rst_n_i) + begin + if (rst_n_i = '0') then + mdio_wr_spec_cal_crst_o <= '0'; + mdio_wr_spec_cal_crst_sync0 <= '0'; + mdio_wr_spec_cal_crst_sync1 <= '0'; + mdio_wr_spec_cal_crst_sync2 <= '0'; + elsif rising_edge(rx_clk_i) then + mdio_wr_spec_cal_crst_sync0 <= mdio_wr_spec_cal_crst_int; + mdio_wr_spec_cal_crst_sync1 <= mdio_wr_spec_cal_crst_sync0; + mdio_wr_spec_cal_crst_sync2 <= mdio_wr_spec_cal_crst_sync1; + mdio_wr_spec_cal_crst_o <= mdio_wr_spec_cal_crst_sync2 and (not mdio_wr_spec_cal_crst_sync1); + end if; + end process; + + +-- GTP RX Bitslide +-- asynchronous std_logic_vector register : GTP RX Bitslide (type RO/WO, rx_clk_i <-> clk_sys_i) + process (rx_clk_i, rst_n_i) + begin + if (rst_n_i = '0') then + mdio_wr_spec_bslide_lwb_s0 <= '0'; + mdio_wr_spec_bslide_lwb_s1 <= '0'; + mdio_wr_spec_bslide_lwb_s2 <= '0'; + mdio_wr_spec_bslide_int <= "00000"; + elsif rising_edge(rx_clk_i) then + mdio_wr_spec_bslide_lwb_s0 <= mdio_wr_spec_bslide_lwb; + mdio_wr_spec_bslide_lwb_s1 <= mdio_wr_spec_bslide_lwb_s0; + mdio_wr_spec_bslide_lwb_s2 <= mdio_wr_spec_bslide_lwb_s1; + if ((mdio_wr_spec_bslide_lwb_s1 = '1') and (mdio_wr_spec_bslide_lwb_s2 = '0')) then + mdio_wr_spec_bslide_int <= mdio_wr_spec_bslide_i; + end if; + end if; + end process; + + +-- Loopback - detailed + mdio_ectrl_lpbck_vec_o <= mdio_ectrl_lpbck_vec_int; +-- SFP TX Fault Status +-- SFP LOS +-- SFP TX Disable + mdio_ectrl_sfp_tx_disable_o <= mdio_ectrl_sfp_tx_disable_int; +-- tx_prbs_sel + mdio_ectrl_tx_prbs_sel_o <= mdio_ectrl_tx_prbs_sel_int; + rwaddr_reg <= wb_adr_i; + wb_stall_o <= (not ack_sreg(0)) and (wb_stb_i and wb_cyc_i); +-- ACK signal generation. Just pass the LSB of ACK counter. + wb_ack_o <= ack_sreg(0); +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_registers_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_registers_pkg.vhd new file mode 100644 index 000000000..9f5983d51 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_registers_pkg.vhd @@ -0,0 +1,261 @@ +--------------------------------------------------------------------------------------- +-- Title : Wishbone slave core for WR switch endpoint controller +--------------------------------------------------------------------------------------- +-- File : ep_registers_pkg.vhd +-- Author : auto-generated by wbgen2 from ep_wishbone_controller.wb +-- Created : Wed Aug 16 22:43:41 2017 +-- Standard : VHDL'87 +--------------------------------------------------------------------------------------- +-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE ep_wishbone_controller.wb +-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY! +--------------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +package ep_wbgen2_pkg is + + + -- Input registers (user design -> WB slave) + + type t_ep_in_registers is record + ecr_feat_vlan_i : std_logic; + ecr_feat_dmtd_i : std_logic; + ecr_feat_ptp_i : std_logic; + ecr_feat_dpi_i : std_logic; + tscr_cs_done_i : std_logic; + tscr_rx_cal_result_i : std_logic; + tcar_pcp_map_i : std_logic_vector(23 downto 0); + mdio_asr_rdata_i : std_logic_vector(15 downto 0); + mdio_asr_ready_i : std_logic; + dsr_lstatus_i : std_logic; + dsr_lact_i : std_logic; + dmcr_en_i : std_logic; + dmcr_n_avg_i : std_logic_vector(11 downto 0); + dmsr_ps_val_i : std_logic_vector(23 downto 0); + dmsr_ps_rdy_i : std_logic; + inj_ctrl_pic_conf_ifg_i : std_logic_vector(15 downto 0); + inj_ctrl_pic_conf_sel_i : std_logic_vector(2 downto 0); + inj_ctrl_pic_conf_valid_i : std_logic; + inj_ctrl_pic_mode_id_i : std_logic_vector(2 downto 0); + inj_ctrl_pic_mode_valid_i : std_logic; + inj_ctrl_pic_ena_i : std_logic; + end record; + + constant c_ep_in_registers_init_value: t_ep_in_registers := ( + ecr_feat_vlan_i => '0', + ecr_feat_dmtd_i => '0', + ecr_feat_ptp_i => '0', + ecr_feat_dpi_i => '0', + tscr_cs_done_i => '0', + tscr_rx_cal_result_i => '0', + tcar_pcp_map_i => (others => '0'), + mdio_asr_rdata_i => (others => '0'), + mdio_asr_ready_i => '0', + dsr_lstatus_i => '0', + dsr_lact_i => '0', + dmcr_en_i => '0', + dmcr_n_avg_i => (others => '0'), + dmsr_ps_val_i => (others => '0'), + dmsr_ps_rdy_i => '0', + inj_ctrl_pic_conf_ifg_i => (others => '0'), + inj_ctrl_pic_conf_sel_i => (others => '0'), + inj_ctrl_pic_conf_valid_i => '0', + inj_ctrl_pic_mode_id_i => (others => '0'), + inj_ctrl_pic_mode_valid_i => '0', + inj_ctrl_pic_ena_i => '0' + ); + + -- Output registers (WB slave -> user design) + + type t_ep_out_registers is record + ecr_portid_o : std_logic_vector(4 downto 0); + ecr_rst_cnt_o : std_logic; + ecr_tx_en_o : std_logic; + ecr_rx_en_o : std_logic; + tscr_en_txts_o : std_logic; + tscr_en_rxts_o : std_logic; + tscr_cs_start_o : std_logic; + tscr_rx_cal_start_o : std_logic; + rfcr_a_runt_o : std_logic; + rfcr_a_giant_o : std_logic; + rfcr_a_hp_o : std_logic; + rfcr_keep_crc_o : std_logic; + rfcr_hpap_o : std_logic_vector(7 downto 0); + rfcr_mru_o : std_logic_vector(13 downto 0); + vcr0_qmode_o : std_logic_vector(1 downto 0); + vcr0_fix_prio_o : std_logic; + vcr0_prio_val_o : std_logic_vector(2 downto 0); + vcr0_pvid_o : std_logic_vector(11 downto 0); + vcr1_offset_o : std_logic_vector(9 downto 0); + vcr1_offset_wr_o : std_logic; + vcr1_data_o : std_logic_vector(17 downto 0); + vcr1_data_wr_o : std_logic; + pfcr0_mm_addr_o : std_logic_vector(5 downto 0); + pfcr0_mm_addr_wr_o : std_logic; + pfcr0_mm_write_o : std_logic; + pfcr0_mm_write_wr_o : std_logic; + pfcr0_enable_o : std_logic; + pfcr0_mm_data_msb_o : std_logic_vector(23 downto 0); + pfcr0_mm_data_msb_wr_o : std_logic; + pfcr1_mm_data_lsb_o : std_logic_vector(11 downto 0); + pfcr1_mm_data_lsb_wr_o : std_logic; + tcar_pcp_map_o : std_logic_vector(23 downto 0); + tcar_pcp_map_load_o : std_logic; + fcr_rxpause_o : std_logic; + fcr_txpause_o : std_logic; + fcr_rxpause_802_1q_o : std_logic; + fcr_txpause_802_1q_o : std_logic; + fcr_tx_thr_o : std_logic_vector(7 downto 0); + fcr_tx_quanta_o : std_logic_vector(15 downto 0); + mach_o : std_logic_vector(15 downto 0); + macl_o : std_logic_vector(31 downto 0); + mdio_cr_data_o : std_logic_vector(15 downto 0); + mdio_cr_data_wr_o : std_logic; + mdio_cr_addr_o : std_logic_vector(7 downto 0); + mdio_cr_rw_o : std_logic; + mdio_asr_phyad_o : std_logic_vector(7 downto 0); + dsr_lact_o : std_logic; + dsr_lact_load_o : std_logic; + dmcr_en_o : std_logic; + dmcr_en_load_o : std_logic; + dmcr_n_avg_o : std_logic_vector(11 downto 0); + dmcr_n_avg_load_o : std_logic; + dmsr_ps_rdy_o : std_logic; + dmsr_ps_rdy_load_o : std_logic; + inj_ctrl_pic_conf_ifg_o : std_logic_vector(15 downto 0); + inj_ctrl_pic_conf_ifg_load_o : std_logic; + inj_ctrl_pic_conf_sel_o : std_logic_vector(2 downto 0); + inj_ctrl_pic_conf_sel_load_o : std_logic; + inj_ctrl_pic_conf_valid_o : std_logic; + inj_ctrl_pic_conf_valid_load_o : std_logic; + inj_ctrl_pic_mode_id_o : std_logic_vector(2 downto 0); + inj_ctrl_pic_mode_id_load_o : std_logic; + inj_ctrl_pic_mode_valid_o : std_logic; + inj_ctrl_pic_mode_valid_load_o : std_logic; + inj_ctrl_pic_ena_o : std_logic; + inj_ctrl_pic_ena_load_o : std_logic; + end record; + + constant c_ep_out_registers_init_value: t_ep_out_registers := ( + ecr_portid_o => (others => '0'), + ecr_rst_cnt_o => '0', + ecr_tx_en_o => '0', + ecr_rx_en_o => '0', + tscr_en_txts_o => '0', + tscr_en_rxts_o => '0', + tscr_cs_start_o => '0', + tscr_rx_cal_start_o => '0', + rfcr_a_runt_o => '0', + rfcr_a_giant_o => '0', + rfcr_a_hp_o => '0', + rfcr_keep_crc_o => '0', + rfcr_hpap_o => (others => '0'), + rfcr_mru_o => (others => '0'), + vcr0_qmode_o => (others => '0'), + vcr0_fix_prio_o => '0', + vcr0_prio_val_o => (others => '0'), + vcr0_pvid_o => (others => '0'), + vcr1_offset_o => (others => '0'), + vcr1_offset_wr_o => '0', + vcr1_data_o => (others => '0'), + vcr1_data_wr_o => '0', + pfcr0_mm_addr_o => (others => '0'), + pfcr0_mm_addr_wr_o => '0', + pfcr0_mm_write_o => '0', + pfcr0_mm_write_wr_o => '0', + pfcr0_enable_o => '0', + pfcr0_mm_data_msb_o => (others => '0'), + pfcr0_mm_data_msb_wr_o => '0', + pfcr1_mm_data_lsb_o => (others => '0'), + pfcr1_mm_data_lsb_wr_o => '0', + tcar_pcp_map_o => (others => '0'), + tcar_pcp_map_load_o => '0', + fcr_rxpause_o => '0', + fcr_txpause_o => '0', + fcr_rxpause_802_1q_o => '0', + fcr_txpause_802_1q_o => '0', + fcr_tx_thr_o => (others => '0'), + fcr_tx_quanta_o => (others => '0'), + mach_o => (others => '0'), + macl_o => (others => '0'), + mdio_cr_data_o => (others => '0'), + mdio_cr_data_wr_o => '0', + mdio_cr_addr_o => (others => '0'), + mdio_cr_rw_o => '0', + mdio_asr_phyad_o => (others => '0'), + dsr_lact_o => '0', + dsr_lact_load_o => '0', + dmcr_en_o => '0', + dmcr_en_load_o => '0', + dmcr_n_avg_o => (others => '0'), + dmcr_n_avg_load_o => '0', + dmsr_ps_rdy_o => '0', + dmsr_ps_rdy_load_o => '0', + inj_ctrl_pic_conf_ifg_o => (others => '0'), + inj_ctrl_pic_conf_ifg_load_o => '0', + inj_ctrl_pic_conf_sel_o => (others => '0'), + inj_ctrl_pic_conf_sel_load_o => '0', + inj_ctrl_pic_conf_valid_o => '0', + inj_ctrl_pic_conf_valid_load_o => '0', + inj_ctrl_pic_mode_id_o => (others => '0'), + inj_ctrl_pic_mode_id_load_o => '0', + inj_ctrl_pic_mode_valid_o => '0', + inj_ctrl_pic_mode_valid_load_o => '0', + inj_ctrl_pic_ena_o => '0', + inj_ctrl_pic_ena_load_o => '0' + ); + function "or" (left, right: t_ep_in_registers) return t_ep_in_registers; + function f_x_to_zero (x:std_logic) return std_logic; + function f_x_to_zero (x:std_logic_vector) return std_logic_vector; +end package; + +package body ep_wbgen2_pkg is +function f_x_to_zero (x:std_logic) return std_logic is +begin +if x = '1' then +return '1'; +else +return '0'; +end if; +end function; +function f_x_to_zero (x:std_logic_vector) return std_logic_vector is +variable tmp: std_logic_vector(x'length-1 downto 0); +begin +for i in 0 to x'length-1 loop +if x(i) = '1' then +tmp(i):= '1'; +else +tmp(i):= '0'; +end if; +end loop; +return tmp; +end function; +function "or" (left, right: t_ep_in_registers) return t_ep_in_registers is +variable tmp: t_ep_in_registers; +begin +tmp.ecr_feat_vlan_i := f_x_to_zero(left.ecr_feat_vlan_i) or f_x_to_zero(right.ecr_feat_vlan_i); +tmp.ecr_feat_dmtd_i := f_x_to_zero(left.ecr_feat_dmtd_i) or f_x_to_zero(right.ecr_feat_dmtd_i); +tmp.ecr_feat_ptp_i := f_x_to_zero(left.ecr_feat_ptp_i) or f_x_to_zero(right.ecr_feat_ptp_i); +tmp.ecr_feat_dpi_i := f_x_to_zero(left.ecr_feat_dpi_i) or f_x_to_zero(right.ecr_feat_dpi_i); +tmp.tscr_cs_done_i := f_x_to_zero(left.tscr_cs_done_i) or f_x_to_zero(right.tscr_cs_done_i); +tmp.tscr_rx_cal_result_i := f_x_to_zero(left.tscr_rx_cal_result_i) or f_x_to_zero(right.tscr_rx_cal_result_i); +tmp.tcar_pcp_map_i := f_x_to_zero(left.tcar_pcp_map_i) or f_x_to_zero(right.tcar_pcp_map_i); +tmp.mdio_asr_rdata_i := f_x_to_zero(left.mdio_asr_rdata_i) or f_x_to_zero(right.mdio_asr_rdata_i); +tmp.mdio_asr_ready_i := f_x_to_zero(left.mdio_asr_ready_i) or f_x_to_zero(right.mdio_asr_ready_i); +tmp.dsr_lstatus_i := f_x_to_zero(left.dsr_lstatus_i) or f_x_to_zero(right.dsr_lstatus_i); +tmp.dsr_lact_i := f_x_to_zero(left.dsr_lact_i) or f_x_to_zero(right.dsr_lact_i); +tmp.dmcr_en_i := f_x_to_zero(left.dmcr_en_i) or f_x_to_zero(right.dmcr_en_i); +tmp.dmcr_n_avg_i := f_x_to_zero(left.dmcr_n_avg_i) or f_x_to_zero(right.dmcr_n_avg_i); +tmp.dmsr_ps_val_i := f_x_to_zero(left.dmsr_ps_val_i) or f_x_to_zero(right.dmsr_ps_val_i); +tmp.dmsr_ps_rdy_i := f_x_to_zero(left.dmsr_ps_rdy_i) or f_x_to_zero(right.dmsr_ps_rdy_i); +tmp.inj_ctrl_pic_conf_ifg_i := f_x_to_zero(left.inj_ctrl_pic_conf_ifg_i) or f_x_to_zero(right.inj_ctrl_pic_conf_ifg_i); +tmp.inj_ctrl_pic_conf_sel_i := f_x_to_zero(left.inj_ctrl_pic_conf_sel_i) or f_x_to_zero(right.inj_ctrl_pic_conf_sel_i); +tmp.inj_ctrl_pic_conf_valid_i := f_x_to_zero(left.inj_ctrl_pic_conf_valid_i) or f_x_to_zero(right.inj_ctrl_pic_conf_valid_i); +tmp.inj_ctrl_pic_mode_id_i := f_x_to_zero(left.inj_ctrl_pic_mode_id_i) or f_x_to_zero(right.inj_ctrl_pic_mode_id_i); +tmp.inj_ctrl_pic_mode_valid_i := f_x_to_zero(left.inj_ctrl_pic_mode_valid_i) or f_x_to_zero(right.inj_ctrl_pic_mode_valid_i); +tmp.inj_ctrl_pic_ena_i := f_x_to_zero(left.inj_ctrl_pic_ena_i) or f_x_to_zero(right.inj_ctrl_pic_ena_i); +return tmp; +end function; +end package body; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rtu_header_extract.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rtu_header_extract.vhd new file mode 100644 index 000000000..a071bdd3a --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rtu_header_extract.vhd @@ -0,0 +1,205 @@ +------------------------------------------------------------------------------- +-- Title : RTU header extract +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : ep_rtu_header_extract.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Platform : FPGA-generic +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2012 - 2017 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; + + +entity ep_rtu_header_extract is + generic( + g_with_rtu : boolean); + port( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + + mbuf_is_pause_i : in std_logic; + + vlan_class_i : in std_logic_vector(2 downto 0); + vlan_vid_i : in std_logic_vector(11 downto 0); + vlan_tag_done_i : in std_logic; + vlan_is_tagged_i: in std_logic; + + rmon_drp_at_rtu_full_o: out std_logic; + + rtu_rq_o : out t_ep_internal_rtu_request; + rtu_full_i : in std_logic; + rtu_rq_abort_o : out std_logic; + rtu_rq_valid_o : out std_logic; + rxbuf_full_i : in std_logic + ); + +end ep_rtu_header_extract; + +architecture rtl of ep_rtu_header_extract is + + signal hdr_offset : std_logic_vector(11 downto 0); + signal in_packet : std_logic; + signal in_header : std_logic; + signal rtu_rq_valid_basic : std_logic; + signal rtu_rq_valid_tagged : std_logic; + signal rtu_rq_valid_out : std_logic; + signal rtu_rq_abort : std_logic; + + + procedure f_extract_rtu(signal q : out std_logic_vector; + signal fab : t_ep_internal_fabric; + signal at_offset : std_logic) is + begin + if(at_offset = '1' and fab.dvalid = '1') then + q <= fab.data; + end if; + end f_extract_rtu; + +begin -- rtl + + gen_with_rtu : if(g_with_rtu) generate + + p_hdr_offset_sreg : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if (rst_n_i = '0' or snk_fab_i.sof = '1') then + hdr_offset(hdr_offset'left downto 1) <= (others => '0'); + hdr_offset(0) <= '1'; + elsif(snk_fab_i.dvalid = '1') then + hdr_offset <= hdr_offset(hdr_offset'left-1 downto 0) & '0'; + end if; + end if; + end process; + + p_gen_rtu_request : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + rtu_rq_o.smac <= (others => '0'); + rtu_rq_o.dmac <= (others => '0'); + in_packet <= '0'; + rtu_rq_valid_basic<= '0'; + rmon_drp_at_rtu_full_o <='0'; + rtu_rq_abort <= '0'; + in_header <= '0'; + else + rmon_drp_at_rtu_full_o <='0'; + + if(snk_fab_i.sof = '1' and rtu_full_i = '0' and rxbuf_full_i = '0') then + in_packet <= '1'; + in_header <= '1'; + elsif(snk_fab_i.sof = '1' and rtu_full_i = '1') then + rmon_drp_at_rtu_full_o <='1'; + end if; + + if((snk_fab_i.eof = '1' and snk_fab_i.sof = '0') or -- in case both (sof & eof) are HIGH + snk_fab_i.error = '1') then + in_packet <= '0'; + end if; + + if(snk_fab_i.error = '1' or rtu_rq_valid_out = '1') then + in_header <= '0'; + end if; + + + f_extract_rtu(rtu_rq_o.dmac(47 downto 32), snk_fab_i, hdr_offset(0)); + f_extract_rtu(rtu_rq_o.dmac(31 downto 16), snk_fab_i, hdr_offset(1)); + f_extract_rtu(rtu_rq_o.dmac(15 downto 0), snk_fab_i, hdr_offset(2)); + f_extract_rtu(rtu_rq_o.smac(47 downto 32), snk_fab_i, hdr_offset(3)); + f_extract_rtu(rtu_rq_o.smac(31 downto 16), snk_fab_i, hdr_offset(4)); + f_extract_rtu(rtu_rq_o.smac(15 downto 0), snk_fab_i, hdr_offset(5)); + + if(snk_fab_i.dvalid = '1' and hdr_offset(6) = '1' and in_packet = '1') then + rtu_rq_valid_basic <='1'; + elsif(rtu_rq_valid_out = '1' or -- reset after making request or + snk_fab_i.error = '1') then -- when there is error in the header, so we don't + -- make request for invalid frame which will be dumped + -- in the SWcore (which reads error status). + -- the special case when error occurs when the request + -- is made, we do end with the output of error (below, end of file) + rtu_rq_valid_basic <= '0'; + end if; + + if(in_packet = '1' and in_header = '0' and -- if we have packet and the header is already processed + snk_fab_i.error = '1' and rtu_rq_abort = '0') then + rtu_rq_abort <= '1'; + else + rtu_rq_abort <= '0'; + end if; + + end if; + end if; + end process; + + rtu_rq_abort_o <= rtu_rq_abort; + src_fab_o.sof <= snk_fab_i.sof and not rtu_full_i; -- null dev + + rtu_rq_valid_tagged <= rtu_rq_valid_basic and vlan_tag_done_i; + + -- the request is not done for PAUSE frames as they never go outside of Endpoint + -- (they are dropped inside Endpoint) + rtu_rq_valid_out <= (rtu_rq_valid_tagged and (not mbuf_is_pause_i))when (vlan_is_tagged_i = '1') else + (rtu_rq_valid_basic and (not mbuf_is_pause_i)); + + + end generate gen_with_rtu; + + gen_without_rtu : if (not g_with_rtu) generate + src_fab_o.sof <= snk_fab_i.sof; + rtu_rq_valid_out <= '0'; + rtu_rq_o.smac <= (others => '0'); + rtu_rq_o.dmac <= (others => '0'); + rtu_rq_abort_o <= '0'; + rmon_drp_at_rtu_full_o <= '0'; + end generate gen_without_rtu; + + snk_dreq_o <= src_dreq_i; + + src_fab_o.eof <= snk_fab_i.eof; + src_fab_o.dvalid <= snk_fab_i.dvalid; + src_fab_o.error <= snk_fab_i.error; + src_fab_o.bytesel <= snk_fab_i.bytesel; + src_fab_o.data <= snk_fab_i.data; + src_fab_o.addr <= snk_fab_i.addr; + src_fab_o.has_rx_timestamp <= snk_fab_i.has_rx_timestamp; + src_fab_o.rx_timestamp_valid <= snk_fab_i.rx_timestamp_valid; + + rtu_rq_o.vid <= vlan_vid_i; + rtu_rq_o.has_vid <= vlan_is_tagged_i; + rtu_rq_o.prio <= vlan_class_i; + rtu_rq_o.has_prio <= vlan_is_tagged_i; + rtu_rq_valid_o <= rtu_rq_valid_out and not snk_fab_i.ERROR; + rtu_rq_o.hash <= (others => '0'); + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_buffer.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_buffer.vhd new file mode 100644 index 000000000..8295fac4b --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_buffer.vhd @@ -0,0 +1,321 @@ +------------------------------------------------------------------------------- +-- Title : RX Packet Buffer +-- Project : White Rabbit MAC/Endpoint +------------------------------------------------------------------------------- +-- File : ep_rx_buffer.vhd +-- Author : Tomasz Włostowski +-- Company : CERN BE-CO-HT +-- Created : 2010-11-18 +-- Last update: 2017-02-02 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: A simple RX packet buffer, optimized for 18-bit Block RAM-based +-- FIFOs. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2011 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1l.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; + +use work.genram_pkg.all; +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; +use work.wr_fabric_pkg.all; +use work.ep_wbgen2_pkg.all; + +entity ep_rx_buffer is + generic ( + g_size : integer := 1024; + g_with_fc : boolean := false + ); + port( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + + level_o : out std_logic_vector(7 downto 0); + full_o : out std_logic; + drop_req_i : in std_logic; + dropped_o : out std_logic; + regs_i : in t_ep_out_registers + ); + +end ep_rx_buffer; + +architecture behavioral of ep_rx_buffer is + + constant c_drop_threshold : integer := g_size - 3; + constant c_release_threshold : integer := g_size * 7 / 8; + + type t_write_state is(WAIT_FRAME, DATA); + + procedure f_pack_rbuf_contents + ( + signal st : in t_write_state; + signal fab : in t_ep_internal_fabric; + signal prev_addr : in std_logic_vector; + signal dout : out std_logic_vector; + signal dout_valid : out std_logic) is + variable valid_tmp : std_logic; + begin + if(fab.sof = '1' or fab.error = '1' or fab.eof = '1') then + -- tag = 11 + dout(17) <= '1'; + dout(16) <= '1'; + dout(15) <= fab.sof; + dout(14) <= fab.eof; + dout(13) <= fab.error; + dout(12 downto 0) <= (others => '0'); + valid_tmp := '1'; +-- dout_valid <= '1'; + elsif(fab.dvalid = '1') then + + if(prev_addr /= fab.addr) then + dout(17 downto 16) <= "10"; -- reg-change + else + dout(17 downto 16) <= '0' & fab.bytesel; + end if; + + dout(15 downto 0) <= fab.data; + valid_tmp := '1'; + else + dout(17 downto 0) <= (others => '0'); + valid_tmp := '0'; + end if; + + if(fab.sof = '1') then + dout_valid <= valid_tmp; + elsif(st = DATA) then + dout_valid <= valid_tmp; + else + dout_valid <= '0'; + end if; + end f_pack_rbuf_contents; + + procedure f_unpack_rbuf_contents + ( + signal din : in std_logic_vector; + signal cur_addr : in std_logic_vector; + signal din_valid : in std_logic; + signal fab : out t_ep_internal_fabric; + early_eof : boolean := false) is + begin + + fab.data <= din(15 downto 0); + if(din_valid = '1') then + + if(din(17 downto 16) = "10") then -- some fancy encoding is necessary here + case cur_addr(1 downto 0) is + when c_WRF_DATA => + fab.addr <= c_WRF_OOB after 1 ns; + when c_WRF_STATUS => + fab.addr <= c_WRF_DATA after 1 ns; + when others => fab.addr <= c_WRF_DATA after 1 ns; + end case; + + else + fab.addr <= cur_addr after 1 ns; + end if; + + fab.dvalid <= not din(17) or (din(17) and not din(16)); + fab.sof <= din(15) and din(17) and din(16); + fab.eof <= din(14) and din(17) and din(16); + fab.error <= din(13) and din(17) and din(16); + fab.bytesel <= not din(17) and din(16); + + else + fab.bytesel <= '0'; + fab.addr <= cur_addr after 1 ns; + fab.dvalid <= '0'; + fab.sof <= '0'; + fab.eof <= '0'; + fab.error <= '0'; + fab.data <= (others => '0'); + end if; + fab.has_rx_timestamp <= '0'; + fab.rx_timestamp_valid <= '0'; + end f_unpack_rbuf_contents; + + + signal q_in, q_out : std_logic_vector(17 downto 0); + signal q_usedw : std_logic_vector(f_log2_size(g_size)-1 downto 0); + signal q_empty : std_logic; + signal q_reset : std_logic; + signal q_rd : std_logic; + signal q_drop : std_logic; + signal q_in_valid, q_out_valid : std_logic; + signal q_aempty, q_afull : std_logic; + + + signal state : t_write_state; + signal fab_to_encode : t_ep_internal_fabric; + signal src_fab_int : t_ep_internal_fabric; + + signal in_prev_addr : std_logic_vector(1 downto 0); + signal out_cur_addr : std_logic_vector(1 downto 0); + +begin + + full_o <= q_drop; + + p_fifo_write : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + q_drop <= '0'; + state <= WAIT_FRAME; + in_prev_addr <= (others => '0'); + dropped_o <= '0'; + else + + if(snk_fab_i.dvalid = '1') then + in_prev_addr <= snk_fab_i.addr; + end if; + + if(q_afull = '1') then + q_drop <= '1'; + elsif(q_aempty = '1') then + q_drop <= '0'; + end if; + + case state is + when WAIT_FRAME => + in_prev_addr <= c_WRF_STATUS; + + if(snk_fab_i.sof = '1' and q_drop = '0' and drop_req_i = '0') then + state <= DATA; + dropped_o <= '0'; + elsif(snk_fab_i.sof = '1' and (q_drop = '1' or drop_req_i = '1')) then + dropped_o <= '1'; + end if; + + when DATA => + if(q_drop = '1' or snk_fab_i.eof = '1' or snk_fab_i.error = '1') then + state <= WAIT_FRAME; + end if; + + when others => null; + end case; + end if; + end if; + end process; + + p_pack_rbuf : process(state, fab_to_encode, in_prev_addr, q_in, q_in_valid) + begin + f_pack_rbuf_contents(state, fab_to_encode, in_prev_addr, q_in, q_in_valid); + end process; + + + p_encode_fifo_in : process(drop_req_i, q_drop, snk_fab_i, state) + variable fab_pre_encode : t_ep_internal_fabric; + + begin + fab_pre_encode := snk_fab_i; + + if(fab_pre_encode.sof = '1' and (q_drop = '1' or drop_req_i = '1')) then + fab_pre_encode.sof := '0'; + end if; + + if(state = DATA and q_drop = '1') then + fab_pre_encode.dvalid := '0'; + fab_pre_encode.error := '1'; + end if; + + fab_to_encode <= fab_pre_encode; + end process; + + q_reset <= rst_n_i and regs_i.ecr_rx_en_o; + + BUF_FIFO : generic_sync_fifo + generic map ( + g_data_width => 18, + g_size => g_size, + g_with_almost_empty => true, + g_with_almost_full => true, + g_almost_empty_threshold => c_release_threshold, + g_almost_full_threshold => c_drop_threshold, + g_with_count => g_with_fc) + port map ( + rst_n_i => q_reset, + clk_i => clk_sys_i, + d_i => q_in, + we_i => q_in_valid, + q_o => q_out, + rd_i => q_rd, + empty_o => q_empty, + full_o => open, + almost_empty_o => q_aempty, + almost_full_o => q_afull, + count_o => q_usedw); + + + + q_rd <= (not q_empty) and src_dreq_i; + + rd_valid_gen : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if(rst_n_i = '0') then + q_out_valid <= '0'; + out_cur_addr <= c_WRF_STATUS; + else + q_out_valid <= q_rd; + + if(src_fab_int.sof = '1' or src_fab_int.eof = '1' or src_fab_int.error = '1')then + out_cur_addr <= c_WRF_STATUS; + else + out_cur_addr <= src_fab_int.addr; + end if; + end if; + end if; + end process; + + p_unpack : process(q_out, out_cur_addr, q_out_valid,src_fab_int) + begin + f_unpack_rbuf_contents(q_out, out_cur_addr, q_out_valid, src_fab_int); + end process; + + src_fab_o <= src_fab_int; + snk_dreq_o <= '1'; + + GEN_FC: if g_with_fc = true generate + GEN_LEV_BIG : if f_log2_size(g_size)-1 > level_o'left generate + level_o <= q_usedw(q_usedw'left downto q_usedw'left - 7); + end generate; + GEN_LEV_SML : if f_log2_size(g_size)-1 < level_o'left+1 generate + level_o(q_usedw'left downto 0) <= q_usedw; + end generate; + end generate; + + GEN_NOFC: if g_with_fc = false generate + level_o <= (others=>'X'); + end generate; + +end behavioral; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_crc_size_check.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_crc_size_check.vhd new file mode 100644 index 000000000..23230b849 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_crc_size_check.vhd @@ -0,0 +1,404 @@ +------------------------------------------------------------------------------- +-- Title : Rx CRC checker +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : ep_rx_crc_size_check.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Platform : FPGA-generic +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2011 - 2017 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.gencores_pkg.all; -- for gc_crc_gen +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; +use work.wr_fabric_pkg.all; +use work.ep_wbgen2_pkg.all; +use work.ep_crc32_pkg.all; + +-- 1st deframing pipeline stage - CRC/PCS error/Size checker + +entity ep_rx_crc_size_check is + generic + ( + g_use_new_crc : boolean := false); + port( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + + regs_i : in t_ep_out_registers; + rmon_pcs_err_o : out std_logic; + rmon_giant_o : out std_logic; + rmon_runt_o : out std_logic; + rmon_crc_err_o : out std_logic + ); + +end ep_rx_crc_size_check; + +architecture behavioral of ep_rx_crc_size_check is + + constant c_MIN_FRAME_SIZE : integer := 64; + + component ep_rx_bypass_queue + generic ( + g_size : integer; + g_width : integer); + port ( + rst_n_i : in std_logic; + clk_i : in std_logic; + d_i : in std_logic_vector(g_width-1 downto 0); + valid_i : in std_logic; + dreq_o : out std_logic; + q_o : out std_logic_vector(g_width-1 downto 0); + valid_o : out std_logic; + dreq_i : in std_logic; + flush_i : in std_logic; + purge_i : in std_logic; + empty_o : out std_logic); + end component; + + + type t_state is (ST_WAIT_FRAME, ST_DATA, ST_OOB); + + signal crc_gen_enable : std_logic; + signal crc_gen_reset : std_logic; + signal crc_match, crc_match2 : std_logic; + + signal crc_cur : std_logic_vector(31 downto 0); + signal crc_in_data : std_logic_vector(15 downto 0); + signal crc_last_is_odd : std_logic; + + signal byte_cntr : unsigned(13 downto 0); + signal is_runt : std_logic; + signal is_giant : std_logic; + signal size_check_ok : std_logic; + + signal state : t_state; + + signal q_flush, q_empty : std_logic; + signal q_purge : std_logic; + signal q_in, q_out : std_logic_vector(17 downto 0); + signal q_bytesel : std_logic; + signal q_dvalid_in : std_logic; + signal q_dvalid_out : std_logic; + signal q_dreq_out : std_logic; + + -- bypass_queue stuff comes here + constant c_crc_size : integer := 2; + constant c_dat_width : integer := 18; + + type t_queue_array is array(0 to c_crc_size-1) of std_logic_vector(c_dat_width-1 downto 0); + + signal q_data : t_queue_array; + signal q_valid : std_logic_vector(c_crc_size-1 downto 0); + + signal qempty, qfull : std_logic; + signal sreg_enable : std_logic; + signal oob_in : std_logic; + signal dat_in : std_logic; + signal valid_mask : std_logic; + signal err_on_giant : std_logic; + + function f_queue_occupation(q : std_logic_vector; check_empty : std_logic) return std_logic is + variable i : integer; + begin + for i in 0 to q'length-1 loop + if(q(i) = check_empty) then + return '0'; + end if; + end loop; -- i + return '1'; + end function; + +begin -- behavioral + + crc_gen_reset <= snk_fab_i.sof or (not rst_n_i); + crc_gen_enable <= '1' when (snk_fab_i.addr = c_WRF_DATA and snk_fab_i.dvalid = '1') else '0'; + + gen_old_crc : if(g_use_new_crc = false) generate + U_rx_crc_generator : gc_crc_gen + generic map ( + g_polynomial => x"04C11DB7", + g_init_value => x"ffffffff", + g_residue => x"1cdf4421", + g_data_width => 16, + g_half_width => 8, + g_sync_reset => 1, + g_dual_width => 1, + g_registered_match_output => false) + port map ( + clk_i => clk_sys_i, + rst_i => crc_gen_reset, + en_i => crc_gen_enable, + half_i => snk_fab_i.bytesel, + data_i => snk_fab_i.data(15 downto 0), + match_o => crc_match, + crc_o => open); + end generate gen_old_crc; + + gen_new_crc : if(g_use_new_crc = true) generate + + crc_in_data(15 downto 8) <= snk_fab_i.data(15 downto 8); + crc_in_data(7 downto 0) <= x"00" when snk_fab_i.bytesel = '1' else snk_fab_i.data(7 downto 0); + + p_check_crc : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if crc_gen_reset = '1' then + crc_cur <= c_CRC32_INIT_VALUE; + elsif(crc_gen_enable = '1') then + crc_cur <= f_update_crc32_d16(crc_cur, crc_in_data); + crc_last_is_odd <= snk_fab_i.bytesel; + end if; + end if; + end process; + + crc_match <= '1' when (crc_last_is_odd = '0' and crc_cur = c_CRC32_RESIDUE_FULL) + or (crc_last_is_odd = '1' and crc_cur = c_CRC32_RESIDUE_HALF) else '0'; + + end generate gen_new_crc; + +-- U_bypass_queue : ep_rx_bypass_queue +-- generic map ( +-- g_size => 3, +-- g_width => 18) +-- port map ( +-- rst_n_i => rst_n_i, +-- clk_i => clk_sys_i, +-- d_i => q_in, +-- valid_i => q_dvalid_in, +-- dreq_o => q_dreq_out, +-- q_o => q_out, +-- valid_o => q_dvalid_out, +-- dreq_i => src_dreq_i, +-- flush_i => '0', +-- purge_i => q_purge, +-- empty_o => q_empty); + + snk_dreq_o <= q_dreq_out and not (snk_fab_i.eof or snk_fab_i.error); + + + p_count_bytes : process (clk_sys_i, rst_n_i) + begin -- process + if rising_edge(clk_sys_i) then + if (rst_n_i = '0' or regs_i.ecr_rx_en_o = '0') then + byte_cntr <= (others => '0'); + is_runt <= '0'; + is_giant <= '0'; + else + if(snk_fab_i.sof = '1') then + byte_cntr <= (others => '0'); + is_runt <= '1'; + end if; + + if(snk_fab_i.dvalid = '1') then + if(snk_fab_i.bytesel = '1') then + byte_cntr <= byte_cntr + 1; + else + byte_cntr <= byte_cntr + 2; + end if; + end if; + + if(byte_cntr = to_unsigned(c_MIN_FRAME_SIZE - 2, byte_cntr'length) and snk_fab_i.dvalid = '1' and snk_fab_i.bytesel = '0') then + is_runt <= '0'; + end if; + + if(byte_cntr > unsigned(regs_i.rfcr_mru_o) and snk_fab_i.sof = '0') then + is_giant <= '1'; + else + is_giant <= '0'; + end if; + + end if; + end if; + end process; + + size_check_ok <= '0' when (is_runt = '1' and regs_i.rfcr_a_runt_o = '0') or + (is_giant = '1' and regs_i.rfcr_a_giant_o = '0') else '1'; + err_on_giant <= '1' when (is_giant = '1' and regs_i.rfcr_a_giant_o = '0') else '0'; + + p_gen_output : process(clk_sys_i, rst_n_i) + begin + if rising_edge(clk_sys_i) then + + if rst_n_i = '0' or regs_i.ecr_rx_en_o = '0' then + + q_purge <= '0'; + q_bytesel <= '0'; + + state <= ST_WAIT_FRAME; + + rmon_pcs_err_o <= '0'; + rmon_giant_o <= '0'; + rmon_runt_o <= '0'; + rmon_crc_err_o <= '0'; + + src_fab_o.sof <= '0'; + + else + case state is + when ST_WAIT_FRAME => + q_purge <= '0'; + rmon_pcs_err_o <= '0'; + rmon_giant_o <= '0'; + rmon_runt_o <= '0'; + rmon_crc_err_o <= '0'; + q_bytesel <= '0'; + src_fab_o.error <= '0'; + src_fab_o.sof <= '0'; + + if(snk_fab_i.sof = '1') then + state <= ST_DATA; + src_fab_o.sof <= '1'; + end if; + + when ST_DATA => + + src_fab_o.sof <= '0'; + + if(snk_fab_i.dvalid = '1' and snk_fab_i.addr = c_WRF_DATA) then + q_bytesel <= snk_fab_i.bytesel; + end if; + + if(snk_fab_i.error = '1' or -- an error from the source? + (q_bytesel = '1' and oob_in = '0' and snk_fab_i.dvalid = '1')) then -- we expect bytesel at the last byte of data + + src_fab_o.error <= '1'; + rmon_pcs_err_o <= '1'; + state <= ST_WAIT_FRAME; + q_purge <= '1'; + +-- elsif(snk_fab_i.eof = '1' or oob_in = '1') then + elsif(snk_fab_i.eof = '1' or oob_in = '1' or err_on_giant = '1') then + if(size_check_ok = '0' or crc_match = '0') then -- bad frame? + state <= ST_WAIT_FRAME; + src_fab_o.error <= '1'; + q_purge <= '1'; + elsif(snk_fab_i.eof = '1') then + state <= ST_WAIT_FRAME; + else + state <= ST_OOB; + end if; + + rmon_runt_o <= is_runt and (not regs_i.rfcr_a_runt_o); + rmon_giant_o <= is_giant and (not regs_i.rfcr_a_giant_o); + rmon_crc_err_o <= not crc_match; + end if; + + + when ST_OOB => + rmon_runt_o <= '0'; + rmon_giant_o <= '0'; + rmon_crc_err_o <= '0'; + + if(src_dreq_i = '1' and snk_fab_i.eof='1') then + state <= ST_WAIT_FRAME; + end if; + + end case; + end if; + end if; + end process; + + -- + q_in(15 downto 0) <= snk_fab_i.data; + q_in(17 downto 16) <= snk_fab_i.addr; + q_dvalid_in <= '1' when snk_fab_i.dvalid = '1' and (state = ST_DATA or state = ST_OOB) else '0'; + + --ML optimized queue_bypass so can remove masks tuff + src_fab_o.dvalid <= q_dvalid_out; + src_fab_o.data <= q_in(15 downto 0) when (oob_in = '1') else q_out(15 downto 0); + src_fab_o.addr <= q_in(17 downto 16) when (oob_in = '1') else q_out(17 downto 16) ; + src_fab_o.bytesel <= snk_fab_i.bytesel when (dat_in = '1') else '0'; + src_fab_o.eof <= snk_fab_i.eof; + + src_fab_o.has_rx_timestamp <= snk_fab_i.has_rx_timestamp; + src_fab_o.rx_timestamp_valid <= snk_fab_i.rx_timestamp_valid; + + --------------------- the whole of bypass_queue is here ------------------------------------ + -- it was put inside as the optimization made it far from "universal" and apparently this + -- was the cause of doing the bypass_queue a separate module + -------------------------------------------------------------------------------------------- + qempty <= f_queue_occupation(q_valid, '1') ; + qfull <= f_queue_occupation(q_valid, '0'); + + q_dvalid_out <= (qfull and q_dvalid_in) or (oob_in and valid_mask); + q_dreq_out <= (src_dreq_i or not qfull); + oob_in <= '1' when (snk_fab_i.addr = c_WRF_OOB and q_dvalid_in = '1') else '0'; + dat_in <= '1' when (snk_fab_i.addr = c_WRF_DATA and q_dvalid_in = '1') else '0'; + + + sreg_enable <= '1' when ((q_dvalid_in = '1') or (qempty = '0' and q_dvalid_out = '1')) else '0'; + + q_out <= q_data(0); + + p_fifo: process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if(sreg_enable = '1') then + q_data(c_crc_size-1) <= q_in; + L0: for i in 0 to c_crc_size-2 loop + q_data(i) <= q_data(i+1); + end loop L0; + end if; + end if; + end process; + + p_queue : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' or q_purge = '1' then + valid_mask <= '0'; + q_valid <= (others => '0'); + else + + valid_mask <= src_dreq_i; + + if sreg_enable = '1' then + q_valid(0) <= q_dvalid_in; + if(oob_in = '1' ) then -- flashing CRC + q_valid <=(others => '0'); + else + q_valid(q_valid'length-1 downto 1) <= q_valid(q_valid'length-2 downto 0); + end if; + end if; + end if; + end if; + end process; + +end behavioral; + + + + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_early_address_match.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_early_address_match.vhd new file mode 100644 index 000000000..427b5d322 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_early_address_match.vhd @@ -0,0 +1,271 @@ +------------------------------------------------------------------------------- +-- Title : Rx Early Address Match +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : ep_rx_early_address_match.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Platform : FPGA-generic +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2011 - 2015 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.gencores_pkg.all; -- for gc_crc_gen +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; +use work.ep_wbgen2_pkg.all; + +-- 1st stage in the RX pipeline: early address matching/header parsing +-- to filter out pause and HP frames in advance. + +entity ep_rx_early_address_match is + generic + ( + g_early_hp_detection : boolean := false); + port( + clk_sys_i : in std_logic; + clk_rx_i : in std_logic; + + rst_n_sys_i : in std_logic; + rst_n_rx_i : in std_logic; + + snk_fab_i : in t_ep_internal_fabric; + src_fab_o : out t_ep_internal_fabric; + + match_done_o : out std_logic; + match_is_hp_o : out std_logic; + + -- indicate that pause was detected + match_is_pause_o : out std_logic; + + -- tell quanta (for prio-based pause it is the greatest of all prios) + match_pause_quanta_o : out std_logic_vector(15 downto 0); + + -- mask with priorities which shall be PAUSEd + match_pause_prio_mask_o : out std_logic_vector(7 downto 0); + + -- once the PAUSE frame is decoded, it requests pausing from SWcore + match_pause_p_o : out std_logic; + + regs_i : in t_ep_out_registers + ); + +end ep_rx_early_address_match; + +architecture behavioral of ep_rx_early_address_match is + + signal hdr_offset : std_logic_vector(16 downto 0); + + signal at_ethertype : std_logic; + signal at_vid : std_logic; + signal is_tagged : std_logic; + signal pause_match_int : std_logic_vector(7 downto 0); + + signal comb_pcp_matches_hp : std_logic; + signal done_int : std_logic; + + signal pause_prio_mask : std_logic_vector(7 downto 0); + signal match_pause_req : std_logic; + signal match_is_pause : std_logic; + signal is_perprio_pause : std_logic; + signal match_pause_quanta : std_logic_vector(15 downto 0); + + function f_compare_slv (a : std_logic_vector; b : std_logic_vector) return std_logic is + begin + if(a = b) then + return '1'; + else + return '0'; + end if; + end f_compare_slv; + + + +begin -- behavioral + + at_ethertype <= hdr_offset(5) and snk_fab_i.dvalid; + at_vid <= hdr_offset(7) and snk_fab_i.dvalid and is_tagged; + + src_fab_o <= snk_fab_i; + + p_hdr_offset_sreg : process(clk_rx_i) + begin + if rising_edge(clk_rx_i) then + if (rst_n_rx_i = '0' or snk_fab_i.sof = '1') then + hdr_offset(hdr_offset'left downto 1) <= (others => '0'); + hdr_offset(0) <= '1'; + elsif(snk_fab_i.dvalid = '1') then + hdr_offset <= hdr_offset(hdr_offset'left-1 downto 0) & '0'; + end if; + end if; + end process; + + p_match_pause : process(clk_rx_i) + begin + if rising_edge(clk_rx_i) then + if rst_n_rx_i = '0' or snk_fab_i.sof = '1' then + pause_match_int <= (others => '0'); + match_pause_quanta <= (others => '0'); + match_is_pause <= '0'; + pause_prio_mask <= (others => '0'); + match_pause_req <= '0'; + is_perprio_pause <= '0'; + else + if(snk_fab_i.dvalid = '1') then + if(hdr_offset(0) = '1') then + pause_match_int (0) <= f_compare_slv(snk_fab_i.data, x"0180"); + end if; + if(hdr_offset(1) = '1') then + pause_match_int (1) <= f_compare_slv(snk_fab_i.data, x"c200"); + end if; + if(hdr_offset(2) = '1') then + pause_match_int (2) <= f_compare_slv(snk_fab_i.data, x"0001"); + end if; +-- if(hdr_offset(3) = '1') then +-- pause_match_int (3) <= f_compare_slv(snk_fab_i.data, regs_i.mach_o); +-- end if; +-- if(hdr_offset(4) = '1') then +-- pause_match_int (4) <= f_compare_slv(snk_fab_i.data, regs_i.macl_o(31 downto 16)); +-- end if; +-- if(hdr_offset(5) = '1') then +-- pause_match_int (5) <= f_compare_slv(snk_fab_i.data, regs_i.macl_o(15 downto 0)); +-- end if; + if(hdr_offset(6) = '1') then + pause_match_int (3) <= f_compare_slv(snk_fab_i.data, x"8808"); + end if; + if(hdr_offset(7) = '1') then + pause_match_int (4) <= f_compare_slv(snk_fab_i.data, x"0001"); -- 802.3 PAUSE + pause_match_int (5) <= f_compare_slv(snk_fab_i.data, x"0101"); -- 802.1Q PAUSE (per-prio) + end if; + if(hdr_offset(8) = '1') then + if(f_compare_slv(pause_match_int, b"0001_1111") = '1') then -- 802.3 PAUSE + + match_is_pause <= '1'; -- to indicate that frame shall be dropped + + if(regs_i.fcr_rxpause_o = '1') then + match_pause_req <= '1'; + match_pause_quanta <= snk_fab_i.data; + pause_prio_mask <= (others => '1'); + end if; + + elsif(f_compare_slv(pause_match_int, b"0010_1111") = '1') then -- 802.1Q PAUSE (per-prio) + + match_is_pause <= '1'; -- to indicate that frame shall be dropped + + if(regs_i.fcr_rxpause_802_1q_o = '1') then + pause_prio_mask <= snk_fab_i.data(7 downto 0); + is_perprio_pause <= '1'; + end if; + + end if; + end if; + if (is_perprio_pause ='1' and ((hdr_offset(16 downto 9) and pause_prio_mask) /= b"0000_0000")) then + if(snk_fab_i.data > match_pause_quanta) then + match_pause_quanta <= snk_fab_i.data; + end if; + end if; + if(hdr_offset(16) = '1' and is_perprio_pause = '1') then + match_pause_req <= '1'; + end if; + end if; + end if; + end if; + end process; + + match_is_pause_o <= match_is_pause; + match_pause_prio_mask_o <= pause_prio_mask; + match_pause_quanta_o <= match_pause_quanta; + + gen_with_early_hp_det: if(g_early_hp_detection) generate + -- ML: the p_match_hp is not used, instead identification of HP is done in RTU + p_match_hp : process(clk_rx_i) + variable index : integer; + begin + + if rising_edge(clk_rx_i) then + index := to_integer(unsigned(snk_fab_i.data(15 downto 13))); + + if rst_n_rx_i = '0' or snk_fab_i.sof = '1' then + is_tagged <= '0'; + match_is_hp_o <= '0'; + else + if(at_ethertype = '1') then + is_tagged <= f_compare_slv(snk_fab_i.data, x"8100"); + end if; + + if (at_vid = '1') then + if(regs_i.rfcr_a_hp_o = '1' and regs_i.rfcr_hpap_o(index) = '1' and is_tagged = '1') then + match_is_hp_o <= '1'; + else + match_is_hp_o <= '0'; + end if; + end if; + end if; + end if; + end process; + end generate gen_with_early_hp_det; + + gen_without_early_hp_det: if(not g_early_hp_detection) generate + match_is_hp_o <='0'; + end generate gen_without_early_hp_det; + + p_gen_done : process(clk_rx_i) + begin + if rising_edge(clk_rx_i) then + if rst_n_rx_i = '0' or snk_fab_i.sof = '1' then + done_int <= '0'; + else + if hdr_offset(8) = '1' or snk_fab_i.error = '1' then + done_int <= '1'; + end if; + end if; + end if; + end process; + + U_sync_done : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_sys_i, + data_i => done_int, + ppulse_o => match_done_o); + + U_sync_pause : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_sys_i, + data_i => match_pause_req, + ppulse_o => match_pause_p_o); + +end behavioral; + + + + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_oob_insert.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_oob_insert.vhd new file mode 100644 index 000000000..4fbaf7596 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_oob_insert.vhd @@ -0,0 +1,171 @@ +------------------------------------------------------------------------------- +-- Title : RX OOB inserter +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : ep_rx_oob_insert.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Platform : FPGA-generic +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2011 - 2017 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.gencores_pkg.all; -- for gc_crc_gen +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; +use work.ep_wbgen2_pkg.all; +use work.wr_fabric_pkg.all; + + +entity ep_rx_oob_insert is + port(clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + + regs_i : in t_ep_out_registers + ); + +end ep_rx_oob_insert; + +architecture behavioral of ep_rx_oob_insert is + + type t_state is (WAIT_OOB, OOB); + signal state : t_state; + + signal src_dreq_d0 : std_logic; + + --component chipscope_ila + -- port ( + -- CONTROL : inout std_logic_vector(35 downto 0); + -- CLK : in std_logic; + -- TRIG0 : in std_logic_vector(31 downto 0); + -- TRIG1 : in std_logic_vector(31 downto 0); + -- TRIG2 : in std_logic_vector(31 downto 0); + -- TRIG3 : in std_logic_vector(31 downto 0)); + --end component; + + --component chipscope_icon + -- port ( + -- CONTROL0 : inout std_logic_vector (35 downto 0)); + --end component; + + --signal CONTROL : std_logic_vector(35 downto 0); + --signal CLK : std_logic; + --signal TRIG0 : std_logic_vector(31 downto 0); + --signal TRIG1 : std_logic_vector(31 downto 0); + --signal TRIG2 : std_logic_vector(31 downto 0); + --signal TRIG3 : std_logic_vector(31 downto 0); + +begin + --chipscope_ila_1 : chipscope_ila + -- port map ( + -- CONTROL => CONTROL, + -- CLK => clk_sys_i, + -- TRIG0 => TRIG0, + -- TRIG1 => TRIG1, + -- TRIG2 => TRIG2, + -- TRIG3 => TRIG3); + + --chipscope_icon_1 : chipscope_icon + -- port map ( + -- CONTROL0 => CONTROL); + + --TRIG0(15 downto 0) <= snk_fab_i.data; + --trig0(16) <= snk_fab_i.sof; + --trig0(17) <= snk_fab_i.eof; + --trig0(18) <= snk_fab_i.error; + --trig0(19) <= snk_fab_i.bytesel; + --trig0(20) <= snk_fab_i.has_rx_timestamp; + --trig0(21) <= snk_fab_i.dvalid; + --trig0(22) <= '1' when state = WAIT_OOB else '0'; + --trig0(24 downto 23) <= snk_fab_i.addr; + + snk_dreq_o <= src_dreq_i; + src_fab_o.sof <= snk_fab_i.sof; + src_fab_o.eof <= snk_fab_i.eof; + src_fab_o.ERROR <= snk_fab_i.ERROR; + src_fab_o.bytesel <= snk_fab_i.bytesel; + src_fab_o.has_rx_timestamp <= snk_fab_i.has_rx_timestamp; + src_fab_o.rx_timestamp_valid <= snk_fab_i.rx_timestamp_valid; + + p_comb_src : process (state, snk_fab_i, src_dreq_i, regs_i) + begin + + if(snk_fab_i.has_rx_timestamp = '1')then + src_fab_o.data <= c_WRF_OOB_TYPE_RX & (not snk_fab_i.rx_timestamp_valid) & "000000" & regs_i.ecr_portid_o; + src_fab_o.dvalid <= '1'; + src_fab_o.addr <= c_WRF_OOB; + else + if(state = WAIT_OOB) then + src_fab_o.addr <= c_WRF_DATA; + else + src_fab_o.addr <= c_WRF_OOB; + end if; + src_fab_o.data <= snk_fab_i.data; + src_fab_o.dvalid <= snk_fab_i.dvalid; + end if; + end process; + + p_fsm : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' or regs_i.ecr_rx_en_o = '0' then + state <= WAIT_OOB; + else + + if(snk_fab_i.error = '1' or snk_fab_i.sof = '1') then + state <= WAIT_OOB; + else + + case state is + when WAIT_OOB => + if(snk_fab_i.has_rx_timestamp = '1') then + state <= OOB; + end if; + + when OOB => + if(snk_fab_i.eof = '1') then + state <= WAIT_OOB; + end if; + + end case; + end if; + end if; + end if; + end process; + + +end behavioral; + + + + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_path.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_path.vhd new file mode 100644 index 000000000..7398828f2 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_path.vhd @@ -0,0 +1,515 @@ +------------------------------------------------------------------------------- +-- Title : Gigabit Ethernet reception pipeline +-- Project : White Rabbit MAC/Endpoint +------------------------------------------------------------------------------- +-- File : ep_rx_path.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2009-06-22 +-- Last update: 2017-02-02 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: RX path unit: +-- - provides elastic buffering between RX and system clock +-- - checks frame CRC and size +-- - inserts/removes 802.1q headers when necessary +-- - parses packet headers and generates RTU requests +-- - performs programmable packet inspection and classifying +-- - distinguishes between HP and non-HP frames +-- - issues RTU requests +-- - embeds RX OOB block with timestamp information +-- +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2009-2011 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2009-06-22 0.1 twlostow Created +-- 2011-10-18 0.5 twlostow WB rev B4 - compatible data path +------------------------------------------------------------------------------ + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.gencores_pkg.all; +use work.genram_pkg.all; +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; +use work.ep_wbgen2_pkg.all; +use work.wr_fabric_pkg.all; + +entity ep_rx_path is + generic ( + g_with_vlans : boolean := true; + g_with_dpi_classifier : boolean := true; + g_with_rtu : boolean := true; + g_with_rx_buffer : boolean := true; + g_with_early_match : boolean := false; + g_rx_buffer_size : integer := 1024; + g_use_new_crc : boolean := false); + port ( + clk_sys_i : in std_logic; + clk_rx_i : in std_logic; + rst_n_sys_i : in std_logic; + rst_n_rx_i : in std_logic; + +-- physical coding sublayer (PCS) interface + pcs_fab_i : in t_ep_internal_fabric; + pcs_fifo_almostfull_o : out std_logic; + pcs_busy_i : in std_logic; + +-- Wishbone I/O + src_wb_o : out t_wrf_source_out; + src_wb_i : in t_wrf_source_in; + +-- flow control signals + fc_pause_p_o : out std_logic; + fc_pause_quanta_o : out std_logic_vector(15 downto 0); + fc_pause_prio_mask_o : out std_logic_vector(7 downto 0); + fc_buffer_occupation_o : out std_logic_vector(7 downto 0); + +-- RMON/statistic counters signals + rmon_o : out t_rmon_triggers; + regs_i : in t_ep_out_registers; + regs_o : out t_ep_in_registers; + +-- info for TRU module + pfilter_pclass_o : out std_logic_vector(7 downto 0); + pfilter_drop_o : out std_logic; + pfilter_done_o : out std_logic; + +------------------------------------------------------------------------------- +-- RTU interface +------------------------------------------------------------------------------- + + rtu_rq_o : out t_ep_internal_rtu_request; + rtu_full_i : in std_logic; + rtu_rq_valid_o : out std_logic; + rtu_rq_abort_o : out std_logic; + + nice_dbg_o : out t_dbg_ep_rxpath + ); +end ep_rx_path; + +architecture behavioral of ep_rx_path is + + type t_rx_deframer_state is (RXF_IDLE, RXF_DATA, RXF_FLUSH_STALL, RXF_FINISH_CYCLE, RXF_THROW_ERROR); + + signal state : t_rx_deframer_state; + + signal gap_cntr : unsigned(3 downto 0); + + -- new sigs + signal counter : unsigned(7 downto 0); + + signal rxdata_saved : std_logic_vector(15 downto 0); + signal next_hdr : std_logic; + signal is_pause : std_logic; + + signal data_firstword : std_logic; + + + signal flush_stall : std_logic; + signal stb_int : std_logic; + + signal fab_int : t_ep_internal_fabric; + signal dreq_int : std_logic; + + signal ack_count : unsigned(7 downto 0); + signal src_out_int : t_wrf_source_out; + + signal tmp_sel : std_logic; + signal tmp_dat : std_logic_vector(15 downto 0); + + + signal fab_pipe : t_fab_pipe(0 to 9); + signal dreq_pipe : std_logic_vector(9 downto 0); + + signal ematch_done : std_logic; + signal ematch_is_hp : std_logic; + signal ematch_is_pause : std_logic; + signal fc_pause_p : std_logic; + + signal pfilter_pclass : std_logic_vector(7 downto 0); + signal pfilter_drop : std_logic; + signal pfilter_done : std_logic; + + signal vlan_tclass : std_logic_vector(2 downto 0); + signal vlan_vid : std_logic_vector(11 downto 0); + signal vlan_tag_done : std_logic; + signal vlan_is_tagged : std_logic; + + signal pcs_fifo_almostfull : std_logic; + signal mbuf_rd, mbuf_valid, mbuf_we, mbuf_pf_drop, mbuf_is_hp : std_logic; + signal mbuf_is_pause, mbuf_full : std_logic; + signal mbuf_pf_class : std_logic_vector(7 downto 0); + signal rtu_rq_valid : std_logic; + signal stat_reg_mbuf_valid : std_logic; + + signal rxbuf_full : std_logic; + signal rxbuf_dropped : std_logic; + + signal src_wb_out : t_wrf_source_out; + signal src_wb_cyc_d0 : std_logic; + + signal rst_n_rx_match_buff : std_logic; + +begin -- behavioral + + fab_pipe(0) <= pcs_fab_i; + + fc_pause_p_o <= fc_pause_p; + gen_with_early_match : if(g_with_early_match) generate + U_early_addr_match : ep_rx_early_address_match + port map ( + clk_sys_i => clk_sys_i, + clk_rx_i => clk_rx_i, + rst_n_sys_i => rst_n_sys_i, + rst_n_rx_i => rst_n_rx_i, + snk_fab_i => fab_pipe(0), + src_fab_o => fab_pipe(1), + match_done_o => ematch_done, + match_is_hp_o => ematch_is_hp, + match_is_pause_o => ematch_is_pause, + match_pause_quanta_o => fc_pause_quanta_o, + match_pause_prio_mask_o => fc_pause_prio_mask_o, + match_pause_p_o => fc_pause_p, + regs_i => regs_i); + end generate gen_with_early_match; + + gen_without_early_match : if(not g_with_early_match) generate + fab_pipe(1) <= fab_pipe(0); + ematch_done <= '0'; + ematch_is_hp <= '0'; + ematch_is_pause <= '0'; + fc_pause_quanta_o <= (others =>'0'); + fc_pause_prio_mask_o <= (others =>'0'); + fc_pause_p <= '0'; + end generate gen_without_early_match; + + gen_with_packet_filter : if(g_with_dpi_classifier) generate + U_packet_filter : ep_packet_filter + port map ( + clk_sys_i => clk_sys_i, + clk_rx_i => clk_rx_i, + rst_n_sys_i => rst_n_sys_i, + rst_n_rx_i => rst_n_rx_i, + + snk_fab_i => fab_pipe(1), + src_fab_o => fab_pipe(2), + done_o => pfilter_done, + pclass_o => pfilter_pclass, + drop_o => pfilter_drop, + regs_i => regs_i); + end generate gen_with_packet_filter; + + gen_without_packet_filter : if(not g_with_dpi_classifier) generate + fab_pipe(2) <= fab_pipe(1); + pfilter_drop <= '0'; + pfilter_done <= '1'; + pfilter_pclass <= (others => '0'); + end generate gen_without_packet_filter; + + process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if (rst_n_sys_i = '0') then + mbuf_we <= '0'; + -- if rx_buffer has dropped a frame (e.g. because it was full) we + -- shouldn't store pfilter decision in the mbuf as well + elsif( ((ematch_done='1' and g_with_early_match) or + (pfilter_done='1' and g_with_dpi_classifier)) and + rxbuf_dropped='0') then + mbuf_we <= '1'; + elsif(mbuf_rd = '1' or mbuf_full = '0') then + mbuf_we <= '0'; + end if; + end if; + end process; + + gen_with_match_buff: if( g_with_early_match or g_with_dpi_classifier) generate + U_Sync_Rst_match_buff : gc_sync_ffs + port map ( + clk_i => clk_sys_i, + rst_n_i => '1', + data_i => rst_n_rx_i, + synced_o => rst_n_rx_match_buff); + + U_match_buffer : generic_shiftreg_fifo + generic map ( + g_data_width => 8 + 1 + 1 + 1, + g_size => 16) + port map ( + rst_n_i => rst_n_rx_match_buff, + clk_i => clk_sys_i, + d_i (0) => ematch_is_hp, + d_i (1) => ematch_is_pause, + d_i (2) => pfilter_drop, + d_i (10 downto 3) => pfilter_pclass, + + we_i => mbuf_we, + q_o (0) => mbuf_is_hp, + q_o (1) => mbuf_is_pause, + q_o (2) => mbuf_pf_drop, + q_o (10 downto 3) => mbuf_pf_class, + + rd_i => mbuf_rd, + full_o => mbuf_full, + q_valid_o => mbuf_valid); + end generate; + + gen_without_match_buf: if(not (g_with_early_match or g_with_dpi_classifier)) generate + mbuf_is_hp <= '0'; + mbuf_is_pause <= '0'; + mbuf_pf_drop <= '0'; + mbuf_pf_class <= (others=>'0'); + mbuf_full <= '0'; + mbuf_valid <= '1'; + end generate; + + -- don't block ep_rx_status_reg_insert when pfilter is disabled and early + -- match is not used + stat_reg_mbuf_valid <= '1' when (not g_with_early_match and g_with_dpi_classifier + and regs_i.pfcr0_enable_o='0') else + mbuf_valid; + + U_Rx_Clock_Align_FIFO : ep_clock_alignment_fifo + generic map ( + g_size => 128, + g_almostfull_threshold => 112) + port map ( + rst_n_rd_i => rst_n_sys_i, + rst_n_wr_i => rst_n_rx_i, + clk_wr_i => clk_rx_i, + clk_rd_i => clk_sys_i, + dreq_i => dreq_pipe(3), + fab_i => fab_pipe(2), + fab_o => fab_pipe(3), + full_o => nice_dbg_o.pcs_fifo_full, + empty_o => nice_dbg_o.pcs_fifo_empty, + almostfull_o => pcs_fifo_almostfull, + pass_threshold_i => std_logic_vector(to_unsigned(32, 7))); -- fixme: add + -- register + pcs_fifo_almostfull_o <= pcs_fifo_almostfull; + + U_Insert_OOB : ep_rx_oob_insert + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_sys_i, + snk_fab_i => fab_pipe(3), + snk_dreq_o => dreq_pipe(3), + src_dreq_i => dreq_pipe(4), + src_fab_o => fab_pipe(4), + regs_i => regs_i); + + U_crc_size_checker : ep_rx_crc_size_check + generic map ( + g_use_new_crc => g_use_new_crc) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_sys_i, + snk_fab_i => fab_pipe(4), + snk_dreq_o => dreq_pipe(4), + src_dreq_i => dreq_pipe(5), + src_fab_o => fab_pipe(5), + regs_i => regs_i, + rmon_pcs_err_o => rmon_o.rx_pcs_err, + rmon_giant_o => rmon_o.rx_giant, + rmon_runt_o => rmon_o.rx_runt, + rmon_crc_err_o => rmon_o.rx_crc_err); + + gen_with_vlan_unit : if(g_with_vlans) generate + U_vlan_unit : ep_rx_vlan_unit + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_sys_i, + snk_fab_i => fab_pipe(5), + snk_dreq_o => dreq_pipe(5), + src_fab_o => fab_pipe(6), + src_dreq_i => dreq_pipe(6), + tclass_o => vlan_tclass, + vid_o => vlan_vid, + tag_done_o => vlan_tag_done, + is_tagged_o => vlan_is_tagged, + regs_i => regs_i, + regs_o => regs_o); + end generate gen_with_vlan_unit; + + + gen_without_vlan_unit : if(not g_with_vlans) generate + fab_pipe(6) <= fab_pipe(5); + dreq_pipe(5) <= dreq_pipe(6); + vlan_tclass <= (others => '0'); + vlan_vid <= (others => '0'); + vlan_tag_done <= '0'; + vlan_is_tagged <= '0'; + regs_o <= c_ep_in_registers_init_value; + end generate gen_without_vlan_unit; + + U_RTU_Header_Extract : ep_rtu_header_extract + generic map ( + g_with_rtu => g_with_rtu) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_sys_i, + snk_fab_i => fab_pipe(6), + snk_dreq_o => dreq_pipe(6), + src_fab_o => fab_pipe(7), + src_dreq_i => dreq_pipe(7), + mbuf_is_pause_i => mbuf_is_pause, -- this module is in the pipe before ep_rx_status_reg_insert, + -- however, we know that mbuf_is_pause is valid when it + -- is used by this module -- this is because blocks the pipe + -- untill mbuf_valid is HIGH, and rtu_rq_valid_o is inserted HIGH + -- at the end of the header... (clear ??:) + vlan_class_i => vlan_tclass, + vlan_vid_i => vlan_vid, + vlan_tag_done_i => vlan_tag_done, + vlan_is_tagged_i => vlan_is_tagged, + + rmon_drp_at_rtu_full_o => rmon_o.rx_drop_at_rtu_full, + + rtu_rq_o => rtu_rq_o, + rtu_full_i => rtu_full_i, + rtu_rq_abort_o => rtu_rq_abort_o, + rtu_rq_valid_o => rtu_rq_valid, + rxbuf_full_i => rxbuf_full); + + gen_with_rx_buffer : if g_with_rx_buffer generate + U_Rx_Buffer : ep_rx_buffer + generic map ( + g_size => g_rx_buffer_size, + g_with_fc => false) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_sys_i, + snk_fab_i => fab_pipe(7), + snk_dreq_o => dreq_pipe(7), + src_fab_o => fab_pipe(8), + src_dreq_i => dreq_pipe(8), + level_o => fc_buffer_occupation_o, + full_o => rxbuf_full, + drop_req_i => mbuf_we, -- if mbuf_we is high that means it waits to be + -- stored in mbuf => mbuf is probably full so we + -- should drop this frame + dropped_o => rxbuf_dropped, + regs_i => regs_i); + end generate gen_with_rx_buffer; + + gen_without_rx_buffer : if (not g_with_rx_buffer) generate + fab_pipe(8) <= fab_pipe(7); + dreq_pipe(7) <= dreq_pipe(8); + rxbuf_full <= '0'; + end generate gen_without_rx_buffer; + + U_Gen_Status : ep_rx_status_reg_insert + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_sys_i, + snk_fab_i => fab_pipe(8), + snk_dreq_o => dreq_pipe(8), + src_fab_o => fab_pipe(9), + src_dreq_i => dreq_pipe(9), + mbuf_valid_i => stat_reg_mbuf_valid, + mbuf_ack_o => mbuf_rd, + mbuf_drop_i => mbuf_pf_drop, + mbuf_pclass_i => mbuf_pf_class, + mbuf_is_hp_i => mbuf_is_hp, + mbuf_is_pause_i => mbuf_is_pause, + rmon_pfilter_drop_o => rmon_o.rx_pfilter_drop); + + U_RX_Wishbone_Master : ep_rx_wb_master + generic map ( + g_ignore_ack => true) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_sys_i, + snk_fab_i => fab_pipe(9), + snk_dreq_o => dreq_pipe(9), + src_wb_i => src_wb_i, + src_wb_o => src_wb_out + ); + + src_wb_o <= src_wb_out; + + -- direct output of packet filter data (for TRU) + pfilter_pclass_o <= pfilter_pclass; + pfilter_drop_o <= pfilter_drop; + pfilter_done_o <= pfilter_done; + + rtu_rq_valid_o <= rtu_rq_valid; + ----------------------------------------- + -- RMON events + ----------------------------------------- + rmon_o.rx_pause <= fc_pause_p; + GEN_PCLASS_EVT: for i in 0 to 7 generate + rmon_o.rx_pclass(i) <= pfilter_pclass(i) and pfilter_done; + end generate; + + rmon_o.rx_tclass(0) <= rtu_rq_valid when (vlan_tclass = "000" and vlan_is_tagged = '1') else '0'; + rmon_o.rx_tclass(1) <= rtu_rq_valid when (vlan_tclass = "001" and vlan_is_tagged = '1') else '0'; + rmon_o.rx_tclass(2) <= rtu_rq_valid when (vlan_tclass = "010" and vlan_is_tagged = '1') else '0'; + rmon_o.rx_tclass(3) <= rtu_rq_valid when (vlan_tclass = "011" and vlan_is_tagged = '1') else '0'; + rmon_o.rx_tclass(4) <= rtu_rq_valid when (vlan_tclass = "100" and vlan_is_tagged = '1') else '0'; + rmon_o.rx_tclass(5) <= rtu_rq_valid when (vlan_tclass = "101" and vlan_is_tagged = '1') else '0'; + rmon_o.rx_tclass(6) <= rtu_rq_valid when (vlan_tclass = "110" and vlan_is_tagged = '1') else '0'; + rmon_o.rx_tclass(7) <= rtu_rq_valid when (vlan_tclass = "111" and vlan_is_tagged = '1') else '0'; + + GEN_DBG: for i in 0 to 9 generate + nice_dbg_o.fab_pipe(i) <= fab_pipe(i); + nice_dbg_o.dreq_pipe(i)<= dreq_pipe(i); + end generate GEN_DBG; + + nice_dbg_o.pcs_fifo_afull <= pcs_fifo_almostfull; + nice_dbg_o.rxbuf_full <= rxbuf_full; + + process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if (rst_n_sys_i = '0') then + src_wb_cyc_d0 <= '0'; + else + src_wb_cyc_d0 <= src_wb_out.cyc; + end if; + end if; + end process; + + rmon_o.rx_frame <= '1' when (src_wb_out.cyc = '1' and src_wb_cyc_d0 = '0') else + '0'; + + -- drive unused signals and outputs + dreq_pipe(2 downto 0) <= (others => '0'); + rmon_o.rx_sync_lost <= '0'; + rmon_o.rx_invalid_code <= '0'; + rmon_o.rx_overrun <= '0'; + rmon_o.rx_ok <= '0'; + rmon_o.rx_buffer_overrun <= '0'; + rmon_o.rx_rtu_overrun <= '0'; + rmon_o.rx_path_timing_failure <= '0'; + rmon_o.tx_pause <= '0'; + rmon_o.tx_underrun <= '0'; + rmon_o.tx_frame <= '0'; + +end behavioral; + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_pcs_16bit.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_pcs_16bit.vhd new file mode 100644 index 000000000..ea0fd8818 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_pcs_16bit.vhd @@ -0,0 +1,765 @@ +------------------------------------------------------------------------------- +-- Title : 1000BaseT/X MAC Endpoint - receive path PCS for 1000BaseX +-- Project : White Rabbit Switch +------------------------------------------------------------------------------- +-- File : ep_rx_pcs_16bit.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2009-06-16 +-- Last update: 2017-02-20 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Module implements the reception path for 1000BaseX PCS +-- (Physical Coding Sublayer) with native 16-bit datapath. +-- It provides synchronization between the PHY RX clock and system reference clock, +-- elastic buffering, preamble, SFD and other 8b10b patterns recognition. +-- It also generates deterministic timestamping pulses for RXed packets. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2011-2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2011-10-17 0.2 twlostow Virtex6 port +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.gencores_pkg.all; +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; + +entity ep_rx_pcs_16bit is + generic ( + g_simulation : boolean); + port ( +-- 62.5 MHz refclk divided by 2 + clk_sys_i : in std_logic; + +-- reset (refclk2-synchronous) + rst_n_i : in std_logic; + +-- reset (phy_rx_clk_i sync) + rst_rxclk_n_i : in std_logic; + + pcs_fifo_almostfull_i : in std_logic; +-- RX path busy indicator (active HI). +-- When asserted, the receiver is in the middle of reception of a frame + pcs_busy_o : out std_logic; +-- data FIFO output + pcs_fab_o : out t_ep_internal_fabric; + + + timestamp_trigger_p_a_o : out std_logic; -- strobe for RX timestamping + timestamp_i : in std_logic_vector(31 downto 0); + timestamp_stb_i: in std_logic; + timestamp_valid_i : in std_logic; + +------------------------------------------------------------------------------- +-- PHY interface +------------------------------------------------------------------------------- + + phy_rdy_i : in std_logic; + phy_rx_clk_i : in std_logic; + phy_rx_data_i : in std_logic_vector(15 downto 0); + phy_rx_k_i : in std_logic_vector(1 downto 0); + phy_rx_enc_err_i : in std_logic; + +------------------------------------------------------------------------------- +-- Wishbone registers +------------------------------------------------------------------------------- + + -- Receive control regsiter + mdio_mcr_reset_i : in std_logic; + mdio_mcr_pdown_i : in std_logic; + mdio_wr_spec_cal_crst_i : in std_logic; + mdio_wr_spec_rx_cal_stat_o : out std_logic; + + synced_o : out std_logic; + sync_lost_o : out std_logic; + + -- autonegotiation signals + an_rx_en_i : in std_logic; + an_rx_val_o : out std_logic_vector(15 downto 0); + an_rx_valid_o : out std_logic; + an_idle_match_o : out std_logic; + + -- RMON events + rmon_rx_overrun : out std_logic; + rmon_rx_inv_code : out std_logic; + rmon_rx_sync_lost : out std_logic; + + nice_dbg_o : out t_dbg_ep_rxpcs + ); + +end ep_rx_pcs_16bit; + +architecture behavioral of ep_rx_pcs_16bit is + +-- RX state machine definitions + type t_tbif_rx_state is (RX_NOFRAME, RX_CR, RX_SPD_PREAMBLE, RX_PAYLOAD, RX_EXTEND); + +-- size of the calibrration pattern detection counter. It counts up every time +-- a valid calibration pattern character is received and resets upon detecion +-- of non-calibration character. The pattern is validated when the counter +-- overflows (after 2**c_cal_pattern_counter_bits counts) + + function f_calc_pattern_counter_bits + return integer is + begin -- f_calc_pattern_counter_bits + if(g_simulation) then + return 8; -- use smaller calibration counter to + -- speed up the simulation + else + return 17; + end if; + end f_calc_pattern_counter_bits; + + function f_to_sl(x : boolean) return std_logic is + begin + if(x) then + return '1'; + else + return '0'; + end if; + end f_to_sl; + + + constant c_cal_pattern_counter_bits : integer := f_calc_pattern_counter_bits; + + component ep_sync_detect_16bit + port ( + rst_n_i : in std_logic; + rbclk_i : in std_logic; + en_i : in std_logic; + data_i : in std_logic_vector(15 downto 0); + k_i : in std_logic_vector(1 downto 0); + err_i : in std_logic; + synced_o : out std_logic; + cal_i : in std_logic); + end component; + + signal rst_n_rx : std_logic; + + signal rx_state : t_tbif_rx_state; + signal preamble_cntr : unsigned(2 downto 0); + signal rx_busy : std_logic; + signal rx_enable_synced : std_logic; + signal rx_rdreq : std_logic; + + -- 8b10b decoding and postprocessing signals + signal d_data : std_logic_vector(15 downto 0); + signal d_err, d_is_idle, d_is_spd_preamble : std_logic; + signal d_is_eof_extend, d_is_eof, d_is_extend : std_logic; + signal d_is_preamble, d_is_preamble_sfd : std_logic; + signal d_is_k : std_logic_vector(1 downto 0); + signal d_is_lcr : std_logic; + signal d_is_cal : std_logic; + +-- Synchronization detection FSM signals + signal rx_synced : std_logic; + signal rx_sync_lost_p : std_logic; + signal rx_sync_status : std_logic; + signal rx_sync_enable : std_logic; + +-- Autonegotiation control signals + signal an_rx_en_synced : std_logic; + + signal lcr_ready : std_logic; + signal lcr_prev_val : std_logic_vector(15 downto 0); + signal lcr_cur_val : std_logic_vector(15 downto 0); + signal lcr_final_val : std_logic_vector(15 downto 0); + signal lcr_validity_cntr : unsigned(1 downto 0); + + signal an_idle_cntr : unsigned(1 downto 0); + signal an_idle_match_int : std_logic; + +-- RMON counter pulses + signal rmon_rx_overrun_p_int : std_logic; + signal rmon_syncloss_p_int : std_logic; + signal rmon_invalid_code_p_int : std_logic; + +-- Misc. signals + signal cal_pattern_cntr : unsigned(c_cal_pattern_counter_bits-1 downto 0); + signal mdio_mcr_reset_synced : std_logic; + signal mdio_mcr_pdown_synced : std_logic; + + + signal pcs_valid_int : std_logic; + signal timestamp_pending : std_logic_vector(2 downto 0) := "000"; + +begin +------------------------------------------------------------------------------- +-- synchronizer chains for Wishbone-accessible control signals +------------------------------------------------------------------------------- + + U_sync_pcs_busy : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => '1', + data_i => rx_busy, + synced_o => pcs_busy_o, + npulse_o => open, + ppulse_o => open); + + U_sync_an_rx_enable : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => phy_rx_clk_i, + rst_n_i => rst_n_rx, + data_i => an_rx_en_i, + synced_o => an_rx_en_synced, + npulse_o => open, + ppulse_o => open); + + U_sync_mcr_reset : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => phy_rx_clk_i, + rst_n_i => '1', + data_i => mdio_mcr_reset_i, + synced_o => mdio_mcr_reset_synced, + npulse_o => open, + ppulse_o => open); + + U_sync_power_down : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => phy_rx_clk_i, + rst_n_i => '1', + data_i => mdio_mcr_pdown_i, + synced_o => mdio_mcr_pdown_synced, + npulse_o => open, + ppulse_o => open); + + rx_sync_enable <= not mdio_mcr_pdown_synced; + rst_n_rx <= rst_rxclk_n_i and not mdio_mcr_reset_synced and phy_rdy_i; + +------------------------------------------------------------------------------- +-- 802.3z Link Synchronization State Machine +------------------------------------------------------------------------------- + + U_SYNC_DET : ep_sync_detect_16bit + port map ( + rst_n_i => rst_n_rx, + rbclk_i => phy_rx_clk_i, + en_i => rx_sync_enable, + data_i => phy_rx_data_i, + k_i => phy_rx_k_i, + err_i => phy_rx_enc_err_i, + synced_o => rx_synced, + cal_i => d_is_cal); + + -- synchronizer chain for rx_synced signal, also serving as a loss-of-sync detector + U_sync_los : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => '1', + data_i => rx_synced, + synced_o => rx_sync_status, + npulse_o => rx_sync_lost_p, + ppulse_o => open); + + synced_o <= rx_sync_status; -- drive the PCS outputs + sync_lost_o <= rx_sync_lost_p; + +------------------------------------------------------------------------------- +-- Calibration pattern logic +------------------------------------------------------------------------------- + + -- process checks the presence of valid calibtaion pattern and controls the + -- state of CAL_STA bit in Receive Control Register. + -- + -- reads: phy_rx_data_i, mdio_wr_spec_cal_crst_i + -- writes: mdio_wr_spec_rx_cal_stat_o + -- + p_detect_cal : process(phy_rx_clk_i) + begin + if rising_edge(phy_rx_clk_i) then + if rst_n_rx = '0' then + cal_pattern_cntr <= (others => '0'); + d_is_cal <= '0'; + else + + d_is_cal <= f_to_sl(phy_rx_data_i = (c_k28_7 & c_k28_7) and phy_rx_k_i = "11"); + + if(d_is_cal = '1' and mdio_wr_spec_cal_crst_i = '0') then + +-- we've got c_cal_pattern_threshold valid calibration characters - indicate +-- that we're receiving a valid calibration pattern + if(cal_pattern_cntr(cal_pattern_cntr'high) = '1') then + mdio_wr_spec_rx_cal_stat_o <= '1'; + else + mdio_wr_spec_rx_cal_stat_o <= '0'; + cal_pattern_cntr <= cal_pattern_cntr + 1; + end if; +-- we've got a non-calibration character or the pattern detection has been reset + else + mdio_wr_spec_rx_cal_stat_o <= '0'; + cal_pattern_cntr <= (others => '0'); + end if; + end if; + end if; + end process; + + +------------------------------------------------------------------------------- +-- Clock adjustment FIFO +------------------------------------------------------------------------------- + + + -- process postprocesses the raw 8b10b decoder output (phy_rx_data_i, phy_rx_k_i, phy_rx_enc_err_ior) + -- providing 1-bit signals indicating various 8b10b control patterns + p_8b10b_postprocess : process(phy_rx_clk_i) + begin + if rising_edge(phy_rx_clk_i) then + + if(rst_n_rx = '0' or rx_synced = '0') then + d_data <= (others => '0'); + d_is_idle <= '0'; + d_is_k <= "00"; + d_is_spd_preamble <= '0'; + d_is_preamble_sfd <= '0'; + d_is_preamble <= '0'; + d_is_eof <= '0'; + d_is_extend <= '0'; + d_is_eof_extend <= '0'; + d_is_lcr <= '0'; + d_err <= '0'; + else + + d_data <= phy_rx_data_i; + d_is_k <= phy_rx_k_i; + + if(phy_rx_enc_err_i = '0') then + d_err <= '0'; + + + d_is_idle <= f_to_sl(phy_rx_data_i(15 downto 8) = c_K28_5 + and (phy_rx_data_i(7 downto 0) = c_d16_2 + or phy_rx_data_i(7 downto 0) = c_d5_6) + and phy_rx_k_i = "10"); + + + d_is_spd_preamble <= f_to_sl( + phy_rx_data_i(15 downto 8) = c_k27_7 + and phy_rx_data_i(7 downto 0) = c_preamble_char + and phy_rx_k_i = "10"); + + d_is_preamble <= f_to_sl( + phy_rx_data_i = c_preamble_char & c_preamble_char + and phy_rx_k_i = "00"); + + d_is_preamble_sfd <= f_to_sl( + phy_rx_data_i = c_preamble_char & c_preamble_sfd + and phy_rx_k_i = "00"); + +-- data + EPD + d_is_eof <= f_to_sl( + phy_rx_data_i(7 downto 0) = c_K29_7 + and phy_rx_k_i = "01"); + + -- EPD + extend + d_is_eof_extend <= f_to_sl( + phy_rx_data_i(15 downto 8) = c_K29_7 + and phy_rx_data_i(7 downto 0) = c_k23_7 + and phy_rx_k_i = "11"); + + d_is_extend <= f_to_sl( + phy_rx_data_i = c_K23_7 & c_K23_7 + and phy_rx_k_i = "11"); + + d_is_lcr <= f_to_sl( + phy_rx_data_i(15 downto 8) = c_K28_5 + and (phy_rx_data_i(7 downto 0) = c_d21_5 + or phy_rx_data_i(7 downto 0) = c_d2_2) + and phy_rx_k_i = "10"); + + +-- invalid code received? + else + d_err <= '1'; + d_is_idle <= 'X'; + d_is_spd_preamble <= 'X'; + d_is_preamble_sfd <= 'X'; + d_is_preamble <= 'X'; + d_is_eof <= 'X'; + d_is_extend <= 'X'; + d_is_eof_extend <= 'X'; + d_is_lcr <= 'X'; + end if; + end if; + end if; + end process; + +-- process: RBCLK-driven RX state machine. Implements the receive logic od 802.3z compliant +-- 1000BaseX PCS. +-- reads: almost everything +-- writes: almost everything + + + rx_fsm : process (phy_rx_clk_i) + begin + if rising_edge(phy_rx_clk_i) then + -- reset or PCS disabled + if(rst_n_rx = '0' or mdio_mcr_pdown_synced = '1') then + rx_state <= RX_NOFRAME; + rx_busy <= '0'; + + pcs_fab_o.sof <= '0'; + pcs_fab_o.eof <= '0'; + pcs_fab_o.error <= '0'; + pcs_fab_o.dvalid <= '0'; + pcs_fab_o.bytesel <= '0'; + pcs_fab_o.has_rx_timestamp <= '0'; + pcs_fab_o.data <= (others => 'X'); + + lcr_ready <= '0'; + lcr_cur_val <= (others => '0'); + lcr_prev_val <= (others => '0'); + -- lcr_final_val ===> DO NOT CLEAR on reset + lcr_validity_cntr <= (others => '0'); + an_idle_cntr <= (others => '0'); + an_idle_match_int <= '0'; + + rmon_rx_overrun_p_int <= '0'; + rmon_invalid_code_p_int <= '0'; + timestamp_trigger_p_a_o <= '0'; + timestamp_pending <= "000"; + else -- normal PCS operation + + -- clear the autogotiation variables if the autonegotiation is disabled + if(an_rx_en_synced = '0') then + lcr_ready <= '0'; + lcr_validity_cntr <= (others => '0'); + lcr_prev_val <= (others => '0'); + an_idle_cntr <= (others => '0'); + an_idle_match_int <= '0'; + end if; + +------------------------------------------------------------------------------- +-- Main RX PCS state machine +------------------------------------------------------------------------------- + case rx_state is + +------------------------------------------------------------------------------- +-- State NOFRAME: receiver is receiving IDLE pattern +------------------------------------------------------------------------------- + when RX_NOFRAME => + + preamble_cntr <= "011"; + pcs_fab_o.eof <= '0'; + pcs_fab_o.error <= '0'; + pcs_fab_o.bytesel <= '0'; + pcs_fab_o.has_rx_timestamp <= '0'; + + rx_busy <= '0'; + timestamp_trigger_p_a_o <= '0'; + + -- insert the RX timestamp into the FIFO + if(timestamp_pending /= "000") then + pcs_fab_o.dvalid <= '1'; + else + pcs_fab_o.dvalid <= '0'; + end if; + + if(timestamp_pending(0) = '1')then + pcs_fab_o.data <= timestamp_i(31 downto 16); + pcs_fab_o.eof <= '0'; + elsif(timestamp_pending(1) = '1')then + pcs_fab_o.data <= timestamp_i(15 downto 0); + pcs_fab_o.eof <= '0'; + elsif(timestamp_pending(2) = '1')then + pcs_fab_o.data <= (others => 'X'); + pcs_fab_o.eof <= '1'; + end if; + + timestamp_pending <= timestamp_pending(1 downto 0) & '0'; + + if (rx_synced = '0') then -- PCS is not synced: stay in NOFRAME state and ignore the incoming codes. + rx_state <= RX_NOFRAME; + else + + if(d_is_spd_preamble = '1') then -- we've got a Start-of-Packet Delimeter + if(pcs_fifo_almostfull_i = '0') then + rx_state <= RX_SPD_PREAMBLE; + else + rx_state <= RX_NOFRAME; + rmon_rx_overrun_p_int <= '1'; + end if; + end if; + + if (d_is_lcr = '1') then + rx_state <= RX_CR; + an_idle_match_int <= '0'; + an_idle_cntr <= (others => '0'); + rx_busy <= '1'; + end if; + + if(d_is_idle = '1') then + lcr_ready <= '0'; + an_idle_match_int <= '0'; + an_idle_cntr <= (others => '0'); + lcr_validity_cntr <= (others => '0'); + + if(an_idle_cntr = "11") then + an_idle_match_int <= '1'; + else + an_idle_cntr <= an_idle_cntr + 1; + end if; + rx_busy <= '0'; + end if; + end if; + +-- produce a pulse at every invalid 8b10b code. + rmon_invalid_code_p_int <= d_err; + +------------------------------------------------------------------------------- +-- States CR3/CR4: reception of LCR register value. +------------------------------------------------------------------------------- + when RX_CR => -- receives the 1st byte of Config_Reg and + -- checks if the subsequent Config_Reg + -- values are identical. + +-- an error? - abort the reception and go to NOFRAME state. + if(d_err = '1' or d_is_k /= "00" or rx_synced = '0') then + rx_state <= RX_NOFRAME; + rmon_invalid_code_p_int <= d_err; + + -- reset the Config_Reg value and mark it as invalid + lcr_ready <= '0'; + lcr_validity_cntr <= (others => '0'); + +-- check if the autonegotiation unit has enabled the reception of LCR + elsif (an_rx_en_synced = '1') then + lcr_prev_val <= lcr_cur_val; + +-- check for 3 subsequent Configuration sequences with identical Config_Reg value + if(lcr_cur_val = lcr_prev_val) then + if(lcr_validity_cntr = "10") then +-- we've got 3? Indicate that we have received valid Config_Reg. + lcr_ready <= '1'; + lcr_final_val <= lcr_cur_val; + else + lcr_validity_cntr <= lcr_validity_cntr + 1; + lcr_ready <= '0'; + end if; + else +-- the subsequent values of Config_Reg are different? + lcr_validity_cntr <= (others => '0'); + lcr_ready <= '0'; + end if; + + lcr_cur_val <= d_data(7 downto 0) & d_data(15 downto 8); + end if; + + rx_state <= RX_NOFRAME; + +------------------------------------------------------------------------------- +-- State SPD_PREAMBLE: we've received an Start-Of-Packet delimeter. Check for +-- the valid preamble. +------------------------------------------------------------------------------- + when RX_SPD_PREAMBLE => + + rx_busy <= '1'; + + if(d_err = '1' or rx_synced = '0') then -- check for encoding errors. + rx_state <= RX_NOFRAME; + rmon_invalid_code_p_int <= d_err; + else + + -- keep looking for Ethernet SFD char (0xd5). If it occurs on + -- the right position, start receiving the frame payload + if d_is_preamble_sfd = '1' then +-- generate the RX timestamp pulse + timestamp_trigger_p_a_o <= '1'; + +-- we've got an SFD at proper offset from the beginning of the preamble + if (preamble_cntr = "010") or (preamble_cntr = "001") then + +-- indicate a start-of-packet condition in the RX FIFO and enable writing to +-- the FIFO. + pcs_fab_o.sof <= '1'; + rx_state <= RX_PAYLOAD; + end if; + + elsif (d_is_preamble = '1') then + preamble_cntr <= preamble_cntr - 1; + -- got duplicated SPD code? + elsif (d_is_spd_preamble = '1') then + preamble_cntr <= "111"; + else + rx_state <= RX_NOFRAME; -- not a preamble sequence? + rmon_invalid_code_p_int <= '1'; + end if; + + if(preamble_cntr = "000") then -- too long preamble - abort reception + rx_state <= RX_NOFRAME; + end if; + end if; + +------------------------------------------------------------------------------- +-- State PAYLOAD: receives the full frame payload (including the MAC header and +-- the CRC) +------------------------------------------------------------------------------- + + when RX_PAYLOAD => + + pcs_fab_o.sof <= '0'; + pcs_fab_o.eof <= '0'; + pcs_fab_o.has_rx_timestamp <= '0'; + pcs_fab_o.data <= d_data; + + -- check for errors. + if (d_err = '1' or rx_synced = '0' or pcs_fifo_almostfull_i = '1' + or (d_is_k /= "00" and d_is_eof_extend = '0' and d_is_eof = '0')) then + + -- indicate an errorneous termination of the current frame in the + -- RX FIFO + pcs_fab_o.error <= '1'; + pcs_fab_o.dvalid <= '0'; + pcs_fab_o.bytesel <= 'X'; + + rmon_invalid_code_p_int <= d_err; + rmon_rx_overrun_p_int <= pcs_fifo_almostfull_i; + + rx_state <= RX_NOFRAME; + elsif d_is_eof = '1' or d_is_eof_extend = '1' then + + pcs_fab_o.error <= '0'; + + if d_is_eof = '1' then -- got EPD at even position + pcs_fab_o.bytesel <= '1'; + pcs_fab_o.dvalid <= '1'; + rx_state <= RX_EXTEND; + else + pcs_fab_o.bytesel <= '0'; + pcs_fab_o.dvalid <= '0'; + rx_state <= RX_EXTEND; + end if; + + else + pcs_fab_o.bytesel <= '0'; + pcs_fab_o.error <= '0'; + pcs_fab_o.dvalid <= '1'; + end if; + + +------------------------------------------------------------------------------- +-- State EXTEND: receive carrier extension +------------------------------------------------------------------------------- + + when RX_EXTEND => + + timestamp_trigger_p_a_o <= '0'; + pcs_fab_o.dvalid <= '0'; + + if d_is_extend = '1' then -- got carrier extend. Just keep + -- receiving it. + rx_state <= RX_EXTEND; + pcs_fab_o.eof <= '0'; + pcs_fab_o.error <= '0'; + elsif d_is_idle = '1' then -- got comma, real end-of-frame + -- indicate the correct ending of the current frame in the RX FIFO + pcs_fab_o.eof <= not timestamp_stb_i; + pcs_fab_o.error <= '0'; + pcs_fab_o.has_rx_timestamp <= timestamp_stb_i; + timestamp_pending <= (others => timestamp_stb_i); + + rx_state <= RX_NOFRAME; + else + -- got anything else than comma (for example, the /V/ code): + pcs_fab_o.error <= '1'; + rmon_invalid_code_p_int <= '1'; + rx_state <= RX_NOFRAME; + end if; + end case; + end if; + end if; + end process; + + an_rx_val_o <= lcr_final_val; + + U_sync_an_rx_ready : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + data_i => lcr_ready, + synced_o => an_rx_valid_o, + npulse_o => open, + ppulse_o => open); + + U_sync_an_idle_match : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + data_i => an_idle_match_int, + synced_o => an_idle_match_o, + npulse_o => open, + ppulse_o => open); + + U_ext_rmon_1 : gc_extend_pulse + generic map ( + g_width => 3) + port map ( + clk_i => phy_rx_clk_i, + rst_n_i => rst_n_rx, + pulse_i => rmon_invalid_code_p_int, + extended_o => rmon_rx_inv_code); + + U_ext_rmon_2 : gc_extend_pulse + generic map ( + g_width => 3) + port map ( + clk_i => phy_rx_clk_i, + rst_n_i => rst_n_rx, + pulse_i => rmon_rx_overrun_p_int, + extended_o => rmon_rx_overrun); + +-- drive the "RX PCS Sync Lost" event counter + rmon_rx_sync_lost <= rx_sync_lost_p and (not mdio_mcr_pdown_i); + + pcs_fab_o.rx_timestamp_valid <= timestamp_valid_i; + + nice_dbg_o.fsm <= "000" when (rx_state = RX_NOFRAME) else + "001" when (rx_state = RX_CR) else + "010" when (rx_state = RX_SPD_PREAMBLE) else + "011" when (rx_state = RX_PAYLOAD) else + "100" when (rx_state = RX_EXTEND) else + "111"; + +end behavioral; + + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_pcs_8bit.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_pcs_8bit.vhd new file mode 100644 index 000000000..9310cf36a --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_pcs_8bit.vhd @@ -0,0 +1,858 @@ +------------------------------------------------------------------------------- +-- Title : 1000BaseT/X MAC Endpoint - receive path PCS for 1000BaseX +-- Project : White Rabbit Switch +------------------------------------------------------------------------------- +-- File : ep_rx_pcs_tbi.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2009-06-16 +-- Last update: 2017-02-20 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Module implements the reception path for 1000BaseX PCS +-- (Physical Coding Sublayer). It provides synchronization between the PHY RX +-- clock and system reference clock, elastic buffering, preamble, SFD and other +-- 8b10b patterns recognition. It also generates deterministic timestamping +-- pulses for RXed packets. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2009-2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2009-06-16 0.1 twlostow Created (no error propagation supported yet) +-- 2010-10-25 0.2 twlostow Names updated to comply with the coding, +-- added some comments +-- 2010-11-18 0.4 twlostow Added support for Xilinx GTP transceivers. +-- 2011-02-07 0.5 twlostow Tested on Spartan6 GTP +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.gencores_pkg.all; +use work.genram_pkg.all; +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; + +entity ep_rx_pcs_8bit is + generic ( + g_simulation : boolean); + port ( +-- 62.5 MHz refclk divided by 2 + clk_sys_i : in std_logic; + +-- reset (refclk2-synchronous) + rst_n_i : in std_logic; + +-- reset (phy_rx_clk_i sync) + rst_rxclk_n_i : in std_logic; + + pcs_fifo_almostfull_i : in std_logic; +-- RX path busy indicator (active HI). +-- When asserted, the receiver is in the middle of reception of a frame + pcs_busy_o : out std_logic; +-- data FIFO output + pcs_fab_o : out t_ep_internal_fabric; + + + timestamp_trigger_p_a_o : out std_logic; -- strobe for RX timestamping + + timestamp_i : in std_logic_vector(31 downto 0); + timestamp_stb_i : in std_logic; + timestamp_valid_i : in std_logic; + +------------------------------------------------------------------------------- +-- PHY interface +------------------------------------------------------------------------------- + + phy_rdy_i : in std_logic; + phy_rx_clk_i : in std_logic; + phy_rx_data_i : in std_logic_vector(7 downto 0); + phy_rx_k_i : in std_logic; + phy_rx_enc_err_i : in std_logic; + +------------------------------------------------------------------------------- +-- Wishbone registers +------------------------------------------------------------------------------- + + -- Receive control regsiter + mdio_mcr_reset_i : in std_logic; + mdio_mcr_pdown_i : in std_logic; + mdio_wr_spec_cal_crst_i : in std_logic; + mdio_wr_spec_rx_cal_stat_o : out std_logic; + + synced_o : out std_logic; + sync_lost_o : out std_logic; + + -- autonegotiation signals + an_rx_en_i : in std_logic; + an_rx_val_o : out std_logic_vector(15 downto 0); + an_rx_valid_o : out std_logic; + an_idle_match_o : out std_logic; + + -- RMON events + rmon_rx_overrun : out std_logic; + rmon_rx_inv_code : out std_logic; + rmon_rx_sync_lost : out std_logic + ); + +end ep_rx_pcs_8bit; + +architecture behavioral of ep_rx_pcs_8bit is + +-- RX state machine definitions + type t_tbif_rx_state is (RX_NOFRAME, RX_COMMA, RX_CR3, RX_CR4, RX_SPD_PREAMBLE, RX_PAYLOAD, RX_EXTEND); + +-- size of the calibrration pattern detection counter. It counts up every time +-- a valid calibration pattern character is received and resets upon detecion +-- of non-calibration character. The pattern is validated when the counter +-- overflows (after 2**c_cal_pattern_counter_bits counts) + + + function f_calc_pattern_counter_bits + return integer is + begin -- f_calc_pattern_counter_bits + if(g_simulation) then + return 8; -- use smaller calibration counter to + -- speed up the simulation + else + return 17; + end if; + end f_calc_pattern_counter_bits; + + constant c_cal_pattern_counter_bits : integer := f_calc_pattern_counter_bits; + + component ep_sync_detect + port ( + rst_n_i : in std_logic; + rbclk_i : in std_logic; + en_i : in std_logic; + data_i : in std_logic_vector(7 downto 0); + k_i : in std_logic; + err_i : in std_logic; + synced_o : out std_logic; + even_o : out std_logic; + cal_i : in std_logic); + end component; + + signal rst_n_rx : std_logic; + + signal rx_state : t_tbif_rx_state; + signal preamble_cntr : unsigned(2 downto 0); + signal rx_busy : std_logic; + signal rx_enable_synced : std_logic; + signal rx_rdreq, fifo_wrreq : std_logic; + + -- 8b10b decoding and postprocessing signals + signal d_is_k, d_err, d_is_comma, d_is_epd : std_logic; + signal d_is_spd, d_is_extend, d_is_idle, d_is_lcr : std_logic; + signal d_is_sfd_char, d_is_preamble_char : std_logic; + signal d_data : std_logic_vector(7 downto 0); + signal d_is_even : std_logic; + signal d_is_cal : std_logic; + + -- Clock alignment FIFO signals + signal fifo_wr_toggle : std_logic; + signal fifo_rx_data : std_logic_vector(15 downto 0); + signal fifo_mask_write : std_logic; + signal fifo_bytesel : std_logic; + signal fifo_sof, fifo_eof : std_logic; + signal fifo_error : std_logic; + signal fifo_almostfull : std_logic; + signal fifo_clear_n : std_logic; + signal fifo_with_rx_ts : std_logic; + signal fifo_ts_valid : std_logic; + +-- Synchronization detection FSM signals + signal rx_synced, rx_even : std_logic; + signal rx_sync_lost_p : std_logic; + signal rx_sync_status : std_logic; + signal rx_sync_enable : std_logic; + +-- Autonegotiation control signals + signal an_rx_en_synced : std_logic; + + signal lcr_ready : std_logic; + signal lcr_prev_val : std_logic_vector(15 downto 0); + signal lcr_cur_val : std_logic_vector(15 downto 0); + signal lcr_final_val : std_logic_vector(15 downto 0); + signal lcr_validity_cntr : unsigned(1 downto 0); + + signal an_idle_cntr : unsigned(1 downto 0); + signal an_idle_match_int : std_logic; + +-- RMON counter pulses + signal rmon_rx_overrun_p_int : std_logic; + signal rmon_invalid_code_p_int : std_logic; + +-- Misc. signals + signal cal_pattern_cntr : unsigned(c_cal_pattern_counter_bits-1 downto 0); + signal mdio_mcr_reset_synced : std_logic; + signal mdio_mcr_pdown_synced : std_logic; + + + signal pcs_valid_int : std_logic; + signal timestamp_pending : std_logic_vector(2 downto 0); + +begin +------------------------------------------------------------------------------- +-- synchronizer chains for Wishbone-accessible control signals +------------------------------------------------------------------------------- + + U_sync_pcs_busy : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => '1', + data_i => rx_busy, + synced_o => pcs_busy_o, + npulse_o => open, + ppulse_o => open); + + U_sync_an_rx_enable : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => phy_rx_clk_i, + rst_n_i => rst_n_rx, + data_i => an_rx_en_i, + synced_o => an_rx_en_synced, + npulse_o => open, + ppulse_o => open); + + U_sync_mcr_reset : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => phy_rx_clk_i, + rst_n_i => '1', + data_i => mdio_mcr_reset_i, + synced_o => mdio_mcr_reset_synced, + npulse_o => open, + ppulse_o => open); + + U_sync_power_down : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => phy_rx_clk_i, + rst_n_i => '1', + data_i => mdio_mcr_pdown_i, + synced_o => mdio_mcr_pdown_synced, + npulse_o => open, + ppulse_o => open); + + rx_sync_enable <= not mdio_mcr_pdown_synced; + rst_n_rx <= rst_rxclk_n_i and not mdio_mcr_reset_synced and phy_rdy_i; + +------------------------------------------------------------------------------- +-- 802.3z Link Synchronization State Machine +------------------------------------------------------------------------------- + + U_SYNC_DET : ep_sync_detect + port map ( + rst_n_i => rst_n_rx, + rbclk_i => phy_rx_clk_i, + en_i => rx_sync_enable, + data_i => phy_rx_data_i, + k_i => phy_rx_k_i, + err_i => phy_rx_enc_err_i, + synced_o => rx_synced, + even_o => rx_even, + cal_i => d_is_cal); + + -- synchronizer chain for rx_synced signal, also serving as a loss-of-sync detector + U_sync_los : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => '1', + data_i => rx_synced, + synced_o => rx_sync_status, + npulse_o => rx_sync_lost_p, + ppulse_o => open); + + synced_o <= rx_sync_status; -- drive the PCS outputs + sync_lost_o <= rx_sync_lost_p; + +------------------------------------------------------------------------------- +-- Calibration pattern logic +------------------------------------------------------------------------------- + + -- process checks the presence of valid calibtaion pattern and controls the + -- state of CAL_STA bit in Receive Control Register. + -- + -- reads: phy_rx_data_i, mdio_wr_spec_cal_crst_i + -- writes: mdio_wr_spec_rx_cal_stat_o + -- + p_detect_cal : process(phy_rx_clk_i) + begin + if rising_edge(phy_rx_clk_i) then + if rst_n_rx = '0' then + cal_pattern_cntr <= (others => '0'); + d_is_cal <= '0'; + else + + if(phy_rx_data_i = c_k28_7 and phy_rx_k_i = '1') then + d_is_cal <= '1'; + else + d_is_cal <= '0'; + end if; + + if(d_is_cal = '1' and mdio_wr_spec_cal_crst_i = '0') then + +-- we've got c_cal_pattern_threshold valid calibration characters - indicate +-- that we're receiving a valid calibration pattern + if(cal_pattern_cntr(cal_pattern_cntr'high) = '1') then + mdio_wr_spec_rx_cal_stat_o <= '1'; + else + mdio_wr_spec_rx_cal_stat_o <= '0'; + cal_pattern_cntr <= cal_pattern_cntr + 1; + end if; +-- we've got a non-calibration character or the pattern detection has been reset + else + mdio_wr_spec_rx_cal_stat_o <= '0'; + cal_pattern_cntr <= (others => '0'); + end if; + end if; + end if; + end process; + + +------------------------------------------------------------------------------- +-- Clock adjustment FIFO +------------------------------------------------------------------------------- + + -- FIFO input data formatting + fifo_wrreq <= fifo_wr_toggle and fifo_mask_write; + + pcs_fab_o.data <= fifo_rx_data; + pcs_fab_o.addr <= (others => '0'); + pcs_fab_o.sof <= fifo_sof and fifo_wrreq; + pcs_fab_o.eof <= fifo_eof and fifo_wrreq; + pcs_fab_o.bytesel <= fifo_bytesel; + pcs_fab_o.error <= fifo_error and fifo_wrreq; + pcs_fab_o.has_rx_timestamp <= fifo_with_rx_ts; + pcs_fab_o.rx_timestamp_valid <= timestamp_valid_i; + pcs_fab_o.dvalid <= not (fifo_sof or fifo_eof or fifo_error) and fifo_wrreq; + + fifo_almostfull <= pcs_fifo_almostfull_i; + + -- process postprocesses the raw 8b10b decoder output (phy_rx_data_i, phy_rx_k_i, phy_rx_enc_err_ior) + -- providing 1-bit signals indicating various 8b10b control patterns + p_8b10b_postprocess : process(phy_rx_clk_i) + begin + if rising_edge(phy_rx_clk_i) then + + if(rst_n_rx = '0') then + d_data <= (others => '0'); + d_is_comma <= '0'; + d_is_spd <= '0'; + d_is_extend <= '0'; + d_is_lcr <= '0'; + d_is_epd <= '0'; + d_is_idle <= '0'; + d_is_k <= '0'; + d_err <= '0'; + d_is_sfd_char <= '0'; + d_is_preamble_char <= '0'; + d_err <= '0'; + else + + -- store the odd/even field information from sync detection unit (U_SYNC_DET) + d_is_even <= rx_even; + d_data <= phy_rx_data_i; + d_is_k <= phy_rx_k_i; + + if(phy_rx_enc_err_i = '0') then + d_err <= '0'; + +-- decode commas and other control characters.... + if(phy_rx_data_i = c_K28_5 and phy_rx_k_i = '1') then + d_is_comma <= '1'; + else + d_is_comma <= '0'; + end if; + + if(phy_rx_data_i = c_k23_7 and phy_rx_k_i = '1') then + d_is_extend <= '1'; + else + d_is_extend <= '0'; + end if; + + if(phy_rx_data_i = c_k27_7 and phy_rx_k_i = '1') then + d_is_spd <= '1'; + else + d_is_spd <= '0'; + end if; + + if(phy_rx_data_i = c_K29_7 and phy_rx_k_i = '1') then + d_is_epd <= '1'; + else + d_is_epd <= '0'; + end if; + + if((phy_rx_data_i = c_d21_5 or phy_rx_data_i = c_d2_2) and phy_rx_k_i = '0') then + d_is_lcr <= '1'; + else + d_is_lcr <= '0'; + end if; + + if((phy_rx_data_i = c_d5_6 or phy_rx_data_i = c_d16_2) and phy_rx_k_i = '0') then + d_is_idle <= '1'; + else + d_is_idle <= '0'; + end if; + + if(phy_rx_data_i = c_preamble_sfd and phy_rx_k_i = '0') then + d_is_sfd_char <= '1'; + else + d_is_sfd_char <= '0'; + end if; + + if(phy_rx_data_i = c_preamble_char and phy_rx_k_i = '0') then + d_is_preamble_char <= '1'; + else + d_is_preamble_char <= '0'; + end if; + +-- invalid code received? + else + d_err <= '1'; + d_is_sfd_char <= '0'; + d_is_preamble_char <= '0'; + d_is_comma <= '0'; + d_is_spd <= '0'; + d_is_extend <= '0'; + d_is_lcr <= '0'; + d_is_epd <= '0'; + d_is_idle <= '0'; + d_is_k <= '0'; + end if; + end if; + end if; + end process; + + +-- process: RBCLK-driven RX state machine. Implements the receive logic od 802.3z compliant +-- 1000BaseX PCS. +-- reads: almost everything +-- writes: almost everything + + rx_fsm : process (phy_rx_clk_i) + begin + if rising_edge(phy_rx_clk_i) then + -- reset or PCS disabled + if(rst_n_rx = '0' or mdio_mcr_pdown_synced = '1') then + rx_state <= RX_NOFRAME; + rx_busy <= '0'; + + fifo_sof <= '0'; + fifo_eof <= '0'; + fifo_error <= '0'; + fifo_wr_toggle <= '0'; + fifo_mask_write <= '0'; + fifo_with_rx_ts <= '0'; + + lcr_ready <= '0'; + lcr_cur_val <= (others => '0'); + lcr_prev_val <= (others => '0'); + -- lcr_final_val ===> DO NOT CLEAR on reset + lcr_validity_cntr <= (others => '0'); + an_idle_cntr <= (others => '0'); + an_idle_match_int <= '0'; + + rmon_rx_overrun_p_int <= '0'; + rmon_invalid_code_p_int <= '0'; + + timestamp_trigger_p_a_o <= '0'; + timestamp_pending <= "000"; + else -- normal PCS operation + + -- clear the autogotiation variables if the autonegotiation is disabled + if(an_rx_en_synced = '0') then + lcr_ready <= '0'; + lcr_validity_cntr <= (others => '0'); + lcr_prev_val <= (others => '0'); + an_idle_cntr <= (others => '0'); + an_idle_match_int <= '0'; + end if; + +------------------------------------------------------------------------------- +-- Main RX PCS state machine +------------------------------------------------------------------------------- + case rx_state is + +------------------------------------------------------------------------------- +-- State NOFRAME: receiver is receiving IDLE pattern +------------------------------------------------------------------------------- + when RX_NOFRAME => + + + fifo_sof <= '0'; + fifo_eof <= '0'; + fifo_error <= '0'; + fifo_bytesel <= '0'; + + rx_busy <= '0'; + timestamp_trigger_p_a_o <= '0'; + + -- insert the RX timestamp into the FIFO + if(timestamp_pending /= "000") then + fifo_mask_write <= '1'; + fifo_wr_toggle <= '1'; + else + fifo_mask_write <= '0'; + fifo_wr_toggle <= '0'; + end if; + + if(timestamp_pending(0) = '1')then + fifo_rx_data <= timestamp_i(31 downto 16); + elsif(timestamp_pending(1) = '1')then + fifo_rx_data <= timestamp_i(15 downto 0); + elsif(timestamp_pending(2) = '1')then + fifo_eof <= '1'; + end if; + + timestamp_pending <= timestamp_pending(1 downto 0) & '0'; + + if (rx_synced = '0') then +-- PCS is not synced: stay in NOFRAME state and ignore the incoming codes. + rx_state <= RX_NOFRAME; + + elsif(d_is_comma = '1') then +-- we've got a comma character: it's probably an idle sequence or a Config_Reg value, +-- check the next code. + rx_state <= RX_COMMA; + elsif (d_is_spd = '1') then +-- we've got a Start-of-Packet Delimeter + + if(d_is_even = '1' and fifo_almostfull = '0') then + preamble_cntr <= "111"; + rx_state <= RX_SPD_PREAMBLE; + elsif (fifo_almostfull = '1') then + rmon_rx_overrun_p_int <= '1'; + end if; + + end if; + + +-- produce a pulse at every invalid 8b10b code. + rmon_invalid_code_p_int <= d_err; + +------------------------------------------------------------------------------- +-- State COMMA: we've received a comma character followed by something else. +-- Determine what's "something else" +------------------------------------------------------------------------------- + + when RX_COMMA => +-- received a code with error (or a control code group) or a misaligned code: +-- go to the initial NOFRAME state and account the error. + + fifo_mask_write <= '0'; + fifo_wr_toggle <= '0'; + fifo_with_rx_ts <= '0'; + + if (d_err = '1' or d_is_k = '1' or d_is_even = '1' or rx_synced = '0') then + rmon_invalid_code_p_int <= d_err; + rx_state <= RX_NOFRAME; + + lcr_ready <= '0'; + an_idle_match_int <= '0'; + an_idle_cntr <= (others => '0'); + else + +-- don't write anything to the PCS FIFO, it's a control character + fifo_mask_write <= '0'; + +-- received D5.6 or D16.2 - it's an idle pattern. Simply ignore it. + if(d_is_idle = '1') then + rx_state <= RX_NOFRAME; + lcr_ready <= '0'; + + + if(an_idle_cntr = "11") then + an_idle_match_int <= '1'; + else + an_idle_cntr <= an_idle_cntr + 1; + end if; + + +-- received D21.5 or D2.2 - it's a 802.3x autonegotiation Config_Reg (802.3 p. +-- 36.2.4.10). Begin the reception of its value. + elsif(d_is_lcr = '1') then + an_idle_match_int <= '0'; + an_idle_cntr <= (others => '0'); + rx_busy <= '1'; + rx_state <= RX_CR3; + else + lcr_ready <= '0'; + an_idle_match_int <= '0'; + an_idle_cntr <= (others => '0'); + lcr_validity_cntr <= (others => '0'); + end if; + end if; + +------------------------------------------------------------------------------- +-- States CR3/CR4: reception of LCR register value. +------------------------------------------------------------------------------- + when RX_CR3 => -- receives the 1st byte of Config_Reg and + -- checks if the subsequent Config_Reg + -- values are identical. + +-- an error? - abort the reception and go to NOFRAME state. + if(d_err = '1' or d_is_k = '1' or d_is_even = '0' or rx_synced = '0') then + rx_state <= RX_NOFRAME; + rmon_invalid_code_p_int <= d_err; + + -- reset the Config_Reg value and mark it as invalid + lcr_ready <= '0'; + lcr_validity_cntr <= (others => '0'); + +-- check if the autonegotiation unit has enabled the reception of LCR + elsif (an_rx_en_synced = '1') then + lcr_prev_val <= lcr_cur_val; + +-- check for 3 subsequent Configuration sequences with identical Config_Reg value + if(lcr_cur_val = lcr_prev_val) then + if(lcr_validity_cntr = "10") then +-- we've got 3? Indicate that we have received valid Config_Reg. + lcr_ready <= '1'; + lcr_final_val <= lcr_cur_val; -- only latched here, not even on reset + else + lcr_validity_cntr <= lcr_validity_cntr + 1; + lcr_ready <= '0'; + end if; + else +-- the subsequent values of Config_Reg are different? + lcr_validity_cntr <= (others => '0'); + lcr_ready <= '0'; + end if; + + lcr_cur_val (7 downto 0) <= d_data; + end if; + + rx_state <= RX_CR4; + + when RX_CR4 => -- receives the 2nd byte of LCR + + if(d_err = '1' or d_is_k = '1' or d_is_even = '1' or rx_synced = '0') then + -- in case of an error + rx_state <= RX_NOFRAME; + rmon_invalid_code_p_int <= d_err; + elsif (an_rx_en_synced = '1') then + -- store the value of the LSB of the Config_Reg + lcr_cur_val (15 downto 8) <= d_data; + end if; + + rx_state <= RX_NOFRAME; + +------------------------------------------------------------------------------- +-- State SPD_PREAMBLE: we've received an Start-Of-Packet delimeter. Check for +-- the valid preamble. +------------------------------------------------------------------------------- + when RX_SPD_PREAMBLE => + + rx_busy <= '1'; + + if(d_err = '1' or rx_synced = '0') then -- check for encoding errors. + rx_state <= RX_NOFRAME; + rmon_invalid_code_p_int <= d_err; + else + + -- keep looking for Ethernet SFD char (0xd5). If it occurs on + -- the right position, start receiving the frame payload + if d_is_sfd_char = '1' then +-- generate the RX timestamp pulse + timestamp_trigger_p_a_o <= '1'; + +-- we've got an SFD at proper offset from the beginning of the preamble + if (preamble_cntr = "010") or (preamble_cntr = "001") then + +-- indicate a start-of-packet condition in the RX FIFO and enable writing to +-- the FIFO. + fifo_sof <= '1'; + fifo_mask_write <= '1'; + fifo_wr_toggle <= '1'; + rx_state <= RX_PAYLOAD; + end if; + + elsif (d_is_preamble_char = '1') then + preamble_cntr <= preamble_cntr - 1; + -- got duplicated SPD code? + elsif (d_is_spd = '1') then + preamble_cntr <= "111"; + end if; + + if(preamble_cntr = "000") then -- too long preamble - abort reception + rx_state <= RX_NOFRAME; + end if; + end if; + +------------------------------------------------------------------------------- +-- State PAYLOAD: receives the full frame payload (including the MAC header and +-- the CRC) +------------------------------------------------------------------------------- + + when RX_PAYLOAD => + + fifo_sof <= '0'; + + -- check for errors. + if (d_err = '1' or rx_synced = '0' or fifo_almostfull = '1') then + rmon_invalid_code_p_int <= d_err; + rmon_rx_overrun_p_int <= fifo_almostfull; + + rx_state <= RX_NOFRAME; + + -- indicate an errorneous termination of the current frame in the + -- RX FIFO + fifo_error <= '1'; + fifo_wr_toggle <= '1'; + + elsif d_is_k = '1' then + if d_is_epd = '1' then -- got an EPD (End-of-packet delimeter) + + fifo_bytesel <= not fifo_wr_toggle; + fifo_wr_toggle <= not fifo_wr_toggle; + + rx_state <= RX_EXTEND; + + else + -- any other K-character in the middle of frame (premature + -- end)? - terminate the frame and indicate an error in the + -- RX FIFO. + + if d_is_comma = '1' then -- got link idle inside frame + rx_state <= RX_COMMA; + else + rx_state <= RX_NOFRAME; + end if; + + fifo_error <= '1'; + fifo_wr_toggle <= '1'; + end if; + else + -- got a data character. Every 2 characters, write them to the + -- 16-bit FIFO. + + fifo_wr_toggle <= not fifo_wr_toggle; + + if fifo_wr_toggle = '1' then + fifo_rx_data(15 downto 8) <= d_data; + else + fifo_rx_data(7 downto 0) <= d_data; + end if; + end if; + +------------------------------------------------------------------------------- +-- State EXTEND: receive carrier extension +------------------------------------------------------------------------------- + + when RX_EXTEND => + + timestamp_trigger_p_a_o <= '0'; + + if d_is_extend = '1' then -- got carrier extend. Just keep + -- receiving it. + fifo_mask_write <= '0'; + rx_state <= RX_EXTEND; + elsif d_is_comma = '1' then -- got comma, real end-of-frame + -- indicate the correct ending of the current frame in the RX FIFO + fifo_eof <= not timestamp_stb_i; + fifo_with_rx_ts <= timestamp_stb_i; + fifo_mask_write <= '1'; + fifo_wr_toggle <= '1'; + timestamp_pending <= (others => timestamp_stb_i); + + + rx_state <= RX_COMMA; + + else + -- got anything else than comma (for example, the /V/ code): + + rmon_invalid_code_p_int <= '1'; + fifo_error <= '1'; + fifo_mask_write <= '1'; + fifo_wr_toggle <= '1'; + + rx_state <= RX_NOFRAME; + end if; + + when others => null; + end case; + end if; + end if; + end process; + + an_rx_val_o <= lcr_final_val; + + U_sync_an_rx_ready : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + data_i => lcr_ready, + synced_o => an_rx_valid_o, + npulse_o => open, + ppulse_o => open); + + U_sync_an_idle_match : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + data_i => an_idle_match_int, + synced_o => an_idle_match_o, + npulse_o => open, + ppulse_o => open); + + U_ext_rmon_1 : gc_extend_pulse + generic map ( + g_width => 3) + port map ( + clk_i => phy_rx_clk_i, + rst_n_i => rst_n_rx, + pulse_i => rmon_invalid_code_p_int, + extended_o => rmon_rx_inv_code); + + U_ext_rmon_2 : gc_extend_pulse + generic map ( + g_width => 3) + port map ( + clk_i => phy_rx_clk_i, + rst_n_i => rst_n_rx, + pulse_i => rmon_rx_overrun_p_int, + extended_o => rmon_rx_overrun); + +-- drive the "RX PCS Sync Lost" event counter + rmon_rx_sync_lost <= rx_sync_lost_p and (not mdio_mcr_pdown_i); + +end behavioral; + + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_status_reg_insert.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_status_reg_insert.vhd new file mode 100644 index 000000000..974c2659b --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_status_reg_insert.vhd @@ -0,0 +1,153 @@ +------------------------------------------------------------------------------- +-- Title : RX Status Register Inserter +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : ep_rx_status_reg_insert.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Platform : FPGA-generic +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2011 - 2017 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; +use work.wr_fabric_pkg.all; + +entity ep_rx_status_reg_insert is + + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + + mbuf_valid_i : in std_logic; + mbuf_ack_o : out std_logic; + mbuf_drop_i : in std_logic; + mbuf_pclass_i : in std_logic_vector(7 downto 0); + mbuf_is_hp_i : in std_logic; + mbuf_is_pause_i : in std_logic; + + rmon_pfilter_drop_o : out std_logic + ); + +end ep_rx_status_reg_insert; + +architecture rtl of ep_rx_status_reg_insert is + + type t_state is (WAIT_FRAME, WAIT_MBUF, GEN_STATUS); + + signal dreq_mask : std_logic; + signal embed_status : std_logic; + signal sreg : t_wrf_status_reg; + signal state : t_state; + signal src_fab_out : t_ep_internal_fabric; + + signal sof_mask : std_logic; + +begin -- rtl + + embed_status <= '1' when (state = GEN_STATUS) else '0'; + src_fab_out.data <= f_marshall_wrf_status(sreg) when (embed_status = '1') else snk_fab_i.data; + src_fab_out.addr <= c_WRF_STATUS when (embed_status = '1') else snk_fab_i.addr; + + src_fab_out.eof <= snk_fab_i.eof; + src_fab_out.error <= snk_fab_i.error; + src_fab_out.bytesel <= snk_fab_i.bytesel; + src_fab_out.dvalid <= snk_fab_i.dvalid or (embed_status and src_dreq_i); + + src_fab_out.has_rx_timestamp <= snk_fab_i.has_rx_timestamp; + src_fab_out.rx_timestamp_valid <= snk_fab_i.rx_timestamp_valid; + + src_fab_o <= src_fab_out; + + src_fab_out.sof <= '1' when (mbuf_valid_i = '1' and state = WAIT_MBUF and mbuf_drop_i = '0' and mbuf_is_pause_i = '0') else '0'; + mbuf_ack_o <= '1' when (mbuf_valid_i = '1' and state = WAIT_MBUF) else '0'; + + snk_dreq_o <= src_dreq_i and dreq_mask and not snk_fab_i.sof; +-- snk_dreq_o <= src_dreq_i and not snk_fab_i.sof; + + p_gen_status : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + rmon_pfilter_drop_o <= '0'; + state <= WAIT_FRAME; + dreq_mask <= '1'; + sreg.match_class <= (others =>'0'); + sreg.is_hp <= '0'; + sreg.has_crc <= '0'; + sreg.has_smac <= '0'; + sreg.error <= '0'; + else + case state is + when WAIT_FRAME => + rmon_pfilter_drop_o <= '0'; + if(snk_fab_i.sof = '1') then + state <= WAIT_MBUF; + dreq_mask <= '0'; + end if; + + when WAIT_MBUF => + if(mbuf_valid_i = '1') then + rmon_pfilter_drop_o <= mbuf_drop_i; + + if(mbuf_drop_i = '0' and mbuf_is_pause_i = '0') then + state <= GEN_STATUS; + dreq_mask <= '1'; + else + state <= WAIT_FRAME; + dreq_mask <= '1'; + end if; + + sreg.match_class <= mbuf_pclass_i; + sreg.is_hp <= mbuf_is_hp_i; + sreg.has_crc <= '0'; + sreg.has_smac <= '1'; + sreg.error <= '0'; + else + rmon_pfilter_drop_o <= '0'; + --rmon_o.rx_path_timing_failure <= '0'; + end if; + + when GEN_STATUS => + rmon_pfilter_drop_o <= '0'; + if(src_dreq_i = '1') then + state <= WAIT_FRAME; + dreq_mask <= '1'; + end if; + end case; + end if; + end if; + end process; + + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_vlan_unit.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_vlan_unit.vhd new file mode 100644 index 000000000..ed027d6dc --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_vlan_unit.vhd @@ -0,0 +1,449 @@ +------------------------------------------------------------------------------- +-- Title : RX VLAN unit +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : ep_rx_vlan_unit.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Platform : FPGA-generic +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2011-2015 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; +use work.ep_wbgen2_pkg.all; +use work.wr_fabric_pkg.all; + + +-- 3rd deframing pipeline stage - VLAN Unit + +entity ep_rx_vlan_unit is + port(clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + + tclass_o : out std_logic_vector(2 downto 0); + vid_o : out std_logic_vector(11 downto 0); + tag_done_o : out std_logic; + is_tagged_o: out std_logic; + + regs_i : in t_ep_out_registers; + regs_o : out t_ep_in_registers + ); + +end ep_rx_vlan_unit; + +architecture behavioral of ep_rx_vlan_unit is + + + type t_tag_type is (NONE, PRIO, VLAN, NULL_VLAN); + type t_state is (WAIT_FRAME, DATA, FLUSH_STALL, DISCARD_FRAME, INSERT_TAG, END_FRAME); + + signal dreq_mask : std_logic; + signal hdr_offset : std_logic_vector(11 downto 0); + + signal comb_tag_type : t_tag_type; + + signal tag_type : t_tag_type; + signal state : t_state; + + signal at_ethertype : std_logic; + signal at_vid : std_logic; + signal at_tpid : std_logic; + signal is_tagged : std_logic; + signal stored_ethertype : std_logic_vector(15 downto 0); + signal stored_fab : t_ep_internal_fabric; + + signal prio_int : std_logic_vector(2 downto 0); + signal force_dvalid : std_logic; + + signal r_tcar_pcp_map : std_logic_vector(23 downto 0); + signal is_tag_inserted: std_logic; + + procedure f_vlan_decision + (tag_type : t_tag_type; + qmode : in std_logic_vector(1 downto 0); + admit : out std_logic; + use_pvid : out std_logic; + use_fixed_prio : out std_logic) is + begin + + use_pvid := 'X'; + use_fixed_prio := 'X'; + admit := '0'; + + -- From Jose's table. Thanks a lot! + case (qmode) is + when c_QMODE_PORT_ACCESS => + case tag_type is + when NONE => + admit := '1'; use_pvid := '1'; use_fixed_prio := '1'; + when PRIO => + admit := '1'; use_pvid := '1'; use_fixed_prio := '0'; + when VLAN => + admit := '0'; use_pvid := '0'; + when NULL_VLAN => + admit := '0'; + end case; + + when c_QMODE_PORT_TRUNK => + case tag_type is + when NONE => + admit := '0'; + when PRIO => + admit := '0'; + when VLAN => + admit := '1'; + use_pvid := '0'; + use_fixed_prio := '0'; + when NULL_VLAN => + admit := '0'; + end case; + + when c_QMODE_PORT_UNQUALIFIED => + + case tag_type is + when NONE => + admit := '1'; + use_pvid := '1'; use_fixed_prio := '1'; + when PRIO => + admit := '1'; + use_pvid := '1'; use_fixed_prio := '0'; + when VLAN => + admit := '1'; + use_pvid := '0'; use_fixed_prio := '0'; + when NULL_VLAN => + admit := '0'; + end case; + + when c_QMODE_PORT_VLAN_DISABLED => + case tag_type is + when NONE => + admit := '1'; + use_pvid := '0'; + use_fixed_prio := '1'; + when PRIO => + admit := '1'; + use_pvid := '0'; + use_fixed_prio := '0'; + when VLAN => + admit := '1'; + use_pvid := '0'; + use_fixed_prio := '0'; + when NULL_VLAN => + admit := '1'; + use_pvid := '0'; + use_fixed_prio := '0'; + end case; + when others => null; + end case; + end procedure; + + +begin -- behavioral + + at_ethertype <= hdr_offset(6) and snk_fab_i.dvalid; + at_tpid <= hdr_offset(6) and snk_fab_i.dvalid and is_tagged;--unused + at_vid <= hdr_offset(7) and snk_fab_i.dvalid and is_tagged; + + snk_dreq_o <= src_dreq_i and dreq_mask;-- and not at_ethertype; + + p_decode_tag_type : process(snk_fab_i, is_tagged) + begin + if(is_tagged = '0') then + comb_tag_type <= NONE; + else + case snk_fab_i.data(11 downto 0) is + when x"000" => comb_tag_type <= PRIO; + when x"fff" => comb_tag_type <= NULL_VLAN; + when others => comb_tag_type <= VLAN; + end case; + end if; + end process; + + p_tag_untag : process(clk_sys_i) + variable admit, use_pvid, use_fixed_prio : std_logic; + variable v_dreq_mask : std_logic; + variable v_stored_fab : t_ep_internal_fabric; + variable v_src_fab : t_ep_internal_fabric; + variable v_next_state : t_state; + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' or regs_i.ecr_rx_en_o = '0' then + hdr_offset(hdr_offset'left downto 1) <= (others => '0'); + hdr_offset(0) <= '1'; + state <= WAIT_FRAME; + dreq_mask <= '0'; + vid_o <= (others =>'0'); + is_tag_inserted <= '0'; + is_tagged <= '0'; + src_fab_o.eof <= '0'; + src_fab_o.error <= '0'; + src_fab_o.dvalid <= '0'; + + else + if(snk_fab_i.error = '1') then + state <= DISCARD_FRAME; + else + + case state is + when WAIT_FRAME => + dreq_mask <= '1'; + src_fab_o.eof <= '0'; + src_fab_o.error <= '0'; + is_tagged <= '0'; + is_tag_inserted <= '0'; + prio_int <= regs_i.vcr0_prio_val_o; + vid_o <= (others =>'0'); + + if(snk_fab_i.sof = '1') then + hdr_offset(hdr_offset'left downto 1) <= (others => '0'); + hdr_offset(0) <= '1'; + state <= DATA; + end if; + + when DATA => + + v_dreq_mask := '1'; + v_src_fab.eof := '0'; + v_src_fab.error := '0'; + v_next_state := DATA; + + if (snk_fab_i.dvalid = '1' and src_dreq_i = '0') then + v_stored_fab.bytesel := snk_fab_i.bytesel; + v_stored_fab.data := snk_fab_i.data; + v_stored_fab.addr := snk_fab_i.addr; + v_stored_fab.dvalid := '1'; + v_next_state := FLUSH_STALL; + else + v_src_fab.addr := snk_fab_i.addr; + v_src_fab.data := snk_fab_i.data; + v_src_fab.dvalid := src_dreq_i and snk_fab_i.dvalid; + v_src_fab.bytesel := snk_fab_i.bytesel; + end if; + + if(at_ethertype = '1') then + stored_ethertype <= snk_fab_i.data; + + if(snk_fab_i.data = x"8100") then -- got a 802.1q tagged frame + is_tagged <= '1'; + else + if (regs_i.vcr0_qmode_o = c_QMODE_PORT_ACCESS) then + prio_int <= regs_i.vcr0_prio_val_o; + is_tag_inserted <= '1'; + v_src_fab.dvalid := '0'; + v_next_state := INSERT_TAG; + v_dreq_mask := '0'; + elsif (regs_i.vcr0_qmode_o = c_QMODE_PORT_TRUNK) then + v_src_fab.dvalid := '0'; + v_next_state := DISCARD_FRAME; + end if; + is_tagged <= '0'; + end if; + end if; + + if(snk_fab_i.eof = '1') then + if(src_dreq_i = '1') then + v_src_fab.eof := '1'; + v_next_state := WAIT_FRAME; + else + v_next_state := END_FRAME; + end if; + end if; + + if(at_vid = '1') then + + -- decide what to do with the frame, basing on the port mode + -- (ACCESS, TRUNK, UNQUALIFIED), and whether the frame is tagged + -- or not. + f_vlan_decision(comb_tag_type, regs_i.vcr0_qmode_o, admit, use_pvid, use_fixed_prio); + + -- assign the VID + if(admit = '0') then -- oops... + v_next_state := DISCARD_FRAME; + end if; + + if(use_pvid = '1')then + v_stored_fab.data(11 downto 0) := regs_i.vcr0_pvid_o; + v_src_fab.data(11 downto 0) := regs_i.vcr0_pvid_o; + end if; + vid_o <= v_src_fab.data(11 downto 0); + -- assign the priority + if(regs_i.vcr0_fix_prio_o = '1' or use_fixed_prio = '1') then + -- Forced priority (or a non-priority tagged frame)? Take the priority + -- value from VCR0 register + prio_int <= regs_i.vcr0_prio_val_o; + else + -- Got a priority tag - use the value from the VLAN tag + prio_int <= snk_fab_i.data(15 downto 13); + end if; + end if; + + if(snk_fab_i.dvalid = '1') then + hdr_offset <= hdr_offset(hdr_offset'left-1 downto 0) & '0'; + end if; + + if(v_next_state = INSERT_TAG) then + src_fab_o.eof <= '0'; + src_fab_o.dvalid <= '1'; + src_fab_o.error <= '0'; + src_fab_o.addr <= c_WRF_DATA; + src_fab_o.data <= x"8100"; + src_fab_o.bytesel <= '0'; + else + src_fab_o.eof <= v_src_fab.eof; + src_fab_o.dvalid <= v_src_fab.dvalid; + src_fab_o.error <= v_src_fab.error; + src_fab_o.addr <= v_src_fab.addr; + src_fab_o.data <= v_src_fab.data; + src_fab_o.bytesel <= v_src_fab.bytesel; + end if; + + dreq_mask <= v_dreq_mask; + stored_fab <= v_stored_fab; + state <= v_next_state; + + when END_FRAME => + if(src_dreq_i = '1')then + src_fab_o.eof <= '1'; + src_fab_o.dvalid <= '0'; + state <= WAIT_FRAME; + end if; + + when DISCARD_FRAME => + if(src_dreq_i = '1') then + src_fab_o.error <= '1'; + src_fab_o.dvalid <= '0'; + state <= WAIT_FRAME; + end if; + + when FLUSH_STALL => + if(src_dreq_i = '1')then + src_fab_o.addr <= stored_fab.addr; + src_fab_o.data <= stored_fab.data; + src_fab_o.dvalid <= stored_fab.dvalid; + src_fab_o.bytesel <= stored_fab.bytesel; + state <= DATA; + else + src_fab_o.DATA <= (others => 'X'); + src_fab_o.dvalid <= '0'; + end if; + + when INSERT_TAG => + src_fab_o.dvalid <= '0'; + + if(src_dreq_i = '1') then +-- we are at 7th word from the beginning of the frame, but the sink reception +-- is disabled, so we can insert the original ethertype as the TPID + + if(hdr_offset(7) = '1') then + src_fab_o.addr <= c_WRF_DATA; + src_fab_o.data <= regs_i.vcr0_prio_val_o & '0' & regs_i.vcr0_pvid_o; + src_fab_o.dvalid <= '1'; + vid_o <= regs_i.vcr0_pvid_o; -- use the inserted PVID + dreq_mask <= '0'; + stored_fab.bytesel <= snk_fab_i.bytesel; + stored_fab.data <= snk_fab_i.data; + stored_fab.addr <= snk_fab_i.addr; + stored_fab.dvalid <= snk_fab_i.dvalid; + + end if; + + if(hdr_offset(8) = '1') then + src_fab_o.addr <= c_WRF_DATA; + src_fab_o.data <= stored_ethertype; + src_fab_o.dvalid <= '1'; + dreq_mask <= '1'; + end if; + + if(hdr_offset(9) = '1') then + src_fab_o.addr <= stored_fab.addr; + src_fab_o.data <= stored_fab.data; + src_fab_o.dvalid <= stored_fab.dvalid; + src_fab_o.bytesel <= stored_fab.bytesel; + dreq_mask <= '1'; + state <= DATA; + end if; + + hdr_offset <= hdr_offset(hdr_offset'left-1 downto 0) & '0'; + else + src_fab_o.dvalid <= '0'; + end if; + end case; + end if; + end if; + end if; + end process; + + +-- Process: p_map_prio_to_tc +-- Maps the PCP value from the 802.1q header into a traffic class for further +-- processing. The mapping table is stored in TCAR register. + + regs_o.tcar_pcp_map_i <= r_tcar_pcp_map; + + p_map_prio_to_tc : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + + if(regs_i.tcar_pcp_map_load_o = '1') then + r_tcar_pcp_map <= regs_i.tcar_pcp_map_o; + end if; + + if(rst_n_i = '0' or regs_i.ecr_rx_en_o = '0' or snk_fab_i.sof = '1')then + tag_done_o <= '0'; + tclass_o <= "000"; + elsif(hdr_offset(9) = '1') then + -- we're already after the headers, so prio_int is + -- certainly valid + tag_done_o <= '1'; + case prio_int is + when "000" => tclass_o <= r_tcar_pcp_map(2 downto 0); + when "001" => tclass_o <= r_tcar_pcp_map(5 downto 3); + when "010" => tclass_o <= r_tcar_pcp_map(8 downto 6); + when "011" => tclass_o <= r_tcar_pcp_map(11 downto 9); + when "100" => tclass_o <= r_tcar_pcp_map(14 downto 12); + when "101" => tclass_o <= r_tcar_pcp_map(17 downto 15); + when "110" => tclass_o <= r_tcar_pcp_map(20 downto 18); + when "111" => tclass_o <= r_tcar_pcp_map(23 downto 21); + when others => tclass_o <= "000";--"XXX"; -- packet probably contains porn + end case; + end if; + end if; + end process; + + src_fab_o.sof <= regs_i.ecr_rx_en_o and snk_fab_i.sof; + is_tagged_o <= is_tagged or is_tag_inserted; + +end behavioral; + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_wb_master.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_wb_master.vhd new file mode 100644 index 000000000..b496ee3b7 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_wb_master.vhd @@ -0,0 +1,226 @@ +------------------------------------------------------------------------------- +-- Title : White Rabbit MAC/Endpoint +-- Project : White Rabbit Switch +------------------------------------------------------------------------------- +-- File : ep_rx_wb_master +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2009-06-22 +-- Last update: 2017-02-02 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: RX Wishbone Master. Converts the internal fabric (DREQ-VALID +-- throttling) to Pipelined Wishbone (b4) +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2011-2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2011-08-22 0.1 twlostow Created +------------------------------------------------------------------------------ + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; +use work.wr_fabric_pkg.all; + +entity ep_rx_wb_master is + generic( + g_ignore_ack : boolean := true; + g_cyc_on_stall : boolean := false); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + +-- physical coding sublayer (PCS) interface + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + +-- Wishbone I/O (master) + src_wb_i : in t_wrf_source_in; + src_wb_o : out t_wrf_source_out + ); + +end ep_rx_wb_master; + +architecture behavioral of ep_rx_wb_master is + + type t_state is (IDLE, DATA, FLUSH_STALL, FINISH_CYCLE, THROW_ERROR); + + signal state : t_state; + signal ack_count : unsigned(3 downto 0); + signal src_out_int : t_wrf_source_out; + + signal tmp_sel : std_logic; + signal tmp_dat : std_logic_vector(15 downto 0); + signal tmp_adr : std_logic_vector(1 downto 0); + signal enter_idle : std_logic; + signal sof_reg : std_logic; + +begin -- behavioral + + gen_cyc_on_stall: if g_cyc_on_stall = true generate + snk_dreq_o <= '1' when ((src_wb_i.stall = '0' and state /= FINISH_CYCLE and + state /= THROW_ERROR and snk_fab_i.eof = '0' and snk_fab_i.error = '0' and snk_fab_i.sof = '0' and enter_idle = '0') or state = IDLE) else '0'; + end generate; + + gen_nocyc_on_stall: if g_cyc_on_stall = false generate +-- snk_dreq_o <= '1' when (src_wb_i.stall = '0' and state /= FINISH_CYCLE and snk_fab_i.eof = '0' and snk_fab_i.error = '0' and snk_fab_i.sof = '0' and enter_idle = '0') else '0'; +-- snk_dreq_o <= '1' when (src_wb_i.stall = '0' and state /= FINISH_CYCLE and snk_fab_i.eof = '0' and snk_fab_i.error = '0' and enter_idle = '0') else '0'; + snk_dreq_o <= '1' when (src_wb_i.stall = '0' and state /= FINISH_CYCLE and + state /= THROW_ERROR and snk_fab_i.eof = '0' and snk_fab_i.error = '0') else '0'; + end generate; + + p_count_acks : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' or src_out_int.cyc = '0' then + ack_count <= (others => '0'); + else + if(src_out_int.stb = '1' and src_wb_i.stall = '0' and src_wb_i.ack = '0') then + ack_count <= ack_count + 1; + elsif(src_wb_i.ack = '1' and not(src_out_int.stb = '1' and src_wb_i.stall = '0')) then + ack_count <= ack_count - 1; + end if; + + end if; + end if; + end process; + + process(clk_sys_i) + variable stat : t_wrf_status_reg := c_wrf_status_init_value; + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + state <= IDLE; + src_out_int.stb <= '0'; + src_out_int.we <= '1'; + src_out_int.adr <= c_WRF_DATA; + src_out_int.cyc <= '0'; + enter_idle <= '1'; + sof_reg <= '0'; + else + case state is + when IDLE => + enter_idle <= '0'; + src_out_int.adr <= snk_fab_i.addr; + src_out_int.dat <= snk_fab_i.data; + + if((snk_fab_i.sof='1' or sof_reg='1') and src_wb_i.err = '0') then + src_out_int.cyc <= '1'; + state <= DATA; + end if; + + when DATA => + sof_reg <= '0'; + if(src_wb_i.stall = '0') then + src_out_int.adr <= snk_fab_i.addr; + src_out_int.dat <= snk_fab_i.data; + src_out_int.stb <= snk_fab_i.dvalid; + src_out_int.sel(1) <= '1'; + src_out_int.sel(0) <= not snk_fab_i.bytesel; + end if; + + + if(src_wb_i.err = '1') then + state <= IDLE; + enter_idle <= '1'; + src_out_int.cyc <= '0'; + src_out_int.stb <= '0'; + elsif(snk_fab_i.error = '1') then + state <= THROW_ERROR; + elsif(src_wb_i.stall = '1' and snk_fab_i.dvalid = '1') then + state <= FLUSH_STALL; + end if; + + if(snk_fab_i.eof = '1')then + state <= FINISH_CYCLE; + end if; + + + + tmp_adr <= snk_fab_i.addr; + tmp_dat <= snk_fab_i.data; + tmp_sel <= snk_fab_i.bytesel; + + when FLUSH_STALL => + if(src_wb_i.err = '1') then + state <= IDLE; + enter_idle <= '1'; + src_out_int.cyc <= '0'; + src_out_int.stb <= '0'; + elsif(src_wb_i.stall = '0') then + src_out_int.dat <= tmp_dat; + src_out_int.adr <= tmp_adr; + src_out_int.stb <= '1'; + src_out_int.sel(1) <= '1'; + src_out_int.sel(0) <= not tmp_sel; + state <= DATA; + end if; + + when THROW_ERROR => + if(snk_fab_i.sof='1') then + sof_reg <= '1'; + end if; + if(src_wb_i.err = '1') then + enter_idle <= '1'; + state <= IDLE; + src_out_int.cyc <= '0'; + src_out_int.stb <= '0'; + elsif(src_wb_i.stall = '0') then + stat.error := '1'; + src_out_int.adr <= c_WRF_STATUS; + src_out_int.dat <= f_marshall_wrf_status(stat); + src_out_int.stb <= '1'; + state <= FINISH_CYCLE; + end if; + + + when FINISH_CYCLE => + if(snk_fab_i.sof='1') then + sof_reg <= '1'; + end if; + if(src_wb_i.stall = '0') then + src_out_int.stb <= '0'; + end if; + + if(((ack_count = 0) or g_ignore_ack) and src_out_int.stb = '0') then + src_out_int.cyc <= '0'; + enter_idle <= '1'; + state <= IDLE; + end if; + when others => null; + end case; + end if; + end if; + end process; + + + src_wb_o <= src_out_int; + +end behavioral; + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_sync_detect.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_sync_detect.vhd new file mode 100644 index 000000000..cf0be4e9a --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_sync_detect.vhd @@ -0,0 +1,280 @@ +------------------------------------------------------------------------------- +-- Title : 802.3x 1000base-X compatible synchronization detect unit +-- Project : WhiteRabbit Switch +------------------------------------------------------------------------------- +-- File : ep_sync_detect.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-Co-HT +-- Created : 2010-05-28 +-- Last update: 2012-04-27 +-- Platform : FPGA-generics +-- Standard : VHDL +------------------------------------------------------------------------------- +-- Description: Module implements a link synchronization detect state machine +-- compatible with 802.3x spec. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2010 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2010-05-28 1.0 twlostow Created +------------------------------------------------------------------------------- + + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.endpoint_private_pkg.all; + +entity ep_sync_detect is + + port ( +-- reset, synchronous to rbclk_i, active LOW + rst_n_i : in std_logic; +-- recovered byte clock + rbclk_i : in std_logic; +-- enable, active HI + en_i : in std_logic; +-- decoded data input, active HI + data_i : in std_logic_vector(7 downto 0); +-- decoded K signal, active HI + k_i : in std_logic; +-- 8b10b coding error indication, active HI + err_i : in std_logic; +-- sync detect output, active HI + synced_o : out std_logic; +-- odd/even field indicator (HI = even field) + even_o : out std_logic; + + cal_i: in std_logic + ); + +end ep_sync_detect; + +architecture behavioral of ep_sync_detect is + + type t_sync_fsm_state is (LOSS_OF_SYNC, COMMA_DETECT_1, ACQUIRE_SYNC_1, COMMA_DETECT_2, ACQUIRE_SYNC_2, COMMA_DETECT_3, SYNC_ACQUIRED_1, SYNC_ACQUIRED_2, SYNC_ACQUIRED_3, SYNC_ACQUIRED_4, SYNC_ACQUIRED_2A, SYNC_ACQUIRED_3A, SYNC_ACQUIRED_4A); + + signal state : t_sync_fsm_state; + signal cggood : std_logic; + signal cgbad : std_logic; + signal comma : std_logic; + signal rx_even : std_logic; + signal is_d : std_logic; + signal is_k : std_logic; + signal is_k28_5 : std_logic; + signal good_cgs : unsigned(2 downto 0); + + +begin -- behavioral + + + is_k28_5 <= '1' when data_i = c_k28_5 else '0'; + is_d <= (not k_i); + + comma <= is_k28_5; + +-- cgbad <= err_i or (k_i and comma and rx_even); + + cgbad <= err_i or (k_i and comma and (not rx_even)); + cggood <= not (err_i or (k_i and comma and (not rx_even))); + + even_o <= rx_even; + +-- fixme! + + -- 1000base-x sync detect state machine + -- as defined in 802.3-2008, figure 36-9. + + + sync_fsm : process (rbclk_i, rst_n_i) + begin -- process sync_fsm + if rising_edge(rbclk_i) then + if(rst_n_i = '0') then + state <= LOSS_OF_SYNC; + synced_o <= '0'; + rx_even <= '0'; + good_cgs <= (others => '0'); + else + if(en_i = '0') then + state <= LOSS_OF_SYNC; + synced_o <= '0'; + rx_even <= '0'; + good_cgs <= (others => '0'); + else + + -- prevents from + if(cal_i = '0') then + + case state is + when LOSS_OF_SYNC => + synced_o <= '0'; + if(comma = '1') then + rx_even <= '0'; + state <= COMMA_DETECT_1; + else + rx_even <= not rx_even; + end if; + + when COMMA_DETECT_1 => + rx_even <= not rx_even; + if(is_d = '1') then -- got data + state <= ACQUIRE_SYNC_1; + else + state <= LOSS_OF_SYNC; + end if; + + when ACQUIRE_SYNC_1 => + if(cgbad = '1') then + state <= LOSS_OF_SYNC; + rx_even <= not rx_even; + elsif (rx_even = '1' and comma = '1') then + rx_even <= '0'; -- was 1 + state <= COMMA_DETECT_2; + else + rx_even <= not rx_even; + end if; + + when COMMA_DETECT_2 => + rx_even <= not rx_even; + if(is_d = '1') then + state <= ACQUIRE_SYNC_2; + else + state <= LOSS_OF_SYNC; + end if; + + when ACQUIRE_SYNC_2 => + if(cgbad = '1') then + rx_even <= not rx_even; + state <= LOSS_OF_SYNC; + elsif (rx_even = '1' and comma = '1') then + state <= COMMA_DETECT_3; + rx_even <= '0'; + else + rx_even <= not rx_even; + end if; + + when COMMA_DETECT_3 => + rx_even <= not rx_even; + if(is_d = '1') then + state <= SYNC_ACQUIRED_1; + else + state <= LOSS_OF_SYNC; + end if; + + when SYNC_ACQUIRED_1 => + synced_o <= '1'; + rx_even <= not rx_even; + + if(cggood = '1') then + state <= SYNC_ACQUIRED_1; + end if; + + if (cgbad = '1') then + state <= SYNC_ACQUIRED_2; + end if; + + when SYNC_ACQUIRED_2 => + rx_even <= not rx_even; + good_cgs <= (others => '0'); + + if(cggood = '1') then + state <= SYNC_ACQUIRED_2A; + end if; + + if(cgbad = '1') then + state <= SYNC_ACQUIRED_3; + end if; + + when SYNC_ACQUIRED_2A => + rx_even <= not rx_even; + good_cgs <= good_cgs + 1; + + if(good_cgs = "011" and cggood = '1') then + state <= SYNC_ACQUIRED_1; + end if; + + if(cgbad = '1') then + state <= SYNC_ACQUIRED_3; + end if; + + when SYNC_ACQUIRED_3 => + rx_even <= not rx_even; + good_cgs <= (others => '0'); + + if(cggood = '1') then + state <= SYNC_ACQUIRED_3A; + end if; + + if(cgbad = '1') then + state <= SYNC_ACQUIRED_4; + end if; + + when SYNC_ACQUIRED_3A => + rx_even <= not rx_even; + good_cgs <= good_cgs + 1; + + if(good_cgs = "011" and cggood = '1') then + state <= SYNC_ACQUIRED_2; + end if; + + if(cgbad = '1') then + state <= SYNC_ACQUIRED_4; + end if; + + when SYNC_ACQUIRED_4 => + rx_even <= not rx_even; + good_cgs <= (others => '0'); + + if(cggood = '1') then + state <= SYNC_ACQUIRED_4A; + end if; + + if(cgbad = '1') then + state <= LOSS_OF_SYNC; + end if; + + when SYNC_ACQUIRED_4A => + rx_even <= not rx_even; + good_cgs <= good_cgs + 1; + + if(good_cgs = "011" and cggood = '1') then + state <= SYNC_ACQUIRED_3; + end if; + + if (cgbad = '1') then + state <= LOSS_OF_SYNC; + end if; + when others => null; + end case; + end if; + end if; + end if; + end if; + end process; + + + + +end behavioral; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_sync_detect_16bit.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_sync_detect_16bit.vhd new file mode 100644 index 000000000..c49209499 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_sync_detect_16bit.vhd @@ -0,0 +1,193 @@ +------------------------------------------------------------------------------- +-- Title : 802.3x 1000base-X compatible synchronization detect unit +-- Project : WhiteRabbit Switch +------------------------------------------------------------------------------- +-- File : ep_sync_detect.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-Co-HT +-- Created : 2010-05-28 +-- Last update: 2012-01-18 +-- Platform : FPGA-generics +-- Standard : VHDL +------------------------------------------------------------------------------- +-- Description: Module implements a link synchronization detect state machine +-- compatible with 802.3x spec. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2010 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2010-05-28 1.0 twlostow Created +------------------------------------------------------------------------------- + + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.endpoint_private_pkg.all; + +entity ep_sync_detect_16bit is + + port ( +-- reset, synchronous to rbclk_i, active LOW + rst_n_i : in std_logic; +-- recovered byte clock + rbclk_i : in std_logic; +-- enable, active HI + en_i : in std_logic; +-- decoded data input, active HI + data_i : in std_logic_vector(15 downto 0); +-- decoded K signal, active HI + k_i : in std_logic_vector(1 downto 0); +-- 8b10b coding error indication, active HI + err_i : in std_logic; +-- sync detect output, active HI + synced_o : out std_logic; + + cal_i : in std_logic + ); + +end ep_sync_detect_16bit; + +architecture behavioral of ep_sync_detect_16bit is + + type t_sync_fsm_state is (LOSS_OF_SYNC, CD_ACQ_1, CD_ACQ_2, CD_ACQ_3, SYNC_ACQUIRED_1, SYNC_ACQUIRED_2, SYNC_ACQUIRED_3, SYNC_ACQUIRED_4, SYNC_ACQUIRED_2A, SYNC_ACQUIRED_3A, SYNC_ACQUIRED_4A); + + + function f_pick(sel : std_logic; + w1 : t_sync_fsm_state; + w0 : t_sync_fsm_state) return t_sync_fsm_state is + + begin + if(sel = '1') then + return w1; + else + return w0; + end if; + end f_pick; + + + + signal state : t_sync_fsm_state; + signal good_cgs : unsigned(2 downto 0); + + signal valid_idle : std_logic; + signal invalid_code : std_logic; + signal valid_data : std_logic; + +begin -- behavioral + + valid_idle <= '1' when (k_i = "10" and data_i(15 downto 8) = c_k28_5 and err_i = '0') else '0'; + valid_data <= '1' when (k_i = "00" and err_i = '0') else '0'; + invalid_code <= '1' when (err_i = '1' or (k_i(0) = '1' and data_i(7 downto 0) = c_k28_5)) else '0'; + + + sync_fsm : process (rbclk_i, rst_n_i) + begin -- process sync_fsm + if rising_edge(rbclk_i) then + if(rst_n_i = '0') then + state <= LOSS_OF_SYNC; + synced_o <= '0'; + good_cgs <= (others => '0'); + else + if(en_i = '0') then + state <= LOSS_OF_SYNC; + synced_o <= '0'; + good_cgs <= (others => '0'); + else + + -- prevents from + if(cal_i = '0') then + + case state is + when LOSS_OF_SYNC => + synced_o <= '0'; + state <= f_pick(valid_idle, CD_ACQ_1, LOSS_OF_SYNC); + when CD_ACQ_1 => + state <= f_pick(valid_idle or valid_data, CD_ACQ_2, LOSS_OF_SYNC); + when CD_ACQ_2 => + state <= f_pick(valid_idle, CD_ACQ_3, LOSS_OF_SYNC); + when CD_ACQ_3 => + state <= f_pick(valid_idle or valid_data, SYNC_ACQUIRED_1, LOSS_OF_SYNC); + + when SYNC_ACQUIRED_1 => + synced_o <= '1'; + state <= f_pick(invalid_code, SYNC_ACQUIRED_2, SYNC_ACQUIRED_1); + + when SYNC_ACQUIRED_2 => + good_cgs <= (others => '0'); + state <= f_pick(invalid_code, SYNC_ACQUIRED_3, SYNC_ACQUIRED_2A); + + when SYNC_ACQUIRED_2A => + good_cgs <= good_cgs + 1; + + if(good_cgs = "011" and invalid_code = '0') then + state <= SYNC_ACQUIRED_1; + end if; + + if(invalid_code = '1') then + state <= SYNC_ACQUIRED_3; + end if; + + when SYNC_ACQUIRED_3 => + good_cgs <= (others => '0'); + state <= f_pick(invalid_code, SYNC_ACQUIRED_4, SYNC_ACQUIRED_3A); + + + when SYNC_ACQUIRED_3A => + good_cgs <= good_cgs + 1; + + if(good_cgs = "011" and invalid_code = '0') then + state <= SYNC_ACQUIRED_2; + end if; + + if(invalid_code = '1') then + state <= SYNC_ACQUIRED_4; + end if; + + when SYNC_ACQUIRED_4 => + good_cgs <= (others => '0'); + state <= f_pick(invalid_code, LOSS_OF_SYNC, SYNC_ACQUIRED_4A); + + when SYNC_ACQUIRED_4A => + good_cgs <= good_cgs + 1; + + if(good_cgs = "011" and invalid_code = '0') then + state <= SYNC_ACQUIRED_3; + end if; + + if (invalid_code = '1') then + state <= LOSS_OF_SYNC; + end if; + end case; + end if; + end if; + end if; + end if; + end process; + + + + +end behavioral; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_timestamping_unit.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_timestamping_unit.vhd new file mode 100644 index 000000000..0ea2cfd2b --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_timestamping_unit.vhd @@ -0,0 +1,424 @@ +------------------------------------------------------------------------------- +-- Title : Optical 1000base-X endpoint - IEEE1588/WhiteRabbit +-- timestamping unit +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : ep_timestamping_unit.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2009-06-22 +-- Last update: 2017-02-03 +-- Platform : FPGA-generic +-- Standard : VHDL'87 +------------------------------------------------------------------------------- +-- Description: Timestamping unit. Takes both TX and RX timestamps upon +-- detection of rising edge on asynchronous timestamp strobe inputs. +-- There are 2 timestamps taken: +-- - rising edge timestamp (28 bits by default) - the main timestamp value +-- - falling edge timestamp (4 least significant bits of the TS counter) which +-- are used to detect metastabilities and setup/hold violations which may +-- occur during sampling asynchronous timestamp strobes. +-- Both timestamps are taken using refclk_i. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2009 - 2012 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2009-06-22 0.1 twlostow Created +------------------------------------------------------------------------------- + + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.gencores_pkg.all; +use work.endpoint_private_pkg.all; +use work.ep_wbgen2_pkg.all; + +entity ep_timestamping_unit is + generic ( +-- size of rising edge timestamp + g_timestamp_bits_r : natural := 28; +-- size of falling edge timestamp + g_timestamp_bits_f : natural := 4; + g_ref_clock_rate : integer := 125000000 + ); + + port ( +-- reference clock (for the timestamping counters) + clk_ref_i : in std_logic; + +-- reference / 2 (bus-side logic) + clk_sys_i : in std_logic; + +-- RX clock + clk_rx_i : in std_logic; + + -- resets + rst_n_rx_i : in std_logic; + rst_n_ref_i : in std_logic; + rst_n_sys_i : in std_logic; + +-- PPS pulse input (active HI for 1 clk_ref_i cycle) for internal TS counter synchronization + pps_csync_p1_i : in std_logic; + + pps_valid_i : in std_logic; + +-- asynchronous TX/RX timestamp triggers (from PCS) + tx_timestamp_trigger_p_a_i : in std_logic; + rx_timestamp_trigger_p_a_i : in std_logic; + +------------------------------------------------------------------------------- +-- RX Timestamp output (clk_rx_i clock domain) +------------------------------------------------------------------------------- + + -- RX timestamp (to RX deframer) + rxts_timestamp_o : out std_logic_vector(31 downto 0); + + -- RX timestamp strobe (back to the PCSr). When HI, + -- rxts_timestamp_o and rxts_timestamp_valid_o contain information about + -- the RX timestamp and its validity + rxts_timestamp_stb_o : out std_logic; + + -- RX timestamp valid (to RX deframer) + rxts_timestamp_valid_o : out std_logic; + +------------------------------------------------------------------------------- +-- TX Timestamp output (clk_ref_i clock domain) +------------------------------------------------------------------------------- + + -- TX timestamp output (to TXTSU/Framer) + txts_timestamp_o : out std_logic_vector(31 downto 0); + + -- TX timestamp strobe (to TXTSU/Framer). When HI, + -- txts_timestamp_o and txts_timestamp_valid_o contain information about + -- the TX timestamp and its validity + txts_timestamp_stb_o : out std_logic; + + -- TX timestamp valid (to TXTSU/Framer) + txts_timestamp_valid_o : out std_logic; + + txts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration + rxts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration + +------------------------------------------------------------------------------- +-- Wishbone regs +------------------------------------------------------------------------------- + + regs_i : in t_ep_out_registers; + regs_o : out t_ep_in_registers + ); + +end ep_timestamping_unit; + + + +architecture syn of ep_timestamping_unit is + + + component ep_ts_counter + generic ( + g_num_bits_r : natural; + g_num_bits_f : natural; + g_init_value : natural; + g_max_value : natural); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + overflow_o : out std_logic := '0'; + value_r_o : out std_logic_vector(g_num_bits_r-1 downto 0); + value_f_o : out std_logic_vector(g_num_bits_f-1 downto 0); + pps_p_i : in std_logic; + sync_start_p_i : in std_logic; + sync_done_o : out std_logic); + end component; + + signal cntr_rx_r : std_logic_vector(g_timestamp_bits_r-1 downto 0); + signal cntr_rx_f : std_logic_vector(g_timestamp_bits_f-1 downto 0); + signal cntr_tx_r : std_logic_vector(g_timestamp_bits_r-1 downto 0); + signal cntr_tx_f : std_logic_vector(g_timestamp_bits_f-1 downto 0); + + signal cntr_r : std_logic_vector(g_timestamp_bits_r-1 downto 0); + signal cntr_f : std_logic_vector(g_timestamp_bits_f-1 downto 0); + + signal take_tx_synced_p, take_rx_synced_p : std_logic; + signal take_tx_synced_p_fedge, take_rx_synced_p_fedge : std_logic; + + signal tx_sync_delay : std_logic_vector(4 downto 0); + signal rx_sync_delay : std_logic_vector(4 downto 0); + signal rx_ts_done : std_logic; + signal tx_ts_done : std_logic; + + signal got_tx_oob : std_logic; + signal tx_oob_reg : std_logic_vector(15 downto 0); + + + signal rx_oob_reg : std_logic_vector(47 downto 0); + signal fid_valid : std_logic; + + signal txts_valid : std_logic; + + signal valid_rx, valid_tx : std_logic; + + + signal cal_count : unsigned(5 downto 0); + signal rx_trigger_mask, rx_trigger_a, rx_cal_pulse_a : std_logic; + + signal regs_o_tscr_cs_done : std_logic; + signal regs_o_tscr_rx_cal_result : std_logic; + +begin -- syn + + -- Instatniation of the timestamping counter + U_counter : ep_ts_counter + generic map ( + g_num_bits_r => g_timestamp_bits_r, + g_num_bits_f => g_timestamp_bits_f, + g_init_value => 0, + g_max_value => g_ref_clock_rate-1) + port map ( + + clk_i => clk_ref_i, + rst_n_i => rst_n_ref_i, + pps_p_i => pps_csync_p1_i, + overflow_o => open, + value_r_o => cntr_r, + value_f_o => cntr_f, + sync_start_p_i => regs_i.tscr_cs_start_o, + sync_done_o => regs_o_tscr_cs_done + ); + + + p_gen_regs_o: process (regs_o_tscr_cs_done, regs_o_tscr_rx_cal_result) is + begin + -- initial values + regs_o <= c_ep_in_registers_init_value; + + -- override initial values + regs_o.tscr_cs_done_i <= regs_o_tscr_cs_done; + regs_o.tscr_rx_cal_result_i <= regs_o_tscr_rx_cal_result; + + end process p_gen_regs_o; + + p_rx_timestamper_calibration : process(clk_rx_i) + begin + if rising_edge(clk_rx_i) then + if rst_n_rx_i = '0' then + cal_count <= (others => '0'); + rx_cal_pulse_a <= '0'; + rx_trigger_mask <= '1'; + + elsif(regs_i.tscr_rx_cal_start_o = '1') then + cal_count <= to_unsigned(1, 6); + rx_trigger_mask <= '0'; + elsif(cal_count /= 0) then + cal_count <= cal_count + 1; + + if(rx_ts_done = '1') then + if(cntr_rx_f /= cntr_rx_r(g_timestamp_bits_f-1 downto 0)) then + regs_o_tscr_rx_cal_result <= '1'; + else + regs_o_tscr_rx_cal_result <= '0'; + end if; + end if; + + else + + rx_trigger_mask <= '1'; + end if; + + if(cal_count (5 downto 4) = x"01") then + rx_cal_pulse_a <= '1'; + else + rx_cal_pulse_a <= '0'; + end if; + + end if; + end process; + + + rx_trigger_a <= (rx_timestamp_trigger_p_a_i and rx_trigger_mask) or rx_cal_pulse_a; + -- Sync chains for timestamp strobes: 4 combinations - (TX-RX) -> (rising/falling) + sync_ffs_tx_r : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_ref_i, + rst_n_i => rst_n_ref_i, + data_i => tx_timestamp_trigger_p_a_i, + synced_o => open, + npulse_o => open, + ppulse_o => take_tx_synced_p); + + + + sync_ffs_rx_r : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_ref_i, + rst_n_i => rst_n_ref_i, + data_i => rx_trigger_a, + synced_o => open, + npulse_o => open, + ppulse_o => take_rx_synced_p); + + + sync_ffs_tx_f : gc_sync_ffs + generic map ( + g_sync_edge => "negative") + port map ( + clk_i => clk_ref_i, + rst_n_i => rst_n_ref_i, + data_i => tx_timestamp_trigger_p_a_i, + synced_o => open, + npulse_o => open, + ppulse_o => take_tx_synced_p_fedge); + + sync_ffs_rx_f : gc_sync_ffs + generic map ( + g_sync_edge => "negative") + port map ( + clk_i => clk_ref_i, + rst_n_i => rst_n_ref_i, + data_i => rx_trigger_a, + synced_o => open, + npulse_o => open, + ppulse_o => take_rx_synced_p_fedge); + + + + take_r : process(clk_ref_i) + begin + if rising_edge(clk_ref_i) then + if(rst_n_ref_i = '0') then + cntr_rx_r <= (others => '0'); + cntr_tx_r <= (others => '0'); + + rx_sync_delay <= (others => '0'); + tx_sync_delay <= (others => '0'); + else + -- shift reg + + if take_rx_synced_p = '1' then + cntr_rx_r <= cntr_r; + valid_rx <= pps_valid_i; + rx_sync_delay(rx_sync_delay'length-1 downto rx_sync_delay'length-4) <= (others => '1'); + else + rx_sync_delay <= '0' & rx_sync_delay(rx_sync_delay'length-1 downto 1); + end if; + + if take_tx_synced_p = '1' then + cntr_tx_r <= cntr_r; + valid_tx <= pps_valid_i; + tx_sync_delay(tx_sync_delay'length-1 downto tx_sync_delay'length-4) <= (others => '1'); + else + tx_sync_delay <= '0' & tx_sync_delay(tx_sync_delay'length-1 downto 1); + end if; + + end if; + end if; + end process; + + take_f : process(clk_ref_i) + begin + if falling_edge(clk_ref_i) then + if rst_n_ref_i = '0' then + cntr_rx_f <= (others => '0'); + cntr_tx_f <= (others => '0'); + else + if take_rx_synced_p_fedge = '1' then + cntr_rx_f <= cntr_f; + end if; + if take_tx_synced_p_fedge = '1' then + cntr_tx_f <= cntr_f; + end if; + end if; + end if; + end process; + + + -- timestamping "done" signals sync chains (clk_ref -> clk_sys) + tx_done_gen : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_sys_i, + data_i => tx_sync_delay(0), + synced_o => open, + npulse_o => tx_ts_done, + ppulse_o => open); + + -- timestamping "done" signals sync chains (clk_rx -> clk_sys) + rx_done_gen : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_rx_i, + rst_n_i => rst_n_rx_i, + data_i => rx_sync_delay(0), + synced_o => open, + npulse_o => rx_ts_done, + ppulse_o => open); + + txts_o <= tx_ts_done; -- 2013-Nov-28 peterj added for debugging/calibration + rxts_o <= rx_ts_done; -- 2013-Nov-28 peterj added for debugging/calibration + + p_output_rx_ts : process (clk_rx_i) + begin + if rising_edge(clk_rx_i) then + if(rst_n_rx_i = '0') then + rxts_timestamp_stb_o <= '0'; + rxts_timestamp_o <= (others => '0'); + rxts_timestamp_valid_o <= '0'; + else + if(regs_i. tscr_en_rxts_o = '0') then + rxts_timestamp_stb_o <= '0'; + elsif(rx_ts_done = '1' and regs_i.tscr_en_rxts_o = '1') then + rxts_timestamp_stb_o <= '1'; + rxts_timestamp_valid_o <= valid_rx; + rxts_timestamp_o <= cntr_rx_f & cntr_rx_r; + end if; + end if; + end if; + end process; + + + p_output_tx_ts : process (clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if(rst_n_sys_i = '0') then + txts_timestamp_o <= (others => '0'); + txts_timestamp_stb_o <= '0'; + txts_timestamp_valid_o <= '0'; + elsif(tx_ts_done = '1' and regs_i.tscr_en_txts_o = '1') then + txts_timestamp_o <= cntr_tx_f & cntr_tx_r; + txts_timestamp_stb_o <= '1'; + txts_timestamp_valid_o <= valid_tx; + end if; + end if; + end process; + +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_ts_counter.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_ts_counter.vhd new file mode 100644 index 000000000..2b9589f5a --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_ts_counter.vhd @@ -0,0 +1,152 @@ +------------------------------------------------------------------------------- +-- Title : Optical 1000base-X endpoint - IEEE1588 timestamping counter +-- Project : White Rabbit Switch +------------------------------------------------------------------------------- +-- File : ep_ts_counter.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2009-06-22 +-- Last update: 2017-02-03 +-- Platform : FPGA-generic +-- Standard : VHDL'87 +------------------------------------------------------------------------------- +-- Description: Implementation of dual-edge synchronous counter for +-- PTP timestamping purposes. Falling edge counter always follows the value of +-- rising edge counter. For space reasons only some LSBs of falling edge +-- counter are outputted. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2009 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2009-06-22 1.0 twlostow Created +-- 2010-09-01 1.0 twlostow Added PPS sync +------------------------------------------------------------------------------- + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.endpoint_private_pkg.all; + +entity ep_ts_counter is + + generic ( +-- number of bits for rising edge counter + g_num_bits_r : natural := 27; +-- number of bits to copy for falling edge counter + g_num_bits_f : natural := 5; +-- initial value of the counter (after reset) + g_init_value : natural := 124999990; +-- max value of the counter after reaching which it goes back to 0 + g_max_value : natural := 124999999 + ); + + port ( + -- counter clock + clk_i : in std_logic; + -- synchronous reset, active LOW + rst_n_i : in std_logic; +-- overflow indicator, active HI when counter value = g_max_value + overflow_o : out std_logic := '0'; +-- counter values (rising and falling edge) + value_r_o : out std_logic_vector(g_num_bits_r-1 downto 0); + value_f_o : out std_logic_vector(g_num_bits_f-1 downto 0); + +-- PPS pulse input, active HI, synchronous to clk_i. Resets the counter when +-- synchronization is enabled + pps_p_i : in std_logic; + +-- Synchronization enable: a HI pulse on this line will cause the counter to be +-- synced to next incoming PPS pulse. After then, sync_done_o will become HI. + sync_start_p_i : in std_logic; + +-- Synchronization done: HI indicates that we've got a PPS pulse we've been waiting for +-- and now the counter value equals 0 when PPS pulse is active. + sync_done_o : out std_logic + ); + +end ep_ts_counter; + +architecture syn of ep_ts_counter is + + signal cntr_r : unsigned(g_num_bits_r-1 downto 0) := (others => '0'); + signal cntr_f : unsigned (g_num_bits_f-1 downto 0); + +begin -- syn + + + -- the main TS counter counts on rising clock edge. + rising_ctr : process (clk_i) + begin + if rising_edge(clk_i) then + if(rst_n_i = '0') then + cntr_r <= to_unsigned(g_init_value, g_num_bits_r); + sync_done_o <= '1'; + else + +-- we've got a synchronization request + --if(sync_start_p_i = '1') then + -- sync_in_progress <= '1'; + -- sync_done_o <= '0'; +-- so wait for the next PPS pulse, and then set the PPS counter to 1 (so it +-- equals to 0 when PPS input is active) + --elsif(sync_in_progress = '1' and pps_p_i = '1') then + -- sync_in_progress <= '0'; + -- sync_done_o <= '1'; + -- cntr_r <= to_unsigned(1, g_num_bits_r); + --else + + + -- increment the counter, reset on overflow + if(cntr_r = to_unsigned(g_max_value, g_num_bits_r) or pps_p_i = '1') then + cntr_r <= (others => '0'); + else + cntr_r <= cntr_r + 1; + end if; + end if; + + -- generate overflow output + if(cntr_r = to_unsigned(0, g_num_bits_r)) then + overflow_o <= '1'; + else + overflow_o <= '0'; + end if; +-- end if; + end if; + end process; + + +-- the falling edge counter just copies the rising edge counter half a clock +-- cycle after. + falling_ctr : process(clk_i) + begin + if falling_edge(clk_i)then + cntr_f <= cntr_r(g_num_bits_f-1 downto 0); + end if; + end process; + + -- stupid VHDL type conversion mumbo-jumbo + value_r_o <= std_logic_vector(cntr_r); + value_f_o <= std_logic_vector(cntr_f); +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_crc_inserter.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_crc_inserter.vhd new file mode 100644 index 000000000..a560f06e6 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_crc_inserter.vhd @@ -0,0 +1,267 @@ +------------------------------------------------------------------------------- +-- Title : 1000base-X MAC/Endpoint +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : ep_tx_crc_inserter.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2009-06-22 +-- Last update: 2017-02-02 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Calculates and embeds the CRC into the transmitted frame. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2009-2012 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; + +use work.gencores_pkg.all; +use work.wr_fabric_pkg.all; +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; +use work.ep_wbgen2_pkg.all; +use work.ep_crc32_pkg.all; + +entity ep_tx_crc_inserter is + generic( + g_use_new_crc : boolean := false); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + dbg_o : out std_logic_vector(2 downto 0) + ); +end ep_tx_crc_inserter; + +architecture behavioral of ep_tx_crc_inserter is + + type t_state is (IDLE, WAIT_CRC, EMBED_1, EMBED_2, EMBED_3); + +-- general signals + signal state : t_state; + +-- CRC generator signals + signal crc_gen_reset : std_logic; + signal crc_gen_enable : std_logic; + signal crc_value : std_logic_vector(31 downto 0); + + signal odd_length : std_logic; + + signal embed_valid : std_logic; + + signal stored_msb : std_logic_vector(7 downto 0); + signal in_payload : std_logic; + signal src_dreq_d0 : std_logic; + + signal crc_p_value, crc_n_value : std_logic_vector(31 downto 0); + --signal crc_next, crc_new : std_logic_vector(31 downto 0); + +begin -- behavioral + + dbg_o <= "111" when (state = IDLE) else + "110" when (state = WAIT_CRC) else + "101" when (state = EMBED_1) else + "100" when (state = EMBED_2) else + "011" when (state = EMBED_3) else + "000"; + + in_payload <= '1' when (state = IDLE or state = WAIT_CRC) else '0'; +-- ML: potential optimization (if desperate) +-- in_payload <= '1' when (state = IDLE or state = WAIT_CRC) or (src_dreq_d0 = '1' and odd_length = '0' and state = EMBED_2)) else '0'; + crc_gen_reset <= '1' when rst_n_i = '0' or snk_fab_i.sof = '1' else '0'; + crc_gen_enable <= '1' when (snk_fab_i.dvalid = '1' and in_payload = '1') else '0'; + + gen_old_crc: if(g_use_new_crc = false) generate + U_tx_crc_generator : gc_crc_gen + generic map ( + g_polynomial => x"04C11DB7", + g_init_value => x"ffffffff", + g_residue => x"38fb2284", + g_data_width => 16, + g_half_width => 8, + g_sync_reset => 1, + g_dual_width => 1, + g_registered_match_output => false, + g_registered_crc_output => true) + port map ( + clk_i => clk_sys_i, + rst_i => crc_gen_reset, + en_i => crc_gen_enable, + half_i => snk_fab_i.bytesel, + data_i => snk_fab_i.data, + match_o => open, + crc_o => crc_value); + end generate; + + gen_new_crc: if(g_use_new_crc = true) generate + p_check_crc_p: process(clk_sys_i) + begin + if falling_edge(clk_sys_i) then + if(crc_gen_reset = '1')then + crc_n_value <= c_CRC32_INIT_VALUE; + elsif(crc_gen_enable = '1') then + crc_n_value <= f_update_crc32_d8(crc_p_value, snk_fab_i.data(15 downto 8)); + end if; + end if; + end process; + + p_check_crc_n: process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if(crc_gen_reset = '1') then + crc_p_value <= c_CRC32_INIT_VALUE; + elsif(crc_gen_enable = '1' and snk_fab_i.bytesel = '0') then + crc_p_value <= f_update_crc32_d8(crc_n_value, snk_fab_i.data(7 downto 0)); + end if; + end if; + end process; + + crc_value <= crc_p_value when odd_length = '0' else + crc_n_value; + + end generate; + + p_delay_dreq: process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + src_dreq_d0 <= src_dreq_i; + end if; + end process; + + p_crc_fsm : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if(rst_n_i = '0' or snk_fab_i.error = '1') then + state <= IDLE; + else + case state is + when IDLE => + odd_length <= '0'; + + if(snk_fab_i.sof = '1') then + state <= WAIT_CRC; + end if; + + when WAIT_CRC => + if(snk_fab_i.bytesel = '1') then + odd_length <= '1'; + stored_msb <= snk_fab_i.data(15 downto 8); + end if; + + if(snk_fab_i.eof = '1' or snk_fab_i.addr = c_WRF_OOB) then + state <= EMBED_1; + end if; + + when EMBED_1 => + if(src_dreq_d0 = '1') then + state <= EMBED_2; + end if; + + when EMBED_2 => + if(src_dreq_d0 = '1') then + if(odd_length = '1') then + state <= EMBED_3; + else + state <= IDLE; + end if; + end if; + + when EMBED_3 => + if(src_dreq_d0 = '1') then + state <= IDLE; + end if; + end case; + end if; + end if; + end process; + + p_drive_data_addr : process(state, crc_value, odd_length, stored_msb, snk_fab_i, src_dreq_d0) + begin + + case state is + when EMBED_1 => + if(odd_length = '1') then + src_fab_o.data <= stored_msb & crc_value(31 downto 24); + src_fab_o.addr <= c_WRF_DATA; + src_fab_o.bytesel <= '0'; + src_fab_o.dvalid <= src_dreq_d0; + src_fab_o.eof <= '0'; + else + src_fab_o.data <= crc_value(31 downto 16); + src_fab_o.addr <= c_WRF_DATA; + src_fab_o.bytesel <= '0'; + src_fab_o.dvalid <= src_dreq_d0; + src_fab_o.eof <= '0'; + end if; + + when EMBED_2 => + if(odd_length = '1') then + src_fab_o.data <= crc_value(23 downto 8); + src_fab_o.addr <= c_WRF_DATA; + src_fab_o.bytesel <= '0'; + src_fab_o.dvalid <= src_dreq_d0; + src_fab_o.eof <= '0'; + else + src_fab_o.data <= crc_value(15 downto 0); + src_fab_o.addr <= c_WRF_DATA; + src_fab_o.bytesel <= '0'; + src_fab_o.dvalid <= src_dreq_d0; + src_fab_o.eof <= '1'; + end if; + + when EMBED_3 => + src_fab_o.data <= crc_value(7 downto 0) & "XXXXXXXX"; + src_fab_o.addr <= c_WRF_DATA; + src_fab_o.bytesel <= '1'; + src_fab_o.dvalid <= src_dreq_d0; + src_fab_o.eof <= '1'; + + when others => + src_fab_o.data <= snk_fab_i.data; + src_fab_o.addr <= snk_fab_i.addr; + src_fab_o.bytesel <= '0'; + src_fab_o.dvalid <= snk_fab_i.dvalid and not snk_fab_i.bytesel; + src_fab_o.eof <= '0'; + + end case; + + src_fab_o.addr <= c_WRF_DATA; + end process; + + snk_dreq_o <= src_dreq_i and in_payload; + src_fab_o.sof <= snk_fab_i.sof; + src_fab_o.error <= snk_fab_i.error; + src_fab_o.has_rx_timestamp <= snk_fab_i.has_rx_timestamp; + src_fab_o.rx_timestamp_valid <= snk_fab_i.rx_timestamp_valid; + +end behavioral; + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_header_processor.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_header_processor.vhd new file mode 100644 index 000000000..233f0b130 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_header_processor.vhd @@ -0,0 +1,723 @@ +------------------------------------------------------------------------------- +-- Title : 1000base-X MAC/Endpoint - TX packet header processing unit +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : ep_tx_header_processor.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2009-06-22 +-- Last update: 2017-02-02 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Processes headers and OOBs of the packets to be transmitted. +-- - provides a Wishbone-B4 interface to the host +-- - embeds source MAC addresses if they aren't defined by the host +-- - decodes TX OOB data and passes it to the timestamping unit +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2009 - 2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.gencores_pkg.all; +use work.genram_pkg.all; +use work.wr_fabric_pkg.all; +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; +use work.ep_wbgen2_pkg.all; + +entity ep_tx_header_processor is + generic( + g_with_packet_injection : boolean; + g_with_timestamper : boolean; + g_force_gap_length : integer; + g_runt_padding : boolean + ); + + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + +------------------------------------------------------------------------------ +-- Physical Coding Sublayer (PCS) interface +------------------------------------------------------------------------------ + + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + + pcs_busy_i : in std_logic; + pcs_error_i : in std_logic; + +------------------------------------------------------------------------------- +-- WRF Sink (see WRF specification for the details) +------------------------------------------------------------------------------- + + wb_snk_i : in t_wrf_sink_in; + wb_snk_o : out t_wrf_sink_out; + +------------------------------------------------------------------------------- +-- Flow Control Unit signals +------------------------------------------------------------------------------- + +-- TX send pause frame - when active, the framer will send a PAUSE frame +-- as soon as possible. The pause quanta must be provided on tx_pause_delay_i input. + fc_pause_req_i : in std_logic; + fc_pause_delay_i : in std_logic_vector(15 downto 0); + +-- TX send pause acknowledge - active after the current pause send request has +-- been completed + fc_pause_ready_o : out std_logic; + +-- When active, the framer will allow for packet transmission. + fc_flow_enable_i : in std_logic; + +------------------------------------------------------------------------------- +-- OOB/TSU signals +------------------------------------------------------------------------------- + +-- Port ID value + txtsu_port_id_o : out std_logic_vector(4 downto 0); +-- Frame ID value + txtsu_fid_o : out std_logic_vector(16 -1 downto 0); +-- Encoded timestamps + txtsu_ts_value_o : out std_logic_vector(28 + 4 - 1 downto 0); + txtsu_ts_incorrect_o : out std_logic; + +-- TX timestamp strobe: HI tells the TX timestamping unit that a timestamp is +-- available on txtsu_ts_value_o, txtsu_fid_o andd txtsu_port_id_o. The correctness +-- of the timestamping is indiacted on txtsu_ts_incorrect_o. Line remains HI +-- until assertion of txtsu_ack_i. + txtsu_stb_o : out std_logic; + +-- TX timestamp acknowledge: HI indicates that TXTSU has successfully received +-- the timestamp + txtsu_ack_i : in std_logic; + +--------------------------------------------------------------------------- +-- Timestamp input from the timestamping unit +--------------------------------------------------------------------------- + txts_timestamp_i : in std_logic_vector(31 downto 0); + txts_timestamp_valid_i : in std_logic; + +------------------------------------------------------------------------------- +-- Control registers +------------------------------------------------------------------------------- + ep_ctrl_i : in std_logic; + regs_i : in t_ep_out_registers + + ); + + +end ep_tx_header_processor; + +architecture behavioral of ep_tx_header_processor is + + constant c_IFG_LENGTH : integer := g_force_gap_length ;--0; + constant c_MIN_FRAME_THR : integer := 30; + constant c_MIN_QFRAME_THR : integer := 32; -- we need to pad more 802.1q + -- tagged frame if it's going to be + -- untagged later in the tx_path + + type t_tx_framer_state is (TXF_IDLE, TXF_DELAYED_SOF, TXF_ADDR, TXF_DATA, TXF_GAP, TXF_PAD, TXF_ABORT, TXF_STORE_TSTAMP); + +-- general signals + signal state : t_tx_framer_state; + signal counter : unsigned(13 downto 0); + +-- Flow Control-related signals + signal tx_pause_mode : std_logic; + + signal snk_valid : std_logic; + + signal sof_p1, eof_p1, abort_p1, error_p1 : std_logic; + signal snk_cyc_d0 : std_logic; + + signal stored_status : t_wrf_status_reg; + + type t_oob_fsm_state is (OOB_IDLE, OOB_1, OOB_2); + + signal oob_state : t_oob_fsm_state; + signal oob : t_wrf_oob; + + signal wb_out : t_wrf_sink_out; + signal decoded_status : t_wrf_status_reg; + + signal abort_now : std_logic; + signal stall_int : std_logic; + signal tx_en : std_logic; + signal ep_ctrl : std_logic; + signal bitsel_d : std_logic; + signal needs_padding : std_logic; + signal to_be_untagged : std_logic; + signal sof_reg : std_logic; + + function b2s (x : boolean) + return std_logic is + begin + if(x) then + return '1'; + else + return '0'; + end if; + end function; + + function f_pick (cond : boolean; when_1 : std_logic_vector; when_0 : std_logic_vector) + return std_logic_vector is + begin + if(cond) then + return when_1; + else + return when_0; + end if; + end function; + + function f_pick (cond : std_logic; when_1 : std_logic_vector; when_0 : std_logic_vector) + return std_logic_vector is + begin + if(cond = '1') then + return when_1; + else + return when_0; + end if; + end function; + + function f_pick (cond : boolean; when_1 : std_logic ; when_0 : std_logic) + return std_logic is + begin + if(cond) then + return when_1; + else + return when_0; + end if; + end function; + + function f_fabric_2_slv ( + in_i : t_wrf_sink_in; + in_o : t_wrf_sink_out) return std_logic_vector is + variable tmp : std_logic_vector(31 downto 0); + begin + tmp(15 downto 0) := in_i.dat; + tmp(17 downto 16) := in_i.adr; + tmp(19 downto 18) := in_i.sel; + tmp(20) := in_i.cyc; + tmp(21) := in_i.stb; + tmp(22) := in_i.we; + tmp(23) := in_o.ack; + tmp(24) := in_o.stall; + tmp(25) := in_o.err; + tmp(26) := in_o.rty; + return tmp; + end f_fabric_2_slv; + +begin -- behavioral + + p_detect_frame : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + snk_cyc_d0 <= '0'; + else + snk_cyc_d0 <= wb_snk_i.cyc; + end if; + end if; + end process; + + sof_p1 <= not snk_cyc_d0 and wb_snk_i.cyc; + eof_p1 <= snk_cyc_d0 and not wb_snk_i.cyc; + + snk_valid <= (wb_snk_i.cyc and wb_snk_i.stb and wb_snk_i.we) and not wb_out.stall; + + decoded_status <= f_unmarshall_wrf_status(wb_snk_i.dat); + + error_p1 <= snk_valid and b2s(wb_snk_i.adr = c_WRF_STATUS) and decoded_status.error; + +-- abort_now <= '1' when (state /= TXF_IDLE and state /= TXF_GAP) and (regs_i.ecr_tx_en_o = '0' or error_p1 = '1') else '0'; + abort_now <= '1' when (state /= TXF_IDLE and state /= TXF_GAP) and (tx_en = '0' or error_p1 = '1') else + '1' when (state = TXF_ABORT and wb_snk_i.cyc = '1' ) else + '0'; -- ML + + GEN_PADDING: if(g_runt_padding) generate + needs_padding <= '1' when( (to_be_untagged = '1' and counter < c_MIN_QFRAME_THR) or + counter < c_MIN_FRAME_THR) else + '0'; + end generate; + GEN_NOPADDING: if( not g_runt_padding) generate + -- even if padding is disabled, we still need to pad short 802.1q frames + -- that will be untagged + needs_padding <= '1' when (to_be_untagged = '1' and counter < c_MIN_QFRAME_THR) else + '0'; + end generate; + + process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if(rst_n_i='0') then + sof_reg <= '0'; + elsif(sof_p1='1') then + sof_reg <= '1'; + elsif(state = TXF_ADDR) then + sof_reg <= '0'; + end if; + end if; + end process; + + p_store_status : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + + if rst_n_i = '0' or tx_pause_mode = '1' then + stored_status.has_smac <= '0'; + stored_status.is_hp <= '0'; + stored_status.has_crc <= '0'; + else + if(snk_valid = '1' and wb_snk_i.adr = c_WRF_STATUS) then + stored_status <= f_unmarshall_wrf_status(wb_snk_i.dat); + end if; + end if; + end if; + end process; + + ----------------------------------------------------------------------------- + -- Out-of-band handling state machine. When a packet comes with OOB info + -- (frame ID), it is registered here. Then the main FSM waits until the TX + -- FIFO of the endpoint is completely empty and pushes the last timestamp + -- from the PCS to the TX Timestamping Unit + ----------------------------------------------------------------------------- + gen_ts_supported : if(g_with_timestamper) generate + p_oob_fsm : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if (rst_n_i = '0' or state = TXF_ADDR) then + oob_state <= OOB_1; + oob.valid <= '0'; + oob.oob_type <= (others => '0'); + else + + case oob_state is + when OOB_1 => + if(snk_valid = '1' and wb_snk_i.adr = c_WRF_OOB) then + oob.oob_type <= wb_snk_i.dat(15 downto 12); + oob_state <= OOB_2; + oob.valid <= '0'; + end if; + + when OOB_2 => + if(snk_valid = '1' and wb_snk_i.adr = c_WRF_OOB and oob.oob_type = c_WRF_OOB_TYPE_TX) then + oob.frame_id <= wb_snk_i.dat(15 downto 0); + oob_state <= OOB_IDLE; + oob.valid <= '1'; + end if; + + when OOB_IDLE => + oob_state <= OOB_IDLE; + end case; + end if; + end if; + end process; + end generate gen_ts_supported; + + p_tx_fsm : process (clk_sys_i) + begin -- process + if rising_edge(clk_sys_i) then + if(rst_n_i = '0') then + state <= TXF_IDLE; + + src_fab_o.has_rx_timestamp <= '0'; + src_fab_o.rx_timestamp_valid <= '0'; + src_fab_o.dvalid <= '0'; + src_fab_o.ERROR <= '0'; + src_fab_o.sof <= '0'; + src_fab_o.eof <= '0'; + src_fab_o.bytesel <= '0'; + + wb_out.err <= '0'; + wb_out.rty <= '0'; + + tx_pause_mode <= '0'; + + fc_pause_ready_o <= '1'; + + txtsu_stb_o <= '0'; + bitsel_d <= '0'; + to_be_untagged <= '0'; + + else + + -- we are in the middle of the frame and the framer has got suddenly + -- disabled or we've received an ABORT command or an error occured in the PCS: + + if(pcs_error_i = '1') then + state <= TXF_IDLE; + wb_out.rty <= '1'; + ---------------------------------------------------------------------------------- + src_fab_o.error <= '1'; -- nasty-bug-fix: it might happen that PCS throws error + -- to a previous frame, but we already start sending + -- the next one, in this case the frame is stopped being + -- sent but PCS does not know why... in the end we see + -- two SOFs in PACs + ---------------------------------------------------------------------------------- + elsif(abort_now = '1') then + -- abort the current frame + state <= TXF_ABORT; + src_fab_o.sof <= '0'; + src_fab_o.dvalid <= '0'; + + else + + case state is + +------------------------------------------------------------------------------- +-- TX FSM state IDLE: awaits incoming TX frames +------------------------------------------------------------------------------- + + when TXF_IDLE => -- idle state - wait for the next frame + + wb_out.err <= '0'; + wb_out.rty <= '0'; + + txtsu_stb_o <= '0'; + bitsel_d <= '0'; + + src_fab_o.error <= '0'; + src_fab_o.eof <= '0'; + src_fab_o.dvalid <= '0'; + src_fab_o.bytesel <= '0'; + to_be_untagged <= '0'; + + -- Check start-of-frame and send-pause signals and eventually + -- commence frame transmission + +-- if(src_dreq_i = '1' and (sof_p1 = '1' or fc_pause_req_i = '1') and tx_en = '1') then --ML:removed +-- EXPLANATION: removed src_dreq_i = '1' as the cycle can start on stall HIGH (dreq_i LOW), +-- it means that if we wait for dreq to be high.... we can miss SOF and thus entire frame. +-- New state added to include a case where SOF (start of cycle) starts when dreq is LOW. +-- (we cannot just go to TXF_ADDR... it is because the PCS needs the minimal gap to add CRC) + if((sof_p1 = '1' or sof_reg='1' or fc_pause_req_i = '1') and tx_en = '1') then --ML + + fc_pause_ready_o <= '0'; + tx_pause_mode <= fc_pause_req_i; + + counter <= (others => '0'); + + if(src_dreq_i = '1') then + state <= TXF_ADDR; + src_fab_o.sof <= '1'; + end if; + + else + src_fab_o.sof <= '0'; + end if; + +------------------------------------------------------------------------------- +-- TX FSM (ML-added): this state takes into accunt the rare case where SOF happens +-- when dreq is LOW (PCS not ready). So we wait for dreq HIGH and STALL in the +-- meanttime (see process at the end) +------------------------------------------------------------------------------- + when TXF_DELAYED_SOF => + + if(src_dreq_i = '1') then + state <= TXF_ADDR; + src_fab_o.sof <= '1'; + end if; +------------------------------------------------------------------------------- +-- TX FSM state HEADER: processes the frame header, send pause frames +-- if compiled without packet injection support. +------------------------------------------------------------------------------- + + when TXF_ADDR => + src_fab_o.sof <= '0'; + + if (src_dreq_i = '1' and ((snk_valid = '1' and wb_snk_i.adr = c_WRF_DATA) or (tx_pause_mode = '1' and not g_with_packet_injection))) then + + counter <= counter + 1; + src_fab_o.dvalid <= '1'; + + case counter(3 downto 0) is + when x"0" => + src_fab_o.data <= f_pick(tx_pause_mode = '1' and not g_with_packet_injection, x"0180", wb_snk_i.dat); + when x"1" => + src_fab_o.data <= f_pick(tx_pause_mode = '1' and not g_with_packet_injection, x"c200", wb_snk_i.dat); + when x"2" => + src_fab_o.data <= f_pick(tx_pause_mode = '1' and not g_with_packet_injection, x"0001", wb_snk_i.dat); + when x"3" => + src_fab_o.data <= f_pick(stored_status.has_smac, wb_snk_i.dat, regs_i.mach_o); + when x"4" => + src_fab_o.data <= f_pick(stored_status.has_smac, wb_snk_i.dat, regs_i.macl_o(31 downto 16)); + when x"5" => + src_fab_o.data <= f_pick(stored_status.has_smac, wb_snk_i.dat, regs_i.macl_o(15 downto 0)); + if(tx_pause_mode = '0' or g_with_packet_injection) then + state <= TXF_DATA; + end if; + when x"6" => + src_fab_o.data <= f_pick(g_with_packet_injection, "XXXXXXXXXXXXXXXX", x"8808"); + to_be_untagged <= f_pick(wb_snk_i.dat = x"8100" and + regs_i.vcr0_qmode_o = c_QMODE_PORT_ACCESS, '1', '0'); + when x"7" => + src_fab_o.data <= f_pick(g_with_packet_injection, "XXXXXXXXXXXXXXXX", x"0001"); -- peterj: IEEE 802.3 Table 31A-1 MAC control codes PAUSE (Annex 31B) + when x"8" => + src_fab_o.data <= f_pick(g_with_packet_injection, "XXXXXXXXXXXXXXXX", fc_pause_delay_i); -- ML: bug ??? (forget optcode: 0x0001) + state <= TXF_PAD; + when others => + state <= TXF_PAD; + end case; + + src_fab_o.addr <= c_WRF_DATA; + + else + src_fab_o.dvalid <= '0'; + src_fab_o.data <= (others => 'X'); + src_fab_o.addr <= (others => 'X'); + end if; + +------------------------------------------------------------------------------- +-- TX FSM state PAD: pads a pause frame to 64 bytes. +------------------------------------------------------------------------------- + + when TXF_PAD => + + if(src_dreq_i = '1') then + counter <= counter + 1; + + src_fab_o.data <= (others => '0'); + src_fab_o.dvalid <= '1'; + src_fab_o.addr <= (others => '0'); + + if( (to_be_untagged = '1' and counter = c_MIN_QFRAME_THR-1) or + (to_be_untagged = '0' and counter = c_MIN_FRAME_THR-1) ) then + state <= TXF_GAP; + src_fab_o.eof <= '1'; + end if; + + else + src_fab_o.data <= (others => '0'); + src_fab_o.dvalid <= '0'; + src_fab_o.addr <= (others => '0'); + end if; + +------------------------------------------------------------------------------- +-- TX FSM state DATA: trasmits frame payload +------------------------------------------------------------------------------- + + when TXF_DATA => + + -- ML: added this EOF force LOW to make sure that EOF is single cycle, withouth + -- this, it might have happened that we had eof_p1 but PCS was busy, so we set + -- src_fab_o.eof to HIGH but actually did not exit the TXF_DATA state... this + -- caused EOF to be longer than one cycle + src_fab_o.eof <= '0'; + + if (counter = x"6") then + to_be_untagged <= f_pick(wb_snk_i.dat = x"8100" and + regs_i.vcr0_qmode_o = c_QMODE_PORT_ACCESS, '1', '0'); + end if; + + if((wb_snk_i.adr = c_WRF_OOB or eof_p1='1') and needs_padding='1') then + state <= TXF_PAD; + elsif(eof_p1 = '1' and needs_padding='0') then + src_fab_o.eof <= '1'; + counter <= (others => '0'); + + if(g_force_gap_length = 0 and bitsel_d = '1') then -- only for odd + + -- Submit the TX timestamp to the TXTSU queue + if(oob.valid = '1' and oob.oob_type = c_WRF_OOB_TYPE_TX) then + if(pcs_busy_i = '0') then + txtsu_stb_o <= '1'; + txtsu_ts_incorrect_o <= not txts_timestamp_valid_i; + txtsu_ts_value_o <= txts_timestamp_i; + txtsu_port_id_o <= regs_i.ecr_portid_o; + txtsu_fid_o <= oob.frame_id; + state <= TXF_STORE_TSTAMP; + else + -- wait in the GAP state for pcs_busy_i LOW + state <= TXF_GAP; + end if; ---if(pcs_busy_i = '0') then + else + -- dont need timestamp, don't need GAP, just go to IDLE + state <= TXF_IDLE; + end if; -- if(oob.valid = '1' and oob.oob_type = c_WRF_OOB_TYPE_TX) then + else -- need some GAP + state <= TXF_GAP; + end if; -- f(g_force_gap_length = 0 and bitsel_d = '1') then + end if; -- if(eof_p1 = '1') then + + if(snk_valid = '1' and wb_snk_i.adr = c_WRF_DATA) then + src_fab_o.data <= wb_snk_i.dat; + src_fab_o.dvalid <= '1'; + src_fab_o.bytesel <= (not wb_snk_i.sel(0)) and (not needs_padding); + counter <= counter + 1; + else + src_fab_o.dvalid <= '0'; + src_fab_o.data <= (others => 'X'); + src_fab_o.bytesel <= '0'; + end if; + + if(wb_snk_i.sel(0) = '0') then + bitsel_d <='1'; + end if; + + if(needs_padding='1') then + src_fab_o.addr <= (others=>'0'); + else + src_fab_o.addr <= wb_snk_i.adr; + end if; + +------------------------------------------------------------------------------- +-- TX FSM states: WAIT_CRC, EMBED_CRC: dealing with frame checksum field +------------------------------------------------------------------------------- + + when TXF_GAP => + src_fab_o.eof <= '0'; + src_fab_o.error <= '0'; + src_fab_o.dvalid <= '0'; + wb_out.err <= '0'; + wb_out.rty <= '0'; + src_fab_o.bytesel <= '0'; + + if(counter >= c_IFG_LENGTH or g_force_gap_length = 0) then + + -- Submit the TX timestamp to the TXTSU queue + if(oob.valid = '1' and oob.oob_type = c_WRF_OOB_TYPE_TX) then + if(pcs_busy_i = '0') then + txtsu_stb_o <= '1'; + txtsu_ts_incorrect_o <= not txts_timestamp_valid_i; + txtsu_ts_value_o <= txts_timestamp_i; + txtsu_port_id_o <= regs_i.ecr_portid_o; + txtsu_fid_o <= oob.frame_id; + state <= TXF_STORE_TSTAMP; + end if; + else + state <= TXF_IDLE; + end if; + + else + counter <= counter + 1; + end if; + + when TXF_STORE_TSTAMP => -- to slow ??? anyway, we can finish the frame + + src_fab_o.eof <= '0'; + src_fab_o.error <= '0'; + src_fab_o.dvalid <= '0'; + wb_out.err <= '0'; + wb_out.rty <= '0'; + src_fab_o.bytesel<= '0'; + + if(txtsu_ack_i = '1') then + txtsu_stb_o <= '0'; + state <= TXF_IDLE; + end if; + +------------------------------------------------------------------------------- +-- TX FSM state ABORT: signalize underlying PCS block to abort the frame +-- immediately, corrupting its contents +------------------------------------------------------------------------------- + when TXF_ABORT => + src_fab_o.sof <= '0'; + src_fab_o.dvalid <= '1'; + src_fab_o.error <= '1'; + + counter <= (others => '0'); + state <= TXF_IDLE; + + end case; + end if; + end if; + end if; + end process; + + tx_en <= regs_i.ecr_tx_en_o and ep_ctrl and ep_ctrl_i; + + --p_gen_stall : process(src_dreq_i, state, regs_i, wb_snk_i, snk_cyc_d0, tx_en) + p_gen_stall : process(src_dreq_i, state, tx_en, wb_snk_i, eof_p1) + begin + --if(regs_i.ecr_tx_en_o = '0') then + if(tx_en = '0') then --ML + wb_out.stall <= '0'; -- /dev/null if TX disabled +-- elsif((wb_snk_i.cyc xor snk_cyc_d0) = '1') then +-- elsif(wb_snk_i.cyc = '1' and snk_cyc_d0 = '0') then -- ML: do it only at the SOF, not EOF +-- wb_out.stall <= '1'; -- /block for 1 cycle right upon + -- detection of a packet, so the FSM + -- has time to catch up + + -- stall at EOF - the SWcore should not send anything, but just in case, not to miss + -- SOF... the next cycle will be TXF_GAP (also stalling) or TXF_IDLE (can accept new frames) + elsif(eof_p1 = '1') then -- accept OOB as is + wb_out.stall <= '1'; + + -- when data is flowing (TXF_DATA) or we expect data (TXF_IDLE) stall only when no dreq_i + -- from other modules +--------------------------------------------------------------------------------------------- +-- ML: when error at the very end of the frame (e.g. due to jambo frame), stall happenend +-- at the last cycle before cyc DOWN, subsequently, cycle did not finish and switch hanged +--------------------------------------------------------------------------------------------- +-- elsif(src_dreq_i = '1' and state /= TXF_GAP and state /= TXF_ABORT and state /= TXF_DELAYED_SOF and state /= TXF_STORE_TSTAMP) then +--------------------------------------------------------------------------------------------- + elsif(src_dreq_i = '1' and state /= TXF_PAD and state /= TXF_GAP and state /= TXF_DELAYED_SOF and state /= TXF_STORE_TSTAMP) then + wb_out.stall <= '0'; -- during data/header phase - whenever + -- the sink is ready to accept data + + -- when we receive OOB, there we have always resources/possibilties to accept it + -- since it is dumped in here, so we prevent dreq_i going LOW from stopping + -- to receive OOB + elsif(wb_snk_i.adr = c_WRF_OOB and wb_snk_i.cyc = '1') then -- accept OOB as is + wb_out.stall <= '0'; + + -- one other option renderds stall + else + wb_out.stall <= '1'; + end if; + end process; + + p_gen_ack : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + wb_out.ack <= snk_valid; + end if; + end process; + + -- in theory, this should not happen: we don't send frames to ports which are DOWN, but.. + -- we make sure that we don't start sending frames on the PHY in the middle of the frame... + -- the TX is enabled only when we don't receive any frames from SWcore + p_ctrl: process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if(rst_n_i = '0') then + ep_ctrl <= '1'; + else + if(ep_ctrl_i = '0') then + ep_ctrl <= '0'; + elsif(ep_ctrl_i = '1' and wb_snk_i.cyc = '0') then + ep_ctrl <= '1'; + end if; --ep_ctr + end if;-- rst + end if; -- clk + end process; + + wb_snk_o <= wb_out; + +end behavioral; + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_inject_ctrl.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_inject_ctrl.vhd new file mode 100644 index 000000000..766de7613 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_inject_ctrl.vhd @@ -0,0 +1,235 @@ +------------------------------------------------------------------------------- +-- Title : Controller of +-- Project : White Rabbit MAC/Endpoint +------------------------------------------------------------------------------- +-- File : ep_tx_inject_ctrl.vhd +-- Author : Maciej Lipinski +-- Company : CERN BE-CO-HT +-- Created : 2014-01-16 +-- Last update: 2014-01-16 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: this module enables to control HW packet injection in order +-- to turn the Endpoint into simple traffic generator for testing purposes +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2014 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.wr_fabric_pkg.all; +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; +use work.ep_wbgen2_pkg.all; + +entity ep_tx_inject_ctrl is + + generic( + g_min_if_gap_length : integer + ); + + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + + inject_req_o : out std_logic; + inject_ready_i : in std_logic; + inject_packet_sel_o : out std_logic_vector(2 downto 0); + inject_user_value_o : out std_logic_vector(15 downto 0); + inject_ctr_ena_o : out std_logic; + inject_ctr_mode_o : out std_logic_vector(1 downto 0); + + regs_i : in t_ep_out_registers; + regs_o : out t_ep_in_registers + ); +end ep_tx_inject_ctrl; + +architecture rtl of ep_tx_inject_ctrl is + + -- there a lag between setting inject_req and SOF, this nees to be included + constant if_gap_offset : unsigned(15 downto 0) := x"0000"; -- unused + constant src_fab_null : t_ep_internal_fabric := ( + sof => '0', + eof => '0', + error => '0', + dvalid => '0', + bytesel => '0', + has_rx_timestamp => '0', + rx_timestamp_valid => '0', + data => (others => '0'), + addr => (others => '0')); + type t_state is (IDLE, INJECT_REQ, INJECT, IFG, END_GEN); + + -- Wishbone settings + signal if_gap_value : unsigned(15 downto 0); + signal pck_sel : std_logic_vector(2 downto 0); + signal gen_ena : std_logic; + signal inj_mode : std_logic_vector(1 downto 0); + + signal if_gap_cnt : unsigned(15 downto 0); + signal frame_id_cnt : unsigned(15 downto 0); + signal within_packet : std_logic; + signal state : t_state; + + -- translation betwen if_gap_value and real IFG: + -- | ----------------------------------------- | + -- | if_gap_value | gap in words | gap in time | + -- | 0 | 7 | 112 ns | disallowed + -- | ......................................... | + -- | 5 | 12 | 192 ns | minimal leagal + -- | 6 | 13 | 208 ns | + -- | ......................................... | + -- | 65536 | 65546 | 1.048ms | maximum allowed due to register size (16 bits) + -- | ----------------------------------------- | +begin -- rtl + + p_detect_within : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + within_packet <= '0'; + else + if(snk_fab_i.sof = '1')then + within_packet <= '1'; + elsif(snk_fab_i.eof = '1' or snk_fab_i.error = '1') then + within_packet <= '0'; + end if; + end if; + end if; + end process; + + p_config_reg: process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + if_gap_value <= (others=>'0'); + pck_sel <= (others=>'0'); + gen_ena <= '0'; + inj_mode <= (others=>'0'); + else + if(regs_i.inj_ctrl_pic_ena_load_o = '1') then -- writing the register + if (regs_i.inj_ctrl_pic_conf_valid_o = '1') then + if_gap_value <= unsigned(regs_i.inj_ctrl_pic_conf_ifg_o); + pck_sel <= regs_i.inj_ctrl_pic_conf_sel_o; + end if; + if(regs_i.inj_ctrl_pic_mode_valid_o = '1') then + inj_mode <= regs_i.inj_ctrl_pic_mode_id_o(1 downto 0); + end if; + gen_ena <= regs_i.inj_ctrl_pic_ena_o; + end if; + end if; + end if; + end process; + + p_ctrl_fsm : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + state <= IDLE; + inject_req_o <= '0'; + if_gap_cnt <= (others => '0'); + frame_id_cnt <= (others => '0'); + else + case state is + when IDLE => + + -- start when + -- 1) inject enabled, and + -- 2) no packet being received from SWcore and + -- 3) no packet being just started (otherwise, we could have two SOFs + if(gen_ena = '1' and within_packet = '0' and snk_fab_i.sof = '0') then + inject_req_o <= '1'; + if_gap_cnt <= if_gap_offset; + frame_id_cnt <= (others => '0'); + state <= INJECT_REQ; + end if; + + when INJECT_REQ => + + inject_req_o <= '0'; + state <= INJECT; + + when INJECT => + + if(inject_ready_i = '1') then + frame_id_cnt <= frame_id_cnt + 1; + state <= IFG; + end if; + + when IFG => + + if(gen_ena = '0' ) then --gen disabled + if_gap_cnt <= (others => '0'); + frame_id_cnt <= (others => '0'); + if(within_packet = '0') then -- if there is no frame being currently dumped + state <= IDLE; -- go to idle state + else -- if there is a frame being dumped, + state <= END_GEN; -- wait until it finishes + end if; + elsif(if_gap_cnt < if_gap_value) then + if_gap_cnt <= if_gap_cnt + 1; + else + inject_req_o <= '1'; + if_gap_cnt <= if_gap_offset; + state <= INJECT_REQ; + end if; + + when END_GEN => + + if(within_packet = '0') then -- now we can gracefully come back to normal functing + state <= IDLE; + end if; + + when others => + + state <= IDLE; + if_gap_cnt <= (others => '0'); + frame_id_cnt <= (others => '0'); + + end case; + end if; + end if; + end process; + + inject_user_value_o <= std_logic_vector(frame_id_cnt); + inject_packet_sel_o <= pck_sel; + inject_ctr_ena_o <= gen_ena; + inject_ctr_mode_o <= inj_mode; + snk_dreq_o <= src_dreq_i when (state = IDLE) else '1'; -- dev/null if gen + src_fab_o <= snk_fab_i when (state = IDLE) else src_fab_null;-- dev/null if gen + regs_o.inj_ctrl_pic_conf_ifg_i <= std_logic_vector(if_gap_value); + regs_o.inj_ctrl_pic_conf_sel_i <= pck_sel; + regs_o.inj_ctrl_pic_conf_valid_i <= '0'; + regs_o.inj_ctrl_pic_ena_i <= gen_ena; + regs_o.inj_ctrl_pic_mode_id_i <= '0' & inj_mode; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_packet_injection.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_packet_injection.vhd new file mode 100644 index 000000000..08e40970c --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_packet_injection.vhd @@ -0,0 +1,251 @@ +------------------------------------------------------------------------------- +-- Title : 1000base-X MAC/Endpoint - TX packet injection unit +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : ep_tx_packet_injection.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2012-11-01 +-- Last update: 2013-03-12 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Asynchronously sends pre-defined packets upon a hardware request. +-- Packet contents are defined in a buffer accessible via Wishbone. The buffer +-- is shared with the TX VLAN unit and can contain templates of up to 8 packets +-- of up to 128 bytes of size. It is possible to replace a selected 16-bit word +-- within each template with a user-provided value. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2012 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2012-11-01 1.0 twlostow Created +-- 2013-03-12 1.1 mlipinsk added empty-template protaciton +-- prepared signals for RMON +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; + +entity ep_tx_packet_injection is + + port + ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + + inject_req_i : in std_logic; + inject_ready_o : out std_logic; + inject_packet_sel_i : in std_logic_vector(2 downto 0); + inject_user_value_i : in std_logic_vector(15 downto 0); + inject_mode_i : in std_logic_vector(1 downto 0); + -- 0 : default + -- 1 : corrupt + -- 2 : unused + -- 3 : unused + + mem_addr_o : out std_logic_vector(9 downto 0); + mem_data_i : in std_logic_vector(17 downto 0) + ); + +end ep_tx_packet_injection; + +architecture rtl of ep_tx_packet_injection is + + type t_state is (WAIT_IDLE, SOF, DO_INJECT, EOF); + + alias template_last : std_logic is mem_data_i(16); + alias template_first : std_logic is mem_data_i(16); + alias template_user : std_logic is mem_data_i(17); + + signal state : t_state; + signal counter : unsigned(8 downto 0); + + signal within_packet : std_logic; + signal select_inject : std_logic; + + signal inj_src : t_ep_internal_fabric; + signal inject_req_latched : std_logic; + signal first_word : std_logic; -- ML: used for masking the first word (we use the + -- same bit for SOF and EOF + -- ML: singals for RMON counters + signal no_template_error : std_logic; -- ML: indicates that injection was attempted with no valid template + signal inject_done : std_logic; -- ML: indicates that requrested injection was successful + +begin -- rtl + + snk_dreq_o <= '0' when (state = DO_INJECT) else src_dreq_i; + inject_done <= '1' when (state = EOF and src_dreq_i = '1') else '0'; + + p_detect_within : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + within_packet <= '0'; + else + if(snk_fab_i.sof = '1')then + within_packet <= '1'; + end if; + + if(snk_fab_i.eof = '1' or snk_fab_i.error = '1') then + within_packet <= '0'; + end if; + end if; + end if; + end process; + + p_injection_request_ready : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + inject_ready_o <= '1'; + inject_req_latched <= '0'; + else + if(inject_req_i = '1') then + inject_ready_o <= '0'; + inject_req_latched <= '1'; + elsif(state = EOF and src_dreq_i = '1' ) then + inject_ready_o <= '1'; + inject_req_latched <= '0'; + elsif(no_template_error = '1') then + inject_ready_o <= '1'; + inject_req_latched <= '0'; + end if; + end if; + end if; + end process; + + p_injection_fsm : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + state <= WAIT_IDLE; + select_inject <= '0'; + no_template_error <= '0'; + inj_src.sof <= '0'; + inj_src.eof <= '0'; + inj_src.dvalid <= '0'; + inj_src.error <= '0'; + first_word <= '0'; + else + case state is + when WAIT_IDLE => + inj_src.sof <= '0'; + inj_src.eof <= '0'; + inj_src.dvalid <= '0'; + inj_src.error <= '0'; + no_template_error <= '0'; + first_word <= '0'; + + if(inject_req_i = '1') then --ML: we make sure that we remember the packet_sel_i + -- only when req_i HIGH + counter(8 downto 6) <= unsigned(inject_packet_sel_i); + counter(5 downto 0) <= (others => '0'); + end if; + + if(within_packet = '0' and inject_req_latched = '1' and no_template_error = '0') then + state <= SOF; + select_inject <= '1'; + else + select_inject <= '0'; + end if; + + when SOF => + if(template_first = '0') then -- ML: check that the first word is valid, abort if error + state <= WAIT_IDLE; + no_template_error <= '1'; + elsif(src_dreq_i = '1') then + first_word <= '1'; -- since the same bit is for SOF and EOF, we need to mask SOF + -- during first word + inj_src.sof <= '1'; + state <= DO_INJECT; + end if; + + when DO_INJECT => + inj_src.sof <= '0'; + + if(src_dreq_i = '1') then + + inj_src.dvalid <= '1'; + counter <= counter + 1; + + else + inj_src.dvalid <= '0'; + end if; + + if(first_word = '1' and template_first = '0') then -- ML: first word read + first_word <= '0'; + end if; + + if(template_last = '1' and inj_src.dvalid = '1' and first_word = '0' and src_dreq_i = '1') then + inj_src.dvalid <= '0'; + state <= EOF; + if(inject_mode_i = "01") then + inj_src.error <= '1'; + else + inj_src.eof <= '1'; + end if; + end if; + + when EOF => + inj_src.eof <= '0'; + inj_src.error <= '0'; + if(src_dreq_i = '1') then + state <= WAIT_IDLE; + select_inject <= '0'; + end if; + end case; + end if; + end if; + end process; + +-- inj_src.bytesel <= '0'; + -- the last word cannot be user-defined as we use the user bit to indicate odd size + inj_src.bytesel <= template_user when (template_last = '1' and first_word = '0') else '0'; +-- inj_src.error <= '0'; + + p_inj_src_data : process(template_user, inject_user_value_i, mem_data_i,template_last,first_word) + begin + if(template_user = '1' and template_last = '0' and first_word = '0') then + inj_src.data <= inject_user_value_i; + else + inj_src.data <= mem_data_i(15 downto 0); + end if; + end process; + + src_fab_o <= inj_src when select_inject = '1' else snk_fab_i; + + + mem_addr_o <= '1' & std_logic_vector(counter); +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_path.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_path.vhd new file mode 100644 index 000000000..ceba9c0a2 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_path.vhd @@ -0,0 +1,352 @@ +------------------------------------------------------------------------------- +-- Title : Complete Transmit Path +-- Project : White Rabbit MAC/Endpoint +------------------------------------------------------------------------------- +-- File : ep_tx_path.vhd +-- Author : Tomasz Włostowski +-- Company : CERN BE-CO-HT +-- Created : 2012-11-01 +-- Last update: 2017-02-03 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Full transmit path of the endpoint (excluding the PCS). +-- Chains the wishbone interface and header processor, followed by the VLAN unit +-- (optional), packet injector (optional) and CRC inserter. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2009 - 2012 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + + +library ieee; +use ieee.std_logic_1164.all; + +library work; +use work.wr_fabric_pkg.all; +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; +use work.ep_wbgen2_pkg.all; + +entity ep_tx_path is + + generic( + g_with_vlans : boolean; + g_with_timestamper : boolean; + g_with_packet_injection : boolean; + g_with_inj_ctrl : boolean := true; + g_force_gap_length : integer; + g_runt_padding : boolean; + g_use_new_crc : boolean + ); + + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + +------------------------------------------------------------------------------ +-- Physical Coding Sublayer (PCS) interface +------------------------------------------------------------------------------ + + pcs_fab_o : out t_ep_internal_fabric; + pcs_error_i : in std_logic; + pcs_busy_i : in std_logic; + pcs_dreq_i : in std_logic; + +------------------------------------------------------------------------------- +-- WRF Sink (see WRF specification for the details) +------------------------------------------------------------------------------- + + snk_i : in t_wrf_sink_in; + snk_o : out t_wrf_sink_out; + +------------------------------------------------------------------------------- +-- Flow Control Unit signals +------------------------------------------------------------------------------- + +-- TX send pause frame - when active, the framer will send a PAUSE frame +-- as soon as possible. The pause quanta must be provided on tx_pause_delay_i input. + fc_pause_req_i : in std_logic; + fc_pause_delay_i : in std_logic_vector(15 downto 0); + +-- TX send pause acknowledge - active after the current pause send request has +-- been completed + fc_pause_ready_o : out std_logic; + +-- When active, the framer will allow for packet transmission. + fc_flow_enable_i : in std_logic; + +------------------------------------------------------------------------------- +-- OOB/TSU signals +------------------------------------------------------------------------------- + +-- Port ID value + txtsu_port_id_o : out std_logic_vector(4 downto 0); +-- Frame ID value + txtsu_fid_o : out std_logic_vector(16 -1 downto 0); +-- Encoded timestamps + txtsu_ts_value_o : out std_logic_vector(28 + 4 - 1 downto 0); + txtsu_ts_incorrect_o : out std_logic; + +-- TX timestamp strobe: HI tells the TX timestamping unit that a timestamp is +-- available on txtsu_ts_value_o, txtsu_fid_o andd txtsu_port_id_o. The correctness +-- of the timestamping is indiacted on txtsu_ts_incorrect_o. Line remains HI +-- until assertion of txtsu_ack_i. + txtsu_stb_o : out std_logic; + +-- TX timestamp acknowledge: HI indicates that TXTSU has successfully received +-- the timestamp + txtsu_ack_i : in std_logic; + +------------------------------------------------------------------------------ +-- Timestamp input from the timestamping unit +------------------------------------------------------------------------------ + txts_timestamp_i : in std_logic_vector(31 downto 0); + txts_timestamp_valid_i : in std_logic; + +------------------------------------------------------------------------------ +-- Packet Injector (for TRU & HW-RSTP) +------------------------------------------------------------------------------ + + inject_req_i : in std_logic := '0'; + inject_ready_o : out std_logic; + inject_packet_sel_i : in std_logic_vector(2 downto 0) := "000"; + inject_user_value_i : in std_logic_vector(15 downto 0) := x"0000"; + + +------------------------------------------------------------------------------- +-- Control registers +------------------------------------------------------------------------------- + ep_ctrl_i : in std_logic :='1'; + regs_i : in t_ep_out_registers; + regs_o : out t_ep_in_registers; + dbg_o : out std_logic_vector(33 downto 0) + ); + + +end ep_tx_path; + +architecture rtl of ep_tx_path is + + type t_fab_pipe is array(integer range <>) of t_ep_internal_fabric; + + signal fab_pipe : t_fab_pipe(4 downto 0); + signal dreq_pipe : std_logic_vector(4 downto 0); + + signal vlan_mem_addr : std_logic_vector(9 downto 0); + signal vlan_mem_data : std_logic_vector(17 downto 0); + + signal txtsu_stb : std_logic; + + signal inject_req : std_logic; + signal inject_ready : std_logic; + signal inject_packet_sel : std_logic_vector(2 downto 0); + signal inject_user_value : std_logic_vector(15 downto 0); + signal inject_mode : std_logic_vector( 1 downto 0); + + signal inj_ctr_req : std_logic; + signal inj_ctr_packet_sel : std_logic_vector(2 downto 0); + signal inj_ctr_user_value : std_logic_vector(15 downto 0); + signal inj_ctr_ena : std_logic; + signal inj_ctr_mode : std_logic_vector( 1 downto 0); + + +begin -- rtl + + U_Header_Processor : ep_tx_header_processor + generic map ( + g_with_packet_injection => g_with_packet_injection, + g_with_timestamper => g_with_timestamper, + g_force_gap_length => g_force_gap_length, + g_runt_padding => g_runt_padding) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + src_fab_o => fab_pipe(0), + src_dreq_i => dreq_pipe(0), + pcs_busy_i => pcs_busy_i, + pcs_error_i => pcs_error_i, + wb_snk_i => snk_i, + wb_snk_o => snk_o, + fc_pause_req_i => fc_pause_req_i, + fc_pause_delay_i => fc_pause_delay_i, + fc_pause_ready_o => fc_pause_ready_o, + fc_flow_enable_i => fc_flow_enable_i, + txtsu_port_id_o => txtsu_port_id_o, + txtsu_fid_o => txtsu_fid_o, + txtsu_ts_value_o => txtsu_ts_value_o, + txtsu_ts_incorrect_o => txtsu_ts_incorrect_o, + txtsu_stb_o => txtsu_stb, --txtsu_stb_o, + txtsu_ack_i => txtsu_ack_i, + txts_timestamp_i => txts_timestamp_i, + txts_timestamp_valid_i => txts_timestamp_valid_i, + ep_ctrl_i => ep_ctrl_i, + regs_i => regs_i); + + txtsu_stb_o <= txtsu_stb; + + assert not (g_with_packet_injection and not g_with_vlans) + report "wr_endpoint: packet injection requires VLAN support to be enabled" severity failure; + + gen_with_inj_ctrl: if(g_with_inj_ctrl and g_with_packet_injection) generate + -- the injector control has two main purposes: + -- 1) control ep_tx_packet_injector so that it continuously generatres frames with + -- desired interframe gap + -- 2) block the possible traffic coming from SWcore + -- - so that it does not disturb generation which is done only between frames from SWcore + -- - each frame coming from SWcore is "scanned" by Ethertype in the RAM which is used + -- for generation -> if ep_tx_vlan_unit is used (if dev/null was done after this module) + -- when ep_tx_packet_injection is used to genrate frame... we have problem cause two + -- modules read from the same RAM + U_Injector_ctr: ep_tx_inject_ctrl + generic map ( + g_min_if_gap_length => 5) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + snk_fab_i => fab_pipe(0), + snk_dreq_o => dreq_pipe(0), + src_fab_o => fab_pipe(1), + src_dreq_i => dreq_pipe(1), + inject_req_o => inj_ctr_req, + inject_ready_i => inject_ready, + inject_packet_sel_o => inj_ctr_packet_sel, + inject_user_value_o => inj_ctr_user_value, + inject_ctr_ena_o => inj_ctr_ena, + inject_ctr_mode_o => inj_ctr_mode, + regs_i => regs_i, + regs_o => regs_o); + end generate gen_with_inj_ctrl; + + inject_req <= inj_ctr_req when (inj_ctr_ena ='1') else inject_req_i; + inject_packet_sel <= inj_ctr_packet_sel when (inj_ctr_ena ='1') else inject_packet_sel_i; + inject_ready_o <= inject_ready; + + gen_without_inj_ctrl: if((not g_with_inj_ctrl) or (not g_with_packet_injection)) generate + fab_pipe(1) <= fab_pipe(0); + dreq_pipe(0) <= dreq_pipe(1); + inj_ctr_req <= '0'; + inj_ctr_mode <= (others => '0'); + inj_ctr_packet_sel <= (others => '0'); + inj_ctr_user_value <= (others => '0'); + inj_ctr_ena <= '0'; + regs_o <= c_ep_in_registers_init_value; + end generate gen_without_inj_ctrl; + + gen_with_vlan_unit : if(g_with_vlans) generate + U_VLAN_Unit : ep_tx_vlan_unit + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + snk_fab_i => fab_pipe(1), + snk_dreq_o => dreq_pipe(1), + src_fab_o => fab_pipe(2), + src_dreq_i => dreq_pipe(2), + inject_mem_addr_i => vlan_mem_addr, + inject_mem_data_o => vlan_mem_data, + uram_offset_wr_i => regs_i.vcr1_offset_wr_o, + uram_offset_i => regs_i.vcr1_offset_o, + uram_data_i => regs_i.vcr1_data_o); + end generate gen_with_vlan_unit; + + gen_without_vlan_unit : if(not g_with_vlans) generate + fab_pipe(2) <= fab_pipe(1); + dreq_pipe(1) <= dreq_pipe(2); + end generate gen_without_vlan_unit; + + gen_with_injection : if(g_with_packet_injection) generate + + inject_user_value <= inj_ctr_user_value when (inj_ctr_ena ='1') else inject_user_value_i; + inject_mode <= inj_ctr_mode when (inj_ctr_ena ='1') else "00"; + + U_Injector : ep_tx_packet_injection + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + snk_fab_i => fab_pipe(2), + snk_dreq_o => dreq_pipe(2), + src_fab_o => fab_pipe(3), + src_dreq_i => dreq_pipe(3), + inject_req_i => inject_req, + inject_ready_o => inject_ready, + inject_packet_sel_i => inject_packet_sel, + inject_user_value_i => inject_user_value, + inject_mode_i => inject_mode, + mem_addr_o => vlan_mem_addr, + mem_data_i => vlan_mem_data); + end generate gen_with_injection; + + gen_without_injection : if (not g_with_packet_injection) generate + fab_pipe(3) <= fab_pipe(2); + dreq_pipe(2) <= dreq_pipe(3); + inject_ready <= '0'; + end generate gen_without_injection; + + U_Insert_CRC : ep_tx_crc_inserter + generic map( + g_use_new_crc => g_use_new_crc) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + snk_fab_i => fab_pipe(3), + snk_dreq_o => dreq_pipe(3), + src_fab_o => fab_pipe(4), + src_dreq_i => dreq_pipe(4), + dbg_o => dbg_o(33 downto 31)); + + pcs_fab_o <= fab_pipe(4); + dreq_pipe(4) <= pcs_dreq_i; + +-- GEN_DBG: for i in 0 to 3 generate +-- dbg_o(i) <= fab_pipe(i).sof; +-- dbg_o(i+4) <= fab_pipe(i).eof; +-- end generate GEN_DBG; + + dbg_o(0) <= fab_pipe(0).sof; -- 64 + dbg_o(1) <= fab_pipe(2).sof; -- 65 + dbg_o(2) <= fab_pipe(3).sof; -- 66 + dbg_o(3) <= fab_pipe(4).sof; -- 67 + dbg_o(4) <= fab_pipe(0).eof; -- 68 + dbg_o(5) <= fab_pipe(2).eof; -- 69 + dbg_o(6) <= fab_pipe(3).eof; -- 70 + dbg_o(7) <= fab_pipe(4).eof; -- 71 + + dbg_o(8) <= dreq_pipe(0); -- 72 + dbg_o(9) <= dreq_pipe(2); -- 73 + dbg_o(10) <= dreq_pipe(3); -- 74 + dbg_o(11) <= fab_pipe(0).dvalid; -- 75 + dbg_o(12) <= fab_pipe(4).dvalid; -- 32 + -- new 4 bits + dbg_o(13) <= dreq_pipe(4); -- 33 + dbg_o(14) <= txtsu_stb; -- 34 + dbg_o(15) <= txtsu_ack_i; -- 35 + dbg_o(16) <= fab_pipe(2).dvalid; -- 36 +-- dbg_o(28 downto 13) <= fab_pipe(2).data; + dbg_o(17) <= inj_ctr_req; -- 37 + dbg_o(18) <= inject_req; -- 38 + dbg_o(19) <= inject_ready; -- 39 inj_ctr_user_value; + dbg_o(20) <= inj_ctr_ena; -- 40 + dbg_o(23 downto 21) <= inject_packet_sel; -- 41-43 + dbg_o(24) <= inject_req_i; -- 43 + dbg_o(28 downto 25) <= fab_pipe(3).data(3 downto 0); +-- dbg_o(28 downto 17) <= fab_pipe(3).data(11 downto 0); + dbg_o(30 downto 29) <= fab_pipe(3).addr; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_pcs_16bit.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_pcs_16bit.vhd new file mode 100644 index 000000000..0bc801ee2 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_pcs_16bit.vhd @@ -0,0 +1,546 @@ +------------------------------------------------------------------------------- +-- Title : 16-bit transmit path for 1000Base-X PCS +-- Project : White Rabbit MAC/Endpoint +------------------------------------------------------------------------------- +-- File : ep_tx_pcs_16bit.vhd +-- Author : Tomasz Włostowski +-- Company : CERN BE-CO-HT section +-- Created : 2009-06-16 +-- Last update: 2017-02-20 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Module implements a 16-bit transmit path for 802.3z 1000BaseX PCS. +-- This block interfaces the Ethernet framer to TX PMA (Physical Medium Attachment). +-- It performs preamble generation, insertion of idle patterns, all the low-level +-- signalling. Strobing signal for taking TX timestamps is also generated. +-- +-- Module uses two separate clocks: 62.5 MHz phy_tx_clk_i +-- (Transmit clock for PHY) which clocks 8b10b signalling layer, and an async +-- (clk_sys_i) which is used for data exchange with the rest of MAC data path. Data +-- exchange between these clock domains is done using an async FIFO. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2011-2017 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2011-10-15 0.2 twlostow 16-bit version for Virtex 6 GTX +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.gencores_pkg.all; +use work.genram_pkg.all; +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; + + +entity ep_tx_pcs_16bit is + + port ( +-- reset (synchronous to clk_sys_i, active LO) + rst_n_i : in std_logic; + +-- system clock (faster than reference) + clk_sys_i : in std_logic; + +-- reset (phy_tx_clk_i sync) + rst_txclk_n_i : in std_logic; + +------------------------------------------------------------------------------- +-- TX Framer inteface +------------------------------------------------------------------------------- + +-- TX Fabric input + pcs_fab_i : in t_ep_internal_fabric; + +-- HI pulse indicates an error during transmission of a frame (buffer underrun) + pcs_error_o : out std_logic; + +-- HI indicates that the PCS is busy (transmitting a frame or during autonegotiation) + pcs_busy_o : out std_logic; + +-- HI indicates that PCS FIFO is almost full. + pcs_dreq_o : out std_logic; + +------------------------------------------------------------------------------- +-- WB controller control signals +------------------------------------------------------------------------------- + + mdio_mcr_reset_i : in std_logic; +-- Transmit Control Register, EN_PCS field + mdio_mcr_pdown_i : in std_logic; +-- Transmit Control Register, TX_CAL field + mdio_wr_spec_tx_cal_i : in std_logic; + +-- autonegotiation control + an_tx_en_i : in std_logic; + an_tx_val_i : in std_logic_vector(15 downto 0); + +-- Timestamp strobe + timestamp_trigger_p_a_o : out std_logic; + +-- RMON events + rmon_tx_underrun : out std_logic; + +------------------------------------------------------------------------------- +-- PHY Interface +------------------------------------------------------------------------------- + + phy_tx_clk_i : in std_logic; + phy_tx_data_o : out std_logic_vector(15 downto 0); + phy_tx_k_o : out std_logic_vector(1 downto 0); + phy_tx_disparity_i : in std_logic; + phy_tx_enc_err_i : in std_logic; + + dbg_wr_count_o : out std_logic_vector(5+4 downto 0); + dbg_rd_count_o : out std_logic_vector(5+4 downto 0) + ); + +end ep_tx_pcs_16bit; + + +architecture behavioral of ep_tx_pcs_16bit is + +-- TX state machine definitions + type t_tbif_tx_state is (TX_COMMA_IDLE, TX_CAL, TX_CR12, TX_CR34, TX_SPD_PREAMBLE, TX_DATA, TX_PREAMBLE, TX_SFD, TX_EPD, TX_EXTEND, TX_GEN_ERROR); + +-- TX state machine signals + + signal tx_is_k : std_logic_vector(1 downto 0); + signal tx_odata_reg : std_logic_vector(15 downto 0); + signal tx_catch_disparity : std_logic; + signal tx_state : t_tbif_tx_state; + signal tx_cntr : unsigned(3 downto 0); + signal tx_cr_alternate : std_logic; + +-- TX clock alignment FIFO signals + signal fifo_packed_in, fifo_packed_out : std_logic_vector(17 downto 0); + signal fifo_empty : std_logic; + signal fifo_almost_empty : std_logic; + signal fifo_almost_full : std_logic; + signal fifo_enough_data : std_logic; + signal fifo_wr : std_logic; + signal fifo_rd : std_logic := '0'; + signal fifo_ready : std_logic; + signal fifo_clear_n, fifo_clear_n_d0, fifo_clear_n_d1, fifo_clear_n_d2, fifo_clear_n_d3, fifo_clear_n_d4 : std_logic; + signal fifo_read_int : std_logic; + signal fifo_fab : t_ep_internal_fabric; + + signal tx_busy : std_logic; + signal tx_error : std_logic; + signal rst_n_tx : std_logic; + + signal mdio_mcr_reset_synced : std_logic; + signal mdio_mcr_pdown_synced : std_logic; + + signal an_tx_en_synced : std_logic; + signal wr_count : std_logic_vector(6 downto 0); + signal rd_count : std_logic_vector(6 downto 0); + + constant tx_interframe_gap: unsigned(3 downto 0) := x"2"; --ML changed from "1000" to 0010 + -- effectively it is 6 cycles for IFG: + -- last data (CRC) of the previous frame + -- ----------------------------------------- + -- 3 cycles for count down (2 downto 0) + -- 1 cycle fifo_rd + -- 1 read SOF from FIFO + -- 1 cycle in TX_SPD_PREAMBLE + -- ----------------------------------------- + -- just now we send Preamble + -- +begin + + U_sync_pcs_busy_o : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + data_i => tx_busy, + synced_o => pcs_busy_o); + + U_sync_pcs_error_o : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + data_i => tx_error, + ppulse_o => pcs_error_o); + + U_sync_an_tx_en : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => phy_tx_clk_i, + rst_n_i => rst_n_i, + data_i => an_tx_en_i, + synced_o => an_tx_en_synced); + + U_sync_mcr_reset : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => phy_tx_clk_i, + rst_n_i => '1', + data_i => mdio_mcr_reset_i, + synced_o => mdio_mcr_reset_synced, + npulse_o => open, + ppulse_o => open); + + U_sync_power_down : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => phy_tx_clk_i, + rst_n_i => '1', + data_i => mdio_mcr_pdown_i, + synced_o => mdio_mcr_pdown_synced); + + phy_tx_data_o <= tx_odata_reg; + phy_tx_k_o <= tx_is_k; + + rst_n_tx <= rst_txclk_n_i and not mdio_mcr_reset_synced; + +------------------------------------------------------------------------------- +-- Clock alignment FIFO +------------------------------------------------------------------------------- + + + ------------------------------------------------------------------------------------------- + -- some hacks to make pdown (in particular killing the link) work with Xilix native FIFOs + -- (the rst signal can be set (LOW) only after 4 cycles after rd_i is "unset" (LOW) + ------------------------------------------------------------------------------------------- + fifo_clear_n_d0 <= '0' when (rst_n_i = '0') or (mdio_mcr_pdown_synced = '1') else '1'; + p_fifo_clean : process(phy_tx_clk_i) + begin + if rising_edge(phy_tx_clk_i) then + fifo_clear_n_d1 <= fifo_clear_n_d0; + fifo_clear_n_d2 <= fifo_clear_n_d1; + fifo_clear_n_d3 <= fifo_clear_n_d2; + fifo_clear_n_d4 <= fifo_clear_n_d3; + end if; + end process; + + fifo_clear_n <= fifo_clear_n_d4 when (fifo_clear_n_d0 = '0') else + fifo_clear_n_d0; + fifo_read_int <= fifo_rd and not (fifo_fab.eof or fifo_fab.error or fifo_fab.sof) and + fifo_clear_n_d0; + ------------------------------------------------------------------------------------------- + f_pack_fifo_contents(pcs_fab_i, fifo_packed_in, fifo_wr, true); + + + + U_TX_FIFO : generic_async_fifo + generic map ( + g_data_width => 18, + g_size => 128,--64, + g_with_rd_empty => true, + g_with_rd_almost_empty => true, + g_with_wr_almost_full => true, + g_almost_empty_threshold => 20, -- must be not more/equal then mini-frame size (so 64/2), + -- therwise frames get stuck in PCS 40, + + -- ML this is a hack: we have a problem, the native FIFO that was used here + -- is not working ocrrectly (probably something with full/empty/etc signals + -- If this flags here are defined, another fifo (v6_hwfifo) is used, it is + -- not the best for resources... but works. We tried increaseing the size + -- of the FIFO, changing thresholds... not works very well. + -- The native FIFO works somehow better with the following parameters + -- g_size = 1000 + -- g_almost_full_threshold = 900 + -- but it is still not good enough to use it + -- + g_with_rd_count => true, -- ML debug + g_with_wr_count => true, -- ML debug + + g_almost_full_threshold => 100) -- fixme: make this a generic (or WB register) + port map ( + rst_n_i => fifo_clear_n, + clk_wr_i => clk_sys_i, + d_i => fifo_packed_in, + we_i => fifo_wr, + wr_empty_o => dbg_wr_count_o(0), --open, + wr_full_o => dbg_wr_count_o(1), --open, + wr_almost_empty_o => dbg_wr_count_o(2), --open, + wr_almost_full_o => fifo_almost_full, + wr_count_o => wr_count, + clk_rd_i => phy_tx_clk_i, + q_o => fifo_packed_out, + rd_i => fifo_read_int, + rd_empty_o => fifo_empty, + rd_full_o => dbg_rd_count_o(1) ,--open, + rd_almost_empty_o => fifo_almost_empty, + rd_almost_full_o => dbg_rd_count_o(3), + rd_count_o => rd_count); --rd_count);--dbg_rd_count_o); --open); + + dbg_wr_count_o(3) <= fifo_almost_full; + dbg_rd_count_o(0) <= fifo_empty; + dbg_rd_count_o(2) <= fifo_almost_empty; + + dbg_wr_count_o(9 downto 4) <= wr_count(5 downto 0); + dbg_rd_count_o(9 downto 4) <= rd_count(5 downto 0); + + fifo_enough_data <= not fifo_almost_empty; + + p_gen_fifo_ready_flag : process(phy_tx_clk_i) + begin + if rising_edge(phy_tx_clk_i) then + fifo_ready <= fifo_read_int; + end if; + end process; + + f_unpack_fifo_contents(fifo_packed_out, fifo_ready, fifo_fab, true); + + ----------------------------------------------------------------------------- + -- TX PCS state machine + ----------------------------------------------------------------------------- + p_tx_fsm : process (phy_tx_clk_i) + begin + + if rising_edge(phy_tx_clk_i) then + +-- The PCS is reset or disabled + if(rst_n_tx = '0' or mdio_mcr_pdown_synced = '1') then + tx_state <= TX_COMMA_IDLE; + timestamp_trigger_p_a_o <= '0'; + fifo_rd <= '0'; + tx_error <= '0'; + tx_odata_reg <= (others => '0'); + tx_is_k <= "00"; + tx_cr_alternate <= '0'; + tx_catch_disparity <= '0'; + tx_cntr <= (others => '0'); + rmon_tx_underrun <= '0'; + else + case tx_state is +------------------------------------------------------------------------------- +-- State COMMA: sends the /I/ sequence (K28.5 + D5.6/D16.2) +------------------------------------------------------------------------------- + when TX_COMMA_IDLE => + + -- clear the RMON/error pulse after 2 cycles (DATA->COMMA->IDLE) to + -- make sure is't long enough to trigger the event counter + rmon_tx_underrun <= '0'; + tx_error <= '0'; + + tx_is_k <= "10"; + tx_odata_reg(15 downto 8) <= c_K28_5; + + if (phy_tx_disparity_i = '1' and tx_catch_disparity = '1') then + tx_odata_reg(7 downto 0) <= c_d5_6; + else + tx_odata_reg(7 downto 0) <= c_d16_2; + end if; + + +-- endpoint wants to send Config_Reg + if(an_tx_en_synced = '1') then + tx_state <= TX_CR12; + tx_cr_alternate <= '0'; + fifo_rd <= '0'; + +-- we've got a new frame in the FIFO + elsif (fifo_fab.sof = '1' and fifo_ready = '1' and tx_cntr = "0000")then + fifo_rd <= '0'; + tx_state <= TX_SPD_PREAMBLE; + tx_cntr <= "0001"; + +-- host requested a calibration pattern + elsif(mdio_wr_spec_tx_cal_i = '1') then + tx_state <= TX_CAL; + fifo_rd <= '0'; + tx_cr_alternate <= '0'; + else +-- continue sending idle sequences and checking if something has arrived in the +-- FIFO + if(tx_cntr /= "0000") then + fifo_rd <= '0'; + else + fifo_rd <= (not fifo_empty) and fifo_enough_data; + end if; + tx_state <= TX_COMMA_IDLE; + end if; + + tx_catch_disparity <= '0'; + + if(tx_cntr /= "0000") then + tx_cntr <= tx_cntr - 1; + end if; +------------------------------------------------------------------------------- +-- State: CAL: transmit the calibration sequence +------------------------------------------------------------------------------- + + when TX_CAL => + tx_is_k <= "11"; + tx_odata_reg <= c_k28_7 & c_k28_7; + tx_cr_alternate <= '1'; + if(mdio_wr_spec_tx_cal_i = '0' and tx_cr_alternate = '1') then + tx_state <= TX_COMMA_IDLE; + end if; + +------------------------------------------------------------------------------- +-- States: CR1, CR2, CR3, CR4: send the /C/ Configuration code set +------------------------------------------------------------------------------- + + when TX_CR12 => + fifo_rd <= not fifo_empty; + + tx_is_k <= "10"; + tx_odata_reg(15 downto 8) <= c_k28_5; + + if (tx_cr_alternate = '1') then + tx_odata_reg(7 downto 0) <= c_d21_5; + else + tx_odata_reg(7 downto 0) <= c_d2_2; + end if; + + tx_cr_alternate <= not tx_cr_alternate; + tx_state <= TX_CR34; + + when TX_CR34 => + fifo_rd <= not fifo_empty; + + tx_is_k <= "00"; + tx_odata_reg(15 downto 8) <= an_tx_val_i(7 downto 0); + tx_odata_reg(7 downto 0) <= an_tx_val_i(15 downto 8); + + if(an_tx_en_synced = '1') then + tx_state <= TX_CR12; + else + tx_state <= TX_COMMA_IDLE; + end if; + + +------------------------------------------------------------------------------- +-- State SPD: sends a start-of-packet delimeter +------------------------------------------------------------------------------- + when TX_SPD_PREAMBLE => + fifo_rd <= '0'; + tx_is_k <= "10"; + tx_odata_reg <= c_k27_7 & c_preamble_char; + tx_state <= TX_PREAMBLE; + +------------------------------------------------------------------------------- +-- State PREAMBLE: produces an Ethernet preamble +------------------------------------------------------------------------------- + when TX_PREAMBLE => + tx_is_k <= "00"; + tx_odata_reg <= c_preamble_char & c_preamble_char; + + if (tx_cntr = "0000") then + tx_state <= TX_SFD; + fifo_rd <= '1'; + end if; + + tx_cntr <= tx_cntr - 1; + +------------------------------------------------------------------------------- +-- State SFD: outputs the start-of-frame delimeter (last byte of the preamble) +------------------------------------------------------------------------------- + when TX_SFD => + tx_is_k <= "00"; + tx_odata_reg <= c_preamble_char & c_preamble_sfd; + timestamp_trigger_p_a_o <= '1'; + tx_state <= TX_DATA; + + when TX_DATA => + + if((fifo_empty = '1' or fifo_fab.error = '1') and fifo_fab.eof = '0') then -- FIFO underrun? + tx_odata_reg <= c_k30_7 & c_k23_7; -- emit error propagation code + tx_is_k <= "11"; + tx_state <= TX_GEN_ERROR; + tx_error <= not fifo_fab.error; + rmon_tx_underrun <= '1'; + fifo_rd <= '0'; + else + + if(fifo_fab.bytesel = '1') then + tx_odata_reg <= fifo_fab.DATA(15 downto 8) & c_k29_7; + tx_is_k <= "01"; + else + tx_odata_reg <= fifo_fab.DATA; + tx_is_k <= "00"; + end if; + + if (fifo_fab.eof = '1') then + if(fifo_fab.bytesel = '1') then + tx_state <= TX_EXTEND; + else + tx_state <= TX_EPD; + end if; + fifo_rd <= '0'; + end if; + end if; + +------------------------------------------------------------------------------- +-- State EPD: send End-of-frame delimeter +------------------------------------------------------------------------------- + when TX_EPD => + timestamp_trigger_p_a_o <= '0'; + tx_is_k <= "11"; + tx_odata_reg <= c_k29_7 & c_k23_7; + tx_catch_disparity <= '1'; + tx_cntr <= tx_interframe_gap; + tx_state <= TX_COMMA_IDLE; + +-------------------------------------------------------------------------------- +-- State EXTEND: send the carrier extension +------------------------------------------------------------------------------- + when TX_EXTEND => + timestamp_trigger_p_a_o <= '0'; + tx_is_k <= "11"; + tx_odata_reg <= c_k23_7 & c_k23_7; + tx_catch_disparity <= '1'; + tx_cntr <= tx_interframe_gap-1;--"0100"; + tx_state <= TX_COMMA_IDLE; + +------------------------------------------------------------------------------- +-- State GEN_ERROR: entered when an error occured. Just terminates the frame. +------------------------------------------------------------------------------- + when TX_GEN_ERROR => + tx_state <= TX_EPD; + + end case; + end if; + end if; + end process; + + process(phy_tx_clk_i) + begin + if rising_edge(phy_tx_clk_i) then + if fifo_empty = '0' or (tx_state /= TX_CR12 and tx_state /= TX_CR34 and tx_state /= TX_COMMA_IDLE) then + tx_busy <= '1'; + else + tx_busy <= '0'; + end if; + end if; + end process; + + pcs_dreq_o <= not fifo_almost_full; + +end behavioral; + + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_pcs_8bit.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_pcs_8bit.vhd new file mode 100644 index 000000000..db19a419a --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_pcs_8bit.vhd @@ -0,0 +1,514 @@ +------------------------------------------------------------------------------- +-- Title : 1000BaseT/X MAC Endpoint - receive path PCS for 1000BaseX +-- Project : White Rabbit Switch +------------------------------------------------------------------------------- +-- File : ep_tx_pcs_tbi.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2009-06-16 +-- Last update: 2017-02-20 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Module implements the transmit path for 802.3z 1000BaseX PCS. +-- This block interfaces the Ethernet framer to TX PMA (Physical Medium Attachment). +-- It performs preamble generation, insertion of idle patterns, all the low-level +-- signalling (including 8b10b coding). Strobing signal for taking TX timestamps +-- is also generated. +-- +-- Module uses two separate clocks: 125 MHz tbi_tx_clk (or gtp_tx_clk) +-- (Transmit clock for PHY) which clocks 8b10b signalling layer, and 62.5 MHz +-- (clk_sys_i) which is used for data exchange with the rest of switch. Data +-- exchange between these clock domains is done using an async FIFO. +-- +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2009-2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2009-06-16 0.1 twlostow Created (no error propagation supported yet) +-- 2010-04-06 0.2 twlostow Cleanup, new timestamping/LCR scheme +-- 2010-07-30 0.2 twlostow Fixed preamble length bug +-- 2010-11-18 0.4 twlostow Added support for Xilinx GTP transceivers. +------------------------------------------------------------------------------- + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + + +library work; +use work.gencores_pkg.all; +use work.genram_pkg.all; +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; + + +entity ep_tx_pcs_8bit is + + port ( +-- reset (synchronous to refclk2, active LO) + rst_n_i : in std_logic; + +-- 62.5 MHz clock (refclk/2) + clk_sys_i : in std_logic; + +-- reset (phy_tx_clk_i sync) + rst_txclk_n_i : in std_logic; + +------------------------------------------------------------------------------- +-- TX Framer inteface +------------------------------------------------------------------------------- + +-- TX Fabric input + pcs_fab_i : in t_ep_internal_fabric; + +-- HI pulse indicates an error during transmission of a frame (buffer underrun) + pcs_error_o : out std_logic; + +-- HI indicates that the PCS is busy (transmitting a frame or during autonegotiation) + pcs_busy_o : out std_logic; + +-- HI indicates that PCS FIFO is almost full. + pcs_dreq_o : out std_logic; + +------------------------------------------------------------------------------- +-- WB controller control signals +------------------------------------------------------------------------------- + + mdio_mcr_reset_i : in std_logic; +-- Transmit Control Register, EN_PCS field + mdio_mcr_pdown_i : in std_logic; +-- Transmit Control Register, TX_CAL field + mdio_wr_spec_tx_cal_i : in std_logic; + +-- autonegotiation control + an_tx_en_i : in std_logic; + an_tx_val_i : in std_logic_vector(15 downto 0); + +-- Timestamp strobe + timestamp_trigger_p_a_o : out std_logic; + +-- RMON events + rmon_tx_underrun : out std_logic; + +------------------------------------------------------------------------------- +-- PHY Interface +------------------------------------------------------------------------------- + + phy_tx_clk_i : in std_logic; + phy_tx_data_o : out std_logic_vector(7 downto 0); + phy_tx_k_o : out std_logic; + phy_tx_disparity_i : in std_logic; + phy_tx_enc_err_i : in std_logic + ); + +end ep_tx_pcs_8bit; + + +architecture behavioral of ep_tx_pcs_8bit is + +-- TX state machine definitions + type t_tbif_tx_state is (TX_COMMA, TX_CAL, TX_CR1, TX_CR2, TX_CR3, TX_CR4, TX_SPD, TX_IDLE, TX_DATA, TX_PREAMBLE, TX_SFD, TX_EPD, TX_EXTEND, TX_GOTO_COMMA, TX_GEN_ERROR); + +-- TX state machine signals + + signal tx_is_k : std_logic; + signal tx_catch_disparity : std_logic; + signal tx_odata_reg : std_logic_vector(7 downto 0); + signal tx_state : t_tbif_tx_state; + signal tx_cntr : unsigned(3 downto 0); + signal tx_cr_alternate : std_logic; + +-- TX clock alignment FIFO signals + signal fifo_packed_in, fifo_packed_out : std_logic_vector(17 downto 0); + signal fifo_empty : std_logic; + signal fifo_almost_empty : std_logic; + signal fifo_almost_full : std_logic; + signal fifo_enough_data : std_logic; + signal fifo_wr : std_logic; + signal fifo_rd : std_logic; + signal fifo_ready : std_logic; + signal fifo_clear_n : std_logic; + signal fifo_fab : t_ep_internal_fabric; + + signal tx_rdreq_toggle : std_logic; + signal tx_odd_length : std_logic; + + signal tx_busy : std_logic; + signal tx_error : std_logic; + signal rst_n_tx : std_logic; + + signal mdio_mcr_reset_synced : std_logic; + signal mdio_mcr_pdown_synced : std_logic; + signal an_tx_en_synced : std_logic; + +begin + + U_sync_pcs_busy_o : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + data_i => tx_busy, + synced_o => pcs_busy_o); + + U_sync_pcs_error_o : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + data_i => tx_error, + ppulse_o => pcs_error_o); + + U_sync_an_tx_en : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => phy_tx_clk_i, + rst_n_i => '1', + data_i => an_tx_en_i, + synced_o => an_tx_en_synced); + + U_sync_mcr_reset : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => phy_tx_clk_i, + rst_n_i => '1', + data_i => mdio_mcr_reset_i, + synced_o => mdio_mcr_reset_synced, + npulse_o => open, + ppulse_o => open); + + U_sync_power_down : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => phy_tx_clk_i, + rst_n_i => '1', + data_i => mdio_mcr_pdown_i, + synced_o => mdio_mcr_pdown_synced); + + phy_tx_data_o <= tx_odata_reg; + phy_tx_k_o <= tx_is_k; + + rst_n_tx <= rst_txclk_n_i and not mdio_mcr_reset_synced; + +------------------------------------------------------------------------------- +-- Clock alignment FIFO +------------------------------------------------------------------------------- + + fifo_clear_n <= '0' when (rst_n_i = '0') or (mdio_mcr_pdown_synced = '1') else '1'; + + f_pack_fifo_contents(pcs_fab_i, fifo_packed_in, fifo_wr, true); + + U_TX_FIFO : generic_async_fifo + generic map ( + g_data_width => 18, + g_size => 64, + g_with_rd_empty => true, + g_with_rd_almost_empty => true, + g_with_rd_count => true, + g_with_wr_almost_full => true, + g_almost_empty_threshold => 16, + g_almost_full_threshold => 56) -- fixme: make this a generic (or WB register) + port map ( + rst_n_i => fifo_clear_n, + clk_wr_i => clk_sys_i, + d_i => fifo_packed_in, + we_i => fifo_wr, + wr_empty_o => open, + wr_full_o => open, + wr_almost_empty_o => open, + wr_almost_full_o => fifo_almost_full, + wr_count_o => open, + clk_rd_i => phy_tx_clk_i, + q_o => fifo_packed_out, + rd_i => fifo_rd, + rd_empty_o => fifo_empty, + rd_full_o => open, + rd_almost_empty_o => fifo_almost_empty, + rd_almost_full_o => open, + rd_count_o => open); + + fifo_enough_data <= not fifo_almost_empty; + + f_unpack_fifo_contents(fifo_packed_out, '1', fifo_fab, true); + + ----------------------------------------------------------------------------- + -- TX PCS state machine + ----------------------------------------------------------------------------- + + p_tx_fsm : process (phy_tx_clk_i) + begin + + if rising_edge(phy_tx_clk_i) then + +-- The PCS is reset or disabled + if(rst_n_tx = '0' or mdio_mcr_pdown_synced = '1') then + tx_state <= TX_COMMA; + timestamp_trigger_p_a_o <= '0'; + fifo_rd <= '0'; + tx_error <= '0'; + tx_odata_reg <= (others => '0'); + tx_is_k <= '0'; + tx_cr_alternate <= '0'; + tx_catch_disparity <= '0'; + tx_cntr <= (others => '0'); + tx_odd_length <= '0'; + tx_rdreq_toggle <= '0'; + rmon_tx_underrun <= '0'; + + else + + case tx_state is + +------------------------------------------------------------------------------- +-- State COMMA: sends K28.5 comma character (first byte of /I/ sequence) +------------------------------------------------------------------------------- + when TX_COMMA => + tx_is_k <= '1'; + tx_odata_reg <= c_K28_5; + tx_state <= TX_IDLE; + fifo_rd <= '0'; + fifo_ready <= fifo_rd; + +------------------------------------------------------------------------------- +-- State IDLE: sends the second code of the /I/ sequence with proper disparity\ +------------------------------------------------------------------------------- + when TX_IDLE => + + -- clear the RMON/error pulse after 2 cycles (DATA->COMMA->IDLE) to + -- make sure is't long enough to trigger the event counter + rmon_tx_underrun <= '0'; + tx_error <= '0'; + +-- endpoint wants to send Config_Reg + if(an_tx_en_synced = '1') then + tx_state <= TX_CR1; + tx_cr_alternate <= '0'; + fifo_rd <= '0'; + +-- we've got a new frame in the FIFO + elsif (fifo_fab.sof = '1' and fifo_ready = '1' and tx_cntr = "0000")then + fifo_rd <= '1'; + tx_state <= TX_SPD; + tx_cntr <= "0101"; + +-- host requested a calibration pattern + elsif(mdio_wr_spec_tx_cal_i = '1') then + tx_state <= TX_CAL; + fifo_rd <= '0'; + tx_cr_alternate <= '0'; + else +-- continue sending idle sequences and checking if something has arrived in the +-- FIFO + if(tx_cntr /= "0000") then + fifo_rd <= '0'; + else + fifo_rd <= (not fifo_empty) and fifo_enough_data; + end if; + tx_state <= TX_COMMA; + end if; + + tx_is_k <= '0'; + +-- check the disparity of the previously emitted code and choose whether to send +-- /I1/ or /I2/ + if (phy_tx_disparity_i = '1' and tx_catch_disparity = '1') then + tx_odata_reg <= c_d5_6; + else + tx_odata_reg <= c_d16_2; + end if; + + tx_catch_disparity <= '0'; + + if(tx_cntr /= "0000") then + tx_cntr <= tx_cntr - 1; + end if; +------------------------------------------------------------------------------- +-- State: CAL: transmit the calibration sequence +------------------------------------------------------------------------------- + + when TX_CAL => + tx_odata_reg <= c_k28_7; + tx_is_k <= '1'; + if(mdio_wr_spec_tx_cal_i = '0' and tx_cr_alternate = '1') then + tx_state <= TX_COMMA; + end if; + + tx_cr_alternate <= not tx_cr_alternate; + +------------------------------------------------------------------------------- +-- States: CR1, CR2, CR3, CR4: send the /C/ Configuration code set +------------------------------------------------------------------------------- + + when TX_CR1 => + tx_is_k <= '1'; + tx_odata_reg <= c_k28_5; + tx_state <= TX_CR2; + + when TX_CR2 => + tx_is_k <= '0'; + if (tx_cr_alternate = '1') then + tx_odata_reg <= c_d21_5; + else + tx_odata_reg <= c_d2_2; + end if; + tx_cr_alternate <= not tx_cr_alternate; + tx_state <= TX_CR3; + + when TX_CR3 => + tx_odata_reg <= an_tx_val_i(7 downto 0); + tx_state <= TX_CR4; + + when TX_CR4 => + tx_odata_reg <= an_tx_val_i(15 downto 8); + +-- check if the autonegotiation control still wants the Config_Reg to be sent + if(an_tx_en_synced = '1') then + tx_state <= TX_CR1; + else + tx_state <= TX_COMMA; + end if; + +------------------------------------------------------------------------------- +-- State SPD: sends a start-of-packet delimeter +------------------------------------------------------------------------------- + when TX_SPD => + fifo_rd <= '0'; + tx_is_k <= '1'; + tx_odata_reg <= c_k27_7; + tx_state <= TX_PREAMBLE; + +------------------------------------------------------------------------------- +-- State PREAMBLE: produces an Ethernet preamble +------------------------------------------------------------------------------- + when TX_PREAMBLE => + tx_is_k <= '0'; + tx_odata_reg <= c_preamble_char; + + if (tx_cntr = "0000") then + tx_state <= TX_SFD; + tx_rdreq_toggle <= '1'; + end if; + + tx_cntr <= tx_cntr - 1; + + +------------------------------------------------------------------------------- +-- State SFD: outputs the start-of-frame delimeter (last byte of the preamble) +------------------------------------------------------------------------------- + when TX_SFD => + + tx_odata_reg <= c_preamble_sfd; + tx_rdreq_toggle <= '1'; + tx_state <= TX_DATA; + timestamp_trigger_p_a_o <= '1'; + + when TX_DATA => + + + -- toggle the TX FIFO request line, so we read a 16-bit word + -- every 2 phy_tx_clk_i periods + + fifo_rd <= tx_rdreq_toggle and not (fifo_empty or fifo_fab.eof); + + if((fifo_empty = '1' or fifo_fab.error = '1') and fifo_fab.eof = '0') then -- + -- FIFO underrun? + tx_odata_reg <= c_k30_7; -- emit error propagation code + tx_is_k <= '1'; + tx_state <= TX_GEN_ERROR; + tx_error <= not fifo_fab.error; + rmon_tx_underrun <= '1'; + else + + if tx_rdreq_toggle = '1' then -- send 16-bit word MSB or LSB + tx_odata_reg <= fifo_fab.data(15 downto 8); + else + tx_odata_reg <= fifo_fab.data(7 downto 0); + end if; + + tx_rdreq_toggle <= not tx_rdreq_toggle; + + -- handle the end of frame both for even- and odd-length frames + tx_odd_length <= fifo_fab.bytesel; + + if (fifo_fab.eof = '1' and (tx_rdreq_toggle = '0' or (tx_rdreq_toggle = '1' and fifo_fab.bytesel = '1'))) then + tx_state <= TX_EPD; + fifo_rd <= '0'; + end if; + end if; + +------------------------------------------------------------------------------- +-- State EPD: send End-of-frame delimeter +------------------------------------------------------------------------------- + when TX_EPD => + timestamp_trigger_p_a_o <= '0'; + + tx_is_k <= '1'; + tx_odata_reg <= c_k29_7; + tx_state <= TX_EXTEND; + +-------------------------------------------------------------------------------- +-- State EXTEND: send the carrier extension +------------------------------------------------------------------------------- + when TX_EXTEND => + tx_odata_reg <= c_k23_7; + if(tx_odd_length = '0')then + tx_state <= TX_COMMA; + tx_catch_disparity <= '1'; + else + tx_odd_length <= '0'; + end if; + + tx_cntr <= "1000"; + +------------------------------------------------------------------------------- +-- State GEN_ERROR: entered when an error occured. Just terminates the frame. +------------------------------------------------------------------------------- + when TX_GEN_ERROR => + tx_state <= TX_EPD; + + when others => null; + end case; + end if; + end if; + end process; + + process(phy_tx_clk_i) + begin + if rising_edge(phy_tx_clk_i) then + if fifo_empty = '0' or (tx_state /= TX_IDLE and tx_state /= TX_COMMA) then + tx_busy <= '1'; + else + tx_busy <= '0'; + end if; + end if; + end process; + + pcs_dreq_o <= not fifo_almost_full; + +end behavioral; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_vlan_unit.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_vlan_unit.vhd new file mode 100644 index 000000000..97e1355ea --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_vlan_unit.vhd @@ -0,0 +1,305 @@ +------------------------------------------------------------------------------- +-- Title : 1000base-X MAC/Endpoint - TX VLAN unit +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : ep_tx_vlan_unit.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2012-11-01 +-- Last update: 2012-11-16 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Performs VLAN untagging, if the VID of the egress packet is in +-- the VLAN untagged set. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2012 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- FIXME: redo ram split between VLAN/PCK_INJ to use the unused 256 words and +-- enable storing full-size frame (now max is 1024 bits, if we add 2x256 +-- bytes it will be exactly what we need) -> this requires chagnes in +-- HDL+SW+SV +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2012-11-01 1.0 twlostow Created +-- 2013-04-24 1.1 mlipinsk corrected VLAN untagging +-- 2013-09-02 1.2 mlipinsk optimized by 1-cycle +-- 2014-02-14 1.3 greg.d Bufixed to use in WRSW NIC +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.gencores_pkg.all; +use work.genram_pkg.all; +use work.wr_fabric_pkg.all; +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; +use work.ep_wbgen2_pkg.all; + +entity ep_tx_vlan_unit is + + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + +-- Shared buffer interface to the packet injection unit + inject_mem_addr_i : in std_logic_vector(9 downto 0); + inject_mem_data_o : out std_logic_vector(17 downto 0); + + uram_offset_wr_i : in std_logic; + uram_offset_i : in std_logic_vector(9 downto 0); + uram_data_i : in std_logic_vector(17 downto 0) + ); + + +end ep_tx_vlan_unit; + +architecture behavioral of ep_tx_vlan_unit is + + + type t_state is (IDLE, CHECK_ETHERTYPE, PUSH_QHEADER_1, POP_QHEADER_2, POP_QHEADER_3, POP_ETHERTYPE); + +-- general signals + signal state : t_state; + signal counter : unsigned(2 downto 0); + + signal vut_rd_vid : std_logic_vector(11 downto 0); + signal vut_wr_vid : std_logic_vector(11 downto 0); + signal vut_untag, vut_untag_reg : std_logic; + + signal vut_stored_tag : std_logic_vector(15 downto 0); + signal vut_stored_ethertype : std_logic_vector(15 downto 0); + signal flush_ethertype : std_logic; + signal flushed : std_logic; + + signal mem_addr_muxed : std_logic_vector(9 downto 0); + signal mem_rdata : std_logic_vector(17 downto 0); + signal src_dreq_d0 : std_logic; + +begin -- behavioral + + vut_rd_vid <= snk_fab_i.data(11 downto 0); + + -- FIXME: + -- ML: currently 256 words of the ram are not used and we don't have space to store + -- max size frame (max tempalte is 512x2bytes = 1024 bytes) + -- we can use the unused bytes, just that some changes to sw+hw are needed + mem_addr_muxed <= ("00" & vut_rd_vid(11 downto 4)) when state /= IDLE else inject_mem_addr_i; + + U_Untagged_Set_RAM : generic_dpram + generic map ( + g_data_width => 18, + g_size => 1024, + g_dual_clock => false) + port map ( + rst_n_i => rst_n_i, + clka_i => clk_sys_i, + clkb_i => '0', + wea_i => '0', + aa_i => mem_addr_muxed, + qa_o => mem_rdata, + web_i => uram_offset_wr_i, + ab_i => uram_offset_i, + db_i => uram_data_i); + + inject_mem_data_o <= mem_rdata; + + vut_untag <= mem_rdata(to_integer(unsigned(vut_stored_tag(3 downto 0)))); + + p_delay_signals : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + src_dreq_d0 <= src_dreq_i; + + end if; + end process; + + p_main_fsm : process (clk_sys_i) + begin -- process + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + state <= IDLE; + else + case state is + when IDLE => + flushed <= '0'; + if(snk_fab_i.sof = '1') then + counter <= (others => '0'); + end if; + if(snk_fab_i.dvalid = '1' and snk_fab_i.addr = c_WRF_DATA and counter /= 6) then + counter <= counter + 1; + end if; + if(src_dreq_i='1') then + flush_ethertype <= '0'; + end if; + + if(snk_fab_i.dvalid = '1' and counter = 5) then + state <= CHECK_ETHERTYPE; + end if; + + when CHECK_ETHERTYPE => + vut_stored_ethertype <= snk_fab_i.data; + + if(snk_fab_i.dvalid = '1') then + + if(snk_fab_i.data = x"8100") then + state <= PUSH_QHEADER_1; + else + state <= IDLE; + end if; + end if; + + when PUSH_QHEADER_1 => + vut_untag_reg <= '0'; + + if(snk_fab_i.dvalid = '1') then + vut_stored_tag <= snk_fab_i.data; + state <= POP_ETHERTYPE; + end if; + + when POP_ETHERTYPE => + if(vut_untag = '1') then + vut_untag_reg <= '1'; + end if; + if(snk_fab_i.dvalid = '1') then + vut_stored_ethertype <= snk_fab_i.data; + end if; + -- if dreq is '1' in POP_ETHERTYPE, that means we have passed + -- ethertype to src_fab_o and we don't need to do it after going to + -- IDLE. + if(src_dreq_d0 = '1') then + flush_ethertype <= '0'; + elsif(src_dreq_i = '0' and flushed = '0') then + flush_ethertype <= '1'; + end if; + if(src_dreq_d0 = '1') then + flushed <= '1'; + end if; + if( (vut_untag = '1' or vut_untag_reg = '1') and src_dreq_i = '1') then + state <= IDLE; + end if; + if(vut_untag='0' and vut_untag_reg='0' and src_dreq_d0='1') then + state <= POP_QHEADER_2; + end if; + + when POP_QHEADER_2 => + if(src_dreq_d0 = '1') then + state <= POP_QHEADER_3; + end if; + + when POP_QHEADER_3 => + if(src_dreq_d0 = '1') then + state <= IDLE; + end if; + + end case; + end if; + end if; + end process; + + +-- p_main_fsm_comb : process(snk_fab_i, src_dreq_d0, state, vut_stored_tag, vut_stored_ethertype, counter,vut_untag) + p_main_fsm_comb : process(snk_fab_i,src_dreq_i, src_dreq_d0, state, vut_stored_tag, vut_stored_ethertype, counter,vut_untag, flush_ethertype) + begin + + case state is + when IDLE => + src_fab_o.sof <= snk_fab_i.sof; + src_fab_o.eof <= snk_fab_i.eof; + src_fab_o.error <= snk_fab_i.error; + src_fab_o.bytesel <= snk_fab_i.bytesel; + when others => + src_fab_o.sof <= '0'; + src_fab_o.eof <= '0'; + src_fab_o.error <= '0'; + src_fab_o.bytesel <= '0'; + end case; + + case state is + when IDLE => + snk_dreq_o <= src_dreq_i; + -- validate Ethertype from POP_ETHERTYPE state if dreq was high + src_fab_o.dvalid <= snk_fab_i.dvalid or flush_ethertype; + src_fab_o.addr <= snk_fab_i.addr; + if(flush_ethertype = '1') then + src_fab_o.data <= vut_stored_ethertype; + else + src_fab_o.data <= snk_fab_i.data; + end if; + + when CHECK_ETHERTYPE => + snk_dreq_o <= src_dreq_i; + if(snk_fab_i.data /= x"8100") then + src_fab_o.dvalid <= snk_fab_i.dvalid; + else + src_fab_o.dvalid <= '0'; + end if; + src_fab_o.data <= snk_fab_i.data; + src_fab_o.addr <= snk_fab_i.addr; + + when PUSH_QHEADER_1 => + snk_dreq_o <= '1'; + src_fab_o.dvalid <= '0'; + src_fab_o.data <= (others => 'X'); + src_fab_o.addr <= c_WRF_DATA; +-- when CHECK_UNTAG => +-- snk_dreq_o <= '0'; +-- src_fab_o.dvalid <= '0'; +-- src_fab_o.data <= (others => 'X'); + + when POP_ETHERTYPE => + if(vut_untag = '1') then + snk_dreq_o <= src_dreq_i and src_dreq_d0; + src_fab_o.dvalid <= snk_fab_i.dvalid and src_dreq_d0; + src_fab_o.data <= snk_fab_i.data; + else + src_fab_o.data <= x"8100"; + snk_dreq_o <= '0'; + src_fab_o.dvalid <= src_dreq_d0; + end if; + src_fab_o.addr <= c_WRF_DATA; + + when POP_QHEADER_2 => + snk_dreq_o <= '0'; + src_fab_o.dvalid <= src_dreq_d0; + src_fab_o.data <= vut_stored_tag;--vut_stored_ethertype; + src_fab_o.addr <= c_WRF_DATA; + + when POP_QHEADER_3 => + snk_dreq_o <= src_dreq_i and src_dreq_d0; + src_fab_o.dvalid <= src_dreq_d0; + src_fab_o.data <= vut_stored_ethertype; --vut_stored_tag; + src_fab_o.addr <= c_WRF_DATA; + end case; + end process; + +end behavioral; + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_wishbone_controller.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_wishbone_controller.vhd new file mode 100644 index 000000000..b58e0cfdc --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_wishbone_controller.vhd @@ -0,0 +1,861 @@ +--------------------------------------------------------------------------------------- +-- Title : Wishbone slave core for WR switch endpoint controller +--------------------------------------------------------------------------------------- +-- File : ep_wishbone_controller.vhd +-- Author : auto-generated by wbgen2 from ep_wishbone_controller.wb +-- Created : Wed Aug 16 22:43:41 2017 +-- Standard : VHDL'87 +--------------------------------------------------------------------------------------- +-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE ep_wishbone_controller.wb +-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY! +--------------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.ep_wbgen2_pkg.all; + + +entity ep_wishbone_controller is + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + tx_clk_i : in std_logic; + rx_clk_i : in std_logic; + regs_i : in t_ep_in_registers; + regs_o : out t_ep_out_registers + ); +end ep_wishbone_controller; + +architecture syn of ep_wishbone_controller is + +signal ep_ecr_portid_int : std_logic_vector(4 downto 0); +signal ep_ecr_rst_cnt_dly0 : std_logic ; +signal ep_ecr_rst_cnt_int : std_logic ; +signal ep_ecr_tx_en_int : std_logic ; +signal ep_ecr_rx_en_int : std_logic ; +signal ep_tscr_en_txts_int : std_logic ; +signal ep_tscr_en_rxts_int : std_logic ; +signal ep_tscr_cs_start_int : std_logic ; +signal ep_tscr_cs_start_int_delay : std_logic ; +signal ep_tscr_cs_start_sync0 : std_logic ; +signal ep_tscr_cs_start_sync1 : std_logic ; +signal ep_tscr_cs_start_sync2 : std_logic ; +signal ep_tscr_cs_done_sync0 : std_logic ; +signal ep_tscr_cs_done_sync1 : std_logic ; +signal ep_tscr_rx_cal_start_int : std_logic ; +signal ep_tscr_rx_cal_start_int_delay : std_logic ; +signal ep_tscr_rx_cal_start_sync0 : std_logic ; +signal ep_tscr_rx_cal_start_sync1 : std_logic ; +signal ep_tscr_rx_cal_start_sync2 : std_logic ; +signal ep_rfcr_a_runt_int : std_logic ; +signal ep_rfcr_a_giant_int : std_logic ; +signal ep_rfcr_a_hp_int : std_logic ; +signal ep_rfcr_keep_crc_int : std_logic ; +signal ep_rfcr_hpap_int : std_logic_vector(7 downto 0); +signal ep_rfcr_mru_int : std_logic_vector(13 downto 0); +signal ep_vcr0_qmode_int : std_logic_vector(1 downto 0); +signal ep_vcr0_fix_prio_int : std_logic ; +signal ep_vcr0_prio_val_int : std_logic_vector(2 downto 0); +signal ep_vcr0_pvid_int : std_logic_vector(11 downto 0); +signal ep_pfcr0_enable_int : std_logic ; +signal ep_fcr_rxpause_int : std_logic ; +signal ep_fcr_txpause_int : std_logic ; +signal ep_fcr_rxpause_802_1q_int : std_logic ; +signal ep_fcr_txpause_802_1q_int : std_logic ; +signal ep_fcr_tx_thr_int : std_logic_vector(7 downto 0); +signal ep_fcr_tx_quanta_int : std_logic_vector(15 downto 0); +signal ep_mach_int : std_logic_vector(15 downto 0); +signal ep_macl_int : std_logic_vector(31 downto 0); +signal ep_mdio_cr_addr_int : std_logic_vector(7 downto 0); +signal ep_mdio_cr_rw_int : std_logic ; +signal ep_mdio_asr_phyad_int : std_logic_vector(7 downto 0); +signal ack_sreg : std_logic_vector(9 downto 0); +signal rddata_reg : std_logic_vector(31 downto 0); +signal wrdata_reg : std_logic_vector(31 downto 0); +signal rwaddr_reg : std_logic_vector(4 downto 0); +signal ack_in_progress : std_logic ; + +begin +-- Some internal signals assignments + wrdata_reg <= wb_dat_i; +-- +-- Main register bank access process. + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + ack_sreg <= "0000000000"; + ack_in_progress <= '0'; + rddata_reg <= "00000000000000000000000000000000"; + ep_ecr_portid_int <= "00000"; + ep_ecr_rst_cnt_int <= '0'; + ep_ecr_tx_en_int <= '0'; + ep_ecr_rx_en_int <= '0'; + ep_tscr_en_txts_int <= '0'; + ep_tscr_en_rxts_int <= '0'; + ep_tscr_cs_start_int <= '0'; + ep_tscr_cs_start_int_delay <= '0'; + ep_tscr_rx_cal_start_int <= '0'; + ep_tscr_rx_cal_start_int_delay <= '0'; + ep_rfcr_a_runt_int <= '0'; + ep_rfcr_a_giant_int <= '0'; + ep_rfcr_a_hp_int <= '0'; + ep_rfcr_keep_crc_int <= '0'; + ep_rfcr_hpap_int <= "00000000"; + ep_rfcr_mru_int <= "00000000000000"; + ep_vcr0_qmode_int <= "00"; + ep_vcr0_fix_prio_int <= '0'; + ep_vcr0_prio_val_int <= "000"; + ep_vcr0_pvid_int <= "000000000000"; + regs_o.vcr1_offset_wr_o <= '0'; + regs_o.vcr1_data_wr_o <= '0'; + regs_o.pfcr0_mm_addr_wr_o <= '0'; + regs_o.pfcr0_mm_write_wr_o <= '0'; + ep_pfcr0_enable_int <= '0'; + regs_o.pfcr0_mm_data_msb_wr_o <= '0'; + regs_o.pfcr1_mm_data_lsb_wr_o <= '0'; + regs_o.tcar_pcp_map_load_o <= '0'; + ep_fcr_rxpause_int <= '0'; + ep_fcr_txpause_int <= '0'; + ep_fcr_rxpause_802_1q_int <= '0'; + ep_fcr_txpause_802_1q_int <= '0'; + ep_fcr_tx_thr_int <= "00000000"; + ep_fcr_tx_quanta_int <= "0000000000000000"; + ep_mach_int <= "0000000000000000"; + ep_macl_int <= "00000000000000000000000000000000"; + regs_o.mdio_cr_data_wr_o <= '0'; + ep_mdio_cr_addr_int <= "00000000"; + ep_mdio_cr_rw_int <= '0'; + ep_mdio_asr_phyad_int <= "00000000"; + regs_o.dsr_lact_load_o <= '0'; + regs_o.dmcr_en_load_o <= '0'; + regs_o.dmcr_n_avg_load_o <= '0'; + regs_o.dmsr_ps_rdy_load_o <= '0'; + regs_o.inj_ctrl_pic_conf_ifg_load_o <= '0'; + regs_o.inj_ctrl_pic_conf_sel_load_o <= '0'; + regs_o.inj_ctrl_pic_conf_valid_load_o <= '0'; + regs_o.inj_ctrl_pic_mode_id_load_o <= '0'; + regs_o.inj_ctrl_pic_mode_valid_load_o <= '0'; + regs_o.inj_ctrl_pic_ena_load_o <= '0'; + elsif rising_edge(clk_sys_i) then +-- advance the ACK generator shift register + ack_sreg(8 downto 0) <= ack_sreg(9 downto 1); + ack_sreg(9) <= '0'; + if (ack_in_progress = '1') then + if (ack_sreg(0) = '1') then + ep_ecr_rst_cnt_int <= '0'; + regs_o.vcr1_offset_wr_o <= '0'; + regs_o.vcr1_data_wr_o <= '0'; + regs_o.pfcr0_mm_addr_wr_o <= '0'; + regs_o.pfcr0_mm_write_wr_o <= '0'; + regs_o.pfcr0_mm_data_msb_wr_o <= '0'; + regs_o.pfcr1_mm_data_lsb_wr_o <= '0'; + regs_o.tcar_pcp_map_load_o <= '0'; + regs_o.mdio_cr_data_wr_o <= '0'; + regs_o.dsr_lact_load_o <= '0'; + regs_o.dmcr_en_load_o <= '0'; + regs_o.dmcr_n_avg_load_o <= '0'; + regs_o.dmsr_ps_rdy_load_o <= '0'; + regs_o.inj_ctrl_pic_conf_ifg_load_o <= '0'; + regs_o.inj_ctrl_pic_conf_sel_load_o <= '0'; + regs_o.inj_ctrl_pic_conf_valid_load_o <= '0'; + regs_o.inj_ctrl_pic_mode_id_load_o <= '0'; + regs_o.inj_ctrl_pic_mode_valid_load_o <= '0'; + regs_o.inj_ctrl_pic_ena_load_o <= '0'; + ack_in_progress <= '0'; + else + ep_tscr_cs_start_int <= ep_tscr_cs_start_int_delay; + ep_tscr_cs_start_int_delay <= '0'; + ep_tscr_rx_cal_start_int <= ep_tscr_rx_cal_start_int_delay; + ep_tscr_rx_cal_start_int_delay <= '0'; + regs_o.vcr1_offset_wr_o <= '0'; + regs_o.vcr1_data_wr_o <= '0'; + regs_o.pfcr0_mm_addr_wr_o <= '0'; + regs_o.pfcr0_mm_write_wr_o <= '0'; + regs_o.pfcr0_mm_data_msb_wr_o <= '0'; + regs_o.pfcr1_mm_data_lsb_wr_o <= '0'; + regs_o.tcar_pcp_map_load_o <= '0'; + regs_o.mdio_cr_data_wr_o <= '0'; + regs_o.dsr_lact_load_o <= '0'; + regs_o.dmcr_en_load_o <= '0'; + regs_o.dmcr_n_avg_load_o <= '0'; + regs_o.dmsr_ps_rdy_load_o <= '0'; + regs_o.inj_ctrl_pic_conf_ifg_load_o <= '0'; + regs_o.inj_ctrl_pic_conf_sel_load_o <= '0'; + regs_o.inj_ctrl_pic_conf_valid_load_o <= '0'; + regs_o.inj_ctrl_pic_mode_id_load_o <= '0'; + regs_o.inj_ctrl_pic_mode_valid_load_o <= '0'; + regs_o.inj_ctrl_pic_ena_load_o <= '0'; + end if; + else + if ((wb_cyc_i = '1') and (wb_stb_i = '1')) then + case rwaddr_reg(4 downto 0) is + when "00000" => + if (wb_we_i = '1') then + ep_ecr_portid_int <= wrdata_reg(4 downto 0); + ep_ecr_rst_cnt_int <= wrdata_reg(5); + ep_ecr_tx_en_int <= wrdata_reg(6); + ep_ecr_rx_en_int <= wrdata_reg(7); + end if; + rddata_reg(4 downto 0) <= ep_ecr_portid_int; + rddata_reg(5) <= '0'; + rddata_reg(6) <= ep_ecr_tx_en_int; + rddata_reg(7) <= ep_ecr_rx_en_int; + rddata_reg(24) <= regs_i.ecr_feat_vlan_i; + rddata_reg(25) <= regs_i.ecr_feat_dmtd_i; + rddata_reg(26) <= regs_i.ecr_feat_ptp_i; + rddata_reg(27) <= regs_i.ecr_feat_dpi_i; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(2) <= '1'; + ack_in_progress <= '1'; + when "00001" => + if (wb_we_i = '1') then + ep_tscr_en_txts_int <= wrdata_reg(0); + ep_tscr_en_rxts_int <= wrdata_reg(1); + ep_tscr_cs_start_int <= wrdata_reg(2); + ep_tscr_cs_start_int_delay <= wrdata_reg(2); + ep_tscr_rx_cal_start_int <= wrdata_reg(4); + ep_tscr_rx_cal_start_int_delay <= wrdata_reg(4); + end if; + rddata_reg(0) <= ep_tscr_en_txts_int; + rddata_reg(1) <= ep_tscr_en_rxts_int; + rddata_reg(2) <= '0'; + rddata_reg(3) <= ep_tscr_cs_done_sync1; + rddata_reg(4) <= '0'; + rddata_reg(5) <= regs_i.tscr_rx_cal_result_i; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(4) <= '1'; + ack_in_progress <= '1'; + when "00010" => + if (wb_we_i = '1') then + ep_rfcr_a_runt_int <= wrdata_reg(0); + ep_rfcr_a_giant_int <= wrdata_reg(1); + ep_rfcr_a_hp_int <= wrdata_reg(2); + ep_rfcr_keep_crc_int <= wrdata_reg(3); + ep_rfcr_hpap_int <= wrdata_reg(11 downto 4); + ep_rfcr_mru_int <= wrdata_reg(25 downto 12); + end if; + rddata_reg(0) <= ep_rfcr_a_runt_int; + rddata_reg(1) <= ep_rfcr_a_giant_int; + rddata_reg(2) <= ep_rfcr_a_hp_int; + rddata_reg(3) <= ep_rfcr_keep_crc_int; + rddata_reg(11 downto 4) <= ep_rfcr_hpap_int; + rddata_reg(25 downto 12) <= ep_rfcr_mru_int; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00011" => + if (wb_we_i = '1') then + ep_vcr0_qmode_int <= wrdata_reg(1 downto 0); + ep_vcr0_fix_prio_int <= wrdata_reg(2); + ep_vcr0_prio_val_int <= wrdata_reg(6 downto 4); + ep_vcr0_pvid_int <= wrdata_reg(27 downto 16); + end if; + rddata_reg(1 downto 0) <= ep_vcr0_qmode_int; + rddata_reg(2) <= ep_vcr0_fix_prio_int; + rddata_reg(6 downto 4) <= ep_vcr0_prio_val_int; + rddata_reg(27 downto 16) <= ep_vcr0_pvid_int; + rddata_reg(3) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00100" => + if (wb_we_i = '1') then + regs_o.vcr1_offset_wr_o <= '1'; + regs_o.vcr1_data_wr_o <= '1'; + end if; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00101" => + if (wb_we_i = '1') then + regs_o.pfcr0_mm_addr_wr_o <= '1'; + regs_o.pfcr0_mm_write_wr_o <= '1'; + ep_pfcr0_enable_int <= wrdata_reg(7); + regs_o.pfcr0_mm_data_msb_wr_o <= '1'; + end if; + rddata_reg(7) <= ep_pfcr0_enable_int; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00110" => + if (wb_we_i = '1') then + regs_o.pfcr1_mm_data_lsb_wr_o <= '1'; + end if; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00111" => + if (wb_we_i = '1') then + regs_o.tcar_pcp_map_load_o <= '1'; + end if; + rddata_reg(23 downto 0) <= regs_i.tcar_pcp_map_i; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01000" => + if (wb_we_i = '1') then + ep_fcr_rxpause_int <= wrdata_reg(0); + ep_fcr_txpause_int <= wrdata_reg(1); + ep_fcr_rxpause_802_1q_int <= wrdata_reg(2); + ep_fcr_txpause_802_1q_int <= wrdata_reg(3); + ep_fcr_tx_thr_int <= wrdata_reg(15 downto 8); + ep_fcr_tx_quanta_int <= wrdata_reg(31 downto 16); + end if; + rddata_reg(0) <= ep_fcr_rxpause_int; + rddata_reg(1) <= ep_fcr_txpause_int; + rddata_reg(2) <= ep_fcr_rxpause_802_1q_int; + rddata_reg(3) <= ep_fcr_txpause_802_1q_int; + rddata_reg(15 downto 8) <= ep_fcr_tx_thr_int; + rddata_reg(31 downto 16) <= ep_fcr_tx_quanta_int; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01001" => + if (wb_we_i = '1') then + ep_mach_int <= wrdata_reg(15 downto 0); + end if; + rddata_reg(15 downto 0) <= ep_mach_int; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01010" => + if (wb_we_i = '1') then + ep_macl_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= ep_macl_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01011" => + if (wb_we_i = '1') then + regs_o.mdio_cr_data_wr_o <= '1'; + ep_mdio_cr_addr_int <= wrdata_reg(23 downto 16); + ep_mdio_cr_rw_int <= wrdata_reg(31); + end if; + rddata_reg(23 downto 16) <= ep_mdio_cr_addr_int; + rddata_reg(31) <= ep_mdio_cr_rw_int; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01100" => + if (wb_we_i = '1') then + ep_mdio_asr_phyad_int <= wrdata_reg(23 downto 16); + end if; + rddata_reg(15 downto 0) <= regs_i.mdio_asr_rdata_i; + rddata_reg(23 downto 16) <= ep_mdio_asr_phyad_int; + rddata_reg(31) <= regs_i.mdio_asr_ready_i; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01101" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= "11001010111111101011101010111110"; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01110" => + if (wb_we_i = '1') then + regs_o.dsr_lact_load_o <= '1'; + end if; + rddata_reg(0) <= regs_i.dsr_lstatus_i; + rddata_reg(1) <= regs_i.dsr_lact_i; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01111" => + if (wb_we_i = '1') then + regs_o.dmcr_en_load_o <= '1'; + regs_o.dmcr_n_avg_load_o <= '1'; + end if; + rddata_reg(0) <= regs_i.dmcr_en_i; + rddata_reg(27 downto 16) <= regs_i.dmcr_n_avg_i; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "10000" => + if (wb_we_i = '1') then + regs_o.dmsr_ps_rdy_load_o <= '1'; + end if; + rddata_reg(23 downto 0) <= regs_i.dmsr_ps_val_i; + rddata_reg(24) <= regs_i.dmsr_ps_rdy_i; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "10001" => + if (wb_we_i = '1') then + regs_o.inj_ctrl_pic_conf_ifg_load_o <= '1'; + regs_o.inj_ctrl_pic_conf_sel_load_o <= '1'; + regs_o.inj_ctrl_pic_conf_valid_load_o <= '1'; + regs_o.inj_ctrl_pic_mode_id_load_o <= '1'; + regs_o.inj_ctrl_pic_mode_valid_load_o <= '1'; + regs_o.inj_ctrl_pic_ena_load_o <= '1'; + end if; + rddata_reg(15 downto 0) <= regs_i.inj_ctrl_pic_conf_ifg_i; + rddata_reg(18 downto 16) <= regs_i.inj_ctrl_pic_conf_sel_i; + rddata_reg(19) <= regs_i.inj_ctrl_pic_conf_valid_i; + rddata_reg(22 downto 20) <= regs_i.inj_ctrl_pic_mode_id_i; + rddata_reg(23) <= regs_i.inj_ctrl_pic_mode_valid_i; + rddata_reg(24) <= regs_i.inj_ctrl_pic_ena_i; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when others => +-- prevent the slave from hanging the bus on invalid address + ack_in_progress <= '1'; + ack_sreg(0) <= '1'; + end case; + end if; + end if; + end if; + end process; + + +-- Drive the data output bus + wb_dat_o <= rddata_reg; +-- Port identifier + regs_o.ecr_portid_o <= ep_ecr_portid_int; +-- Reset event counters + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + ep_ecr_rst_cnt_dly0 <= '0'; + regs_o.ecr_rst_cnt_o <= '0'; + elsif rising_edge(clk_sys_i) then + ep_ecr_rst_cnt_dly0 <= ep_ecr_rst_cnt_int; + regs_o.ecr_rst_cnt_o <= ep_ecr_rst_cnt_int and (not ep_ecr_rst_cnt_dly0); + end if; + end process; + + +-- Transmit path enable + regs_o.ecr_tx_en_o <= ep_ecr_tx_en_int; +-- Receive path enable + regs_o.ecr_rx_en_o <= ep_ecr_rx_en_int; +-- Feature present: VLAN tagging +-- Feature present: DDMTD phase measurement +-- Feature present: IEEE1588 timestamper +-- Feature present: DPI packet classifier +-- Transmit timestamping enable + regs_o.tscr_en_txts_o <= ep_tscr_en_txts_int; +-- Receive timestamping enable + regs_o.tscr_en_rxts_o <= ep_tscr_en_rxts_int; +-- Timestamping counter synchronization start + process (tx_clk_i, rst_n_i) + begin + if (rst_n_i = '0') then + regs_o.tscr_cs_start_o <= '0'; + ep_tscr_cs_start_sync0 <= '0'; + ep_tscr_cs_start_sync1 <= '0'; + ep_tscr_cs_start_sync2 <= '0'; + elsif rising_edge(tx_clk_i) then + ep_tscr_cs_start_sync0 <= ep_tscr_cs_start_int; + ep_tscr_cs_start_sync1 <= ep_tscr_cs_start_sync0; + ep_tscr_cs_start_sync2 <= ep_tscr_cs_start_sync1; + regs_o.tscr_cs_start_o <= ep_tscr_cs_start_sync2 and (not ep_tscr_cs_start_sync1); + end if; + end process; + + +-- Timestamping counter synchronization done +-- synchronizer chain for field : Timestamping counter synchronization done (type RO/WO, tx_clk_i -> clk_sys_i) + process (tx_clk_i, rst_n_i) + begin + if (rst_n_i = '0') then + ep_tscr_cs_done_sync0 <= '0'; + ep_tscr_cs_done_sync1 <= '0'; + elsif rising_edge(tx_clk_i) then + ep_tscr_cs_done_sync0 <= regs_i.tscr_cs_done_i; + ep_tscr_cs_done_sync1 <= ep_tscr_cs_done_sync0; + end if; + end process; + + +-- Start calibration of RX timestamper + process (rx_clk_i, rst_n_i) + begin + if (rst_n_i = '0') then + regs_o.tscr_rx_cal_start_o <= '0'; + ep_tscr_rx_cal_start_sync0 <= '0'; + ep_tscr_rx_cal_start_sync1 <= '0'; + ep_tscr_rx_cal_start_sync2 <= '0'; + elsif rising_edge(rx_clk_i) then + ep_tscr_rx_cal_start_sync0 <= ep_tscr_rx_cal_start_int; + ep_tscr_rx_cal_start_sync1 <= ep_tscr_rx_cal_start_sync0; + ep_tscr_rx_cal_start_sync2 <= ep_tscr_rx_cal_start_sync1; + regs_o.tscr_rx_cal_start_o <= ep_tscr_rx_cal_start_sync2 and (not ep_tscr_rx_cal_start_sync1); + end if; + end process; + + +-- RX timestamper calibration result flag +-- RX accept runts + regs_o.rfcr_a_runt_o <= ep_rfcr_a_runt_int; +-- RX accept giants + regs_o.rfcr_a_giant_o <= ep_rfcr_a_giant_int; +-- RX accept HP + regs_o.rfcr_a_hp_o <= ep_rfcr_a_hp_int; +-- RX keep CRC + regs_o.rfcr_keep_crc_o <= ep_rfcr_keep_crc_int; +-- RX Fiter HP Priorities + regs_o.rfcr_hpap_o <= ep_rfcr_hpap_int; +-- Maximum receive unit (MRU) + regs_o.rfcr_mru_o <= ep_rfcr_mru_int; +-- RX 802.1q port mode + regs_o.vcr0_qmode_o <= ep_vcr0_qmode_int; +-- Force 802.1q priority + regs_o.vcr0_fix_prio_o <= ep_vcr0_fix_prio_int; +-- Port-assigned 802.1q priority + regs_o.vcr0_prio_val_o <= ep_vcr0_prio_val_int; +-- Port-assigned VID + regs_o.vcr0_pvid_o <= ep_vcr0_pvid_int; +-- VLAN Untagged Set/Injection Buffer offset +-- pass-through field: VLAN Untagged Set/Injection Buffer offset in register: VLAN Control Register 1 + regs_o.vcr1_offset_o <= wrdata_reg(9 downto 0); +-- VLAN Untagged Set/Injection Buffer value +-- pass-through field: VLAN Untagged Set/Injection Buffer value in register: VLAN Control Register 1 + regs_o.vcr1_data_o <= wrdata_reg(27 downto 10); +-- Microcode Memory Address +-- pass-through field: Microcode Memory Address in register: Packet Filter Control Register 0 + regs_o.pfcr0_mm_addr_o <= wrdata_reg(5 downto 0); +-- Microcode Memory Write Enable +-- pass-through field: Microcode Memory Write Enable in register: Packet Filter Control Register 0 + regs_o.pfcr0_mm_write_o <= wrdata_reg(6); +-- Packet Filter Enable + regs_o.pfcr0_enable_o <= ep_pfcr0_enable_int; +-- Microcode Memory Data (24 MSBs) +-- pass-through field: Microcode Memory Data (24 MSBs) in register: Packet Filter Control Register 0 + regs_o.pfcr0_mm_data_msb_o <= wrdata_reg(31 downto 8); +-- Microcode Memory Data (12 LSBs) +-- pass-through field: Microcode Memory Data (12 LSBs) in register: Packet Filter Control Register 1 + regs_o.pfcr1_mm_data_lsb_o <= wrdata_reg(11 downto 0); +-- 802.1Q priority tag to Traffic Class map + regs_o.tcar_pcp_map_o <= wrdata_reg(23 downto 0); +-- RX Pause 802.3 enable + regs_o.fcr_rxpause_o <= ep_fcr_rxpause_int; +-- TX Pause 802.3 enable + regs_o.fcr_txpause_o <= ep_fcr_txpause_int; +-- Rx Pause 802.1Q enable + regs_o.fcr_rxpause_802_1q_o <= ep_fcr_rxpause_802_1q_int; +-- Tx Pause 802.1Q enable (not implemented) + regs_o.fcr_txpause_802_1q_o <= ep_fcr_txpause_802_1q_int; +-- TX pause threshold + regs_o.fcr_tx_thr_o <= ep_fcr_tx_thr_int; +-- TX pause quanta + regs_o.fcr_tx_quanta_o <= ep_fcr_tx_quanta_int; +-- MAC Address + regs_o.mach_o <= ep_mach_int; +-- MAC Address + regs_o.macl_o <= ep_macl_int; +-- MDIO Register Value +-- pass-through field: MDIO Register Value in register: MDIO Control Register + regs_o.mdio_cr_data_o <= wrdata_reg(15 downto 0); +-- MDIO Register Address + regs_o.mdio_cr_addr_o <= ep_mdio_cr_addr_int; +-- MDIO Read/Write select + regs_o.mdio_cr_rw_o <= ep_mdio_cr_rw_int; +-- MDIO Read Value +-- MDIO PHY Address + regs_o.mdio_asr_phyad_o <= ep_mdio_asr_phyad_int; +-- MDIO Ready +-- Link status +-- Link activity + regs_o.dsr_lact_o <= wrdata_reg(1); +-- DMTD Phase measurement enable + regs_o.dmcr_en_o <= wrdata_reg(0); +-- DMTD averaging samples + regs_o.dmcr_n_avg_o <= wrdata_reg(27 downto 16); +-- DMTD Phase shift value +-- DMTD Phase shift value ready + regs_o.dmsr_ps_rdy_o <= wrdata_reg(24); +-- Config: Interframe GAP + regs_o.inj_ctrl_pic_conf_ifg_o <= wrdata_reg(15 downto 0); +-- Config: packet pattern sel id + regs_o.inj_ctrl_pic_conf_sel_o <= wrdata_reg(18 downto 16); +-- Config: valid + regs_o.inj_ctrl_pic_conf_valid_o <= wrdata_reg(19); +-- Mode: packet generate mode + regs_o.inj_ctrl_pic_mode_id_o <= wrdata_reg(22 downto 20); +-- Mode: valid + regs_o.inj_ctrl_pic_mode_valid_o <= wrdata_reg(23); +-- Frame Generation Enabled + regs_o.inj_ctrl_pic_ena_o <= wrdata_reg(24); + rwaddr_reg <= wb_adr_i; + wb_stall_o <= (not ack_sreg(0)) and (wb_stb_i and wb_cyc_i); +-- ACK signal generation. Just pass the LSB of ACK counter. + wb_ack_o <= ack_sreg(0); +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/wr_endpoint.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/wr_endpoint.vhd new file mode 100644 index 000000000..f014eab9f --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/wr_endpoint.vhd @@ -0,0 +1,1001 @@ +------------------------------------------------------------------------------- +-- Title : 1000base-X MAC/Endpoint +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : wr_endpoint.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2010-04-26 +-- Last update: 2017-02-20 +-- Platform : FPGA-generics +-- Standard : VHDL +------------------------------------------------------------------------------- +-- Description: Module implements the top level for the White Rabbit Endpoint +-- It's basically an extended Ethernet MAC providing extra timing/switch-specific +-- features such as: +-- - VLANs: inserting/removing tags (for ACCESS/TRUNK port support) +-- - RX/TX precise timestaping +-- - full PCS for optical Gigabit Ethernet +-- - decodes MAC addresses, VIDs and priorities and passes them to the RTU. +-- Refer to the manual for more details. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2011 - 2017 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; + +use work.gencores_pkg.all; +use work.endpoint_private_pkg.all; +use work.endpoint_pkg.all; +use work.ep_wbgen2_pkg.all; +use work.wr_fabric_pkg.all; +use work.wishbone_pkg.all; + +entity wr_endpoint is + + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_tx_force_gap_length : integer := 0; + g_tx_runt_padding : boolean := true; + g_simulation : boolean := false; + g_pcs_16bit : boolean := true; + g_rx_buffer_size : integer := 1024; + g_with_rx_buffer : boolean := true; + g_with_flow_control : boolean := true; + g_with_timestamper : boolean := true; + g_with_dpi_classifier : boolean := false; + g_with_vlans : boolean := true; + g_with_rtu : boolean := true; + g_with_leds : boolean := true; + g_with_dmtd : boolean := false; + g_with_packet_injection : boolean := false; + g_use_new_rxcrc : boolean := false; + g_use_new_txcrc : boolean := false; + g_with_stop_traffic : boolean := false + ); + port ( + +------------------------------------------------------------------------------- +-- Clocks +------------------------------------------------------------------------------- + +-- Endpoint transmit reference clock. Must be 125 MHz +- 100 ppm + clk_ref_i : in std_logic; + +-- reference clock / 2 (62.5 MHz, in-phase with refclk) + clk_sys_i : in std_logic; + +-- DMTD offset clock for phase tracking - used only if g_with_dmtd == true + clk_dmtd_i : in std_logic; + +-- resets for various clock domains + rst_sys_n_i : in std_logic; + rst_ref_n_i : in std_logic; + rst_dmtd_n_i : in std_logic; + rst_txclk_n_i : in std_logic; + rst_rxclk_n_i : in std_logic; + +-- PPS input (1 clk_ref_i cycle HI) for synchronizing timestamp counter + pps_csync_p1_i : in std_logic; + +-- PPS valid input (clk_ref_i domain), when 1, the external PPS generator/servo +-- is not adjusting the time scale, so we can safely timestamp. + pps_valid_i : in std_logic := '1'; + +------------------------------------------------------------------------------- +-- PHY Interace (8/16 bit PCS) +------------------------------------------------------------------------------- + + phy_rst_o : out std_logic; + phy_loopen_o : out std_logic; + phy_loopen_vec_o : out std_logic_vector(2 downto 0); + phy_tx_prbs_sel_o : out std_logic_vector(2 downto 0); + phy_sfp_tx_fault_i : in std_logic; + phy_sfp_los_i : in std_logic; + phy_sfp_tx_disable_o : out std_logic; + phy_rdy_i : in std_logic; + + phy_ref_clk_i : in std_logic; + phy_tx_data_o : out std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0); + phy_tx_k_o : out std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0); + phy_tx_disparity_i : in std_logic; + phy_tx_enc_err_i : in std_logic; + + phy_rx_data_i : in std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0); + phy_rx_clk_i : in std_logic; + phy_rx_k_i : in std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0); + phy_rx_enc_err_i : in std_logic; + phy_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_pcs_16bit)-1 downto 0); + +------------------------------------------------------------------------------- +-- GMII Interface (8-bit) +------------------------------------------------------------------------------- + + gmii_tx_clk_i : in std_logic := '0'; + gmii_txd_o : out std_logic_vector(7 downto 0); + gmii_tx_en_o : out std_logic; + gmii_tx_er_o : out std_logic; + + gmii_rx_clk_i : in std_logic := '0'; + gmii_rxd_i : in std_logic_vector(7 downto 0) := x"00"; + gmii_rx_er_i : in std_logic := '0'; + gmii_rx_dv_i : in std_logic := '0'; + + --------------------------------------------------------------------------- + -- Wishbone I/O + --------------------------------------------------------------------------- + + src_dat_o : out std_logic_vector(15 downto 0); + src_adr_o : out std_logic_vector(1 downto 0); + src_sel_o : out std_logic_vector(1 downto 0); + src_cyc_o : out std_logic; + src_stb_o : out std_logic; + src_we_o : out std_logic; + src_stall_i : in std_logic; + src_ack_i : in std_logic; + src_err_i : in std_logic; + + snk_dat_i : in std_logic_vector(15 downto 0); + snk_adr_i : in std_logic_vector(1 downto 0); + snk_sel_i : in std_logic_vector(1 downto 0); + snk_cyc_i : in std_logic; + snk_stb_i : in std_logic; + snk_we_i : in std_logic; + snk_stall_o : out std_logic; + snk_ack_o : out std_logic; + snk_err_o : out std_logic; + snk_rty_o : out std_logic; + +------------------------------------------------------------------------------- +-- TX timestamping unit interface +------------------------------------------------------------------------------- + +-- Port ID value + txtsu_port_id_o : out std_logic_vector(4 downto 0); +-- Frame ID value + txtsu_frame_id_o : out std_logic_vector(16 -1 downto 0); + +-- TX Timestamp and correctness info + txtsu_ts_value_o : out std_logic_vector(28 + 4 - 1 downto 0); + txtsu_ts_incorrect_o : out std_logic; + +-- TX timestamp strobe: HI tells the TX timestamping unit that a timestamp is +-- available on txtsu_ts_value_o, txtsu_fid_o andd txtsu_port_id_o. The correctness +-- of the timestamping is indiacted on txtsu_ts_incorrect_o. Line remains HI +-- until assertion of txtsu_ack_i. + txtsu_stb_o : out std_logic; + +-- TX timestamp acknowledge: HI indicates that TXTSU has successfully received +-- the timestamp + txtsu_ack_i : in std_logic; + +------------------------------------------------------------------------------- +-- RTU interface +------------------------------------------------------------------------------- + +-- 1 indicates that coresponding RTU port is full. + rtu_full_i : in std_logic; + +-- 1 indicates that coresponding RTU port is almost full. + rtu_almost_full_i : in std_logic; + +-- request strobe, single HI pulse begins evaluation of the request. + rtu_rq_strobe_p1_o : out std_logic; + + rtu_rq_abort_o : out std_logic; + +-- source and destination MAC addresses extracted from the packet header + rtu_rq_smac_o : out std_logic_vector(48 - 1 downto 0); + rtu_rq_dmac_o : out std_logic_vector(48 - 1 downto 0); + +-- VLAN id (extracted from the header for TRUNK ports and assigned by the port +-- for ACCESS ports) + rtu_rq_vid_o : out std_logic_vector(12 - 1 downto 0); + +-- HI means that packet has valid assigned a valid VID (low - packet is untagged) + rtu_rq_has_vid_o : out std_logic; + +-- packet priority (either extracted from the header or assigned per port). + rtu_rq_prio_o : out std_logic_vector(3 - 1 downto 0); + +-- HI indicates that packet has assigned priority. + rtu_rq_has_prio_o : out std_logic; + +------------------------------------------------------------------------------- +-- Wishbone bus +------------------------------------------------------------------------------- + + wb_cyc_i : in std_logic; + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_adr_i : in std_logic_vector(7 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + +------------------------------------------------------------------------------- +-- direct output of packet filter (for TRU/HW-RSTP) +------------------------------------------------------------------------------- + + pfilter_pclass_o : out std_logic_vector(7 downto 0); + pfilter_drop_o : out std_logic; + pfilter_done_o : out std_logic; + +------------------------------------------------------------------------------- +-- control of PAUSE sending (ML: not used and not tested... TRU uses packet injection) -- +------------------------------------------------------------------------------- + + fc_tx_pause_req_i : in std_logic := '0'; + fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000"; + fc_tx_pause_ready_o : out std_logic; + +------------------------------------------------------------------------------- +-- information about received PAUSE (for SWcore) +------------------------------------------------------------------------------- + + fc_rx_pause_start_p_o : out std_logic; + fc_rx_pause_quanta_o : out std_logic_vector(15 downto 0); + fc_rx_pause_prio_mask_o : out std_logic_vector(7 downto 0); + fc_rx_buffer_occupation_o : out std_logic_vector(7 downto 0); +------------------------------------------------------------------------------- +-- Packet Injection Interface (for TRU/HW-RSTP) +------------------------------------------------------------------------------- + +-- injection request: triggers transmission of the packet to be injected, +-- allowed when inject_ready = 1 + inject_req_i : in std_logic := '0'; + +-- injection ready flag: when true, user application can request asynchronous +-- injection of a predefined packet + inject_ready_o : out std_logic; + +-- injection template selection (8 available) + inject_packet_sel_i : in std_logic_vector(2 downto 0) := "000"; + +-- user-defined value to be embedded in the injected packet at a predefined +-- location + inject_user_value_i : in std_logic_vector(15 downto 0) := x"0000"; + +------------------------------------------------------------------------------- +-- Misc stuff +------------------------------------------------------------------------------- + rmon_events_o : out std_logic_vector(c_epevents_sz-1 downto 0); + + txts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration + rxts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration + + led_link_o : out std_logic; + led_act_o : out std_logic; + +-- HI physically kills the link (turn of laser) + link_kill_i : in std_logic := '0'; + +-- HI indicates that link is up (so cable connected), LOW indicates that link is faulty +-- (e.g.: cable disconnected) + link_up_o : out std_logic; + + stop_traffic_i : in std_logic := '0'; + + dbg_tx_pcs_wr_count_o : out std_logic_vector(5+4 downto 0); + dbg_tx_pcs_rd_count_o : out std_logic_vector(5+4 downto 0); + nice_dbg_o : out t_dbg_ep + ); + +end wr_endpoint; + +architecture syn of wr_endpoint is + + constant c_zeros : std_logic_vector(63 downto 0) := (others => '0'); + constant c_ones : std_logic_vector(63 downto 0) := (others => '0'); + +------------------------------------------------------------------------------- + component dmtd_phase_meas + generic ( + g_deglitcher_threshold : integer; + g_counter_bits : integer); + port ( + rst_sys_n_i : in std_logic; + rst_dmtd_n_i : in std_logic; + clk_sys_i : in std_logic; + clk_a_i : in std_logic; + clk_b_i : in std_logic; + clk_dmtd_i : in std_logic; + en_i : in std_logic; + navg_i : in std_logic_vector(11 downto 0); + phase_meas_o : out std_logic_vector(31 downto 0); + phase_meas_p_o : out std_logic); + end component; + +------------------------------------------------------------------------------- +-- TX FRAMER -> TX PCS signals +------------------------------------------------------------------------------- + + signal txpcs_fab : t_ep_internal_fabric; + signal txpcs_dreq : std_logic; + signal txpcs_error : std_logic; + signal txpcs_busy : std_logic; + +------------------------------------------------------------------------------- +-- Timestamping/OOB signals +------------------------------------------------------------------------------- + + signal txoob_fid_value : std_logic_vector(15 downto 0); + signal txoob_fid_stb : std_logic; + + signal txpcs_timestamp_trigger_p_a : std_logic; + + signal txts_timestamp_stb : std_logic; + signal txts_timestamp_valid : std_logic; + signal txts_timestamp_value : std_logic_vector(31 downto 0); + + + signal rxpcs_timestamp_stb : std_logic; + signal rxpcs_timestamp_trigger_p_a : std_logic; + signal rxpcs_timestamp_valid : std_logic; + signal rxpcs_timestamp_value : std_logic_vector(31 downto 0); + + +------------------------------------------------------------------------------- +-- RX PCS -> RX DEFRAMER signals +------------------------------------------------------------------------------- + + signal rxpcs_fab : t_ep_internal_fabric; + signal rxpath_fab : t_ep_internal_fabric; + signal rxpcs_busy : std_logic; + signal rxpcs_fifo_almostfull : std_logic; + +------------------------------------------------------------------------------- +-- WB slave signals +------------------------------------------------------------------------------- + + signal regs_fromwb : t_ep_out_registers; + signal regs_towb : t_ep_in_registers; + signal regs_towb_ep : t_ep_in_registers; + signal regs_towb_tsu : t_ep_in_registers; + signal regs_towb_rpath : t_ep_in_registers; + signal regs_towb_tpath : t_ep_in_registers; + signal regs_towb_dmtd : t_ep_in_registers; + +------------------------------------------------------------------------------- +-- flow control signals +------------------------------------------------------------------------------- + + signal txfra_flow_enable : std_logic; + signal rxfra_pause_p : std_logic; + signal rxfra_pause_delay : std_logic_vector(15 downto 0); + + signal txfra_pause_req : std_logic; + signal txfra_pause_ready : std_logic; + signal txfra_pause_delay : std_logic_vector(15 downto 0); + + signal link_ok : std_logic; + + signal txfra_enable : std_logic; + signal mdio_addr : std_logic_vector(15 downto 0); + + signal sink_in : t_wrf_sink_in; + signal sink_out : t_wrf_sink_out; + + signal src_in : t_wrf_source_in; + signal src_out : t_wrf_source_out; + + signal rst_n_rx : std_logic; + + signal wb_in : t_wishbone_slave_in; + signal wb_out : t_wishbone_slave_out; + + signal extended_ADDR : std_logic_vector(c_wishbone_address_width-1 downto 0); + + signal phase_meas : std_logic_vector(31 downto 0); + signal phase_meas_p : std_logic; + signal validity_cntr : unsigned(1 downto 0); + signal r_dmcr_en : std_logic; + signal r_dmcr_n_avg : std_logic_vector(11 downto 0); + + + signal rtu_rq : t_ep_internal_rtu_request; + signal dvalid_tx, dvalid_rx : std_logic; + +------------------------------------------------------------------------------- +-- TRU stuff +------------------------------------------------------------------------------- + signal ep_ctrl : std_logic; + signal pfilter_pclass : std_logic_vector(7 downto 0); + signal pfilter_drop : std_logic; + signal pfilter_done : std_logic; + signal tx_pclass : std_logic_vector(7 downto 0); + +------------------------------------------------------------------------------- +-- RMON signals +------------------------------------------------------------------------------- + signal pcs_rmon : t_rmon_triggers; + signal rx_path_rmon : t_rmon_triggers; + signal rmon : t_rmon_triggers; + +------------------------------------------------------------------------------- +-- chipscope (for desperates) +------------------------------------------------------------------------------- + signal CONTROL0 : std_logic_vector(35 downto 0); + signal TRIG0, TRIG1, TRIG2, TRIG3 : std_logic_vector(31 downto 0); + + component chipscope_icon + port ( + CONTROL0 : inout std_logic_vector(35 downto 0)); + end component; + + component chipscope_ila + port ( + CONTROL : inout std_logic_vector(35 downto 0); + CLK : in std_logic; + TRIG0 : in std_logic_vector(31 downto 0); + TRIG1 : in std_logic_vector(31 downto 0); + TRIG2 : in std_logic_vector(31 downto 0); + TRIG3 : in std_logic_vector(31 downto 0)); + end component; + +begin + + rst_n_rx <= rst_rxclk_n_i and phy_rdy_i; + +------------------------------------------------------------------------------- +-- 1000Base-X PCS +------------------------------------------------------------------------------- + + mdio_addr <= regs_fromwb.mdio_asr_phyad_o & regs_fromwb.mdio_cr_addr_o; + + U_PCS_1000BASEX : ep_1000basex_pcs + generic map ( + g_simulation => g_simulation, + g_16bit => g_pcs_16bit) + port map ( + rst_sys_n_i => rst_sys_n_i, + rst_rxclk_n_i => rst_rxclk_n_i, + rst_txclk_n_i => rst_txclk_n_i, + clk_sys_i => clk_sys_i, + + rxpcs_fab_o => rxpcs_fab, + rxpcs_busy_o => rxpcs_busy, + rxpcs_fifo_almostfull_i => rxpcs_fifo_almostfull, + + rxpcs_timestamp_trigger_p_a_o => rxpcs_timestamp_trigger_p_a, + rxpcs_timestamp_i => rxpcs_timestamp_value, + rxpcs_timestamp_stb_i => rxpcs_timestamp_stb, + rxpcs_timestamp_valid_i => rxpcs_timestamp_valid, + + txpcs_fab_i => txpcs_fab, + txpcs_busy_o => txpcs_busy, + txpcs_dreq_o => txpcs_dreq, + txpcs_error_o => txpcs_error, + + txpcs_timestamp_trigger_p_a_o => txpcs_timestamp_trigger_p_a, + + link_ok_o => link_ok, + link_ctr_i => ep_ctrl, + + serdes_rst_o => phy_rst_o, + serdes_loopen_o => phy_loopen_o, + serdes_loopen_vec_o => phy_loopen_vec_o, + serdes_tx_prbs_sel_o => phy_tx_prbs_sel_o, + serdes_sfp_tx_fault_i => phy_sfp_tx_fault_i, + serdes_sfp_los_i => phy_sfp_los_i, + serdes_sfp_tx_disable_o => phy_sfp_tx_disable_o, + serdes_rdy_i => phy_rdy_i, + + serdes_tx_clk_i => phy_ref_clk_i, + serdes_tx_data_o => phy_tx_data_o, + serdes_tx_k_o => phy_tx_k_o, + serdes_tx_disparity_i => phy_tx_disparity_i, + serdes_tx_enc_err_i => phy_tx_enc_err_i, + serdes_rx_data_i => phy_rx_data_i, + serdes_rx_clk_i => phy_rx_clk_i, + serdes_rx_k_i => phy_rx_k_i, + serdes_rx_enc_err_i => phy_rx_enc_err_i, + serdes_rx_bitslide_i => phy_rx_bitslide_i, + + rmon_o => pcs_rmon, + + mdio_addr_i => mdio_addr, + mdio_data_i => regs_fromwb.mdio_cr_data_o, + mdio_data_o => regs_towb_ep.mdio_asr_rdata_i, + mdio_stb_i => regs_fromwb.mdio_cr_data_wr_o, + mdio_rw_i => regs_fromwb.mdio_cr_rw_o, + mdio_ready_o => regs_towb_ep.mdio_asr_ready_i, + dbg_tx_pcs_wr_count_o => dbg_tx_pcs_wr_count_o, + dbg_tx_pcs_rd_count_o => dbg_tx_pcs_rd_count_o, + nice_dbg_o => nice_dbg_o.pcs); + + +------------------------------------------------------------------------------- +-- TX FRAMER +------------------------------------------------------------------------------- + +-- txfra_enable <= link_ok and regs_fromwb.ecr_tx_en_o; + +-- txfra_pause_req <= '0'; + + U_Tx_Path : ep_tx_path + generic map ( + g_with_packet_injection => g_with_packet_injection, + g_with_vlans => g_with_vlans, + g_with_timestamper => g_with_timestamper, + g_force_gap_length => g_tx_force_gap_length, + g_runt_padding => g_tx_runt_padding, + g_use_new_crc => g_use_new_txcrc) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_sys_n_i, + pcs_error_i => txpcs_error, + pcs_busy_i => txpcs_busy, + pcs_fab_o => txpcs_fab, + pcs_dreq_i => txpcs_dreq, + snk_i => sink_in, + snk_o => sink_out, + fc_pause_req_i => txfra_pause_req, + fc_pause_ready_o => txfra_pause_ready, + fc_pause_delay_i => txfra_pause_delay, + fc_flow_enable_i => txfra_flow_enable, + ep_ctrl_i => ep_ctrl, + regs_i => regs_fromwb, + regs_o => regs_towb_tpath, + + txts_timestamp_i => txts_timestamp_value, + txts_timestamp_valid_i => txts_timestamp_valid, + + txtsu_port_id_o => txtsu_port_id_o, + txtsu_fid_o => txtsu_frame_id_o, + txtsu_ts_value_o => txtsu_ts_value_o, + txtsu_ts_incorrect_o => txtsu_ts_incorrect_o, + txtsu_stb_o => txtsu_stb_o, + txtsu_ack_i => txtsu_ack_i, + + inject_req_i => inject_req_i, + inject_user_value_i => inject_user_value_i, + inject_packet_sel_i => inject_packet_sel_i, + inject_ready_o => inject_ready_o); + + + txfra_flow_enable <= '1'; + + sink_in.dat <= snk_dat_i; + sink_in.adr <= snk_adr_i; + sink_in.sel <= snk_sel_i; + sink_in.cyc <= snk_cyc_i; + sink_in.stb <= snk_stb_i; + sink_in.we <= snk_we_i; + snk_stall_o <= sink_out.stall; + snk_ack_o <= sink_out.ack; + snk_err_o <= sink_out.err; + snk_rty_o <= sink_out.rty; + + +------------------------------------------------------------------------------- +-- RX deframer +------------------------------------------------------------------------------- + + U_Rx_Path : ep_rx_path + generic map ( + g_with_vlans => g_with_vlans, + g_with_dpi_classifier => g_with_dpi_classifier, + g_with_rtu => g_with_rtu, + g_with_rx_buffer => g_with_rx_buffer, + g_rx_buffer_size => g_rx_buffer_size, + g_use_new_crc => g_use_new_rxcrc) + port map ( + clk_sys_i => clk_sys_i, + clk_rx_i => phy_rx_clk_i, + + rst_n_sys_i => rst_sys_n_i, + rst_n_rx_i => rst_n_rx, + + pcs_fab_i => rxpath_fab, + pcs_fifo_almostfull_o => rxpcs_fifo_almostfull, + pcs_busy_i => rxpcs_busy, + + fc_pause_p_o => fc_rx_pause_start_p_o, --rxfra_pause_p, + fc_pause_quanta_o => fc_rx_pause_quanta_o, --rxfra_pause_delay, + fc_pause_prio_mask_o => fc_rx_pause_prio_mask_o, + fc_buffer_occupation_o => fc_rx_buffer_occupation_o, + + rmon_o => rx_path_rmon, + regs_i => regs_fromwb, + regs_o => regs_towb_rpath, + + pfilter_pclass_o => pfilter_pclass, + pfilter_drop_o => pfilter_drop, + pfilter_done_o => pfilter_done, + + rtu_full_i => rtu_full_i, + rtu_rq_o => rtu_rq, + rtu_rq_valid_o => rtu_rq_strobe_p1_o, + rtu_rq_abort_o => rtu_rq_abort_o, + src_wb_o => src_out, + src_wb_i => src_in, + nice_dbg_o => nice_dbg_o.rxpath); + + + rtu_rq_smac_o <= rtu_rq.smac; + rtu_rq_dmac_o <= rtu_rq.dmac; + rtu_rq_vid_o <= rtu_rq.vid; + rtu_rq_prio_o <= rtu_rq.prio; + rtu_rq_has_vid_o <= rtu_rq.has_vid; + rtu_rq_has_prio_o <= rtu_rq.has_prio; + + src_dat_o <= src_out.dat; + src_adr_o <= src_out.adr; + src_sel_o <= src_out.sel; + src_cyc_o <= src_out.cyc; + src_stb_o <= src_out.stb; + src_we_o <= src_out.we; + src_in.stall <= src_stall_i; + src_in.ack <= src_ack_i; + src_in.err <= src_err_i; + src_in.rty <= '0'; + +------------------------------------------------------------------------------- +-- Flow control unit +------------------------------------------------------------------------------- + + --U_FLOW_CTL : ep_flow_control + -- port map ( + -- clk_sys_i => clk_sys_i, + -- rst_n_i => rst_n_i, + + -- rx_pause_p1_i => rxfra_pause_p, + -- rx_pause_delay_i => rxfra_pause_delay, + + -- tx_pause_o => txfra_pause, + -- tx_pause_delay_o => txfra_pause_delay, + -- tx_pause_ack_i => txfra_pause_ack, + + -- tx_flow_enable_o => txfra_flow_enable, + + -- rx_buffer_used_i => rx_buffer_used, + + -- ep_fcr_txpause_i => regs.fcr_txpause_o, + -- ep_fcr_rxpause_i => regs.fcr_rxpause_o, + -- ep_fcr_tx_thr_i => regs.fcr_tx_thr_o, + -- ep_fcr_tx_quanta_i => regs.fcr_tx_quanta_o, + -- rmon_rcvd_pause_o => rmon.rx_pause, + -- rmon_sent_pause_o => rmon.tx_pause + -- ); + +------------------------------------------------------------------------------- +-- Timestamping unit +------------------------------------------------------------------------------- + + U_EP_TSU : ep_timestamping_unit + generic map ( + g_timestamp_bits_r => 28, + g_timestamp_bits_f => 4, + g_ref_clock_rate => f_pcs_clock_rate(g_pcs_16bit)) + port map ( + clk_ref_i => clk_ref_i, + clk_rx_i => phy_rx_clk_i, + clk_sys_i => clk_sys_i, + rst_n_rx_i => rst_rxclk_n_i, + rst_n_sys_i => rst_sys_n_i, + rst_n_ref_i => rst_ref_n_i, + pps_csync_p1_i => pps_csync_p1_i, + pps_valid_i => pps_valid_i, + + tx_timestamp_trigger_p_a_i => txpcs_timestamp_trigger_p_a, + rx_timestamp_trigger_p_a_i => rxpcs_timestamp_trigger_p_a, + + rxts_timestamp_o => rxpcs_timestamp_value, + rxts_timestamp_valid_o => rxpcs_timestamp_valid, + rxts_timestamp_stb_o => rxpcs_timestamp_stb, + + txts_timestamp_o => txts_timestamp_value, + txts_timestamp_valid_o => txts_timestamp_valid, + + txts_o => txts_o, -- 2013-Nov-28 peterj added for debugging/calibration + rxts_o => rxts_o, -- 2013-Nov-28 peterj added for debugging/calibration + + regs_i => regs_fromwb, + regs_o => regs_towb_tsu); + + +------------------------------------------------------------------------------- +-- Wishbone controller & IO registers +------------------------------------------------------------------------------- + + extended_ADDR <= std_logic_vector(resize(unsigned(wb_adr_i), c_wishbone_address_width)); + + U_Slave_adapter : wb_slave_adapter + generic map ( + g_master_use_struct => true, + g_master_mode => CLASSIC, + g_master_granularity => WORD, + g_slave_use_struct => false, + g_slave_mode => g_interface_mode, + g_slave_granularity => g_address_granularity) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_sys_n_i, + sl_adr_i => extended_ADDR, + sl_dat_i => wb_dat_i, + sl_sel_i => wb_sel_i, + sl_cyc_i => wb_cyc_i, + sl_stb_i => wb_stb_i, + sl_we_i => wb_we_i, + sl_dat_o => wb_dat_o, + sl_ack_o => wb_ack_o, + sl_stall_o => wb_stall_o, + master_i => wb_out, + master_o => wb_in); + + U_WB_SLAVE : ep_wishbone_controller + port map ( + rst_n_i => rst_sys_n_i, + clk_sys_i => clk_sys_i, + wb_adr_i => wb_in.adr(4 downto 0), + wb_dat_i => wb_in.dat, + wb_dat_o => wb_out.dat, + wb_cyc_i => wb_in.cyc, + wb_sel_i => wb_in.sel, + wb_stb_i => wb_in.stb, + wb_we_i => wb_in.we, + wb_ack_o => wb_out.ack, + wb_stall_o => open, + + tx_clk_i => clk_ref_i, + rx_clk_i => phy_rx_clk_i, + + regs_o => regs_fromwb, + regs_i => regs_towb + ); + + wb_out.stall <= '0'; + wb_out.rty <= '0'; + wb_out.err <= '0'; + wb_out.int <= '0'; + + regs_towb <= regs_towb_ep or regs_towb_tsu or regs_towb_rpath or regs_towb_tpath or regs_towb_dmtd; + + + p_link_activity : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + + if(rst_sys_n_i = '0') or + (regs_fromwb.dsr_lact_o = '1' and regs_fromwb.dsr_lact_load_o = '1') then + regs_towb_ep.dsr_lact_i <= '0'; + else + regs_towb_ep.dsr_lact_i <= dvalid_rx or dvalid_tx; + end if; + end if; + end process; + + -- drive unused regs_towb_ep signals + regs_towb_ep.ecr_feat_vlan_i <= '0'; + regs_towb_ep.ecr_feat_dmtd_i <= '0'; + regs_towb_ep.ecr_feat_ptp_i <= '0'; + regs_towb_ep.ecr_feat_dpi_i <= '0'; + regs_towb_ep.tscr_cs_done_i <= '0'; + regs_towb_ep.tscr_rx_cal_result_i <= '0'; + regs_towb_ep.tcar_pcp_map_i <= (others => '0'); + regs_towb_ep.dsr_lstatus_i <= '0'; + regs_towb_ep.dmcr_en_i <= '0'; + regs_towb_ep.dmcr_n_avg_i <= (others => '0'); + regs_towb_ep.inj_ctrl_pic_conf_ifg_i <= (others => '0'); + regs_towb_ep.inj_ctrl_pic_conf_sel_i <= (others => '0'); + regs_towb_ep.inj_ctrl_pic_conf_valid_i <= '0'; + regs_towb_ep.inj_ctrl_pic_mode_id_i <= (others => '0'); + regs_towb_ep.inj_ctrl_pic_mode_valid_i <= '0'; + regs_towb_ep.inj_ctrl_pic_ena_i <= '0'; + +------------------------------------------------------------------------------- +-- DMTD phase meter +------------------------------------------------------------------------------ + + gen_with_dmtd : if(g_with_dmtd) generate + U_DMTD : dmtd_phase_meas + generic map ( + g_counter_bits => 14, + g_deglitcher_threshold => 1000) + port map ( + clk_sys_i => clk_sys_i, + + clk_a_i => phy_ref_clk_i, + clk_b_i => phy_rx_clk_i, + clk_dmtd_i => clk_dmtd_i, + + rst_sys_n_i => rst_sys_n_i, + rst_dmtd_n_i => rst_dmtd_n_i, + + en_i => r_dmcr_en, + navg_i => r_dmcr_n_avg, + phase_meas_o => phase_meas, + phase_meas_p_o => phase_meas_p); + + + + regs_towb_dmtd.dmcr_en_i <= r_dmcr_en; + regs_towb_dmtd.dmcr_n_avg_i <= r_dmcr_n_avg; + + p_dmtd_update : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_sys_n_i = '0' then + validity_cntr <= (others => '0'); + regs_towb_ep.dmsr_ps_rdy_i <= '0'; + else + + if(regs_fromwb.dmcr_en_load_o = '1') then + r_dmcr_en <= regs_fromwb.dmcr_en_o; + r_dmcr_n_avg <= regs_fromwb.dmcr_n_avg_o; + end if; + + if(r_dmcr_en = '0') then + validity_cntr <= (others => '0'); + regs_towb_ep.dmsr_ps_rdy_i <= '0'; + elsif(regs_fromwb.dmsr_ps_rdy_o = '1' and regs_fromwb.dmsr_ps_rdy_load_o = '1') then + regs_towb_ep.dmsr_ps_rdy_i <= '0'; + elsif(phase_meas_p = '1') then + + if(validity_cntr = "11") then + regs_towb_ep.dmsr_ps_rdy_i <= '1'; + regs_towb_ep.dmsr_ps_val_i <= phase_meas(23 downto 0); -- discard few + else + regs_towb_ep.dmsr_ps_rdy_i <= '0'; + validity_cntr <= validity_cntr + 1; + end if; + end if; + end if; + end if; + end process; + + end generate gen_with_dmtd; + + gen_without_dmtd : if(not g_with_dmtd) generate + regs_towb_ep.dmsr_ps_rdy_i <= '0'; + regs_towb_ep.dmsr_ps_val_i <= (others => 'X'); + regs_towb_dmtd <= c_ep_in_registers_init_value; + end generate gen_without_dmtd; + + dvalid_tx <= snk_cyc_i and snk_stb_i and link_ok; + dvalid_rx <= src_out.cyc and src_out.stb and link_ok; + + gen_leds : if g_with_leds generate + U_Led_Ctrl : ep_leds_controller + generic map ( + g_blink_period_log2 => 22) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_sys_n_i, + dvalid_tx_i => dvalid_tx, + dvalid_rx_i => dvalid_rx, + link_ok_i => link_ok, + led_link_o => led_link_o, + led_act_o => led_act_o); + end generate gen_leds; + + -------------------------- TRU stuff ----------------------------------- + link_up_o <= link_ok; -- indicates that link is UP + + pfilter_pclass_o <= pfilter_pclass; + pfilter_done_o <= pfilter_done; + pfilter_drop_o <= pfilter_drop; + + txfra_pause_req <= fc_tx_pause_req_i; + fc_tx_pause_ready_o <= txfra_pause_ready; + txfra_pause_delay <= fc_tx_pause_delay_i; + + -- TRU needs to be able to share the control of ouput path, i.e. turn off the laser + p_ep_ctrl : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_sys_n_i = '0' then + ep_ctrl <= '1'; + else + ep_ctrl <= not link_kill_i; + end if; + end if; + end process; + + GEN_STOP: if(g_with_stop_traffic) generate + rxpath_fab.sof <= rxpcs_fab.sof when(stop_traffic_i='0') else '0'; + rxpath_fab.dvalid <= rxpcs_fab.dvalid when(stop_traffic_i='0') else '0'; + rxpath_fab.eof <= rxpcs_fab.eof; + rxpath_fab.error <= rxpcs_fab.error; + rxpath_fab.bytesel <= rxpcs_fab.bytesel; + rxpath_fab.has_rx_timestamp <= rxpcs_fab.has_rx_timestamp; + rxpath_fab.rx_timestamp_valid <= rxpcs_fab.rx_timestamp_valid; + rxpath_fab.data <= rxpcs_fab.data; + rxpath_fab.addr <= rxpcs_fab.addr; + end generate; + + GEN_NO_STOP: if(not g_with_stop_traffic) generate + rxpath_fab <= rxpcs_fab; + end generate; + + -------------------------- RMON events ----------------------------------- + rmon.rx_pcs_err <= rx_path_rmon.rx_pcs_err; --from ep_rx_path + rmon.rx_giant <= rx_path_rmon.rx_giant; + rmon.rx_runt <= rx_path_rmon.rx_runt; + rmon.rx_crc_err <= rx_path_rmon.rx_crc_err; + rmon.rx_pause <= rx_path_rmon.rx_pause; + rmon.rx_pfilter_drop <= rx_path_rmon.rx_pfilter_drop; + rmon.rx_pclass <= rx_path_rmon.rx_pclass; + rmon.rx_tclass <= rx_path_rmon.rx_tclass; + rmon.rx_drop_at_rtu_full <= rx_path_rmon.rx_drop_at_rtu_full; + rmon.tx_underrun <= pcs_rmon.tx_underrun; + rmon.rx_overrun <= pcs_rmon.rx_overrun; + rmon.rx_invalid_code <= pcs_rmon.rx_invalid_code; + rmon.rx_sync_lost <= pcs_rmon.rx_sync_lost; + + + rmon_event_tx : gc_sync_ffs + generic map( + g_sync_edge => "negative") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_sys_n_i, + data_i => txpcs_timestamp_trigger_p_a, + synced_o => open, + npulse_o => open, + ppulse_o => rmon.tx_frame); + + rmon_event_rx : gc_sync_ffs + generic map( + g_sync_edge => "negative") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_sys_n_i, + data_i => rxpcs_timestamp_trigger_p_a, + synced_o => open, + npulse_o => open, + ppulse_o => rmon.rx_frame); + + f_pack_rmon_triggers(rmon, rmon_events_o(c_epevents_sz-1 downto 0)); + +-- CS_ICON : chipscope_icon +-- port map ( +-- CONTROL0 => CONTROL0); +-- CS_ILA : chipscope_ila +-- port map ( +-- CONTROL => CONTROL0, +-- CLK => phy_ref_clk_i, +-- TRIG0 => TRIG0, +-- TRIG1 => TRIG1, +-- TRIG2 => TRIG2, +-- TRIG3 => TRIG3); +-- +-- TRIG0(15 downto 0) <= phy_rx_data_i; +-- TRIG0(17 downto 16) <= phy_rx_k_i; +-- TRIG0( 18) <= phy_rx_enc_err_i; +-- TRIG0(23 downto 19) <= phy_rx_bitslide_i; + + -- Drive unsued GMII outputs + gmii_txd_o <= (others => '0'); + gmii_tx_en_o <= '0'; + gmii_tx_er_o <= '0'; + +end syn; + + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/xwr_endpoint.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/xwr_endpoint.vhd new file mode 100644 index 000000000..b5d64008a --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/xwr_endpoint.vhd @@ -0,0 +1,533 @@ +------------------------------------------------------------------------------- +-- Title : 1000base-X MAC/Endpoint - top level +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : xwr_endpoint.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2010-04-26 +-- Last update: 2017-02-20 +-- Platform : FPGA-generic +-- Standard : VHDL '93 +------------------------------------------------------------------------------- +-- Description: Struct-ized wrapper for WR Endpoint. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2011 - 2012 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; + +use work.endpoint_pkg.all; +use work.wr_fabric_pkg.all; +use work.wishbone_pkg.all; + +entity xwr_endpoint is + + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_simulation : boolean := false; + g_tx_force_gap_length : integer := 0; + g_tx_runt_padding : boolean := false; + g_pcs_16bit : boolean := false; + g_records_for_phy : boolean := false; + g_rx_buffer_size : integer := 1024; + g_with_rx_buffer : boolean := true; + g_with_flow_control : boolean := true; + g_with_timestamper : boolean := true; + g_with_dpi_classifier : boolean := true; + g_with_vlans : boolean := true; + g_with_rtu : boolean := true; + g_with_leds : boolean := true; + g_with_dmtd : boolean := true; + g_with_packet_injection : boolean := false; + g_use_new_rxcrc : boolean := false; + g_use_new_txcrc : boolean := false; + g_with_stop_traffic : boolean := false + ); + port ( + +------------------------------------------------------------------------------- +-- Clocks +------------------------------------------------------------------------------- + +-- Endpoint transmit reference clock. Must be 125 MHz +- 100 ppm + clk_ref_i : in std_logic; + +-- reference clock / 2 (62.5 MHz, in-phase with refclk) + clk_sys_i : in std_logic; + + clk_dmtd_i : in std_logic := '0'; + +-- resets for various clock domains + rst_sys_n_i : in std_logic; + rst_ref_n_i : in std_logic; + rst_dmtd_n_i : in std_logic; + rst_txclk_n_i : in std_logic; + rst_rxclk_n_i : in std_logic; + +-- PPS input (1 clk_ref_i cycle HI) for synchronizing timestamp counter + pps_csync_p1_i : in std_logic := '0'; + +-- PPS valid input (clk_ref_i domain), when 1, the external PPS generator/servo +-- is not adjusting the time scale, so we can safely timestamp. + pps_valid_i : in std_logic := '1'; + +------------------------------------------------------------------------------- +-- PHY Interace (8/16 bit PCS) +------------------------------------------------------------------------------- + + -- 1st option is to use std_logic based I/Os + phy_rst_o : out std_logic; + phy_loopen_o : out std_logic; + phy_loopen_vec_o : out std_logic_vector(2 downto 0); + phy_tx_prbs_sel_o : out std_logic_vector(2 downto 0); + phy_sfp_tx_fault_i : in std_logic; + phy_sfp_los_i : in std_logic; + phy_sfp_tx_disable_o : out std_logic; + phy_rdy_i : in std_logic; + + phy_ref_clk_i : in std_logic := '0'; + phy_tx_data_o : out std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0); + phy_tx_k_o : out std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0); + phy_tx_disparity_i : in std_logic := '0'; + phy_tx_enc_err_i : in std_logic := '0'; + + phy_rx_data_i : in std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0) := (others=>'0'); + phy_rx_clk_i : in std_logic := '0'; + phy_rx_k_i : in std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0) := (others=>'0'); + phy_rx_enc_err_i : in std_logic := '0'; + phy_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_pcs_16bit)-1 downto 0) := (others=>'0'); + + -- 2nd option is to use record-based I/Os + phy8_o : out t_phy_8bits_from_wrc; + phy8_i : in t_phy_8bits_to_wrc; + phy16_o : out t_phy_16bits_from_wrc; + phy16_i : in t_phy_16bits_to_wrc; + +------------------------------------------------------------------------------- +-- GMII Interface (8-bit) +------------------------------------------------------------------------------- + + gmii_tx_clk_i : in std_logic := '0'; + gmii_txd_o : out std_logic_vector(7 downto 0); + gmii_tx_en_o : out std_logic; + gmii_tx_er_o : out std_logic; + + gmii_rx_clk_i : in std_logic := '0'; + gmii_rxd_i : in std_logic_vector(7 downto 0) := x"00"; + gmii_rx_er_i : in std_logic := '0'; + gmii_rx_dv_i : in std_logic := '0'; + + --------------------------------------------------------------------------- + -- Wishbone I/O + --------------------------------------------------------------------------- + + src_o : out t_wrf_source_out; + src_i : in t_wrf_source_in; + + snk_o : out t_wrf_sink_out; + snk_i : in t_wrf_sink_in; + +------------------------------------------------------------------------------- +-- TX timestamping unit interface +------------------------------------------------------------------------------- + +-- Port ID value + txtsu_port_id_o : out std_logic_vector(4 downto 0); +-- Frame ID value + txtsu_frame_id_o : out std_logic_vector(16 -1 downto 0); + +-- TX Timestamp and correctness info + txtsu_ts_value_o : out std_logic_vector(28 + 4 - 1 downto 0); + txtsu_ts_incorrect_o : out std_logic; + +-- TX timestamp strobe: HI tells the TX timestamping unit that a timestamp is +-- available on txtsu_ts_value_o, txtsu_fid_o andd txtsu_port_id_o. The correctness +-- of the timestamping is indiacted on txtsu_ts_incorrect_o. Line remains HI +-- until assertion of txtsu_ack_i. + txtsu_stb_o : out std_logic; + +-- TX timestamp acknowledge: HI indicates that TXTSU has successfully received +-- the timestamp + txtsu_ack_i : in std_logic := '1'; + +------------------------------------------------------------------------------- +-- RTU interface +------------------------------------------------------------------------------- + +-- 1 indicates that coresponding RTU port is full. + rtu_full_i : in std_logic := '0'; + +-- 1 indicates that coresponding RTU port is almost full. + rtu_almost_full_i : in std_logic := '0'; + +-- request strobe, single HI pulse begins evaluation of the request. + rtu_rq_strobe_p1_o : out std_logic; + rtu_rq_abort_o : out std_logic; + +-- source and destination MAC addresses extracted from the packet header + rtu_rq_smac_o : out std_logic_vector(48 - 1 downto 0); + rtu_rq_dmac_o : out std_logic_vector(48 - 1 downto 0); + +-- VLAN id (extracted from the header for TRUNK ports and assigned by the port +-- for ACCESS ports) + rtu_rq_vid_o : out std_logic_vector(12 - 1 downto 0); + +-- HI means that packet has valid assigned a valid VID (low - packet is untagged) + rtu_rq_has_vid_o : out std_logic; + +-- packet priority (either extracted from the header or assigned per port). + rtu_rq_prio_o : out std_logic_vector(3 - 1 downto 0); + +-- HI indicates that packet has assigned priority. + rtu_rq_has_prio_o : out std_logic; + +------------------------------------------------------------------------------- +-- Wishbone bus +------------------------------------------------------------------------------- + + wb_i : in t_wishbone_slave_in; + wb_o : out t_wishbone_slave_out; + +------------------------------------------------------------------------------- +-- direct output of packet filter (for TRU/HW-RSTP) +------------------------------------------------------------------------------- + + pfilter_pclass_o : out std_logic_vector(7 downto 0); + pfilter_drop_o : out std_logic; + pfilter_done_o : out std_logic; + +------------------------------------------------------------------------------- +-- control of PAUSE sending (ML: not used and not tested... TRU uses packet injection) -- +------------------------------------------------------------------------------- + + fc_tx_pause_req_i : in std_logic := '0'; + fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000"; + fc_tx_pause_ready_o : out std_logic; + +------------------------------------------------------------------------------- +-- information about received PAUSE (for SWcore) +------------------------------------------------------------------------------- + + fc_rx_pause_start_p_o : out std_logic; + fc_rx_pause_quanta_o : out std_logic_vector(15 downto 0); + fc_rx_pause_prio_mask_o : out std_logic_vector(7 downto 0); + fc_rx_buffer_occupation_o : out std_logic_vector(7 downto 0); +------------------------------------------------------------------------------- +-- Packet Injection Interface (for TRU/HW-RSTP) +------------------------------------------------------------------------------- + +-- injection request: triggers transmission of the packet to be injected, +-- allowed when inject_ready = 1 + inject_req_i : in std_logic := '0'; + +-- injection ready flag: when true, user application can request asynchronous +-- injection of a predefined packet + inject_ready_o : out std_logic; + +-- injection template selection (8 available) + inject_packet_sel_i : in std_logic_vector(2 downto 0) := "000"; + +-- user-defined value to be embedded in the injected packet at a predefined +-- location + inject_user_value_i : in std_logic_vector(15 downto 0) := x"0000"; + +------------------------------------------------------------------------------- +-- Misc stuff +------------------------------------------------------------------------------- + rmon_events_o : out std_logic_vector(c_epevents_sz-1 downto 0); + + txts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration + rxts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration + + led_link_o : out std_logic; + led_act_o : out std_logic; + + link_kill_i : in std_logic := '0'; + link_up_o : out std_logic; + stop_traffic_i : in std_logic := '0'; + dbg_tx_pcs_wr_count_o : out std_logic_vector(5+4 downto 0); + dbg_tx_pcs_rd_count_o : out std_logic_vector(5+4 downto 0); + nice_dbg_o : out t_dbg_ep); + +end xwr_endpoint; + +architecture syn of xwr_endpoint is + + signal phy_rst : std_logic; + signal phy_loopen : std_logic; + signal phy_loopen_vec : std_logic_vector(2 downto 0); + signal phy_tx_data : std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0); + signal phy_tx_k : std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0); + signal phy_tx_prbs_sel : std_logic_vector(2 downto 0); + signal sfp_tx_disable : std_logic; + signal phy_tx_clk : std_logic; + + signal phy_tx_disparity : std_logic; + signal phy_tx_enc_err : std_logic; + signal phy_rx_data : std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0); + signal phy_rx_clk : std_logic; + signal phy_rx_k : std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0); + signal phy_rx_enc_err : std_logic; + signal phy_rx_bts : std_logic_vector(f_pcs_bts_width(g_pcs_16bit)-1 downto 0); + signal phy_rdy : std_logic; + signal sfp_tx_fault : std_logic; + signal sfp_los : std_logic; + +begin + + U_Wrapped_Endpoint : wr_endpoint + generic map ( + g_interface_mode => g_interface_mode, + g_address_granularity => g_address_granularity, + g_tx_force_gap_length => g_tx_force_gap_length, + g_tx_runt_padding => g_tx_runt_padding, + g_simulation => g_simulation, + g_pcs_16bit => g_pcs_16bit, + g_rx_buffer_size => g_rx_buffer_size, + g_with_rx_buffer => g_with_rx_buffer, + g_with_flow_control => g_with_flow_control, + g_with_timestamper => g_with_timestamper, + g_with_dpi_classifier => g_with_dpi_classifier, + g_with_vlans => g_with_vlans, + g_with_rtu => g_with_rtu, + g_with_leds => g_with_leds, + g_with_dmtd => g_with_dmtd, + g_with_packet_injection => g_with_packet_injection, + g_use_new_rxcrc => g_use_new_rxcrc, + g_use_new_txcrc => g_use_new_txcrc, + g_with_stop_traffic => g_with_stop_traffic) + port map ( + clk_ref_i => clk_ref_i, + clk_sys_i => clk_sys_i, + clk_dmtd_i => clk_dmtd_i, + rst_sys_n_i => rst_sys_n_i, + rst_ref_n_i => rst_ref_n_i, + rst_dmtd_n_i => rst_dmtd_n_i, + rst_txclk_n_i => rst_txclk_n_i, + rst_rxclk_n_i => rst_rxclk_n_i, + pps_csync_p1_i => pps_csync_p1_i, + pps_valid_i => pps_valid_i, + + phy_rst_o => phy_rst, + phy_loopen_o => phy_loopen, + phy_loopen_vec_o => phy_loopen_vec, + phy_tx_prbs_sel_o => phy_tx_prbs_sel, + phy_rdy_i => phy_rdy, + + phy_sfp_tx_fault_i => sfp_tx_fault, + phy_sfp_los_i => sfp_los, + phy_sfp_tx_disable_o => sfp_tx_disable, + + phy_ref_clk_i => phy_tx_clk, + phy_tx_data_o => phy_tx_data, + phy_tx_k_o => phy_tx_k, + phy_tx_disparity_i => phy_tx_disparity, + phy_tx_enc_err_i => phy_tx_enc_err, + phy_rx_data_i => phy_rx_data, + phy_rx_clk_i => phy_rx_clk, + phy_rx_k_i => phy_rx_k, + phy_rx_enc_err_i => phy_rx_enc_err, + phy_rx_bitslide_i => phy_rx_bts, + + gmii_tx_clk_i => gmii_tx_clk_i, + gmii_txd_o => gmii_txd_o, + gmii_tx_en_o => gmii_tx_en_o, + gmii_tx_er_o => gmii_tx_er_o, + gmii_rx_clk_i => gmii_rx_clk_i, + gmii_rxd_i => gmii_rxd_i, + gmii_rx_er_i => gmii_rx_er_i, + gmii_rx_dv_i => gmii_rx_dv_i, + src_dat_o => src_o.dat, + src_adr_o => src_o.adr, + src_sel_o => src_o.sel, + src_cyc_o => src_o.cyc, + src_stb_o => src_o.stb, + src_we_o => src_o.we, + src_stall_i => src_i.stall, + src_ack_i => src_i.ack, + src_err_i => src_i.err, + snk_dat_i => snk_i.dat, + snk_adr_i => snk_i.adr, + snk_sel_i => snk_i.sel, + snk_cyc_i => snk_i.cyc, + snk_stb_i => snk_i.stb, + snk_we_i => snk_i.we, + snk_stall_o => snk_o.stall, + snk_ack_o => snk_o.ack, + snk_err_o => snk_o.err, + snk_rty_o => snk_o.rty, + txtsu_port_id_o => txtsu_port_id_o, + txtsu_frame_id_o => txtsu_frame_id_o, + txtsu_ts_value_o => txtsu_ts_value_o, + txtsu_ts_incorrect_o => txtsu_ts_incorrect_o, + txtsu_stb_o => txtsu_stb_o, + txtsu_ack_i => txtsu_ack_i, + rtu_full_i => rtu_full_i, + rtu_almost_full_i => rtu_almost_full_i, + rtu_rq_strobe_p1_o => rtu_rq_strobe_p1_o, + rtu_rq_abort_o => rtu_rq_abort_o, + rtu_rq_smac_o => rtu_rq_smac_o, + rtu_rq_dmac_o => rtu_rq_dmac_o, + rtu_rq_vid_o => rtu_rq_vid_o, + rtu_rq_has_vid_o => rtu_rq_has_vid_o, + rtu_rq_prio_o => rtu_rq_prio_o, + rtu_rq_has_prio_o => rtu_rq_has_prio_o, + wb_cyc_i => wb_i.cyc, + wb_stb_i => wb_i.stb, + wb_we_i => wb_i.we, + wb_sel_i => wb_i.sel, + wb_adr_i => wb_i.adr(7 downto 0), + wb_dat_i => wb_i.dat, + wb_dat_o => wb_o.dat, + wb_ack_o => wb_o.ack, + wb_stall_o => wb_o.stall, + rmon_events_o => rmon_events_o, + txts_o => txts_o, -- 2013-Nov-28 peterj added for debugging/calibration + rxts_o => rxts_o, -- 2013-Nov-28 peterj added for debugging/calibration + led_link_o => led_link_o, + led_act_o => led_act_o, + link_up_o => link_up_o, + link_kill_i => link_kill_i, + pfilter_pclass_o => pfilter_pclass_o, + pfilter_drop_o => pfilter_drop_o, + pfilter_done_o => pfilter_done_o, + fc_tx_pause_req_i => fc_tx_pause_req_i, + fc_tx_pause_delay_i => fc_tx_pause_delay_i, + fc_tx_pause_ready_o => fc_tx_pause_ready_o, + fc_rx_pause_start_p_o => fc_rx_pause_start_p_o, + fc_rx_pause_quanta_o => fc_rx_pause_quanta_o, + fc_rx_pause_prio_mask_o => fc_rx_pause_prio_mask_o, + fc_rx_buffer_occupation_o =>fc_rx_buffer_occupation_o, + inject_req_i => inject_req_i, + inject_user_value_i => inject_user_value_i, + inject_packet_sel_i => inject_packet_sel_i, + inject_ready_o => inject_ready_o, + stop_traffic_i => stop_traffic_i, + dbg_tx_pcs_wr_count_o=>dbg_tx_pcs_wr_count_o, + dbg_tx_pcs_rd_count_o=>dbg_tx_pcs_rd_count_o, + nice_dbg_o => nice_dbg_o); + + wb_o.err <= '0'; + wb_o.rty <= '0'; + wb_o.int <= '0'; + + + -- Record-based PHY connections, depending on 8/16-bit PCS + GEN_16BIT_IF: if g_pcs_16bit and g_records_for_phy generate + phy16_o.rst <= phy_rst; + phy16_o.loopen <= phy_loopen; + phy16_o.loopen_vec <= phy_loopen_vec; + phy16_o.tx_data <= phy_tx_data; + phy16_o.tx_k <= phy_tx_k; + phy16_o.tx_prbs_sel <= phy_tx_prbs_sel; + phy16_o.sfp_tx_disable <= sfp_tx_disable; + + phy_tx_clk <= phy16_i.ref_clk; + phy_tx_disparity <= phy16_i.tx_disparity; + phy_tx_enc_err <= phy16_i.tx_enc_err; + phy_rx_data <= phy16_i.rx_data; + phy_rx_clk <= phy16_i.rx_clk; + phy_rx_k <= phy16_i.rx_k; + phy_rx_enc_err <= phy16_i.rx_enc_err; + phy_rx_bts <= phy16_i.rx_bitslide; + phy_rdy <= phy16_i.rdy; + sfp_tx_fault <= phy16_i.sfp_tx_fault; + sfp_los <= phy16_i.sfp_los; + + -- drive unused ports with dummy values + phy8_o <= c_dummy_phy8_from_wrc; + phy_rst_o <= '0'; + phy_loopen_o <= '0'; + phy_tx_data_o <= (others => '0'); + phy_tx_k_o <= (others => '0'); + phy_loopen_vec_o <= (others => '0'); + phy_tx_prbs_sel_o <= (others => '0'); + phy_sfp_tx_disable_o <= '0'; + end generate; + + GEN_8BIT_IF: if not g_pcs_16bit and g_records_for_phy generate + phy8_o.rst <= phy_rst; + phy8_o.loopen <= phy_loopen; + phy8_o.loopen_vec <= phy_loopen_vec; + phy8_o.tx_data <= phy_tx_data; + phy8_o.tx_k <= phy_tx_k; + phy8_o.tx_prbs_sel <= phy_tx_prbs_sel; + phy8_o.sfp_tx_disable <= sfp_tx_disable; + + phy_tx_clk <= phy8_i.ref_clk; + phy_tx_disparity <= phy8_i.tx_disparity; + phy_tx_enc_err <= phy8_i.tx_enc_err; + phy_rx_data <= phy8_i.rx_data; + phy_rx_clk <= phy8_i.rx_clk; + phy_rx_k <= phy8_i.rx_k; + phy_rx_enc_err <= phy8_i.rx_enc_err; + phy_rx_bts <= phy8_i.rx_bitslide; + phy_rdy <= phy8_i.rdy; + sfp_tx_fault <= phy8_i.sfp_tx_fault; + sfp_los <= phy8_i.sfp_los; + + -- drive unused ports with dummy values + phy16_o <= c_dummy_phy16_from_wrc; + phy_rst_o <= '0'; + phy_loopen_o <= '0'; + phy_tx_data_o <= (others => '0'); + phy_tx_k_o <= (others => '0'); + phy_loopen_vec_o <= (others => '0'); + phy_tx_prbs_sel_o <= (others => '0'); + phy_sfp_tx_disable_o <= '0'; + end generate; + + -- backwards compatibility + GEN_STD_IF: if not g_records_for_phy generate + phy_rst_o <= phy_rst; + phy_loopen_o <= phy_loopen; + phy_loopen_vec_o <= phy_loopen_vec; + phy_tx_data_o <= phy_tx_data; + phy_tx_k_o <= phy_tx_k; + phy_tx_prbs_sel_o <= phy_tx_prbs_sel; + phy_sfp_tx_disable_o <= sfp_tx_disable; + + phy_tx_clk <= phy_ref_clk_i; + phy_tx_disparity <= phy_tx_disparity_i; + phy_tx_enc_err <= phy_tx_enc_err_i; + phy_rx_data <= phy_rx_data_i; + phy_rx_clk <= phy_rx_clk_i; + phy_rx_k <= phy_rx_k_i; + phy_rx_enc_err <= phy_rx_enc_err_i; + phy_rx_bts <= phy_rx_bitslide_i; + phy_rdy <= phy_rdy_i; + sfp_tx_fault <= phy_sfp_tx_fault_i; + sfp_los <= phy_sfp_los_i; + + -- drive unused ports with dummy values + phy8_o <= c_dummy_phy8_from_wrc; + phy16_o <= c_dummy_phy16_from_wrc; + end generate; + +end syn; + + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/minic_wb_slave.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/minic_wb_slave.vhd new file mode 100644 index 000000000..1a2db96a2 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/minic_wb_slave.vhd @@ -0,0 +1,602 @@ +--------------------------------------------------------------------------------------- +-- Title : Wishbone slave core for Mini NIC for WhiteRabbit +--------------------------------------------------------------------------------------- +-- File : minic_wb_slave.vhd +-- Author : auto-generated by wbgen2 from mini_nic.wb +-- Created : Wed Aug 16 22:41:57 2017 +-- Standard : VHDL'87 +--------------------------------------------------------------------------------------- +-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE mini_nic.wb +-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY! +--------------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.wbgen2_pkg.all; + +use work.minic_wbgen2_pkg.all; + + +entity minic_wb_slave is + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + wb_int_o : out std_logic; + tx_ts_read_ack_o : out std_logic; + irq_tx_i : in std_logic; + irq_tx_ack_o : out std_logic; + irq_tx_mask_o : out std_logic; + irq_rx_i : in std_logic; + irq_rx_ack_o : out std_logic; + irq_txts_i : in std_logic; + regs_i : in t_minic_in_registers; + regs_o : out t_minic_out_registers + ); +end minic_wb_slave; + +architecture syn of minic_wb_slave is + +signal minic_mcr_tx_start_dly0 : std_logic ; +signal minic_mcr_tx_start_int : std_logic ; +signal minic_mcr_rx_en_int : std_logic ; +signal minic_mcr_rx_class_int : std_logic_vector(7 downto 0); +signal minic_mprot_lo_int : std_logic_vector(15 downto 0); +signal minic_mprot_hi_int : std_logic_vector(15 downto 0); +signal eic_idr_int : std_logic_vector(2 downto 0); +signal eic_idr_write_int : std_logic ; +signal eic_ier_int : std_logic_vector(2 downto 0); +signal eic_ier_write_int : std_logic ; +signal eic_imr_int : std_logic_vector(2 downto 0); +signal eic_isr_clear_int : std_logic_vector(2 downto 0); +signal eic_isr_status_int : std_logic_vector(2 downto 0); +signal eic_irq_ack_int : std_logic_vector(2 downto 0); +signal eic_isr_write_int : std_logic ; +signal irq_inputs_vector_int : std_logic_vector(2 downto 0); +signal ack_sreg : std_logic_vector(9 downto 0); +signal rddata_reg : std_logic_vector(31 downto 0); +signal wrdata_reg : std_logic_vector(31 downto 0); +signal rwaddr_reg : std_logic_vector(4 downto 0); +signal ack_in_progress : std_logic ; + +begin +-- Some internal signals assignments + wrdata_reg <= wb_dat_i; +-- +-- Main register bank access process. + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + ack_sreg <= "0000000000"; + ack_in_progress <= '0'; + rddata_reg <= "00000000000000000000000000000000"; + minic_mcr_tx_start_int <= '0'; + minic_mcr_rx_en_int <= '0'; + minic_mcr_rx_class_int <= "00000000"; + regs_o.tx_fifo_dat_wr_o <= '0'; + regs_o.tx_fifo_type_wr_o <= '0'; + tx_ts_read_ack_o <= '0'; + minic_mprot_lo_int <= "0000000000000000"; + minic_mprot_hi_int <= "0000000000000000"; + eic_idr_write_int <= '0'; + eic_ier_write_int <= '0'; + eic_isr_write_int <= '0'; + elsif rising_edge(clk_sys_i) then +-- advance the ACK generator shift register + ack_sreg(8 downto 0) <= ack_sreg(9 downto 1); + ack_sreg(9) <= '0'; + if (ack_in_progress = '1') then + if (ack_sreg(0) = '1') then + minic_mcr_tx_start_int <= '0'; + regs_o.tx_fifo_dat_wr_o <= '0'; + regs_o.tx_fifo_type_wr_o <= '0'; + tx_ts_read_ack_o <= '0'; + eic_idr_write_int <= '0'; + eic_ier_write_int <= '0'; + eic_isr_write_int <= '0'; + ack_in_progress <= '0'; + else + regs_o.tx_fifo_dat_wr_o <= '0'; + regs_o.tx_fifo_type_wr_o <= '0'; + end if; + else + if ((wb_cyc_i = '1') and (wb_stb_i = '1')) then + case rwaddr_reg(4 downto 0) is + when "00000" => + if (wb_we_i = '1') then + minic_mcr_tx_start_int <= wrdata_reg(0); + minic_mcr_rx_en_int <= wrdata_reg(10); + minic_mcr_rx_class_int <= wrdata_reg(23 downto 16); + end if; + rddata_reg(0) <= '0'; + rddata_reg(1) <= regs_i.mcr_tx_idle_i; + rddata_reg(2) <= regs_i.mcr_tx_error_i; + rddata_reg(3) <= regs_i.mcr_tx_empty_i; + rddata_reg(4) <= regs_i.mcr_tx_full_i; + rddata_reg(8) <= regs_i.mcr_rx_ready_i; + rddata_reg(9) <= regs_i.mcr_rx_error_i; + rddata_reg(10) <= minic_mcr_rx_en_int; + rddata_reg(11) <= regs_i.mcr_tx_ts_ready_i; + rddata_reg(12) <= regs_i.mcr_rx_empty_i; + rddata_reg(13) <= regs_i.mcr_rx_full_i; + rddata_reg(23 downto 16) <= minic_mcr_rx_class_int; + rddata_reg(27 downto 24) <= regs_i.mcr_ver_i; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(2) <= '1'; + ack_in_progress <= '1'; + when "00001" => + if (wb_we_i = '1') then + regs_o.tx_fifo_dat_wr_o <= '1'; + regs_o.tx_fifo_type_wr_o <= '1'; + end if; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00010" => + if (wb_we_i = '1') then + end if; + rddata_reg(15 downto 0) <= regs_i.rx_fifo_dat_i; + rddata_reg(17 downto 16) <= regs_i.rx_fifo_type_i; + rddata_reg(30) <= regs_i.rx_fifo_empty_i; + rddata_reg(31) <= regs_i.rx_fifo_full_i; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00011" => + if (wb_we_i = '1') then + end if; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00100" => + if (wb_we_i = '1') then + end if; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00101" => + if (wb_we_i = '1') then + end if; + rddata_reg(0) <= regs_i.tsr0_valid_i; + rddata_reg(5 downto 1) <= regs_i.tsr0_pid_i; + rddata_reg(21 downto 6) <= regs_i.tsr0_fid_i; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00110" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.tsr1_tsval_i; + tx_ts_read_ack_o <= '1'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00111" => + if (wb_we_i = '1') then + end if; + rddata_reg(23 downto 0) <= regs_i.dbgr_irq_cnt_i; + rddata_reg(24) <= regs_i.dbgr_wb_irq_val_i; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01000" => + if (wb_we_i = '1') then + minic_mprot_lo_int <= wrdata_reg(15 downto 0); + minic_mprot_hi_int <= wrdata_reg(31 downto 16); + end if; + rddata_reg(15 downto 0) <= minic_mprot_lo_int; + rddata_reg(31 downto 16) <= minic_mprot_hi_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "10000" => + if (wb_we_i = '1') then + eic_idr_write_int <= '1'; + end if; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "10001" => + if (wb_we_i = '1') then + eic_ier_write_int <= '1'; + end if; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "10010" => + if (wb_we_i = '1') then + end if; + rddata_reg(2 downto 0) <= eic_imr_int(2 downto 0); + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "10011" => + if (wb_we_i = '1') then + eic_isr_write_int <= '1'; + end if; + rddata_reg(2 downto 0) <= eic_isr_status_int(2 downto 0); + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when others => +-- prevent the slave from hanging the bus on invalid address + ack_in_progress <= '1'; + ack_sreg(0) <= '1'; + end case; + end if; + end if; + end if; + end process; + + +-- Drive the data output bus + wb_dat_o <= rddata_reg; +-- TX DMA start + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + minic_mcr_tx_start_dly0 <= '0'; + regs_o.mcr_tx_start_o <= '0'; + elsif rising_edge(clk_sys_i) then + minic_mcr_tx_start_dly0 <= minic_mcr_tx_start_int; + regs_o.mcr_tx_start_o <= minic_mcr_tx_start_int and (not minic_mcr_tx_start_dly0); + end if; + end process; + + +-- TX DMA idle +-- TX DMA error +-- TX_FIFO_EMPTY +-- TX_FIFO_FULL +-- RX DMA ready +-- RX DMA error +-- RX DMA enable + regs_o.mcr_rx_en_o <= minic_mcr_rx_en_int; +-- TX TS ready +-- RX_FIFO_EMPTY +-- RX_FIFO_FULL +-- RX Accepted Packet Classes + regs_o.mcr_rx_class_o <= minic_mcr_rx_class_int; +-- Regs map version +-- Data to send +-- pass-through field: Data to send in register: TX FIFO Register + regs_o.tx_fifo_dat_o <= wrdata_reg(15 downto 0); +-- Data type +-- pass-through field: Data type in register: TX FIFO Register + regs_o.tx_fifo_type_o <= wrdata_reg(17 downto 16); +-- Data to send +-- Data type +-- RX_FIFO_EMPTY +-- RX_FIFO_FULL +-- Timestamp valid +-- Port ID +-- Frame ID +-- Timestamp value +-- interrupt counter +-- status of wb_irq_o line +-- address range lo + regs_o.mprot_lo_o <= minic_mprot_lo_int; +-- address range hi + regs_o.mprot_hi_o <= minic_mprot_hi_int; +-- extra code for reg/fifo/mem: Interrupt disable register + eic_idr_int(2 downto 0) <= wrdata_reg(2 downto 0); +-- extra code for reg/fifo/mem: Interrupt enable register + eic_ier_int(2 downto 0) <= wrdata_reg(2 downto 0); +-- extra code for reg/fifo/mem: Interrupt status register + eic_isr_clear_int(2 downto 0) <= wrdata_reg(2 downto 0); +-- extra code for reg/fifo/mem: IRQ_CONTROLLER + eic_irq_controller_inst : wbgen2_eic + generic map ( + g_num_interrupts => 3, + g_irq00_mode => 3, + g_irq01_mode => 3, + g_irq02_mode => 3, + g_irq03_mode => 0, + g_irq04_mode => 0, + g_irq05_mode => 0, + g_irq06_mode => 0, + g_irq07_mode => 0, + g_irq08_mode => 0, + g_irq09_mode => 0, + g_irq0a_mode => 0, + g_irq0b_mode => 0, + g_irq0c_mode => 0, + g_irq0d_mode => 0, + g_irq0e_mode => 0, + g_irq0f_mode => 0, + g_irq10_mode => 0, + g_irq11_mode => 0, + g_irq12_mode => 0, + g_irq13_mode => 0, + g_irq14_mode => 0, + g_irq15_mode => 0, + g_irq16_mode => 0, + g_irq17_mode => 0, + g_irq18_mode => 0, + g_irq19_mode => 0, + g_irq1a_mode => 0, + g_irq1b_mode => 0, + g_irq1c_mode => 0, + g_irq1d_mode => 0, + g_irq1e_mode => 0, + g_irq1f_mode => 0 + ) + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + irq_i => irq_inputs_vector_int, + irq_ack_o => eic_irq_ack_int, + reg_imr_o => eic_imr_int, + reg_ier_i => eic_ier_int, + reg_ier_wr_stb_i => eic_ier_write_int, + reg_idr_i => eic_idr_int, + reg_idr_wr_stb_i => eic_idr_write_int, + reg_isr_o => eic_isr_status_int, + reg_isr_i => eic_isr_clear_int, + reg_isr_wr_stb_i => eic_isr_write_int, + wb_irq_o => wb_int_o + ); + + irq_inputs_vector_int(0) <= irq_tx_i; + irq_tx_ack_o <= eic_irq_ack_int(0); + irq_tx_mask_o <= eic_imr_int(0); + irq_inputs_vector_int(1) <= irq_rx_i; + irq_rx_ack_o <= eic_irq_ack_int(1); + irq_inputs_vector_int(2) <= irq_txts_i; + rwaddr_reg <= wb_adr_i; + wb_stall_o <= (not ack_sreg(0)) and (wb_stb_i and wb_cyc_i); +-- ACK signal generation. Just pass the LSB of ACK counter. + wb_ack_o <= ack_sreg(0); +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/minic_wbgen2_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/minic_wbgen2_pkg.vhd new file mode 100644 index 000000000..585a0513d --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/minic_wbgen2_pkg.vhd @@ -0,0 +1,145 @@ +--------------------------------------------------------------------------------------- +-- Title : Wishbone slave core for Mini NIC for WhiteRabbit +--------------------------------------------------------------------------------------- +-- File : minic_wbgen2_pkg.vhd +-- Author : auto-generated by wbgen2 from mini_nic.wb +-- Created : Wed Aug 16 22:41:57 2017 +-- Standard : VHDL'87 +--------------------------------------------------------------------------------------- +-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE mini_nic.wb +-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY! +--------------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.wbgen2_pkg.all; + +package minic_wbgen2_pkg is + + + -- Input registers (user design -> WB slave) + + type t_minic_in_registers is record + mcr_tx_idle_i : std_logic; + mcr_tx_error_i : std_logic; + mcr_tx_empty_i : std_logic; + mcr_tx_full_i : std_logic; + mcr_rx_ready_i : std_logic; + mcr_rx_error_i : std_logic; + mcr_tx_ts_ready_i : std_logic; + mcr_rx_empty_i : std_logic; + mcr_rx_full_i : std_logic; + mcr_ver_i : std_logic_vector(3 downto 0); + rx_fifo_dat_i : std_logic_vector(15 downto 0); + rx_fifo_type_i : std_logic_vector(1 downto 0); + rx_fifo_empty_i : std_logic; + rx_fifo_full_i : std_logic; + tsr0_valid_i : std_logic; + tsr0_pid_i : std_logic_vector(4 downto 0); + tsr0_fid_i : std_logic_vector(15 downto 0); + tsr1_tsval_i : std_logic_vector(31 downto 0); + dbgr_irq_cnt_i : std_logic_vector(23 downto 0); + dbgr_wb_irq_val_i : std_logic; + end record; + + constant c_minic_in_registers_init_value: t_minic_in_registers := ( + mcr_tx_idle_i => '0', + mcr_tx_error_i => '0', + mcr_tx_empty_i => '0', + mcr_tx_full_i => '0', + mcr_rx_ready_i => '0', + mcr_rx_error_i => '0', + mcr_tx_ts_ready_i => '0', + mcr_rx_empty_i => '0', + mcr_rx_full_i => '0', + mcr_ver_i => (others => '0'), + rx_fifo_dat_i => (others => '0'), + rx_fifo_type_i => (others => '0'), + rx_fifo_empty_i => '0', + rx_fifo_full_i => '0', + tsr0_valid_i => '0', + tsr0_pid_i => (others => '0'), + tsr0_fid_i => (others => '0'), + tsr1_tsval_i => (others => '0'), + dbgr_irq_cnt_i => (others => '0'), + dbgr_wb_irq_val_i => '0' + ); + + -- Output registers (WB slave -> user design) + + type t_minic_out_registers is record + mcr_tx_start_o : std_logic; + mcr_rx_en_o : std_logic; + mcr_rx_class_o : std_logic_vector(7 downto 0); + tx_fifo_dat_o : std_logic_vector(15 downto 0); + tx_fifo_dat_wr_o : std_logic; + tx_fifo_type_o : std_logic_vector(1 downto 0); + tx_fifo_type_wr_o : std_logic; + mprot_lo_o : std_logic_vector(15 downto 0); + mprot_hi_o : std_logic_vector(15 downto 0); + end record; + + constant c_minic_out_registers_init_value: t_minic_out_registers := ( + mcr_tx_start_o => '0', + mcr_rx_en_o => '0', + mcr_rx_class_o => (others => '0'), + tx_fifo_dat_o => (others => '0'), + tx_fifo_dat_wr_o => '0', + tx_fifo_type_o => (others => '0'), + tx_fifo_type_wr_o => '0', + mprot_lo_o => (others => '0'), + mprot_hi_o => (others => '0') + ); + function "or" (left, right: t_minic_in_registers) return t_minic_in_registers; + function f_x_to_zero (x:std_logic) return std_logic; + function f_x_to_zero (x:std_logic_vector) return std_logic_vector; +end package; + +package body minic_wbgen2_pkg is +function f_x_to_zero (x:std_logic) return std_logic is +begin +if x = '1' then +return '1'; +else +return '0'; +end if; +end function; +function f_x_to_zero (x:std_logic_vector) return std_logic_vector is +variable tmp: std_logic_vector(x'length-1 downto 0); +begin +for i in 0 to x'length-1 loop +if x(i) = '1' then +tmp(i):= '1'; +else +tmp(i):= '0'; +end if; +end loop; +return tmp; +end function; +function "or" (left, right: t_minic_in_registers) return t_minic_in_registers is +variable tmp: t_minic_in_registers; +begin +tmp.mcr_tx_idle_i := f_x_to_zero(left.mcr_tx_idle_i) or f_x_to_zero(right.mcr_tx_idle_i); +tmp.mcr_tx_error_i := f_x_to_zero(left.mcr_tx_error_i) or f_x_to_zero(right.mcr_tx_error_i); +tmp.mcr_tx_empty_i := f_x_to_zero(left.mcr_tx_empty_i) or f_x_to_zero(right.mcr_tx_empty_i); +tmp.mcr_tx_full_i := f_x_to_zero(left.mcr_tx_full_i) or f_x_to_zero(right.mcr_tx_full_i); +tmp.mcr_rx_ready_i := f_x_to_zero(left.mcr_rx_ready_i) or f_x_to_zero(right.mcr_rx_ready_i); +tmp.mcr_rx_error_i := f_x_to_zero(left.mcr_rx_error_i) or f_x_to_zero(right.mcr_rx_error_i); +tmp.mcr_tx_ts_ready_i := f_x_to_zero(left.mcr_tx_ts_ready_i) or f_x_to_zero(right.mcr_tx_ts_ready_i); +tmp.mcr_rx_empty_i := f_x_to_zero(left.mcr_rx_empty_i) or f_x_to_zero(right.mcr_rx_empty_i); +tmp.mcr_rx_full_i := f_x_to_zero(left.mcr_rx_full_i) or f_x_to_zero(right.mcr_rx_full_i); +tmp.mcr_ver_i := f_x_to_zero(left.mcr_ver_i) or f_x_to_zero(right.mcr_ver_i); +tmp.rx_fifo_dat_i := f_x_to_zero(left.rx_fifo_dat_i) or f_x_to_zero(right.rx_fifo_dat_i); +tmp.rx_fifo_type_i := f_x_to_zero(left.rx_fifo_type_i) or f_x_to_zero(right.rx_fifo_type_i); +tmp.rx_fifo_empty_i := f_x_to_zero(left.rx_fifo_empty_i) or f_x_to_zero(right.rx_fifo_empty_i); +tmp.rx_fifo_full_i := f_x_to_zero(left.rx_fifo_full_i) or f_x_to_zero(right.rx_fifo_full_i); +tmp.tsr0_valid_i := f_x_to_zero(left.tsr0_valid_i) or f_x_to_zero(right.tsr0_valid_i); +tmp.tsr0_pid_i := f_x_to_zero(left.tsr0_pid_i) or f_x_to_zero(right.tsr0_pid_i); +tmp.tsr0_fid_i := f_x_to_zero(left.tsr0_fid_i) or f_x_to_zero(right.tsr0_fid_i); +tmp.tsr1_tsval_i := f_x_to_zero(left.tsr1_tsval_i) or f_x_to_zero(right.tsr1_tsval_i); +tmp.dbgr_irq_cnt_i := f_x_to_zero(left.dbgr_irq_cnt_i) or f_x_to_zero(right.dbgr_irq_cnt_i); +tmp.dbgr_wb_irq_val_i := f_x_to_zero(left.dbgr_wb_irq_val_i) or f_x_to_zero(right.dbgr_wb_irq_val_i); +return tmp; +end function; +end package body; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/wr_mini_nic.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/wr_mini_nic.vhd new file mode 100644 index 000000000..3ca72931f --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/wr_mini_nic.vhd @@ -0,0 +1,817 @@ +------------------------------------------------------------------------------- +-- Title : Mini Embedded DMA Network Interface Controller +-- Project : WhiteRabbit Core +------------------------------------------------------------------------------- +-- File : wrsw_mini_nic.vhd +-- Author : Grzegorz Daniluk, Tomasz Wlostowski +-- Company : CERN BE-Co-HT +-- Created : 2010-07-26 +-- Last update: 2017-02-03 +-- Platform : FPGA-generic +-- Standard : VHDL +------------------------------------------------------------------------------- +-- Description: Module implements a simple NIC with DMA controller. It +-- sends/receives the packets using WR switch fabric interface (see the +-- wrsw_endpoint.vhd for the details). Packets are stored and read from the +-- system memory via simple memory bus. WR endpoint-compatible TX timestamping +-- unit is also included. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2010-2016 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2010-07-26 1.0 twlostow Created +-- 2010-08-16 1.0 twlostow Bugfixes, linux compatibility added +-- 2011-08-03 2.0 greg.d rewritten to use pipelined Wishbone +-- 2011-10-45 2.1 twlostow bugfixes... +-- 2016-10-27 3.0 greg.d rewritten with Tx/Rx FIFOs +------------------------------------------------------------------------------- + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.wr_fabric_pkg.all; +use work.wishbone_pkg.all; +use work.genram_pkg.all; +use work.minic_wbgen2_pkg.all; + + +entity wr_mini_nic is + + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_tx_fifo_size : integer := 1024; + g_rx_fifo_size : integer := 2048; + g_buffer_little_endian : boolean := false); + + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + +------------------------------------------------------------------------------- +-- Pipelined Wishbone interface +------------------------------------------------------------------------------- + + -- WBP Master (TX) + src_dat_o : out std_logic_vector(15 downto 0); + src_adr_o : out std_logic_vector(1 downto 0); + src_sel_o : out std_logic_vector(1 downto 0); + src_cyc_o : out std_logic; + src_stb_o : out std_logic; + src_we_o : out std_logic; + src_stall_i : in std_logic; + src_err_i : in std_logic; + src_ack_i : in std_logic; + + -- WBP Slave (RX) + snk_dat_i : in std_logic_vector(15 downto 0); + snk_adr_i : in std_logic_vector(1 downto 0); + snk_sel_i : in std_logic_vector(1 downto 0); + snk_cyc_i : in std_logic; + snk_stb_i : in std_logic; + snk_we_i : in std_logic; + snk_stall_o : out std_logic; + snk_err_o : out std_logic; + snk_ack_o : out std_logic; + +------------------------------------------------------------------------------- +-- TXTSU i/f +------------------------------------------------------------------------------- + + txtsu_port_id_i : in std_logic_vector(4 downto 0); + txtsu_frame_id_i : in std_logic_vector(16 - 1 downto 0); + txtsu_tsval_i : in std_logic_vector(28 + 4 - 1 downto 0); + txtsu_tsincorrect_i : in std_logic; + txtsu_stb_i : in std_logic; + txtsu_ack_o : out std_logic; + +------------------------------------------------------------------------------- +-- Wishbone slave +------------------------------------------------------------------------------- + + wb_cyc_i : in std_logic; + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0); + wb_adr_i : in std_logic_vector(c_wishbone_address_width-1 downto 0); + wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + wb_int_o : out std_logic + ); +end wr_mini_nic; + +architecture behavioral of wr_mini_nic is + + constant c_NTX_TIMEOUT : integer := 100; + constant c_WRF_BYTESEL : std_logic_vector(1 downto 0) := "11"; + + component minic_wb_slave + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + wb_int_o : out std_logic; + tx_ts_read_ack_o : out std_logic; + irq_tx_i : in std_logic; + irq_tx_ack_o : out std_logic; + irq_tx_mask_o : out std_logic; + irq_rx_i : in std_logic; + irq_rx_ack_o : out std_logic; + irq_txts_i : in std_logic; + regs_i : in t_minic_in_registers; + regs_o : out t_minic_out_registers + ); + end component; + + function f_swap_endian_16 + ( + data : std_logic_vector(15 downto 0) + ) return std_logic_vector is + begin + if(g_buffer_little_endian = true) then + return data(7 downto 0) & data(15 downto 8); + else + return data; + end if; + end function f_swap_endian_16; + + + signal src_cyc_int : std_logic; + signal src_stb_int : std_logic; + signal snk_stall_int : std_logic; + + +----------------------------------------------------------------------------- +-- FIFO interface signals +----------------------------------------------------------------------------- + + signal tx_fifo_d : std_logic_vector(17 downto 0); + signal tx_fifo_q : std_logic_vector(17 downto 0); + alias txf_type is tx_fifo_q(17 downto 16); + alias txf_data is tx_fifo_q(15 downto 0); + signal tx_fifo_we, tx_fifo_rd : std_logic; + signal tx_fifo_empty, tx_fifo_full : std_logic; + signal rx_fifo_d : std_logic_vector(17 downto 0); + signal rx_fifo_q : std_logic_vector(17 downto 0); + signal rx_fifo_we, rx_fifo_rd : std_logic; + signal rx_fifo_empty, rx_fifo_full : std_logic; + signal rx_fifo_afull : std_logic; + + signal txf_ferror : std_logic; + signal txf_fnew : std_logic; + signal tx_status_word : t_wrf_status_reg; + + +------------------------------------------------------------------------------- +-- TX FSM stuff +------------------------------------------------------------------------------- + + type t_tx_fsm_state is (TX_IDLE, TX_STATUS, TX_PACKET, TX_FLUSH, TX_END_PACKET); + + signal ntx_timeout_is_zero : std_logic; + signal ntx_timeout : unsigned(7 downto 0); + + signal ntx_ack_count : unsigned(2 downto 0); + + signal ntx_state : t_tx_fsm_state; + signal ntx_rst_ts_ready : std_logic; + + signal ntx_stored_dat : std_logic_vector(15 downto 0); + signal ntx_stored_type : std_logic_vector(1 downto 0); + signal ntx_flush_last : std_logic; + +------------------------------------------------------------------------------- +-- RX FSM stuff +------------------------------------------------------------------------------- + + signal snk_cyc_d0 : std_logic; + signal nrx_sof : std_logic; + signal nrx_eof : std_logic; + alias rxf_type is rx_fifo_d(17 downto 16); + alias rxf_data is rx_fifo_d(15 downto 0); + + type t_rx_fsm_state is (RX_WAIT_FRAME, RX_FRAME, RX_FULL); + signal nrx_state : t_rx_fsm_state; + +------------------------------------------------------------------------------- +-- Classic Wishbone slave signals +------------------------------------------------------------------------------- + + signal regs_in : t_minic_in_registers; + signal regs_out : t_minic_out_registers; + + signal wb_in : t_wishbone_master_in; + signal wb_out : t_wishbone_master_out; + + signal irq_tx : std_logic; + signal irq_rx_ack : std_logic; + signal irq_rx : std_logic; + + signal nrx_newpacket, nrx_newpacket_d0 : std_logic; + signal ntx_newpacket, ntx_newpacket_d0 : std_logic; + + signal irq_txts : std_logic; + signal irq_tx_ack : std_logic; + signal irq_tx_mask : std_logic; + + + --component chipscope_ila + -- port ( + -- CONTROL : inout std_logic_vector(35 downto 0); + -- CLK : in std_logic; + -- TRIG0 : in std_logic_vector(31 downto 0); + -- TRIG1 : in std_logic_vector(31 downto 0); + -- TRIG2 : in std_logic_vector(31 downto 0); + -- TRIG3 : in std_logic_vector(31 downto 0)); + --end component; + + --signal CONTROL : std_logic_vector(35 downto 0); + --signal CLK : std_logic; + --signal TRIG0 : std_logic_vector(31 downto 0); + --signal TRIG1 : std_logic_vector(31 downto 0); + --signal TRIG2 : std_logic_vector(31 downto 0); + --signal TRIG3 : std_logic_vector(31 downto 0); + + --component chipscope_icon + -- port ( + -- CONTROL0 : inout std_logic_vector (35 downto 0)); + --end component; + +begin -- behavioral + + --chipscope_ila_1 : chipscope_ila + -- port map ( + -- CONTROL => CONTROL, + -- CLK => clk_sys_i, + -- TRIG0 => TRIG0, + -- TRIG1 => TRIG1, + -- TRIG2 => TRIG2, + -- TRIG3 => TRIG3); + + --chipscope_icon_1 : chipscope_icon + -- port map ( + -- CONTROL0 => CONTROL); + + regs_in.mcr_ver_i <= x"1"; + regs_in.dbgr_irq_cnt_i <= (others => '0'); + regs_in.dbgr_wb_irq_val_i <= '0'; + +------------------------------------------------------------------------------- +-- Tx / Rx FIFO +----------------------------------------------------------------------------- + TX_FIFO: generic_sync_fifo + generic map( + g_data_width => 18, + g_size => g_tx_fifo_size, + g_with_almost_empty => false, + g_with_almost_full => false, + g_with_count => false, + g_show_ahead => true) + port map ( + rst_n_i => rst_n_i, + clk_i => clk_sys_i, + d_i => tx_fifo_d, + we_i => tx_fifo_we, + q_o => tx_fifo_q, + rd_i => tx_fifo_rd, + empty_o => tx_fifo_empty, + full_o => tx_fifo_full); + + RX_FIFO: generic_sync_fifo + generic map( + g_data_width => 18, + g_size => g_rx_fifo_size, + g_with_almost_empty => false, + g_with_almost_full => true, + g_with_count => false, + g_almost_full_threshold => g_rx_fifo_size/2, + g_show_ahead => true) + port map ( + rst_n_i => rst_n_i, + clk_i => clk_sys_i, + d_i => rx_fifo_d, + we_i => rx_fifo_we, + q_o => rx_fifo_q, + rd_i => rx_fifo_rd, + empty_o => rx_fifo_empty, + full_o => rx_fifo_full, + almost_full_o => rx_fifo_afull); + + tx_fifo_d <= regs_out.tx_fifo_type_o & regs_out.tx_fifo_dat_o; + tx_fifo_we <= regs_out.tx_fifo_dat_wr_o and regs_out.tx_fifo_type_wr_o; + regs_in.mcr_tx_empty_i <= tx_fifo_empty; + regs_in.mcr_tx_full_i <= tx_fifo_full; + + regs_in.mcr_rx_empty_i <= rx_fifo_empty; + regs_in.rx_fifo_empty_i <= rx_fifo_empty; + regs_in.mcr_rx_full_i <= rx_fifo_full; + regs_in.rx_fifo_full_i <= rx_fifo_full; + regs_in.rx_fifo_type_i <= rx_fifo_q(17 downto 16); + regs_in.rx_fifo_dat_i <= rx_fifo_q(15 downto 0); + + -- sniff wb access to generate rx_fifo_rd every time the RX_FIFO register is + -- read + rx_fifo_rd <= '1' when(wb_out.cyc='1' and wb_out.stb='1' and wb_out.adr(7 downto 0)=x"02" and wb_in.ack='1') else + '0'; + +------------------------------------------------------------------------------- +-- TX Path (Host -> Fabric) +------------------------------------------------------------------------------- + +-- helper signals to avoid big IF conditions in the FSM + ntx_timeout_is_zero <= '1' when (ntx_timeout = to_unsigned(0, ntx_timeout'length)) else '0'; + + p_count_acks : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' or src_cyc_int = '0' or src_err_i = '1' then + ntx_ack_count <= (others => '0'); + else + if(src_stb_int = '1' and src_stall_i = '0' and src_ack_i = '0') then + ntx_ack_count <= ntx_ack_count + 1; + elsif(src_ack_i = '1' and not(src_stb_int = '1' and src_stall_i = '0')) then + ntx_ack_count <= ntx_ack_count - 1; + end if; + end if; + end if; + end process; + + tx_status_word <= f_unmarshall_wrf_status(tx_fifo_q(15 downto 0)); + -- signals error in transmitted frame (set by software + -- by writing again status register to TX Fifo + txf_ferror <= '1' when (tx_fifo_empty = '0' and txf_type = c_WRF_STATUS and tx_status_word.error = '1') else + '0'; + txf_fnew <= '1' when (tx_fifo_empty = '0' and txf_type = c_WRF_STATUS and tx_status_word.error = '0') else + '0'; + + p_tx_fsm: process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if (rst_n_i = '0') then + src_cyc_int <= '0'; + src_stb_int <= '0'; + src_sel_o <= "11"; + src_adr_o <= c_WRF_DATA; + tx_fifo_rd <= '0'; + ntx_rst_ts_ready <= '0'; + ntx_state <= TX_IDLE; + ntx_stored_dat <= (others=>'0'); + ntx_stored_type <= (others=>'0'); + ntx_flush_last <= '0'; + ntx_newpacket <= '0'; + else + case ntx_state is + when TX_IDLE => + regs_in.mcr_tx_error_i <= '0'; + src_cyc_int <= '0'; + src_stb_int <= '0'; + src_sel_o <= "11"; + src_adr_o <= txf_type; + ntx_timeout <= to_unsigned(c_NTX_TIMEOUT, ntx_timeout'length); + ntx_flush_last <= '0'; + ntx_newpacket <= '0'; + if (tx_fifo_empty = '0' and txf_fnew = '0') then + -- if there is something in the fifo but it's not a status word, + -- we read until we find a valid status. In this case we indicate + -- that Minic is busy by driving wbreg bit tx_idle to 0. + tx_fifo_rd <= '1'; + ntx_rst_ts_ready <= '0'; + regs_in.mcr_tx_idle_i <= '0'; + elsif (tx_fifo_empty = '0' and txf_fnew = '1' and regs_out.mcr_tx_start_o = '1') then + -- we have a new frame to be sent, proceed.. + src_cyc_int <= '1'; + tx_fifo_rd <= '1'; + ntx_rst_ts_ready <= '1'; + regs_in.mcr_tx_idle_i <= '0'; + ntx_state <= TX_STATUS; + else + -- wait quietly for something to be written to FIFO + tx_fifo_rd <= '0'; + ntx_rst_ts_ready <= '0'; + regs_in.mcr_tx_idle_i <= '1'; + end if; + + when TX_STATUS => + -- read first word of the frame from fifo and start transmission + regs_in.mcr_tx_idle_i <= '0'; + ntx_rst_ts_ready <= '0'; + src_cyc_int <= '1'; + src_stb_int <= '1'; + src_sel_o <= "11"; + src_adr_o <= c_WRF_STATUS; + src_dat_o <= f_swap_endian_16(txf_data); + tx_fifo_rd <= '1'; + ntx_flush_last <= '0'; + ntx_newpacket <= '0'; + ntx_state <= TX_PACKET; + + when TX_PACKET => + regs_in.mcr_tx_idle_i <= '0'; + ntx_rst_ts_ready <= '0'; + src_cyc_int <= '1'; + ntx_newpacket <= '0'; + if (tx_fifo_empty = '0' and src_stall_i = '0' and txf_ferror = '0' and txf_type = c_WRF_DATA) then + -- normal situation, we send the payload of a frame + src_adr_o <= c_WRF_DATA; + src_dat_o <= f_swap_endian_16(txf_data); + src_sel_o <= "11"; + src_stb_int <= '1'; + tx_fifo_rd <= '1'; + ntx_flush_last <= '0'; + elsif (tx_fifo_empty = '0' and src_stall_i = '0' and txf_ferror = '0' and txf_type = c_WRF_BYTESEL) then + -- almost normal situation, only one byte of data is valid + src_adr_o <= c_WRF_DATA; + src_dat_o <= f_swap_endian_16(txf_data); + src_sel_o <= "10"; + src_stb_int <= '1'; + tx_fifo_rd <= '1'; + ntx_flush_last <= '0'; + elsif (tx_fifo_empty = '0' and src_stall_i = '0' and txf_ferror = '0' and txf_type = c_WRF_OOB) then + -- we got OOB in TXed frame, let's send it + src_adr_o <= c_WRF_OOB; + src_dat_o <= f_swap_endian_16(txf_data); + src_sel_o <= "11"; + src_stb_int <= '1'; + tx_fifo_rd <= '1'; + ntx_flush_last <= '0'; + elsif ((tx_fifo_empty = '1' or txf_fnew = '1') and src_stall_i = '0') then + -- we done with this frame + src_adr_o <= c_WRF_DATA; + src_dat_o <= f_swap_endian_16(txf_data); + src_stb_int <= '0'; + src_sel_o <= "11"; + tx_fifo_rd <= '0'; + ntx_flush_last <= '0'; + ntx_state <= TX_END_PACKET; + else + -- e.g. snk is stalling, we wait + tx_fifo_rd <= '0'; + src_stb_int <= '1'; + ntx_stored_dat <= txf_data; + ntx_stored_type <= txf_type; + if (tx_fifo_empty = '1') then + ntx_flush_last <= '1'; + else + ntx_flush_last <= '0'; + end if; + ntx_state <= TX_FLUSH; + end if; + + when TX_FLUSH => + regs_in.mcr_tx_idle_i <= '0'; + ntx_rst_ts_ready <= '0'; + src_cyc_int <= '1'; + ntx_newpacket <= '0'; + if (src_stall_i = '0' and (ntx_stored_type = c_WRF_DATA or ntx_stored_type = c_WRF_OOB)) then + src_adr_o <= ntx_stored_type; + src_dat_o <= f_swap_endian_16(ntx_stored_dat); + src_sel_o <= "11"; + elsif (src_stall_i = '0' and ntx_stored_type = c_WRF_BYTESEL) then + src_adr_o <= c_WRF_DATA; + src_dat_o <= f_swap_endian_16(ntx_stored_dat); + src_sel_o <= "10"; + else + src_stb_int <= '1'; + tx_fifo_rd <= '0'; + end if; + + if (ntx_flush_last = '0' and src_stall_i = '0') then + src_stb_int <= '1'; + tx_fifo_rd <= '1'; + ntx_state <= TX_PACKET; + elsif (ntx_flush_last = '1' and src_stall_i = '0') then + src_stb_int <= '0'; + tx_fifo_rd <= '0'; + ntx_state <= TX_END_PACKET; + else + src_stb_int <= '1'; + tx_fifo_rd <= '0'; + ntx_state <= TX_FLUSH; + end if; + + when TX_END_PACKET => + regs_in.mcr_tx_idle_i <= '0'; + ntx_rst_ts_ready <= '0'; + src_stb_int <= '0'; + -- timeout counter in case we never get all ACKs. + ntx_timeout <= ntx_timeout - 1; + if (ntx_ack_count = 0 or ntx_timeout_is_zero = '1') then + regs_in.mcr_tx_error_i <= ntx_timeout_is_zero; + src_cyc_int <= '0'; + src_sel_o <= "11"; + tx_fifo_rd <= '0'; + ntx_newpacket <= '1'; + ntx_state <= TX_IDLE; + end if; + end case; + end if; + end if; + end process; + +-- these are never used: + src_we_o <= '1'; + src_stb_o <= src_stb_int; + src_cyc_o <= src_cyc_int; + +------------------------------------------------------------------------------- +-- RX Path (Fabric -> Host) +------------------------------------------------------------------------------- + + p_rx_gen_ack : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + snk_ack_o <= '0'; + else + if(snk_cyc_i = '1' and snk_stb_i = '1' and snk_stall_int = '0') then + snk_ack_o <= '1'; + else + snk_ack_o <= '0'; + end if; + end if; + end if; + + end process; + + nrx_sof <= '1' when(snk_cyc_d0 = '0' and snk_cyc_i = '1') else + '0'; + nrx_eof <= '1' when(snk_cyc_d0 = '1' and snk_cyc_i = '0') else + '0'; + + process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if (rst_n_i = '0') then + snk_cyc_d0 <= '0'; + rx_fifo_we <= '0'; + rxf_type <= (others=>'0'); + rxf_data <= (others=>'0'); + snk_stall_int <= '0'; + regs_in.mcr_rx_ready_i <= '0'; + nrx_newpacket <= '0'; + nrx_state <= RX_WAIT_FRAME; + + else + snk_cyc_d0 <= snk_cyc_i; + + case nrx_state is + when RX_WAIT_FRAME => + rx_fifo_we <= '0'; + rxf_type <= (others=>'0'); + rxf_data <= (others=>'0'); + regs_in.mcr_rx_error_i <= '0'; + nrx_newpacket <= '0'; + if (regs_out.mcr_rx_en_o = '1') then + snk_stall_int <= not nrx_sof; + else + -- RX path is disabled, don't stall any traffic + snk_stall_int <= '0'; + end if; + + -- wait for software to enable RX path and a start of new frame + if (regs_out.mcr_rx_en_o = '1' and nrx_sof = '1' and rx_fifo_full = '0') then + nrx_state <= RX_FRAME; + end if; + + when RX_FRAME => + snk_stall_int <= '0'; + -- receive frame, write it to FIFO + if (snk_stb_i = '1' and snk_sel_i = "11") then + rxf_type <= snk_adr_i; + rxf_data <= f_swap_endian_16(snk_dat_i); + rx_fifo_we <= '1'; + elsif (snk_stb_i = '1' and snk_sel_i = "10") then + rxf_type <= c_WRF_BYTESEL; + rxf_data <= f_swap_endian_16(snk_dat_i); + rx_fifo_we <= '1'; + else + rxf_type <= (others=>'0'); + rxf_data <= (others=>'0'); + rx_fifo_we <= '0'; + end if; + + if ((regs_out.mcr_rx_en_o = '0' or nrx_eof = '1') and rx_fifo_full = '0') then + -- stop writing FIFO if sw disables RX path + -- or if we're done with current frame + regs_in.mcr_rx_ready_i <= '1'; + regs_in.mcr_rx_error_i <= '0'; + nrx_newpacket <= '1'; + nrx_state <= RX_WAIT_FRAME; + elsif ((regs_out.mcr_rx_en_o = '0' or nrx_eof = '1') and rx_fifo_full = '1') then + -- the difference with the previous condition is that if the fifo + -- is full on the last word, we don't set rx_error, because the + -- frame was not cut (it fits in the FIFO). Besides that, we have + -- to go to RX_FULL state to wait for the FIFO to be half-empty + -- and receive more frames. + regs_in.mcr_rx_ready_i <= '1'; + regs_in.mcr_rx_error_i <= '0'; + nrx_newpacket <= '1'; + nrx_state <= RX_FULL; + elsif (rx_fifo_full = '1') then + -- error if fifo gets full needs to be recovered + regs_in.mcr_rx_ready_i <= '1'; + regs_in.mcr_rx_error_i <= '1'; + nrx_newpacket <= '1'; + nrx_state <= RX_FULL; + else + regs_in.mcr_rx_ready_i <= '0'; + regs_in.mcr_rx_error_i <= '0'; + nrx_newpacket <= '0'; + + end if; + + when RX_FULL => + snk_stall_int <= '0'; + rx_fifo_we <= '0'; + rxf_type <= (others=>'0'); + rxf_data <= (others=>'0'); + nrx_newpacket <= '0'; + + -- recovering means disabling RX path and reading everything from + -- the FIFO + --if (regs_out.mcr_rx_en_o = '0' and rx_fifo_empty = '1') then + -- nrx_state <= RX_WAIT_FRAME; + --end if; + if (snk_cyc_i = '0' and rx_fifo_afull = '0') then + nrx_state <= RX_WAIT_FRAME; + end if; + end case; + end if; + end if; + end process; + + + snk_stall_o <= snk_stall_int; + snk_err_o <= '0'; + +------------------------------------------------------------------------------- +-- TX Timestamping unit +------------------------------------------------------------------------------- + tsu_fsm : process(clk_sys_i, rst_n_i) + begin + if rising_edge(clk_sys_i) then + if(rst_n_i = '0') then + regs_in.mcr_tx_ts_ready_i <= '0'; + regs_in.tsr0_valid_i <= '0'; + regs_in.tsr0_pid_i <= (others => '0'); + regs_in.tsr0_fid_i <= (others => '0'); + regs_in.tsr1_tsval_i <= (others => '0'); + txtsu_ack_o <= '0'; + else + -- Make sure the timestamp is written to the FIFO only once. + + if(ntx_rst_ts_ready = '1') then + regs_in.mcr_tx_ts_ready_i <= '0'; + elsif(txtsu_stb_i = '1') then + regs_in.mcr_tx_ts_ready_i <= '1'; + regs_in.tsr0_valid_i <= not txtsu_tsincorrect_i; + regs_in.tsr0_fid_i <= txtsu_frame_id_i; + regs_in.tsr0_pid_i <= txtsu_port_id_i; + regs_in.tsr1_tsval_i <= txtsu_tsval_i; + txtsu_ack_o <= '1'; + else + txtsu_ack_o <= '0'; + end if; + end if; + end if; + end process; + + handle_irqs: process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + irq_tx <= '0'; + irq_rx <= '0'; + ntx_newpacket_d0 <= '0'; + nrx_newpacket_d0 <= '0'; + else + ntx_newpacket_d0 <= ntx_newpacket; + nrx_newpacket_d0 <= nrx_newpacket; + + if (ntx_newpacket_d0 = '0' and ntx_newpacket = '1' and irq_tx_mask = '1') then + irq_tx <= '1'; + elsif (irq_tx_mask = '0' or irq_tx_ack = '1') then + irq_tx <= '0'; + end if; + + if (nrx_newpacket_d0 = '0' and nrx_newpacket = '1') then + irq_rx <= '1'; + elsif (irq_rx_ack = '1') then + irq_rx <= '0'; + end if; + end if; + end if; + end process; + + irq_txts <= '0'; + + U_Slave_Adapter : wb_slave_adapter + generic map ( + g_master_use_struct => true, + g_master_mode => CLASSIC, + g_master_granularity => WORD, + g_slave_use_struct => false, + g_slave_mode => g_interface_mode, + g_slave_granularity => g_address_granularity) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + sl_adr_i => wb_adr_i, + sl_dat_i => wb_dat_i, + sl_sel_i => wb_sel_i, + sl_cyc_i => wb_cyc_i, + sl_stb_i => wb_stb_i, + sl_we_i => wb_we_i, + sl_dat_o => wb_dat_o, + sl_ack_o => wb_ack_o, + sl_stall_o => wb_stall_o, + master_i => wb_in, + master_o => wb_out); + + U_WB_Slave : minic_wb_slave + port map ( + rst_n_i => rst_n_i, + clk_sys_i => clk_sys_i, + wb_adr_i => wb_out.adr(4 downto 0), + wb_dat_i => wb_out.dat, + wb_dat_o => wb_in.dat, + wb_cyc_i => wb_out.cyc, + wb_sel_i => wb_out.sel, + wb_stb_i => wb_out.stb, + wb_we_i => wb_out.we, + wb_ack_o => wb_in.ack, + wb_stall_o => wb_in.stall, + wb_int_o => wb_int_o, + regs_i => regs_in, + regs_o => regs_out, + tx_ts_read_ack_o => open, + irq_tx_i => irq_tx, + irq_tx_ack_o => irq_tx_ack, + irq_tx_mask_o => irq_tx_mask, + irq_rx_i => irq_rx, + irq_rx_ack_o => irq_rx_ack, + irq_txts_i => irq_txts); + + wb_in.err <= '0'; + wb_in.rty <= '0'; + wb_in.int <= '0'; + + --TRIG0(0) <= regs_out.mcr_rx_en_o; + --TRIG0(1) <= rx_fifo_empty; + --TRIG0(2) <= rx_fifo_full; + --TRIG0(3) <= rx_fifo_rd; + --TRIG0(4) <= rx_fifo_we; + --TRIG0(6 downto 5) <= rx_fifo_q(17 downto 16); + --TRIG0(22 downto 7) <= rx_fifo_q(15 downto 0); + --TRIG0(24 downto 23) <= "00" when(nrx_state = RX_WAIT_FRAME) else + -- "01" when(nrx_state = RX_FRAME) else + -- "10" when(nrx_state = RX_FULL) else + -- "11"; + --TRIG0(25) <= nrx_sof; + --TRIG0(26) <= nrx_eof; + --TRIG0(27) <= snk_cyc_i; + --TRIG0(28) <= snk_stb_i; + --TRIG0(29) <= snk_stall_int; + --TRIG0(31 downto 30) <= snk_adr_i; + + --TRIG1(15 downto 0) <= snk_dat_i; + --TRIG1(16) <= rx_fifo_afull; + --TRIG1(17) <= wb_out.cyc; + --TRIG1(18) <= wb_out.stb; + --TRIG1(19) <= wb_in.ack; + --TRIG1(20) <= irq_rx; + + --TRIG2(31 downto 0) <= wb_out.adr; + +end behavioral; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/xwr_mini_nic.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/xwr_mini_nic.vhd new file mode 100644 index 000000000..1cbbe9dfe --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/xwr_mini_nic.vhd @@ -0,0 +1,186 @@ +------------------------------------------------------------------------------- +-- Title : Mini Embedded DMA Network Interface Controller +-- Project : WhiteRabbit Core +------------------------------------------------------------------------------- +-- File : xwrsw_mini_nic.vhd +-- Author : Grzegorz Daniluk, Tomasz Wlostowski +-- Company : CERN BE-Co-HT +-- Created : 2010-07-26 +-- Last update: 2017-02-03 +-- Platform : FPGA-generic +-- Standard : VHDL +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2010-2016 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +use work.wr_fabric_pkg.all; +use work.wishbone_pkg.all; + +entity xwr_mini_nic is + + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_tx_fifo_size : integer := 1024; + g_rx_fifo_size : integer := 2048; + g_buffer_little_endian : boolean := false); + + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + +------------------------------------------------------------------------------- +-- Pipelined Wishbone interface +------------------------------------------------------------------------------- + + -- WBP Master (TX) + src_o : out t_wrf_source_out; + src_i : in t_wrf_source_in; + + -- WBP Slave (RX) + snk_o : out t_wrf_sink_out; + snk_i : in t_wrf_sink_in; + +------------------------------------------------------------------------------- +-- TXTSU i/f +------------------------------------------------------------------------------- + + txtsu_port_id_i : in std_logic_vector(4 downto 0); + txtsu_frame_id_i : in std_logic_vector(16 - 1 downto 0); + txtsu_tsval_i : in std_logic_vector(28 + 4 - 1 downto 0); + txtsu_tsincorrect_i : in std_logic; + txtsu_stb_i : in std_logic; + txtsu_ack_o : out std_logic; + +------------------------------------------------------------------------------- +-- Wishbone slave +------------------------------------------------------------------------------- + + wb_i : in t_wishbone_slave_in; + wb_o : out t_wishbone_slave_out + ); +end xwr_mini_nic; + +architecture wrapper of xwr_mini_nic is + + component wr_mini_nic + generic ( + g_interface_mode : t_wishbone_interface_mode; + g_address_granularity : t_wishbone_address_granularity; + g_tx_fifo_size : integer; + g_rx_fifo_size : integer; + g_buffer_little_endian : boolean); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + src_dat_o : out std_logic_vector(15 downto 0); + src_adr_o : out std_logic_vector(1 downto 0); + src_sel_o : out std_logic_vector(1 downto 0); + src_cyc_o : out std_logic; + src_stb_o : out std_logic; + src_we_o : out std_logic; + src_stall_i : in std_logic; + src_err_i : in std_logic; + src_ack_i : in std_logic; + snk_dat_i : in std_logic_vector(15 downto 0); + snk_adr_i : in std_logic_vector(1 downto 0); + snk_sel_i : in std_logic_vector(1 downto 0); + snk_cyc_i : in std_logic; + snk_stb_i : in std_logic; + snk_we_i : in std_logic; + snk_stall_o : out std_logic; + snk_err_o : out std_logic; + snk_ack_o : out std_logic; + txtsu_port_id_i : in std_logic_vector(4 downto 0); + txtsu_frame_id_i : in std_logic_vector(16 - 1 downto 0); + txtsu_tsval_i : in std_logic_vector(28 + 4 - 1 downto 0); + txtsu_tsincorrect_i : in std_logic; + txtsu_stb_i : in std_logic; + txtsu_ack_o : out std_logic; + wb_cyc_i : in std_logic; + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0); + wb_adr_i : in std_logic_vector(c_wishbone_address_width-1 downto 0); + wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + wb_int_o : out std_logic); + end component; + +begin -- wrapper + + U_Wrapped_Minic : wr_mini_nic + generic map ( + g_interface_mode => g_interface_mode, + g_address_granularity => g_address_granularity, + g_tx_fifo_size => g_tx_fifo_size, + g_rx_fifo_size => g_rx_fifo_size, + g_buffer_little_endian => g_buffer_little_endian) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + src_dat_o => src_o.dat, + src_adr_o => src_o.adr, + src_sel_o => src_o.sel, + src_cyc_o => src_o.cyc, + src_stb_o => src_o.stb, + src_we_o => src_o.we, + src_stall_i => src_i.stall, + src_err_i => src_i.err, + src_ack_i => src_i.ack, + snk_dat_i => snk_i.dat, + snk_adr_i => snk_i.adr, + snk_sel_i => snk_i.sel, + snk_cyc_i => snk_i.cyc, + snk_stb_i => snk_i.stb, + snk_we_i => snk_i.we, + snk_stall_o => snk_o.stall, + snk_err_o => snk_o.err, + snk_ack_o => snk_o.ack, + txtsu_port_id_i => txtsu_port_id_i, + txtsu_frame_id_i => txtsu_frame_id_i, + txtsu_tsval_i => txtsu_tsval_i, + txtsu_tsincorrect_i => txtsu_tsincorrect_i, + txtsu_stb_i => txtsu_stb_i, + txtsu_ack_o => txtsu_ack_o, + wb_cyc_i => wb_i.cyc, + wb_stb_i => wb_i.stb, + wb_we_i => wb_i.we, + wb_sel_i => wb_i.sel, + wb_adr_i => wb_i.adr, + wb_dat_i => wb_i.dat, + wb_dat_o => wb_o.dat, + wb_ack_o => wb_o.ack, + wb_stall_o => wb_o.stall, + wb_int_o => wb_o.int); + + + wb_o.err <= '0'; + wb_o.rty <= '0'; + + snk_o.rty <= '0'; + +end wrapper; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/pps_gen_wb.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/pps_gen_wb.vhd new file mode 100644 index 000000000..d9866aeab --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/pps_gen_wb.vhd @@ -0,0 +1,820 @@ +--------------------------------------------------------------------------------------- +-- Title : Wishbone slave core for WR Switch PPS generator and RTC +--------------------------------------------------------------------------------------- +-- File : pps_gen_wb.vhd +-- Author : auto-generated by wbgen2 from pps_gen_wb.wb +-- Created : Wed Aug 16 22:41:09 2017 +-- Standard : VHDL'87 +--------------------------------------------------------------------------------------- +-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE pps_gen_wb.wb +-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY! +--------------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity pps_gen_wb is + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(2 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + refclk_i : in std_logic; +-- Port for asynchronous (clock: refclk_i) MONOSTABLE field: 'Reset counter' in reg: 'Control Register' + ppsg_cr_cnt_rst_o : out std_logic; +-- Port for asynchronous (clock: refclk_i) BIT field: 'Enable counter' in reg: 'Control Register' + ppsg_cr_cnt_en_o : out std_logic; +-- Ports for asynchronous (clock: refclk_i) RW/RW BIT field: 'Adjust offset' in reg: 'Control Register' + ppsg_cr_cnt_adj_o : out std_logic; + ppsg_cr_cnt_adj_i : in std_logic; + ppsg_cr_cnt_adj_load_o : out std_logic; +-- Port for asynchronous (clock: refclk_i) MONOSTABLE field: 'Set time' in reg: 'Control Register' + ppsg_cr_cnt_set_o : out std_logic; +-- Port for asynchronous (clock: refclk_i) std_logic_vector field: 'PPS Pulse width' in reg: 'Control Register' + ppsg_cr_pwidth_o : out std_logic_vector(27 downto 0); +-- Port for asynchronous (clock: refclk_i) std_logic_vector field: 'Nanosecond counter' in reg: 'Nanosecond counter register' + ppsg_cntr_nsec_i : in std_logic_vector(27 downto 0); +-- Port for asynchronous (clock: refclk_i) std_logic_vector field: 'UTC Counter' in reg: 'UTC Counter register (least-significant part)' + ppsg_cntr_utclo_i : in std_logic_vector(31 downto 0); +-- Port for asynchronous (clock: refclk_i) std_logic_vector field: 'UTC Counter' in reg: 'UTC Counter register (most-significant part)' + ppsg_cntr_utchi_i : in std_logic_vector(7 downto 0); +-- Ports for PASS_THROUGH field: 'Nanosecond adjustment' in reg: 'Nanosecond adjustment register' + ppsg_adj_nsec_o : out std_logic_vector(27 downto 0); + ppsg_adj_nsec_wr_o : out std_logic; +-- Ports for PASS_THROUGH field: 'UTC Counter adjustment' in reg: 'UTC Adjustment register (least-significant part)' + ppsg_adj_utclo_o : out std_logic_vector(31 downto 0); + ppsg_adj_utclo_wr_o : out std_logic; +-- Ports for PASS_THROUGH field: 'UTC Counter adjustment' in reg: 'UTC Adjustment register (most-significant part)' + ppsg_adj_utchi_o : out std_logic_vector(7 downto 0); + ppsg_adj_utchi_wr_o : out std_logic; +-- Ports for asynchronous (clock: refclk_i) RW/RW BIT field: 'Sync to external PPS input' in reg: 'External sync control register' + ppsg_escr_sync_o : out std_logic; + ppsg_escr_sync_i : in std_logic; + ppsg_escr_sync_load_o : out std_logic; +-- Port for asynchronous (clock: refclk_i) BIT field: 'PPS unmask output' in reg: 'External sync control register' + ppsg_escr_pps_unmask_o : out std_logic; +-- Port for asynchronous (clock: refclk_i) BIT field: 'PPS output valid' in reg: 'External sync control register' + ppsg_escr_pps_valid_o : out std_logic; +-- Port for asynchronous (clock: refclk_i) BIT field: 'Timecode output(UTC+cycles) valid' in reg: 'External sync control register' + ppsg_escr_tm_valid_o : out std_logic; +-- Port for asynchronous (clock: refclk_i) MONOSTABLE field: 'Set seconds counter' in reg: 'External sync control register' + ppsg_escr_sec_set_o : out std_logic; +-- Port for asynchronous (clock: refclk_i) MONOSTABLE field: 'Set nanoseconds counter' in reg: 'External sync control register' + ppsg_escr_nsec_set_o : out std_logic + ); +end pps_gen_wb; + +architecture syn of pps_gen_wb is + +signal ppsg_cr_cnt_rst_int : std_logic ; +signal ppsg_cr_cnt_rst_int_delay : std_logic ; +signal ppsg_cr_cnt_rst_sync0 : std_logic ; +signal ppsg_cr_cnt_rst_sync1 : std_logic ; +signal ppsg_cr_cnt_rst_sync2 : std_logic ; +signal ppsg_cr_cnt_en_int : std_logic ; +signal ppsg_cr_cnt_en_sync0 : std_logic ; +signal ppsg_cr_cnt_en_sync1 : std_logic ; +signal ppsg_cr_cnt_adj_int_read : std_logic ; +signal ppsg_cr_cnt_adj_int_write : std_logic ; +signal ppsg_cr_cnt_adj_lw : std_logic ; +signal ppsg_cr_cnt_adj_lw_delay : std_logic ; +signal ppsg_cr_cnt_adj_lw_read_in_progress : std_logic ; +signal ppsg_cr_cnt_adj_lw_s0 : std_logic ; +signal ppsg_cr_cnt_adj_lw_s1 : std_logic ; +signal ppsg_cr_cnt_adj_lw_s2 : std_logic ; +signal ppsg_cr_cnt_adj_rwsel : std_logic ; +signal ppsg_cr_cnt_set_int : std_logic ; +signal ppsg_cr_cnt_set_int_delay : std_logic ; +signal ppsg_cr_cnt_set_sync0 : std_logic ; +signal ppsg_cr_cnt_set_sync1 : std_logic ; +signal ppsg_cr_cnt_set_sync2 : std_logic ; +signal ppsg_cr_pwidth_int : std_logic_vector(27 downto 0); +signal ppsg_cr_pwidth_swb : std_logic ; +signal ppsg_cr_pwidth_swb_delay : std_logic ; +signal ppsg_cr_pwidth_swb_s0 : std_logic ; +signal ppsg_cr_pwidth_swb_s1 : std_logic ; +signal ppsg_cr_pwidth_swb_s2 : std_logic ; +signal ppsg_cntr_nsec_int : std_logic_vector(27 downto 0); +signal ppsg_cntr_nsec_lwb : std_logic ; +signal ppsg_cntr_nsec_lwb_delay : std_logic ; +signal ppsg_cntr_nsec_lwb_in_progress : std_logic ; +signal ppsg_cntr_nsec_lwb_s0 : std_logic ; +signal ppsg_cntr_nsec_lwb_s1 : std_logic ; +signal ppsg_cntr_nsec_lwb_s2 : std_logic ; +signal ppsg_cntr_utclo_int : std_logic_vector(31 downto 0); +signal ppsg_cntr_utclo_lwb : std_logic ; +signal ppsg_cntr_utclo_lwb_delay : std_logic ; +signal ppsg_cntr_utclo_lwb_in_progress : std_logic ; +signal ppsg_cntr_utclo_lwb_s0 : std_logic ; +signal ppsg_cntr_utclo_lwb_s1 : std_logic ; +signal ppsg_cntr_utclo_lwb_s2 : std_logic ; +signal ppsg_cntr_utchi_int : std_logic_vector(7 downto 0); +signal ppsg_cntr_utchi_lwb : std_logic ; +signal ppsg_cntr_utchi_lwb_delay : std_logic ; +signal ppsg_cntr_utchi_lwb_in_progress : std_logic ; +signal ppsg_cntr_utchi_lwb_s0 : std_logic ; +signal ppsg_cntr_utchi_lwb_s1 : std_logic ; +signal ppsg_cntr_utchi_lwb_s2 : std_logic ; +signal ppsg_escr_sync_int_read : std_logic ; +signal ppsg_escr_sync_int_write : std_logic ; +signal ppsg_escr_sync_lw : std_logic ; +signal ppsg_escr_sync_lw_delay : std_logic ; +signal ppsg_escr_sync_lw_read_in_progress : std_logic ; +signal ppsg_escr_sync_lw_s0 : std_logic ; +signal ppsg_escr_sync_lw_s1 : std_logic ; +signal ppsg_escr_sync_lw_s2 : std_logic ; +signal ppsg_escr_sync_rwsel : std_logic ; +signal ppsg_escr_pps_unmask_int : std_logic ; +signal ppsg_escr_pps_unmask_sync0 : std_logic ; +signal ppsg_escr_pps_unmask_sync1 : std_logic ; +signal ppsg_escr_pps_valid_int : std_logic ; +signal ppsg_escr_pps_valid_sync0 : std_logic ; +signal ppsg_escr_pps_valid_sync1 : std_logic ; +signal ppsg_escr_tm_valid_int : std_logic ; +signal ppsg_escr_tm_valid_sync0 : std_logic ; +signal ppsg_escr_tm_valid_sync1 : std_logic ; +signal ppsg_escr_sec_set_int : std_logic ; +signal ppsg_escr_sec_set_int_delay : std_logic ; +signal ppsg_escr_sec_set_sync0 : std_logic ; +signal ppsg_escr_sec_set_sync1 : std_logic ; +signal ppsg_escr_sec_set_sync2 : std_logic ; +signal ppsg_escr_nsec_set_int : std_logic ; +signal ppsg_escr_nsec_set_int_delay : std_logic ; +signal ppsg_escr_nsec_set_sync0 : std_logic ; +signal ppsg_escr_nsec_set_sync1 : std_logic ; +signal ppsg_escr_nsec_set_sync2 : std_logic ; +signal ack_sreg : std_logic_vector(9 downto 0); +signal rddata_reg : std_logic_vector(31 downto 0); +signal wrdata_reg : std_logic_vector(31 downto 0); +signal rwaddr_reg : std_logic_vector(2 downto 0); +signal ack_in_progress : std_logic ; + +begin +-- Some internal signals assignments + wrdata_reg <= wb_dat_i; +-- +-- Main register bank access process. + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + ack_sreg <= "0000000000"; + ack_in_progress <= '0'; + rddata_reg <= "00000000000000000000000000000000"; + ppsg_cr_cnt_rst_int <= '0'; + ppsg_cr_cnt_rst_int_delay <= '0'; + ppsg_cr_cnt_en_int <= '0'; + ppsg_cr_cnt_adj_lw <= '0'; + ppsg_cr_cnt_adj_lw_delay <= '0'; + ppsg_cr_cnt_adj_lw_read_in_progress <= '0'; + ppsg_cr_cnt_adj_rwsel <= '0'; + ppsg_cr_cnt_adj_int_write <= '0'; + ppsg_cr_cnt_set_int <= '0'; + ppsg_cr_cnt_set_int_delay <= '0'; + ppsg_cr_pwidth_int <= "0000000000000000000000000000"; + ppsg_cr_pwidth_swb <= '0'; + ppsg_cr_pwidth_swb_delay <= '0'; + ppsg_cntr_nsec_lwb <= '0'; + ppsg_cntr_nsec_lwb_delay <= '0'; + ppsg_cntr_nsec_lwb_in_progress <= '0'; + ppsg_cntr_utclo_lwb <= '0'; + ppsg_cntr_utclo_lwb_delay <= '0'; + ppsg_cntr_utclo_lwb_in_progress <= '0'; + ppsg_cntr_utchi_lwb <= '0'; + ppsg_cntr_utchi_lwb_delay <= '0'; + ppsg_cntr_utchi_lwb_in_progress <= '0'; + ppsg_adj_nsec_wr_o <= '0'; + ppsg_adj_utclo_wr_o <= '0'; + ppsg_adj_utchi_wr_o <= '0'; + ppsg_escr_sync_lw <= '0'; + ppsg_escr_sync_lw_delay <= '0'; + ppsg_escr_sync_lw_read_in_progress <= '0'; + ppsg_escr_sync_rwsel <= '0'; + ppsg_escr_sync_int_write <= '0'; + ppsg_escr_pps_unmask_int <= '0'; + ppsg_escr_pps_valid_int <= '0'; + ppsg_escr_tm_valid_int <= '0'; + ppsg_escr_sec_set_int <= '0'; + ppsg_escr_sec_set_int_delay <= '0'; + ppsg_escr_nsec_set_int <= '0'; + ppsg_escr_nsec_set_int_delay <= '0'; + elsif rising_edge(clk_sys_i) then +-- advance the ACK generator shift register + ack_sreg(8 downto 0) <= ack_sreg(9 downto 1); + ack_sreg(9) <= '0'; + if (ack_in_progress = '1') then + if (ack_sreg(0) = '1') then + ppsg_adj_nsec_wr_o <= '0'; + ppsg_adj_utclo_wr_o <= '0'; + ppsg_adj_utchi_wr_o <= '0'; + ack_in_progress <= '0'; + else + ppsg_cr_cnt_rst_int <= ppsg_cr_cnt_rst_int_delay; + ppsg_cr_cnt_rst_int_delay <= '0'; + ppsg_cr_cnt_adj_lw <= ppsg_cr_cnt_adj_lw_delay; + ppsg_cr_cnt_adj_lw_delay <= '0'; + if ((ack_sreg(1) = '1') and (ppsg_cr_cnt_adj_lw_read_in_progress = '1')) then + rddata_reg(2) <= ppsg_cr_cnt_adj_int_read; + ppsg_cr_cnt_adj_lw_read_in_progress <= '0'; + end if; + ppsg_cr_cnt_set_int <= ppsg_cr_cnt_set_int_delay; + ppsg_cr_cnt_set_int_delay <= '0'; + ppsg_cr_pwidth_swb <= ppsg_cr_pwidth_swb_delay; + ppsg_cr_pwidth_swb_delay <= '0'; + ppsg_cntr_nsec_lwb <= ppsg_cntr_nsec_lwb_delay; + ppsg_cntr_nsec_lwb_delay <= '0'; + if ((ack_sreg(1) = '1') and (ppsg_cntr_nsec_lwb_in_progress = '1')) then + rddata_reg(27 downto 0) <= ppsg_cntr_nsec_int; + ppsg_cntr_nsec_lwb_in_progress <= '0'; + end if; + ppsg_cntr_utclo_lwb <= ppsg_cntr_utclo_lwb_delay; + ppsg_cntr_utclo_lwb_delay <= '0'; + if ((ack_sreg(1) = '1') and (ppsg_cntr_utclo_lwb_in_progress = '1')) then + rddata_reg(31 downto 0) <= ppsg_cntr_utclo_int; + ppsg_cntr_utclo_lwb_in_progress <= '0'; + end if; + ppsg_cntr_utchi_lwb <= ppsg_cntr_utchi_lwb_delay; + ppsg_cntr_utchi_lwb_delay <= '0'; + if ((ack_sreg(1) = '1') and (ppsg_cntr_utchi_lwb_in_progress = '1')) then + rddata_reg(7 downto 0) <= ppsg_cntr_utchi_int; + ppsg_cntr_utchi_lwb_in_progress <= '0'; + end if; + ppsg_adj_nsec_wr_o <= '0'; + ppsg_adj_utclo_wr_o <= '0'; + ppsg_adj_utchi_wr_o <= '0'; + ppsg_escr_sync_lw <= ppsg_escr_sync_lw_delay; + ppsg_escr_sync_lw_delay <= '0'; + if ((ack_sreg(1) = '1') and (ppsg_escr_sync_lw_read_in_progress = '1')) then + rddata_reg(0) <= ppsg_escr_sync_int_read; + ppsg_escr_sync_lw_read_in_progress <= '0'; + end if; + ppsg_escr_sec_set_int <= ppsg_escr_sec_set_int_delay; + ppsg_escr_sec_set_int_delay <= '0'; + ppsg_escr_nsec_set_int <= ppsg_escr_nsec_set_int_delay; + ppsg_escr_nsec_set_int_delay <= '0'; + end if; + else + if ((wb_cyc_i = '1') and (wb_stb_i = '1')) then + case rwaddr_reg(2 downto 0) is + when "000" => + if (wb_we_i = '1') then + ppsg_cr_cnt_rst_int <= wrdata_reg(0); + ppsg_cr_cnt_rst_int_delay <= wrdata_reg(0); + ppsg_cr_cnt_en_int <= wrdata_reg(1); + ppsg_cr_cnt_adj_int_write <= wrdata_reg(2); + ppsg_cr_cnt_adj_lw <= '1'; + ppsg_cr_cnt_adj_lw_delay <= '1'; + ppsg_cr_cnt_adj_lw_read_in_progress <= '0'; + ppsg_cr_cnt_adj_rwsel <= '1'; + ppsg_cr_cnt_set_int <= wrdata_reg(3); + ppsg_cr_cnt_set_int_delay <= wrdata_reg(3); + ppsg_cr_pwidth_int <= wrdata_reg(31 downto 4); + ppsg_cr_pwidth_swb <= '1'; + ppsg_cr_pwidth_swb_delay <= '1'; + end if; + rddata_reg(0) <= '0'; + rddata_reg(1) <= ppsg_cr_cnt_en_int; + if (wb_we_i = '0') then + rddata_reg(2) <= 'X'; + ppsg_cr_cnt_adj_lw <= '1'; + ppsg_cr_cnt_adj_lw_delay <= '1'; + ppsg_cr_cnt_adj_lw_read_in_progress <= '1'; + ppsg_cr_cnt_adj_rwsel <= '0'; + end if; + rddata_reg(3) <= '0'; + rddata_reg(31 downto 4) <= ppsg_cr_pwidth_int; + ack_sreg(5) <= '1'; + ack_in_progress <= '1'; + when "001" => + if (wb_we_i = '1') then + end if; + if (wb_we_i = '0') then + ppsg_cntr_nsec_lwb <= '1'; + ppsg_cntr_nsec_lwb_delay <= '1'; + ppsg_cntr_nsec_lwb_in_progress <= '1'; + end if; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(5) <= '1'; + ack_in_progress <= '1'; + when "010" => + if (wb_we_i = '1') then + end if; + if (wb_we_i = '0') then + ppsg_cntr_utclo_lwb <= '1'; + ppsg_cntr_utclo_lwb_delay <= '1'; + ppsg_cntr_utclo_lwb_in_progress <= '1'; + end if; + ack_sreg(5) <= '1'; + ack_in_progress <= '1'; + when "011" => + if (wb_we_i = '1') then + end if; + if (wb_we_i = '0') then + ppsg_cntr_utchi_lwb <= '1'; + ppsg_cntr_utchi_lwb_delay <= '1'; + ppsg_cntr_utchi_lwb_in_progress <= '1'; + end if; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(5) <= '1'; + ack_in_progress <= '1'; + when "100" => + if (wb_we_i = '1') then + ppsg_adj_nsec_wr_o <= '1'; + end if; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "101" => + if (wb_we_i = '1') then + ppsg_adj_utclo_wr_o <= '1'; + end if; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "110" => + if (wb_we_i = '1') then + ppsg_adj_utchi_wr_o <= '1'; + end if; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "111" => + if (wb_we_i = '1') then + ppsg_escr_sync_int_write <= wrdata_reg(0); + ppsg_escr_sync_lw <= '1'; + ppsg_escr_sync_lw_delay <= '1'; + ppsg_escr_sync_lw_read_in_progress <= '0'; + ppsg_escr_sync_rwsel <= '1'; + ppsg_escr_pps_unmask_int <= wrdata_reg(1); + ppsg_escr_pps_valid_int <= wrdata_reg(2); + ppsg_escr_tm_valid_int <= wrdata_reg(3); + ppsg_escr_sec_set_int <= wrdata_reg(4); + ppsg_escr_sec_set_int_delay <= wrdata_reg(4); + ppsg_escr_nsec_set_int <= wrdata_reg(5); + ppsg_escr_nsec_set_int_delay <= wrdata_reg(5); + end if; + if (wb_we_i = '0') then + rddata_reg(0) <= 'X'; + ppsg_escr_sync_lw <= '1'; + ppsg_escr_sync_lw_delay <= '1'; + ppsg_escr_sync_lw_read_in_progress <= '1'; + ppsg_escr_sync_rwsel <= '0'; + end if; + rddata_reg(1) <= ppsg_escr_pps_unmask_int; + rddata_reg(2) <= ppsg_escr_pps_valid_int; + rddata_reg(3) <= ppsg_escr_tm_valid_int; + rddata_reg(4) <= '0'; + rddata_reg(5) <= '0'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(5) <= '1'; + ack_in_progress <= '1'; + when others => +-- prevent the slave from hanging the bus on invalid address + ack_in_progress <= '1'; + ack_sreg(0) <= '1'; + end case; + end if; + end if; + end if; + end process; + + +-- Drive the data output bus + wb_dat_o <= rddata_reg; +-- Reset counter + process (refclk_i, rst_n_i) + begin + if (rst_n_i = '0') then + ppsg_cr_cnt_rst_o <= '0'; + ppsg_cr_cnt_rst_sync0 <= '0'; + ppsg_cr_cnt_rst_sync1 <= '0'; + ppsg_cr_cnt_rst_sync2 <= '0'; + elsif rising_edge(refclk_i) then + ppsg_cr_cnt_rst_sync0 <= ppsg_cr_cnt_rst_int; + ppsg_cr_cnt_rst_sync1 <= ppsg_cr_cnt_rst_sync0; + ppsg_cr_cnt_rst_sync2 <= ppsg_cr_cnt_rst_sync1; + ppsg_cr_cnt_rst_o <= ppsg_cr_cnt_rst_sync2 and (not ppsg_cr_cnt_rst_sync1); + end if; + end process; + + +-- Enable counter +-- synchronizer chain for field : Enable counter (type RW/RO, clk_sys_i <-> refclk_i) + process (refclk_i, rst_n_i) + begin + if (rst_n_i = '0') then + ppsg_cr_cnt_en_o <= '0'; + ppsg_cr_cnt_en_sync0 <= '0'; + ppsg_cr_cnt_en_sync1 <= '0'; + elsif rising_edge(refclk_i) then + ppsg_cr_cnt_en_sync0 <= ppsg_cr_cnt_en_int; + ppsg_cr_cnt_en_sync1 <= ppsg_cr_cnt_en_sync0; + ppsg_cr_cnt_en_o <= ppsg_cr_cnt_en_sync1; + end if; + end process; + + +-- Adjust offset +-- asynchronous BIT register : Adjust offset (type RW/WO, refclk_i <-> clk_sys_i) + process (refclk_i, rst_n_i) + begin + if (rst_n_i = '0') then + ppsg_cr_cnt_adj_lw_s0 <= '0'; + ppsg_cr_cnt_adj_lw_s1 <= '0'; + ppsg_cr_cnt_adj_lw_s2 <= '0'; + ppsg_cr_cnt_adj_int_read <= '0'; + ppsg_cr_cnt_adj_load_o <= '0'; + ppsg_cr_cnt_adj_o <= '0'; + elsif rising_edge(refclk_i) then + ppsg_cr_cnt_adj_lw_s0 <= ppsg_cr_cnt_adj_lw; + ppsg_cr_cnt_adj_lw_s1 <= ppsg_cr_cnt_adj_lw_s0; + ppsg_cr_cnt_adj_lw_s2 <= ppsg_cr_cnt_adj_lw_s1; + if ((ppsg_cr_cnt_adj_lw_s2 = '0') and (ppsg_cr_cnt_adj_lw_s1 = '1')) then + if (ppsg_cr_cnt_adj_rwsel = '1') then + ppsg_cr_cnt_adj_o <= ppsg_cr_cnt_adj_int_write; + ppsg_cr_cnt_adj_load_o <= '1'; + else + ppsg_cr_cnt_adj_load_o <= '0'; + ppsg_cr_cnt_adj_int_read <= ppsg_cr_cnt_adj_i; + end if; + else + ppsg_cr_cnt_adj_load_o <= '0'; + end if; + end if; + end process; + + +-- Set time + process (refclk_i, rst_n_i) + begin + if (rst_n_i = '0') then + ppsg_cr_cnt_set_o <= '0'; + ppsg_cr_cnt_set_sync0 <= '0'; + ppsg_cr_cnt_set_sync1 <= '0'; + ppsg_cr_cnt_set_sync2 <= '0'; + elsif rising_edge(refclk_i) then + ppsg_cr_cnt_set_sync0 <= ppsg_cr_cnt_set_int; + ppsg_cr_cnt_set_sync1 <= ppsg_cr_cnt_set_sync0; + ppsg_cr_cnt_set_sync2 <= ppsg_cr_cnt_set_sync1; + ppsg_cr_cnt_set_o <= ppsg_cr_cnt_set_sync2 and (not ppsg_cr_cnt_set_sync1); + end if; + end process; + + +-- PPS Pulse width +-- asynchronous std_logic_vector register : PPS Pulse width (type RW/RO, refclk_i <-> clk_sys_i) + process (refclk_i, rst_n_i) + begin + if (rst_n_i = '0') then + ppsg_cr_pwidth_swb_s0 <= '0'; + ppsg_cr_pwidth_swb_s1 <= '0'; + ppsg_cr_pwidth_swb_s2 <= '0'; + ppsg_cr_pwidth_o <= "0000000000000000000000000000"; + elsif rising_edge(refclk_i) then + ppsg_cr_pwidth_swb_s0 <= ppsg_cr_pwidth_swb; + ppsg_cr_pwidth_swb_s1 <= ppsg_cr_pwidth_swb_s0; + ppsg_cr_pwidth_swb_s2 <= ppsg_cr_pwidth_swb_s1; + if ((ppsg_cr_pwidth_swb_s2 = '0') and (ppsg_cr_pwidth_swb_s1 = '1')) then + ppsg_cr_pwidth_o <= ppsg_cr_pwidth_int; + end if; + end if; + end process; + + +-- Nanosecond counter +-- asynchronous std_logic_vector register : Nanosecond counter (type RO/WO, refclk_i <-> clk_sys_i) + process (refclk_i, rst_n_i) + begin + if (rst_n_i = '0') then + ppsg_cntr_nsec_lwb_s0 <= '0'; + ppsg_cntr_nsec_lwb_s1 <= '0'; + ppsg_cntr_nsec_lwb_s2 <= '0'; + ppsg_cntr_nsec_int <= "0000000000000000000000000000"; + elsif rising_edge(refclk_i) then + ppsg_cntr_nsec_lwb_s0 <= ppsg_cntr_nsec_lwb; + ppsg_cntr_nsec_lwb_s1 <= ppsg_cntr_nsec_lwb_s0; + ppsg_cntr_nsec_lwb_s2 <= ppsg_cntr_nsec_lwb_s1; + if ((ppsg_cntr_nsec_lwb_s1 = '1') and (ppsg_cntr_nsec_lwb_s2 = '0')) then + ppsg_cntr_nsec_int <= ppsg_cntr_nsec_i; + end if; + end if; + end process; + + +-- UTC Counter +-- asynchronous std_logic_vector register : UTC Counter (type RO/WO, refclk_i <-> clk_sys_i) + process (refclk_i, rst_n_i) + begin + if (rst_n_i = '0') then + ppsg_cntr_utclo_lwb_s0 <= '0'; + ppsg_cntr_utclo_lwb_s1 <= '0'; + ppsg_cntr_utclo_lwb_s2 <= '0'; + ppsg_cntr_utclo_int <= "00000000000000000000000000000000"; + elsif rising_edge(refclk_i) then + ppsg_cntr_utclo_lwb_s0 <= ppsg_cntr_utclo_lwb; + ppsg_cntr_utclo_lwb_s1 <= ppsg_cntr_utclo_lwb_s0; + ppsg_cntr_utclo_lwb_s2 <= ppsg_cntr_utclo_lwb_s1; + if ((ppsg_cntr_utclo_lwb_s1 = '1') and (ppsg_cntr_utclo_lwb_s2 = '0')) then + ppsg_cntr_utclo_int <= ppsg_cntr_utclo_i; + end if; + end if; + end process; + + +-- UTC Counter +-- asynchronous std_logic_vector register : UTC Counter (type RO/WO, refclk_i <-> clk_sys_i) + process (refclk_i, rst_n_i) + begin + if (rst_n_i = '0') then + ppsg_cntr_utchi_lwb_s0 <= '0'; + ppsg_cntr_utchi_lwb_s1 <= '0'; + ppsg_cntr_utchi_lwb_s2 <= '0'; + ppsg_cntr_utchi_int <= "00000000"; + elsif rising_edge(refclk_i) then + ppsg_cntr_utchi_lwb_s0 <= ppsg_cntr_utchi_lwb; + ppsg_cntr_utchi_lwb_s1 <= ppsg_cntr_utchi_lwb_s0; + ppsg_cntr_utchi_lwb_s2 <= ppsg_cntr_utchi_lwb_s1; + if ((ppsg_cntr_utchi_lwb_s1 = '1') and (ppsg_cntr_utchi_lwb_s2 = '0')) then + ppsg_cntr_utchi_int <= ppsg_cntr_utchi_i; + end if; + end if; + end process; + + +-- Nanosecond adjustment +-- pass-through field: Nanosecond adjustment in register: Nanosecond adjustment register + ppsg_adj_nsec_o <= wrdata_reg(27 downto 0); +-- UTC Counter adjustment +-- pass-through field: UTC Counter adjustment in register: UTC Adjustment register (least-significant part) + ppsg_adj_utclo_o <= wrdata_reg(31 downto 0); +-- UTC Counter adjustment +-- pass-through field: UTC Counter adjustment in register: UTC Adjustment register (most-significant part) + ppsg_adj_utchi_o <= wrdata_reg(7 downto 0); +-- Sync to external PPS input +-- asynchronous BIT register : Sync to external PPS input (type RW/WO, refclk_i <-> clk_sys_i) + process (refclk_i, rst_n_i) + begin + if (rst_n_i = '0') then + ppsg_escr_sync_lw_s0 <= '0'; + ppsg_escr_sync_lw_s1 <= '0'; + ppsg_escr_sync_lw_s2 <= '0'; + ppsg_escr_sync_int_read <= '0'; + ppsg_escr_sync_load_o <= '0'; + ppsg_escr_sync_o <= '0'; + elsif rising_edge(refclk_i) then + ppsg_escr_sync_lw_s0 <= ppsg_escr_sync_lw; + ppsg_escr_sync_lw_s1 <= ppsg_escr_sync_lw_s0; + ppsg_escr_sync_lw_s2 <= ppsg_escr_sync_lw_s1; + if ((ppsg_escr_sync_lw_s2 = '0') and (ppsg_escr_sync_lw_s1 = '1')) then + if (ppsg_escr_sync_rwsel = '1') then + ppsg_escr_sync_o <= ppsg_escr_sync_int_write; + ppsg_escr_sync_load_o <= '1'; + else + ppsg_escr_sync_load_o <= '0'; + ppsg_escr_sync_int_read <= ppsg_escr_sync_i; + end if; + else + ppsg_escr_sync_load_o <= '0'; + end if; + end if; + end process; + + +-- PPS unmask output +-- synchronizer chain for field : PPS unmask output (type RW/RO, clk_sys_i <-> refclk_i) + process (refclk_i, rst_n_i) + begin + if (rst_n_i = '0') then + ppsg_escr_pps_unmask_o <= '0'; + ppsg_escr_pps_unmask_sync0 <= '0'; + ppsg_escr_pps_unmask_sync1 <= '0'; + elsif rising_edge(refclk_i) then + ppsg_escr_pps_unmask_sync0 <= ppsg_escr_pps_unmask_int; + ppsg_escr_pps_unmask_sync1 <= ppsg_escr_pps_unmask_sync0; + ppsg_escr_pps_unmask_o <= ppsg_escr_pps_unmask_sync1; + end if; + end process; + + +-- PPS output valid +-- synchronizer chain for field : PPS output valid (type RW/RO, clk_sys_i <-> refclk_i) + process (refclk_i, rst_n_i) + begin + if (rst_n_i = '0') then + ppsg_escr_pps_valid_o <= '0'; + ppsg_escr_pps_valid_sync0 <= '0'; + ppsg_escr_pps_valid_sync1 <= '0'; + elsif rising_edge(refclk_i) then + ppsg_escr_pps_valid_sync0 <= ppsg_escr_pps_valid_int; + ppsg_escr_pps_valid_sync1 <= ppsg_escr_pps_valid_sync0; + ppsg_escr_pps_valid_o <= ppsg_escr_pps_valid_sync1; + end if; + end process; + + +-- Timecode output(UTC+cycles) valid +-- synchronizer chain for field : Timecode output(UTC+cycles) valid (type RW/RO, clk_sys_i <-> refclk_i) + process (refclk_i, rst_n_i) + begin + if (rst_n_i = '0') then + ppsg_escr_tm_valid_o <= '0'; + ppsg_escr_tm_valid_sync0 <= '0'; + ppsg_escr_tm_valid_sync1 <= '0'; + elsif rising_edge(refclk_i) then + ppsg_escr_tm_valid_sync0 <= ppsg_escr_tm_valid_int; + ppsg_escr_tm_valid_sync1 <= ppsg_escr_tm_valid_sync0; + ppsg_escr_tm_valid_o <= ppsg_escr_tm_valid_sync1; + end if; + end process; + + +-- Set seconds counter + process (refclk_i, rst_n_i) + begin + if (rst_n_i = '0') then + ppsg_escr_sec_set_o <= '0'; + ppsg_escr_sec_set_sync0 <= '0'; + ppsg_escr_sec_set_sync1 <= '0'; + ppsg_escr_sec_set_sync2 <= '0'; + elsif rising_edge(refclk_i) then + ppsg_escr_sec_set_sync0 <= ppsg_escr_sec_set_int; + ppsg_escr_sec_set_sync1 <= ppsg_escr_sec_set_sync0; + ppsg_escr_sec_set_sync2 <= ppsg_escr_sec_set_sync1; + ppsg_escr_sec_set_o <= ppsg_escr_sec_set_sync2 and (not ppsg_escr_sec_set_sync1); + end if; + end process; + + +-- Set nanoseconds counter + process (refclk_i, rst_n_i) + begin + if (rst_n_i = '0') then + ppsg_escr_nsec_set_o <= '0'; + ppsg_escr_nsec_set_sync0 <= '0'; + ppsg_escr_nsec_set_sync1 <= '0'; + ppsg_escr_nsec_set_sync2 <= '0'; + elsif rising_edge(refclk_i) then + ppsg_escr_nsec_set_sync0 <= ppsg_escr_nsec_set_int; + ppsg_escr_nsec_set_sync1 <= ppsg_escr_nsec_set_sync0; + ppsg_escr_nsec_set_sync2 <= ppsg_escr_nsec_set_sync1; + ppsg_escr_nsec_set_o <= ppsg_escr_nsec_set_sync2 and (not ppsg_escr_nsec_set_sync1); + end if; + end process; + + + rwaddr_reg <= wb_adr_i; + wb_stall_o <= (not ack_sreg(0)) and (wb_stb_i and wb_cyc_i); +-- ACK signal generation. Just pass the LSB of ACK counter. + wb_ack_o <= ack_sreg(0); +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/wr_pps_gen.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/wr_pps_gen.vhd new file mode 100644 index 000000000..f79dd0641 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/wr_pps_gen.vhd @@ -0,0 +1,518 @@ +------------------------------------------------------------------------------- +-- Title : PPS Generator & UTC Realtime clock +-- Project : WhiteRabbit Switch +------------------------------------------------------------------------------- +-- File : wr_pps_gen.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN (BE-CO-HT) +-- Created : 2010-09-02 +-- Last update: 2017-02-20 +-- Platform : FPGA-generics +-- Standard : VHDL +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2010-2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2010-09-02 1.0 twlostow Created +-- 2011-05-09 1.1 twlostow Added external PPS input +-- 2011-10-26 1.2 greg.d Added wb slave adapter +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.gencores_pkg.all; +use work.genram_pkg.all; +use work.wishbone_pkg.all; + +entity wr_pps_gen is + generic( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_ref_clock_rate : integer := 125000000; + g_ext_clock_rate : integer := 10000000; + g_with_ext_clock_input : boolean := false + ); + port ( + clk_ref_i : in std_logic; + clk_sys_i : in std_logic; + rst_ref_n_i : in std_logic; + rst_sys_n_i : in std_logic; + + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + + -- Link status indicator (used for fast masking of PPS output when link + -- goes down + link_ok_i : in std_logic; + + -- External PPS input. Warning! This signal is treated as synchronous to + -- the clk_ref_i (or the external 10 MHz reference) to prevent sync chain + -- delay uncertainities. Setup/hold times must be respected! + pps_in_i : in std_logic; + + -- Single-pulse PPS output for synchronizing endpoints to + pps_csync_o : out std_logic; + pps_out_o : out std_logic; + pps_led_o : out std_logic; + + pps_valid_o : out std_logic; + + tm_utc_o : out std_logic_vector(39 downto 0); + tm_cycles_o : out std_logic_vector(27 downto 0); + tm_time_valid_o : out std_logic + ); +end wr_pps_gen; + +architecture behavioral of wr_pps_gen is + + alias rst_n_i : std_logic is rst_sys_n_i; + + constant c_PERIOD : integer := g_ref_clock_rate; + + component pps_gen_wb is + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(2 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + refclk_i : in std_logic; + ppsg_cr_cnt_rst_o : out std_logic; + ppsg_cr_cnt_en_o : out std_logic; + ppsg_cr_cnt_adj_o : out std_logic; + ppsg_cr_cnt_adj_i : in std_logic; + ppsg_cr_cnt_adj_load_o : out std_logic; + ppsg_cr_cnt_set_o : out std_logic; + ppsg_cr_pwidth_o : out std_logic_vector(27 downto 0); + ppsg_cntr_nsec_i : in std_logic_vector(27 downto 0); + ppsg_cntr_utclo_i : in std_logic_vector(31 downto 0); + ppsg_cntr_utchi_i : in std_logic_vector(7 downto 0); + ppsg_adj_nsec_o : out std_logic_vector(27 downto 0); + ppsg_adj_nsec_wr_o : out std_logic; + ppsg_adj_utclo_o : out std_logic_vector(31 downto 0); + ppsg_adj_utclo_wr_o : out std_logic; + ppsg_adj_utchi_o : out std_logic_vector(7 downto 0); + ppsg_adj_utchi_wr_o : out std_logic; + ppsg_escr_sync_o : out std_logic; + ppsg_escr_sync_i : in std_logic; + ppsg_escr_sync_load_o : out std_logic; + ppsg_escr_pps_valid_o : out std_logic; + ppsg_escr_tm_valid_o : out std_logic; + ppsg_escr_sec_set_o : out std_logic; + ppsg_escr_nsec_set_o : out std_logic; + ppsg_escr_pps_unmask_o : out std_logic); + end component pps_gen_wb; + +-- Wisbone slave signals + signal ppsg_cr_cnt_rst : std_logic; + signal ppsg_cr_cnt_en : std_logic; + + signal ppsg_cr_cnt_adj_o : std_logic; + signal ppsg_cr_cnt_adj_i : std_logic; + signal ppsg_cr_cnt_adj_load : std_logic; + + signal ppsg_cr_cnt_set_p : std_logic; + signal ppsg_cr_pwidth : std_logic_vector(27 downto 0); + + signal ppsg_cntr_nsec : std_logic_vector(27 downto 0); + signal ppsg_cntr_utclo : std_logic_vector(31 downto 0); + signal ppsg_cntr_utchi : std_logic_vector(7 downto 0); + + signal ppsg_adj_nsec : std_logic_vector(27 downto 0); + signal ppsg_adj_nsec_wr : std_logic; + signal ppsg_adj_utclo : std_logic_vector(31 downto 0); + signal ppsg_adj_utclo_wr : std_logic; + signal ppsg_adj_utchi : std_logic_vector(7 downto 0); + signal ppsg_adj_utchi_wr : std_logic; + signal ppsg_escr_sync_load : std_logic; + signal ppsg_escr_sync_in : std_logic; + signal ppsg_escr_sync_out : std_logic; + signal ppsg_escr_sec_set : std_logic; + signal ppsg_escr_nsec_set : std_logic; + + signal ppsg_escr_pps_valid : std_logic; + signal ppsg_escr_tm_valid : std_logic; + signal ppsg_escr_pps_unmask : std_logic; + + signal cntr_nsec : unsigned (27 downto 0); + signal cntr_utc : unsigned (39 downto 0); + signal cntr_pps_ext : unsigned (24 downto 0); + + signal ns_overflow : std_logic; + signal ns_overflow_adv : std_logic; + signal cntr_adjust_p : std_logic; + + signal adj_nsec : unsigned(27 downto 0); + signal adj_utc : unsigned(39 downto 0); + + signal adjust_in_progress_nsec : std_logic; + + signal adjust_in_progress_utc : std_logic; + + signal width_cntr : unsigned(27 downto 0); + + signal sync_in_progress : std_logic; + signal ext_sync_p : std_logic; + + signal resized_addr : std_logic_vector(c_wishbone_address_width-1 downto 0); + signal wb_out : t_wishbone_slave_out; + signal wb_in : t_wishbone_slave_in; + + signal ns_overflow_2nd : std_logic; + signal pps_in_d0, pps_ext_d0 : std_logic; + + signal retime_counter : unsigned(4 downto 0); + signal pps_valid_int : std_logic; + + signal pps_out_int : std_logic; + signal pps_in_refclk : std_logic; + + + +begin -- behavioral + + + resized_addr(4 downto 0) <= wb_adr_i; + resized_addr(c_wishbone_address_width-1 downto 5) <= (others => '0'); + + U_Adapter : wb_slave_adapter + generic map ( + g_master_use_struct => true, + g_master_mode => CLASSIC, + g_master_granularity => WORD, + g_slave_use_struct => false, + g_slave_mode => g_interface_mode, + g_slave_granularity => g_address_granularity) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + master_i => wb_out, + master_o => wb_in, + sl_adr_i => resized_addr, + sl_dat_i => wb_dat_i, + sl_sel_i => wb_sel_i, + sl_cyc_i => wb_cyc_i, + sl_stb_i => wb_stb_i, + sl_we_i => wb_we_i, + sl_dat_o => wb_dat_o, + sl_ack_o => wb_ack_o, + sl_stall_o => wb_stall_o); + + + U_Sync_pps_refclk : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_ref_i, + rst_n_i => '1', + data_i => pps_in_i, + ppulse_o => pps_in_refclk); + + + ppsg_cntr_nsec <= std_logic_vector(cntr_nsec); + ppsg_cntr_utclo <= std_logic_vector(cntr_utc(31 downto 0)); + ppsg_cntr_utchi <= std_logic_vector(cntr_utc(39 downto 32)); + + + -- loads adjustment values into internal regsiters + p_wishbone_loads : process(clk_sys_i, rst_n_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + adj_nsec <= (others => '0'); + adj_utc <= (others => '0'); + else + if(ppsg_adj_utchi_wr = '1') then + adj_utc(39 downto 32) <= unsigned(ppsg_adj_utchi); + end if; + + if(ppsg_adj_utclo_wr = '1') then + adj_utc(31 downto 0) <= unsigned(ppsg_adj_utclo); + end if; + + if(ppsg_adj_nsec_wr = '1') then + adj_nsec <= unsigned(ppsg_adj_nsec); + end if; + end if; + end if; + end process; + + gen_without_external_clock_input : if(not g_with_ext_clock_input) generate + ext_sync_p <= '0'; + sync_in_progress <= '0'; + ppsg_escr_sync_in <= '0'; + end generate gen_without_external_clock_input; + + gen_with_external_clock_input : if(g_with_ext_clock_input) generate + + p_external_sync : process(clk_ref_i) + begin + if falling_edge(clk_ref_i) then + if(rst_ref_n_i = '0') then + sync_in_progress <= '0'; + ppsg_escr_sync_in <= '0'; + else + if(ppsg_escr_sync_load = '1') then + sync_in_progress <= ppsg_escr_sync_out; + ppsg_escr_sync_in <= '0'; + else + if(sync_in_progress = '1' and pps_in_refclk = '1') + then + ext_sync_p <= '1'; + sync_in_progress <= '0'; + ppsg_escr_sync_in <= '1'; + else + ext_sync_p <= '0'; + end if; + end if; + end if; + end if; + end process; + + end generate gen_with_external_clock_input; +-- Nanosecond counter. Counts from 0 to c_PERIOD-1 every clk_ref_i cycle. + + p_count_nsec : process(clk_ref_i) + begin + if rising_edge(clk_ref_i) then + if rst_ref_n_i = '0' or ppsg_cr_cnt_rst = '1' then + cntr_nsec <= (others => '0'); + ns_overflow <= '0'; + ns_overflow_adv <= '0'; + adjust_in_progress_nsec <= '0'; + + -- counter is enabled? + elsif(ppsg_cr_cnt_en = '1') then + + -- got ADJUST OFFSET command + if(cntr_adjust_p = '1') then + +-- start waiting for next counter overflow + adjust_in_progress_nsec <= '1'; + end if; + +-- got SET TIME command - load the counter with new value + if(ppsg_cr_cnt_set_p = '1' or ext_sync_p = '1' or ppsg_escr_nsec_set = '1') then + cntr_nsec <= adj_nsec; + ns_overflow <= '0'; + ns_overflow_adv <= '0'; + +-- got counter overflow: + elsif(cntr_nsec = to_unsigned(c_PERIOD-3, cntr_nsec'length)) then + ns_overflow <= '0'; + ns_overflow_adv <= '1'; + cntr_nsec <= cntr_nsec + 1; + elsif(cntr_nsec = to_unsigned(c_PERIOD-2, cntr_nsec'length)) then + ns_overflow <= '1'; + ns_overflow_adv <= '0'; + cntr_nsec <= cntr_nsec + 1; + elsif(cntr_nsec = to_unsigned(c_PERIOD-1, cntr_nsec'length)) then + ns_overflow <= '0'; + ns_overflow_adv <= '0'; + -- we're in the middle of offset adjustment - load the counter with + -- offset value instead of resetting it. This equals to subtracting the offset + -- but takes less logic. + if(adjust_in_progress_nsec = '1') then + cntr_nsec <= adj_nsec; + adjust_in_progress_nsec <= '0'; + else + -- normal counter reset. Generate overflow pulse. + cntr_nsec <= (others => '0'); + end if; + else + ns_overflow <= '0'; + ns_overflow_adv <= '0'; + cntr_nsec <= cntr_nsec + 1; + end if; + end if; + end if; + end process; + + + p_drive_pps_valid : process(clk_ref_i) + begin + if rising_edge(clk_ref_i) then + if rst_ref_n_i = '0' or ppsg_cr_cnt_rst = '1' then + pps_valid_int <= '0'; + ns_overflow_2nd <= '0'; + else + if(sync_in_progress = '1' or adjust_in_progress_nsec = '1' or adjust_in_progress_utc = '1') then + pps_valid_int <= '0'; + ns_overflow_2nd <= '0'; + elsif(adjust_in_progress_utc = '0' and adjust_in_progress_nsec = '0' and sync_in_progress = '0') then + + if(ns_overflow = '1') then + ns_overflow_2nd <= '1'; + if(ns_overflow_2nd = '1') then + pps_valid_int <= '1'; + end if; + end if; + end if; + end if; + end if; + end process; + + p_count_utc : process(clk_ref_i) + begin + if rising_edge(clk_ref_i) then + if rst_ref_n_i = '0' or ppsg_cr_cnt_rst = '1' then + cntr_utc <= (others => '0'); + adjust_in_progress_utc <= '0'; + elsif(ppsg_cr_cnt_en = '1') then + + if(ppsg_cr_cnt_set_p = '1' or ppsg_escr_sec_set = '1') then + cntr_utc <= adj_utc; + elsif(cntr_adjust_p = '1') then + adjust_in_progress_utc <= '1'; + + if(ns_overflow = '1') then + cntr_utc <= cntr_utc +1; + end if; + + elsif(adjust_in_progress_utc = '1' and ns_overflow = '1') then + cntr_utc <= cntr_utc + adj_utc + 1; + adjust_in_progress_utc <= '0'; + elsif(ns_overflow = '1') then + cntr_utc <= cntr_utc + 1; + end if; + end if; + end if; + end process; + +-- generate single-cycle PPS pulses for synchronizing endpoint TS counters + pps_csync_o <= ns_overflow; + + -- generates variable-width PPS pulses for PPS external output + p_gen_pps_out : process(clk_ref_i) + begin + if rising_edge(clk_ref_i) then + if rst_ref_n_i = '0' then + pps_out_int <= '0'; + pps_led_o <= '0'; + width_cntr <= (others => '0'); + else + + if(ns_overflow_adv = '1') then + pps_out_int <= ppsg_escr_pps_valid and + (link_ok_i or ppsg_escr_pps_unmask); + width_cntr <= unsigned(ppsg_cr_pwidth); + elsif(ns_overflow = '1') then + pps_led_o <= ppsg_escr_pps_valid; + else + if(width_cntr = to_unsigned(0, width_cntr'length)) then + pps_out_int <= '0'; + pps_led_o <= '0'; + else + width_cntr <= width_cntr -1; + end if; + end if; + end if; + end if; + + end process; + + process(clk_ref_i) + begin + if rising_edge(clk_ref_i) then + if rst_ref_n_i = '0' then + pps_out_o <= '0'; + else + pps_out_o <= pps_out_int; + end if; + end if; + end process; + + Uwb_slave : pps_gen_wb + port map ( + rst_n_i => rst_n_i, + clk_sys_i => clk_sys_i, + wb_adr_i => wb_in.adr(2 downto 0), + wb_dat_i => wb_in.dat, + wb_dat_o => wb_out.dat, + wb_cyc_i => wb_in.cyc, + wb_sel_i => wb_in.sel, + wb_stb_i => wb_in.stb, + wb_we_i => wb_in.we, + wb_ack_o => wb_out.ack, + refclk_i => clk_ref_i, + ppsg_cr_cnt_rst_o => ppsg_cr_cnt_rst, + ppsg_cr_cnt_en_o => ppsg_cr_cnt_en, + ppsg_cr_cnt_adj_o => ppsg_cr_cnt_adj_o, + ppsg_cr_cnt_adj_i => ppsg_cr_cnt_adj_i, + ppsg_cr_cnt_adj_load_o => ppsg_cr_cnt_adj_load, + ppsg_escr_sync_o => ppsg_escr_sync_out, + ppsg_escr_sync_i => ppsg_escr_sync_in, + ppsg_escr_sync_load_o => ppsg_escr_sync_load, + ppsg_cr_cnt_set_o => ppsg_cr_cnt_set_p, + ppsg_cr_pwidth_o => ppsg_cr_pwidth, + ppsg_cntr_nsec_i => ppsg_cntr_nsec, + ppsg_cntr_utclo_i => ppsg_cntr_utclo, + ppsg_cntr_utchi_i => ppsg_cntr_utchi, + ppsg_adj_nsec_o => ppsg_adj_nsec, + ppsg_adj_nsec_wr_o => ppsg_adj_nsec_wr, + ppsg_adj_utclo_o => ppsg_adj_utclo, + ppsg_adj_utclo_wr_o => ppsg_adj_utclo_wr, + ppsg_adj_utchi_o => ppsg_adj_utchi, + ppsg_adj_utchi_wr_o => ppsg_adj_utchi_wr, + ppsg_escr_pps_valid_o => ppsg_escr_pps_valid, + ppsg_escr_tm_valid_o => ppsg_escr_tm_valid, + ppsg_escr_sec_set_o => ppsg_escr_sec_set, + ppsg_escr_nsec_set_o => ppsg_escr_nsec_set, + ppsg_escr_pps_unmask_o => ppsg_escr_pps_unmask); + +-- drive unused signals + wb_out.rty <= '0'; + wb_out.stall <= '0'; + wb_out.int <= '0'; + wb_out.err <= '0'; + +-- start the adjustment upon write of 1 to CNT_ADJ bit + cntr_adjust_p <= ppsg_cr_cnt_adj_load and ppsg_cr_cnt_adj_o; + +-- drive the readout value of CNT_ADJ to 1 when the adjustment is over + ppsg_cr_cnt_adj_i <= pps_valid_int; + + pps_valid_o <= pps_valid_int; + + tm_utc_o <= std_logic_vector(cntr_utc); + tm_cycles_o <= std_logic_vector(cntr_nsec); + tm_time_valid_o <= ppsg_escr_tm_valid; + +end behavioral; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/xwr_pps_gen.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/xwr_pps_gen.vhd new file mode 100644 index 000000000..547a19ab9 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/xwr_pps_gen.vhd @@ -0,0 +1,162 @@ +------------------------------------------------------------------------------- +-- Title : PPS Generator & UTC Realtime clock +-- Project : WhiteRabbit Switch +------------------------------------------------------------------------------- +-- File : xwb_pps_gen.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN (BE-CO-HT) +-- Created : 2010-09-02 +-- Last update: 2017-02-20 +-- Platform : FPGA-generics +-- Standard : VHDL +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2010-2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2010-09-02 1.0 twlostow Created +-- 2011-05-09 1.1 twlostow Added external PPS input +-- 2011-10-26 1.2 greg.d xwb module +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.gencores_pkg.all; +use work.wishbone_pkg.all; + +entity xwr_pps_gen is + generic( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_ref_clock_rate : integer := 125000000; + g_ext_clock_rate : integer := 10000000; + g_with_ext_clock_input : boolean := FALSE + ); + port ( + clk_ref_i : in std_logic; + clk_sys_i : in std_logic; + rst_ref_n_i : in std_logic; + rst_sys_n_i : in std_logic; + + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + + link_ok_i : in std_logic; + + pps_in_i : in std_logic; + + -- Single-pulse PPS output for synchronizing endpoints to + pps_csync_o : out std_logic; + pps_out_o : out std_logic; + pps_led_o : out std_logic; + + pps_valid_o : out std_logic; + + tm_utc_o : out std_logic_vector(39 downto 0); + tm_cycles_o : out std_logic_vector(27 downto 0); + tm_time_valid_o : out std_logic + + ); +end xwr_pps_gen; + +architecture behavioral of xwr_pps_gen is + + component wr_pps_gen is + generic( + g_interface_mode : t_wishbone_interface_mode; + g_address_granularity : t_wishbone_address_granularity; + g_ref_clock_rate : integer; + g_ext_clock_rate : integer := 10000000; + g_with_ext_clock_input : boolean := FALSE + ); + port ( + clk_ref_i : in std_logic; + clk_sys_i : in std_logic; + rst_ref_n_i : in std_logic; + rst_sys_n_i : in std_logic; + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + link_ok_i : in std_logic; + pps_in_i : in std_logic; + pps_csync_o : out std_logic; + pps_out_o : out std_logic; + pps_led_o : out std_logic; + pps_valid_o : out std_logic; + tm_utc_o : out std_logic_vector(39 downto 0); + tm_cycles_o : out std_logic_vector(27 downto 0); + tm_time_valid_o : out std_logic + ); + end component; + +begin -- behavioral + + + WRAPPED_PPSGEN : wr_pps_gen + generic map( + g_interface_mode => g_interface_mode, + g_address_granularity => g_address_granularity, + g_ref_clock_rate => g_ref_clock_rate, + g_ext_clock_rate => g_ext_clock_rate, + g_with_ext_clock_input => g_with_ext_clock_input + ) + port map( + clk_ref_i => clk_ref_i, + clk_sys_i => clk_sys_i, + rst_ref_n_i => rst_ref_n_i, + rst_sys_n_i => rst_sys_n_i, + wb_adr_i => slave_i.adr(4 downto 0), + wb_dat_i => slave_i.dat, + wb_dat_o => slave_o.dat, + wb_cyc_i => slave_i.cyc, + wb_sel_i => slave_i.sel, + wb_stb_i => slave_i.stb, + wb_we_i => slave_i.we, + wb_ack_o => slave_o.ack, + wb_stall_o => slave_o.stall, + link_ok_i => link_ok_i, + pps_in_i => pps_in_i, + pps_csync_o => pps_csync_o, + pps_out_o => pps_out_o, + pps_led_o => pps_led_o, + pps_valid_o => pps_valid_o, + tm_utc_o => tm_utc_o, + tm_cycles_o => tm_cycles_o, + tm_time_valid_o => tm_time_valid_o + ); + + + slave_o.err <= '0'; + slave_o.rty <= '0'; + slave_o.int <= '0'; + +end behavioral; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/softpll_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/softpll_pkg.vhd new file mode 100644 index 000000000..0fdac142b --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/softpll_pkg.vhd @@ -0,0 +1,31 @@ +library ieee; + +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +package softpll_pkg is + + constant c_softpll_max_aux_clocks : integer := 8; + + type t_softpll_phase_detector_type is (CH_DDMTD, CH_BANGBANG); + + type t_softpll_channel_config_array is array(0 to c_softpll_max_aux_clocks-1) of t_softpll_phase_detector_type; + + constant c_softpll_default_channel_config : t_softpll_channel_config_array := (others => CH_DDMTD); + + -- External 10 MHz input divider parameters. + constant c_softpll_ext_div_ref : integer := 8; + constant c_softpll_ext_div_fb : integer := 50; + constant c_softpll_ext_log2_gating : integer := 13; + + constant c_softpll_out_status_off : std_logic_vector(3 downto 0) := "0000"; + constant c_softpll_out_status_locking : std_logic_vector(3 downto 0) := "0001"; + constant c_softpll_out_status_locked : std_logic_vector(3 downto 0) := "0010"; + constant c_softpll_out_status_aligning : std_logic_vector(3 downto 0) := "0011"; + constant c_softpll_out_status_holdover : std_logic_vector(3 downto 0) := "0100"; + +end package; + +package body softpll_pkg is + +end softpll_pkg; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_aligner.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_aligner.vhd new file mode 100644 index 000000000..941279c02 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_aligner.vhd @@ -0,0 +1,180 @@ +------------------------------------------------------------------------------- +-- Title : White Rabbit Softcore PLL (new generation) - SoftPLL-ng +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : spll_aligner.vhd +-- Author : Tomasz Włostowski +-- Company : CERN BE-CO-HT +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2012-2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.gencores_pkg.all; + +entity spll_aligner is + generic ( + g_counter_width : integer := 28; + g_ref_clock_rate : integer := 125000000; + g_in_clock_rate : integer := 10000000; + g_sample_rate : integer := 100 + ); + port ( + clk_sys_i : in std_logic; + clk_in_i : in std_logic; + clk_ref_i : in std_logic; + + rst_n_sys_i : in std_logic; + rst_n_ref_i : in std_logic; + rst_n_ext_i : in std_logic; + + pps_ext_a_i : in std_logic; + pps_csync_p1_i : in std_logic; + + sample_cref_o : out std_logic_vector(g_counter_width-1 downto 0); + sample_cin_o : out std_logic_vector(g_counter_width-1 downto 0); + sample_valid_o : out std_logic; + sample_ack_i : in std_logic + ); + +end spll_aligner; + +architecture rtl of spll_aligner is + + constant c_div_ticks : integer := g_ref_clock_rate / g_sample_rate; + + signal cnt_ref_bin, cnt_in_bin, cnt_in_bin_x : unsigned(g_counter_width-1 downto 0); + signal cnt_in_gray, cnt_in_gray_x, cnt_in_gray_xd : std_logic_vector(g_counter_width-1 downto 0); + + signal cnt_ref_div : unsigned(g_counter_width-1 downto 0); + signal pps_ext_p, pps_ext_d0 : std_logic; + signal ref_div_p : std_logic; + signal sample_ready_p : std_logic; +begin + + p_ref_counter : process(clk_ref_i) + begin + if rising_edge(clk_ref_i) then + if pps_csync_p1_i = '1' or rst_n_ref_i = '0' then + cnt_ref_bin <= to_unsigned(0, g_counter_width); + elsif(cnt_ref_bin = g_ref_clock_rate - 1) then + cnt_ref_bin <= (others => '0'); + else + cnt_ref_bin <= cnt_ref_bin + 1; + end if; + end if; + end process; + + p_samplerate_divider : process(clk_ref_i) + begin + if rising_edge(clk_ref_i) then + if pps_csync_p1_i = '1' or rst_n_ref_i = '0' then + ref_div_p <= '0'; + cnt_ref_div <= to_unsigned(0, g_counter_width); + elsif (cnt_ref_div = c_div_ticks - 2) then + ref_div_p <= '1'; + cnt_ref_div <= cnt_ref_div + 1; + elsif (cnt_ref_div = c_div_ticks - 1) then + ref_div_p <= '0'; + cnt_ref_div <= (others => '0'); + else + ref_div_p <= '0'; + cnt_ref_div <= cnt_ref_div + 1; + end if; + end if; + end process; + + p_delay_ext_pps : process(clk_in_i) + begin + if rising_edge(clk_in_i) then + pps_ext_d0 <= pps_ext_a_i; + end if; + end process; + + pps_ext_p <= not pps_ext_d0 and pps_ext_a_i; + + p_in_counter : process(clk_in_i) + begin + if rising_edge(clk_in_i) then + if pps_ext_p = '1' or rst_n_ext_i = '0' then + cnt_in_bin <= to_unsigned(2, g_counter_width); + elsif(cnt_in_bin = g_in_clock_rate - 1) then + cnt_in_bin <= (others => '0'); + else + cnt_in_bin <= cnt_in_bin + 1; + end if; + end if; + end process; + + p_in_bin2gray : process (clk_in_i) + begin + if rising_edge(clk_in_i) then + cnt_in_gray <= f_gray_encode (std_logic_vector(cnt_in_bin)); + end if; + end process; + + p_sample_difference : process(clk_ref_i) + begin + if rising_edge(clk_ref_i) then + cnt_in_gray_x <= cnt_in_gray; + cnt_in_gray_xd <= cnt_in_gray_x; + + if(ref_div_p = '1') then + sample_cin_o <= f_gray_decode(cnt_in_gray_xd, 1); + sample_cref_o <= std_logic_vector (cnt_ref_bin); + end if; + end if; + end process; + + U_sync_sampling : gc_pulse_synchronizer2 + port map ( + clk_in_i => clk_ref_i, + rst_in_n_i => rst_n_ref_i, + clk_out_i => clk_sys_i, + rst_out_n_i => rst_n_sys_i, + d_p_i => ref_div_p, + q_p_o => sample_ready_p); + + + p_gen_sample_valid : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_sys_i = '0' then + sample_valid_o <= '0'; + else + if sample_ready_p = '1' then + sample_valid_o <= '1'; + elsif sample_ack_i = '1' then + sample_valid_o <= '0'; + end if; + end if; + end if; + end process; + +end rtl; + + + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_wb_slave.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_wb_slave.vhd new file mode 100644 index 000000000..11a8687b7 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_wb_slave.vhd @@ -0,0 +1,939 @@ +--------------------------------------------------------------------------------------- +-- Title : Wishbone slave core for WR Softcore PLL +--------------------------------------------------------------------------------------- +-- File : spll_wb_slave.vhd +-- Author : auto-generated by wbgen2 from spll_wb_slave.wb +-- Created : Wed Aug 16 22:42:41 2017 +-- Standard : VHDL'87 +--------------------------------------------------------------------------------------- +-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE spll_wb_slave.wb +-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY! +--------------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.wbgen2_pkg.all; + +use work.spll_wbgen2_pkg.all; + + +entity spll_wb_slave is + generic ( + g_with_debug_fifo : integer := 1 ); + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(5 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + wb_int_o : out std_logic; + irq_tag_i : in std_logic; + regs_i : in t_spll_in_registers; + regs_o : out t_spll_out_registers + ); +end spll_wb_slave; + +architecture syn of spll_wb_slave is + +signal spll_eccr_ext_en_int : std_logic ; +signal spll_eccr_ext_ref_pllrst_int : std_logic ; +signal spll_occr_out_lock_int : std_logic_vector(7 downto 0); +signal spll_deglitch_thr_int : std_logic_vector(15 downto 0); +signal spll_dfr_host_rst_n : std_logic ; +signal spll_dfr_host_in_int : std_logic_vector(47 downto 0); +signal spll_dfr_host_out_int : std_logic_vector(47 downto 0); +signal spll_dfr_host_rdreq_int : std_logic ; +signal spll_dfr_host_rdreq_int_d0 : std_logic ; +signal spll_trr_rst_n : std_logic ; +signal spll_trr_in_int : std_logic_vector(31 downto 0); +signal spll_trr_out_int : std_logic_vector(31 downto 0); +signal spll_trr_rdreq_int : std_logic ; +signal spll_trr_rdreq_int_d0 : std_logic ; +signal eic_idr_int : std_logic_vector(0 downto 0); +signal eic_idr_write_int : std_logic ; +signal eic_ier_int : std_logic_vector(0 downto 0); +signal eic_ier_write_int : std_logic ; +signal eic_imr_int : std_logic_vector(0 downto 0); +signal eic_isr_clear_int : std_logic_vector(0 downto 0); +signal eic_isr_status_int : std_logic_vector(0 downto 0); +signal eic_irq_ack_int : std_logic_vector(0 downto 0); +signal eic_isr_write_int : std_logic ; +signal spll_dfr_host_full_int : std_logic ; +signal spll_dfr_host_empty_int : std_logic ; +signal spll_dfr_host_usedw_int : std_logic_vector(12 downto 0); +signal spll_trr_empty_int : std_logic ; +signal irq_inputs_vector_int : std_logic_vector(0 downto 0); +signal ack_sreg : std_logic_vector(9 downto 0); +signal rddata_reg : std_logic_vector(31 downto 0); +signal wrdata_reg : std_logic_vector(31 downto 0); +signal rwaddr_reg : std_logic_vector(5 downto 0); +signal ack_in_progress : std_logic ; + +begin +-- Some internal signals assignments + wrdata_reg <= wb_dat_i; +-- +-- Main register bank access process. + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + ack_sreg <= "0000000000"; + ack_in_progress <= '0'; + rddata_reg <= "00000000000000000000000000000000"; + spll_eccr_ext_en_int <= '0'; + spll_eccr_ext_ref_pllrst_int <= '0'; + regs_o.al_cr_valid_load_o <= '0'; + regs_o.f_dmtd_valid_load_o <= '0'; + regs_o.f_ref_valid_load_o <= '0'; + regs_o.f_ext_valid_load_o <= '0'; + spll_occr_out_lock_int <= "00000000"; + regs_o.rcer_load_o <= '0'; + regs_o.ocer_load_o <= '0'; + regs_o.dac_hpll_wr_o <= '0'; + regs_o.dac_main_value_wr_o <= '0'; + regs_o.dac_main_dac_sel_wr_o <= '0'; + spll_deglitch_thr_int <= "0000000000000000"; + regs_o.dfr_spll_value_wr_o <= '0'; + regs_o.dfr_spll_eos_wr_o <= '0'; + eic_idr_write_int <= '0'; + eic_ier_write_int <= '0'; + eic_isr_write_int <= '0'; + spll_dfr_host_rdreq_int <= '0'; + spll_trr_rdreq_int <= '0'; + elsif rising_edge(clk_sys_i) then +-- advance the ACK generator shift register + ack_sreg(8 downto 0) <= ack_sreg(9 downto 1); + ack_sreg(9) <= '0'; + if (ack_in_progress = '1') then + if (ack_sreg(0) = '1') then + regs_o.al_cr_valid_load_o <= '0'; + regs_o.f_dmtd_valid_load_o <= '0'; + regs_o.f_ref_valid_load_o <= '0'; + regs_o.f_ext_valid_load_o <= '0'; + regs_o.rcer_load_o <= '0'; + regs_o.ocer_load_o <= '0'; + regs_o.dac_hpll_wr_o <= '0'; + regs_o.dac_main_value_wr_o <= '0'; + regs_o.dac_main_dac_sel_wr_o <= '0'; + regs_o.dfr_spll_value_wr_o <= '0'; + regs_o.dfr_spll_eos_wr_o <= '0'; + eic_idr_write_int <= '0'; + eic_ier_write_int <= '0'; + eic_isr_write_int <= '0'; + ack_in_progress <= '0'; + else + regs_o.al_cr_valid_load_o <= '0'; + regs_o.f_dmtd_valid_load_o <= '0'; + regs_o.f_ref_valid_load_o <= '0'; + regs_o.f_ext_valid_load_o <= '0'; + regs_o.rcer_load_o <= '0'; + regs_o.ocer_load_o <= '0'; + regs_o.dac_hpll_wr_o <= '0'; + regs_o.dac_main_value_wr_o <= '0'; + regs_o.dac_main_dac_sel_wr_o <= '0'; + regs_o.dfr_spll_value_wr_o <= '0'; + regs_o.dfr_spll_eos_wr_o <= '0'; + end if; + else + if ((wb_cyc_i = '1') and (wb_stb_i = '1')) then + case rwaddr_reg(5 downto 0) is + when "000000" => + if (wb_we_i = '1') then + end if; + rddata_reg(13 downto 8) <= "000000"; + rddata_reg(21 downto 16) <= regs_i.csr_n_ref_i; + rddata_reg(26 downto 24) <= regs_i.csr_n_out_i; + rddata_reg(27) <= regs_i.csr_dbg_supported_i; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "000001" => + if (wb_we_i = '1') then + spll_eccr_ext_en_int <= wrdata_reg(0); + spll_eccr_ext_ref_pllrst_int <= wrdata_reg(31); + end if; + rddata_reg(0) <= spll_eccr_ext_en_int; + rddata_reg(1) <= regs_i.eccr_ext_supported_i; + rddata_reg(2) <= regs_i.eccr_ext_ref_locked_i; + rddata_reg(3) <= regs_i.eccr_ext_ref_stopped_i; + rddata_reg(31) <= spll_eccr_ext_ref_pllrst_int; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "000010" => + if (wb_we_i = '1') then + regs_o.al_cr_valid_load_o <= '1'; + end if; + rddata_reg(8 downto 0) <= regs_i.al_cr_valid_i; + rddata_reg(17 downto 9) <= regs_i.al_cr_required_i; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "000011" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.al_cref_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "000100" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.al_cin_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "000101" => + if (wb_we_i = '1') then + regs_o.f_dmtd_valid_load_o <= '1'; + end if; + rddata_reg(27 downto 0) <= regs_i.f_dmtd_freq_i; + rddata_reg(28) <= regs_i.f_dmtd_valid_i; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "000110" => + if (wb_we_i = '1') then + regs_o.f_ref_valid_load_o <= '1'; + end if; + rddata_reg(27 downto 0) <= regs_i.f_ref_freq_i; + rddata_reg(28) <= regs_i.f_ref_valid_i; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "000111" => + if (wb_we_i = '1') then + regs_o.f_ext_valid_load_o <= '1'; + end if; + rddata_reg(27 downto 0) <= regs_i.f_ext_freq_i; + rddata_reg(28) <= regs_i.f_ext_valid_i; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "001000" => + if (wb_we_i = '1') then + spll_occr_out_lock_int <= wrdata_reg(23 downto 16); + end if; + rddata_reg(15 downto 8) <= regs_i.occr_out_en_i; + rddata_reg(23 downto 16) <= spll_occr_out_lock_int; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "001001" => + if (wb_we_i = '1') then + regs_o.rcer_load_o <= '1'; + end if; + rddata_reg(31 downto 0) <= regs_i.rcer_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "001010" => + if (wb_we_i = '1') then + regs_o.ocer_load_o <= '1'; + end if; + rddata_reg(7 downto 0) <= regs_i.ocer_i; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "010000" => + if (wb_we_i = '1') then + regs_o.dac_hpll_wr_o <= '1'; + end if; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "010001" => + if (wb_we_i = '1') then + regs_o.dac_main_value_wr_o <= '1'; + regs_o.dac_main_dac_sel_wr_o <= '1'; + end if; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "010010" => + if (wb_we_i = '1') then + spll_deglitch_thr_int <= wrdata_reg(15 downto 0); + end if; + rddata_reg(15 downto 0) <= spll_deglitch_thr_int; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "010011" => + if (wb_we_i = '1') then + regs_o.dfr_spll_value_wr_o <= '1'; + regs_o.dfr_spll_eos_wr_o <= '1'; + end if; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "011000" => + if (wb_we_i = '1') then + eic_idr_write_int <= '1'; + end if; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "011001" => + if (wb_we_i = '1') then + eic_ier_write_int <= '1'; + end if; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "011010" => + if (wb_we_i = '1') then + end if; + rddata_reg(0) <= eic_imr_int(0); + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "011011" => + if (wb_we_i = '1') then + eic_isr_write_int <= '1'; + end if; + rddata_reg(0) <= eic_isr_status_int(0); + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "011100" => + if (wb_we_i = '1') then + end if; + if (spll_dfr_host_rdreq_int_d0 = '0') then + spll_dfr_host_rdreq_int <= not spll_dfr_host_rdreq_int; + else + rddata_reg(31 downto 0) <= spll_dfr_host_out_int(31 downto 0); + ack_in_progress <= '1'; + ack_sreg(0) <= '1'; + end if; + when "011101" => + if (wb_we_i = '1') then + end if; + rddata_reg(15 downto 0) <= spll_dfr_host_out_int(47 downto 32); + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "011110" => + if (wb_we_i = '1') then + end if; + rddata_reg(16) <= spll_dfr_host_full_int; + rddata_reg(17) <= spll_dfr_host_empty_int; + rddata_reg(12 downto 0) <= spll_dfr_host_usedw_int; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "011111" => + if (wb_we_i = '1') then + end if; + if (spll_trr_rdreq_int_d0 = '0') then + spll_trr_rdreq_int <= not spll_trr_rdreq_int; + else + rddata_reg(23 downto 0) <= spll_trr_out_int(23 downto 0); + rddata_reg(30 downto 24) <= spll_trr_out_int(30 downto 24); + rddata_reg(31) <= spll_trr_out_int(31); + ack_in_progress <= '1'; + ack_sreg(0) <= '1'; + end if; + when "100000" => + if (wb_we_i = '1') then + end if; + rddata_reg(17) <= spll_trr_empty_int; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when others => +-- prevent the slave from hanging the bus on invalid address + ack_in_progress <= '1'; + ack_sreg(0) <= '1'; + end case; + end if; + end if; + end if; + end process; + + +-- Drive the data output bus + wb_dat_o <= rddata_reg; +-- Number of reference channels (max: 32) +-- Number of output channels (max: 8) +-- Debug queue supported +-- Enable External Clock PLL + regs_o.eccr_ext_en_o <= spll_eccr_ext_en_int; +-- External Clock Input Available +-- External Clock Reference Present +-- EXT_REF_STOPPED +-- EXT_PLL_RST + regs_o.eccr_ext_ref_pllrst_o <= spll_eccr_ext_ref_pllrst_int; +-- Aligner sample valid/select on channel + regs_o.al_cr_valid_o <= wrdata_reg(8 downto 0); +-- Aligner required on channel +-- Aligner reference counter +-- Aligner reference counter +-- FREQ +-- VALID + regs_o.f_dmtd_valid_o <= wrdata_reg(28); +-- FREQ +-- VALID + regs_o.f_ref_valid_o <= wrdata_reg(28); +-- FREQ +-- VALID + regs_o.f_ext_valid_o <= wrdata_reg(28); +-- Output Channel HW enable flag +-- Output Channel locked flag + regs_o.occr_out_lock_o <= spll_occr_out_lock_int; +-- Reference Channel Enable + regs_o.rcer_o <= wrdata_reg(31 downto 0); +-- Output Channel Enable + regs_o.ocer_o <= wrdata_reg(7 downto 0); +-- DAC value +-- pass-through field: DAC value in register: Helper DAC Output + regs_o.dac_hpll_o <= wrdata_reg(15 downto 0); +-- DAC value +-- pass-through field: DAC value in register: Main DAC Output + regs_o.dac_main_value_o <= wrdata_reg(15 downto 0); +-- DAC select +-- pass-through field: DAC select in register: Main DAC Output + regs_o.dac_main_dac_sel_o <= wrdata_reg(19 downto 16); +-- Threshold + regs_o.deglitch_thr_o <= spll_deglitch_thr_int; +-- Debug Value +-- pass-through field: Debug Value in register: Debug FIFO Register - SPLL side + regs_o.dfr_spll_value_o <= wrdata_reg(30 downto 0); +-- End-of-Sample +-- pass-through field: End-of-Sample in register: Debug FIFO Register - SPLL side + regs_o.dfr_spll_eos_o <= wrdata_reg(31); + genblock_0: if (not (g_with_debug_fifo = 0)) generate +-- extra code for reg/fifo/mem: Debug FIFO Register - Host side + spll_dfr_host_in_int(31 downto 0) <= regs_i.dfr_host_value_i; + spll_dfr_host_in_int(47 downto 32) <= regs_i.dfr_host_seq_id_i; + spll_dfr_host_rst_n <= rst_n_i; + spll_dfr_host_INST : wbgen2_fifo_sync + generic map ( + g_size => 8192, + g_width => 48, + g_usedw_size => 13 + ) + port map ( + wr_req_i => regs_i.dfr_host_wr_req_i, + wr_full_o => regs_o.dfr_host_wr_full_o, + wr_empty_o => regs_o.dfr_host_wr_empty_o, + wr_usedw_o => regs_o.dfr_host_wr_usedw_o, + rd_full_o => spll_dfr_host_full_int, + rd_empty_o => spll_dfr_host_empty_int, + rd_usedw_o => spll_dfr_host_usedw_int, + rd_req_i => spll_dfr_host_rdreq_int, + rst_n_i => spll_dfr_host_rst_n, + clk_i => clk_sys_i, + wr_data_i => spll_dfr_host_in_int, + rd_data_o => spll_dfr_host_out_int + ); + + end generate genblock_0; + genblock_1: if (g_with_debug_fifo = 0) generate + regs_o.dfr_host_wr_full_o <= '0'; + regs_o.dfr_host_wr_empty_o <= '0'; + regs_o.dfr_host_wr_usedw_o <= "0000000000000"; + end generate genblock_1; +-- extra code for reg/fifo/mem: Tag Readout Register + spll_trr_in_int(23 downto 0) <= regs_i.trr_value_i; + spll_trr_in_int(30 downto 24) <= regs_i.trr_chan_id_i; + spll_trr_in_int(31) <= regs_i.trr_disc_i; + spll_trr_rst_n <= rst_n_i; + spll_trr_INST : wbgen2_fifo_sync + generic map ( + g_size => 32, + g_width => 32, + g_usedw_size => 5 + ) + port map ( + wr_req_i => regs_i.trr_wr_req_i, + wr_full_o => regs_o.trr_wr_full_o, + wr_empty_o => regs_o.trr_wr_empty_o, + rd_empty_o => spll_trr_empty_int, + rd_req_i => spll_trr_rdreq_int, + rst_n_i => spll_trr_rst_n, + clk_i => clk_sys_i, + wr_data_i => spll_trr_in_int, + rd_data_o => spll_trr_out_int + ); + +-- extra code for reg/fifo/mem: Interrupt disable register + eic_idr_int(0) <= wrdata_reg(0); +-- extra code for reg/fifo/mem: Interrupt enable register + eic_ier_int(0) <= wrdata_reg(0); +-- extra code for reg/fifo/mem: Interrupt status register + eic_isr_clear_int(0) <= wrdata_reg(0); +-- extra code for reg/fifo/mem: IRQ_CONTROLLER + eic_irq_controller_inst : wbgen2_eic + generic map ( + g_num_interrupts => 1, + g_irq00_mode => 3, + g_irq01_mode => 0, + g_irq02_mode => 0, + g_irq03_mode => 0, + g_irq04_mode => 0, + g_irq05_mode => 0, + g_irq06_mode => 0, + g_irq07_mode => 0, + g_irq08_mode => 0, + g_irq09_mode => 0, + g_irq0a_mode => 0, + g_irq0b_mode => 0, + g_irq0c_mode => 0, + g_irq0d_mode => 0, + g_irq0e_mode => 0, + g_irq0f_mode => 0, + g_irq10_mode => 0, + g_irq11_mode => 0, + g_irq12_mode => 0, + g_irq13_mode => 0, + g_irq14_mode => 0, + g_irq15_mode => 0, + g_irq16_mode => 0, + g_irq17_mode => 0, + g_irq18_mode => 0, + g_irq19_mode => 0, + g_irq1a_mode => 0, + g_irq1b_mode => 0, + g_irq1c_mode => 0, + g_irq1d_mode => 0, + g_irq1e_mode => 0, + g_irq1f_mode => 0 + ) + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + irq_i => irq_inputs_vector_int, + irq_ack_o => eic_irq_ack_int, + reg_imr_o => eic_imr_int, + reg_ier_i => eic_ier_int, + reg_ier_wr_stb_i => eic_ier_write_int, + reg_idr_i => eic_idr_int, + reg_idr_wr_stb_i => eic_idr_write_int, + reg_isr_o => eic_isr_status_int, + reg_isr_i => eic_isr_clear_int, + reg_isr_wr_stb_i => eic_isr_write_int, + wb_irq_o => wb_int_o + ); + + irq_inputs_vector_int(0) <= irq_tag_i; +-- extra code for reg/fifo/mem: FIFO 'Debug FIFO Register - Host side' data output register 0 + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + spll_dfr_host_rdreq_int_d0 <= '0'; + elsif rising_edge(clk_sys_i) then + spll_dfr_host_rdreq_int_d0 <= spll_dfr_host_rdreq_int; + end if; + end process; + + +-- extra code for reg/fifo/mem: FIFO 'Debug FIFO Register - Host side' data output register 1 +-- extra code for reg/fifo/mem: FIFO 'Tag Readout Register' data output register 0 + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + spll_trr_rdreq_int_d0 <= '0'; + elsif rising_edge(clk_sys_i) then + spll_trr_rdreq_int_d0 <= spll_trr_rdreq_int; + end if; + end process; + + + rwaddr_reg <= wb_adr_i; + wb_stall_o <= (not ack_sreg(0)) and (wb_stb_i and wb_cyc_i); +-- ACK signal generation. Just pass the LSB of ACK counter. + wb_ack_o <= ack_sreg(0); +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_wbgen2_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_wbgen2_pkg.vhd new file mode 100644 index 000000000..5550a3dd8 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_wbgen2_pkg.vhd @@ -0,0 +1,207 @@ +--------------------------------------------------------------------------------------- +-- Title : Wishbone slave core for WR Softcore PLL +--------------------------------------------------------------------------------------- +-- File : spll_wbgen2_pkg.vhd +-- Author : auto-generated by wbgen2 from spll_wb_slave.wb +-- Created : Wed Aug 16 22:42:41 2017 +-- Standard : VHDL'87 +--------------------------------------------------------------------------------------- +-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE spll_wb_slave.wb +-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY! +--------------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.wbgen2_pkg.all; + +package spll_wbgen2_pkg is + + + -- Input registers (user design -> WB slave) + + type t_spll_in_registers is record + csr_n_ref_i : std_logic_vector(5 downto 0); + csr_n_out_i : std_logic_vector(2 downto 0); + csr_dbg_supported_i : std_logic; + eccr_ext_supported_i : std_logic; + eccr_ext_ref_locked_i : std_logic; + eccr_ext_ref_stopped_i : std_logic; + al_cr_valid_i : std_logic_vector(8 downto 0); + al_cr_required_i : std_logic_vector(8 downto 0); + al_cref_i : std_logic_vector(31 downto 0); + al_cin_i : std_logic_vector(31 downto 0); + f_dmtd_freq_i : std_logic_vector(27 downto 0); + f_dmtd_valid_i : std_logic; + f_ref_freq_i : std_logic_vector(27 downto 0); + f_ref_valid_i : std_logic; + f_ext_freq_i : std_logic_vector(27 downto 0); + f_ext_valid_i : std_logic; + occr_out_en_i : std_logic_vector(7 downto 0); + rcer_i : std_logic_vector(31 downto 0); + ocer_i : std_logic_vector(7 downto 0); + dfr_host_wr_req_i : std_logic; + dfr_host_value_i : std_logic_vector(31 downto 0); + dfr_host_seq_id_i : std_logic_vector(15 downto 0); + trr_wr_req_i : std_logic; + trr_value_i : std_logic_vector(23 downto 0); + trr_chan_id_i : std_logic_vector(6 downto 0); + trr_disc_i : std_logic; + end record; + + constant c_spll_in_registers_init_value: t_spll_in_registers := ( + csr_n_ref_i => (others => '0'), + csr_n_out_i => (others => '0'), + csr_dbg_supported_i => '0', + eccr_ext_supported_i => '0', + eccr_ext_ref_locked_i => '0', + eccr_ext_ref_stopped_i => '0', + al_cr_valid_i => (others => '0'), + al_cr_required_i => (others => '0'), + al_cref_i => (others => '0'), + al_cin_i => (others => '0'), + f_dmtd_freq_i => (others => '0'), + f_dmtd_valid_i => '0', + f_ref_freq_i => (others => '0'), + f_ref_valid_i => '0', + f_ext_freq_i => (others => '0'), + f_ext_valid_i => '0', + occr_out_en_i => (others => '0'), + rcer_i => (others => '0'), + ocer_i => (others => '0'), + dfr_host_wr_req_i => '0', + dfr_host_value_i => (others => '0'), + dfr_host_seq_id_i => (others => '0'), + trr_wr_req_i => '0', + trr_value_i => (others => '0'), + trr_chan_id_i => (others => '0'), + trr_disc_i => '0' + ); + + -- Output registers (WB slave -> user design) + + type t_spll_out_registers is record + eccr_ext_en_o : std_logic; + eccr_ext_ref_pllrst_o : std_logic; + al_cr_valid_o : std_logic_vector(8 downto 0); + al_cr_valid_load_o : std_logic; + f_dmtd_valid_o : std_logic; + f_dmtd_valid_load_o : std_logic; + f_ref_valid_o : std_logic; + f_ref_valid_load_o : std_logic; + f_ext_valid_o : std_logic; + f_ext_valid_load_o : std_logic; + occr_out_lock_o : std_logic_vector(7 downto 0); + rcer_o : std_logic_vector(31 downto 0); + rcer_load_o : std_logic; + ocer_o : std_logic_vector(7 downto 0); + ocer_load_o : std_logic; + dac_hpll_o : std_logic_vector(15 downto 0); + dac_hpll_wr_o : std_logic; + dac_main_value_o : std_logic_vector(15 downto 0); + dac_main_value_wr_o : std_logic; + dac_main_dac_sel_o : std_logic_vector(3 downto 0); + dac_main_dac_sel_wr_o : std_logic; + deglitch_thr_o : std_logic_vector(15 downto 0); + dfr_spll_value_o : std_logic_vector(30 downto 0); + dfr_spll_value_wr_o : std_logic; + dfr_spll_eos_o : std_logic; + dfr_spll_eos_wr_o : std_logic; + dfr_host_wr_full_o : std_logic; + dfr_host_wr_empty_o : std_logic; + dfr_host_wr_usedw_o : std_logic_vector(12 downto 0); + trr_wr_full_o : std_logic; + trr_wr_empty_o : std_logic; + end record; + + constant c_spll_out_registers_init_value: t_spll_out_registers := ( + eccr_ext_en_o => '0', + eccr_ext_ref_pllrst_o => '0', + al_cr_valid_o => (others => '0'), + al_cr_valid_load_o => '0', + f_dmtd_valid_o => '0', + f_dmtd_valid_load_o => '0', + f_ref_valid_o => '0', + f_ref_valid_load_o => '0', + f_ext_valid_o => '0', + f_ext_valid_load_o => '0', + occr_out_lock_o => (others => '0'), + rcer_o => (others => '0'), + rcer_load_o => '0', + ocer_o => (others => '0'), + ocer_load_o => '0', + dac_hpll_o => (others => '0'), + dac_hpll_wr_o => '0', + dac_main_value_o => (others => '0'), + dac_main_value_wr_o => '0', + dac_main_dac_sel_o => (others => '0'), + dac_main_dac_sel_wr_o => '0', + deglitch_thr_o => (others => '0'), + dfr_spll_value_o => (others => '0'), + dfr_spll_value_wr_o => '0', + dfr_spll_eos_o => '0', + dfr_spll_eos_wr_o => '0', + dfr_host_wr_full_o => '0', + dfr_host_wr_empty_o => '0', + dfr_host_wr_usedw_o => (others => '0'), + trr_wr_full_o => '0', + trr_wr_empty_o => '0' + ); + function "or" (left, right: t_spll_in_registers) return t_spll_in_registers; + function f_x_to_zero (x:std_logic) return std_logic; + function f_x_to_zero (x:std_logic_vector) return std_logic_vector; +end package; + +package body spll_wbgen2_pkg is +function f_x_to_zero (x:std_logic) return std_logic is +begin +if x = '1' then +return '1'; +else +return '0'; +end if; +end function; +function f_x_to_zero (x:std_logic_vector) return std_logic_vector is +variable tmp: std_logic_vector(x'length-1 downto 0); +begin +for i in 0 to x'length-1 loop +if x(i) = '1' then +tmp(i):= '1'; +else +tmp(i):= '0'; +end if; +end loop; +return tmp; +end function; +function "or" (left, right: t_spll_in_registers) return t_spll_in_registers is +variable tmp: t_spll_in_registers; +begin +tmp.csr_n_ref_i := f_x_to_zero(left.csr_n_ref_i) or f_x_to_zero(right.csr_n_ref_i); +tmp.csr_n_out_i := f_x_to_zero(left.csr_n_out_i) or f_x_to_zero(right.csr_n_out_i); +tmp.csr_dbg_supported_i := f_x_to_zero(left.csr_dbg_supported_i) or f_x_to_zero(right.csr_dbg_supported_i); +tmp.eccr_ext_supported_i := f_x_to_zero(left.eccr_ext_supported_i) or f_x_to_zero(right.eccr_ext_supported_i); +tmp.eccr_ext_ref_locked_i := f_x_to_zero(left.eccr_ext_ref_locked_i) or f_x_to_zero(right.eccr_ext_ref_locked_i); +tmp.eccr_ext_ref_stopped_i := f_x_to_zero(left.eccr_ext_ref_stopped_i) or f_x_to_zero(right.eccr_ext_ref_stopped_i); +tmp.al_cr_valid_i := f_x_to_zero(left.al_cr_valid_i) or f_x_to_zero(right.al_cr_valid_i); +tmp.al_cr_required_i := f_x_to_zero(left.al_cr_required_i) or f_x_to_zero(right.al_cr_required_i); +tmp.al_cref_i := f_x_to_zero(left.al_cref_i) or f_x_to_zero(right.al_cref_i); +tmp.al_cin_i := f_x_to_zero(left.al_cin_i) or f_x_to_zero(right.al_cin_i); +tmp.f_dmtd_freq_i := f_x_to_zero(left.f_dmtd_freq_i) or f_x_to_zero(right.f_dmtd_freq_i); +tmp.f_dmtd_valid_i := f_x_to_zero(left.f_dmtd_valid_i) or f_x_to_zero(right.f_dmtd_valid_i); +tmp.f_ref_freq_i := f_x_to_zero(left.f_ref_freq_i) or f_x_to_zero(right.f_ref_freq_i); +tmp.f_ref_valid_i := f_x_to_zero(left.f_ref_valid_i) or f_x_to_zero(right.f_ref_valid_i); +tmp.f_ext_freq_i := f_x_to_zero(left.f_ext_freq_i) or f_x_to_zero(right.f_ext_freq_i); +tmp.f_ext_valid_i := f_x_to_zero(left.f_ext_valid_i) or f_x_to_zero(right.f_ext_valid_i); +tmp.occr_out_en_i := f_x_to_zero(left.occr_out_en_i) or f_x_to_zero(right.occr_out_en_i); +tmp.rcer_i := f_x_to_zero(left.rcer_i) or f_x_to_zero(right.rcer_i); +tmp.ocer_i := f_x_to_zero(left.ocer_i) or f_x_to_zero(right.ocer_i); +tmp.dfr_host_wr_req_i := f_x_to_zero(left.dfr_host_wr_req_i) or f_x_to_zero(right.dfr_host_wr_req_i); +tmp.dfr_host_value_i := f_x_to_zero(left.dfr_host_value_i) or f_x_to_zero(right.dfr_host_value_i); +tmp.dfr_host_seq_id_i := f_x_to_zero(left.dfr_host_seq_id_i) or f_x_to_zero(right.dfr_host_seq_id_i); +tmp.trr_wr_req_i := f_x_to_zero(left.trr_wr_req_i) or f_x_to_zero(right.trr_wr_req_i); +tmp.trr_value_i := f_x_to_zero(left.trr_value_i) or f_x_to_zero(right.trr_value_i); +tmp.trr_chan_id_i := f_x_to_zero(left.trr_chan_id_i) or f_x_to_zero(right.trr_chan_id_i); +tmp.trr_disc_i := f_x_to_zero(left.trr_disc_i) or f_x_to_zero(right.trr_disc_i); +return tmp; +end function; +end package body; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/wr_softpll_ng.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/wr_softpll_ng.vhd new file mode 100644 index 000000000..351b60f19 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/wr_softpll_ng.vhd @@ -0,0 +1,809 @@ +------------------------------------------------------------------------------- +-- Title : White Rabbit Softcore PLL (new generation) - SoftPLL-ng +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : wr_softpll_ng.vhd +-- Author : Tomasz Włostowski +-- Company : CERN BE-CO-HT +-- Created : 2011-01-29 +-- Last update: 2017-02-20 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: +-- +-- The hardware part of the revised softcore PLL. Incorporates a user-defined +-- number of DDMTD taggers, a FIFO allowing for sequential readout of +-- the phase tags and ports for driving oscillator tuning DACs. +-- The rest of the magic is done in the software. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2012-2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.gencores_pkg.all; +use work.wishbone_pkg.all; +use work.softpll_pkg.all; +use work.spll_wbgen2_pkg.all; + +entity wr_softpll_ng is + generic( +-- Number of bits in phase tags produced by DDMTDs. +-- Must be large enough to cover at least a hundred of DDMTD periods to ensure +-- correct operation of the SoftPLL software servo algorithm - that +-- means, for a typical DMTD frequency offset N=16384, there number of tag bits +-- should be log2(N) + 7 == 21. Note: the value must match the TAG_BITS constant +-- in spll_defs.h file! + g_tag_bits : integer; + +-- These two are obvious: + g_num_ref_inputs : integer := 1; + g_num_outputs : integer := 1; + +-- When true, an additional FIFO is instantiated, providing a realtime record +-- of user-selectable SoftPLL parameters (e.g. tag values, phase error, DAC drive). +-- These values can be read by "spll_dbg_proxy" daemon for further analysis. + g_with_debug_fifo : boolean := false; + +-- When true, an additional accumulating bang-bang phase detector is instantiated +-- for wideband locking of the local oscillator to an external stable reference +-- (e.g. GPSDO/Cesium 10 MHz) + g_with_ext_clock_input : boolean := false; + +-- When true, DDMTD inputs are reversed (so that the DDMTD offset clocks is +-- being sampled by the measured clock). This is functionally equivalent to +-- "direct" operation, but may improve FPGA timing/routability. + g_reverse_dmtds : boolean := true; + +-- Divides the DDMTD clock inputs by 2, removing the "CLOCK_DEDICATED_ROUTE" +-- errors under ISE tools, at the cost of bandwidth reduction. Advanced option +-- use with care. + g_divide_input_by_2 : boolean := false; + + g_ref_clock_rate : integer := 125000000; + g_ext_clock_rate : integer := 10000000; + + + g_interface_mode : t_wishbone_interface_mode := PIPELINED; + g_address_granularity : t_wishbone_address_granularity := WORD + ); + + port( + clk_sys_i : in std_logic; + rst_sys_n_i : in std_logic; + rst_ref_n_i : in std_logic; + rst_ext_n_i : in std_logic; + rst_dmtd_n_i : in std_logic; + +-- Reference inputs (i.e. the RX clocks recovered by the PHYs) + clk_ref_i : in std_logic_vector(g_num_ref_inputs-1 downto 0); + +-- Feedback clocks (i.e. the outputs of the main or auxillary oscillator) +-- Note: clk_fb_i(0) must be always connected to the primary board's oscillator +-- (i.e. the one driving the PTP and Ethernet PHY) to ensure correct operation +-- of the PTP core. + clk_fb_i : in std_logic_vector(g_num_outputs-1 downto 0); + +-- DMTD Offset clock + clk_dmtd_i : in std_logic; + +-- External reference clock (e.g. 10 MHz from Cesium/GPSDO). Used only if +-- g_with_ext_clock_input == true + clk_ext_i : in std_logic; + +-- External clock, multiplied to 125 MHz using the FPGA's PLL + clk_ext_mul_i : in std_logic; + clk_ext_mul_locked_i : in std_logic := '1'; + clk_ext_stopped_i : in std_logic := '0'; + clk_ext_rst_o : out std_logic; + +-- External clock sync/alignment singnal. SoftPLL will align clk_ext_i/clk_fb_i(0) +-- to match the edges immediately following the rising edge in sync_p_i. + pps_csync_p1_i : in std_logic; + pps_ext_a_i : in std_logic; + +-- DMTD oscillator drive + dac_dmtd_data_o : out std_logic_vector(15 downto 0); +-- When HI, load the data from dac_dmtd_data_o to the DAC. + dac_dmtd_load_o : out std_logic; + +-- Output channel DAC value + dac_out_data_o : out std_logic_vector(15 downto 0); +-- Output channel select (0 = Output channel 0, 1 == OC 1, etc...) + dac_out_sel_o : out std_logic_vector(3 downto 0); + dac_out_load_o : out std_logic; + +-- Output enable input: when HI, enables locking the output(s) +-- to the reference clock(s) + out_enable_i : in std_logic_vector(g_num_outputs-1 downto 0); +-- When HI, the respective clock output is locked. + out_locked_o : out std_logic_vector(g_num_outputs-1 downto 0); + + wb_adr_i : in std_logic_vector(c_wishbone_address_width-1 downto 0); + wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + wb_irq_o : out std_logic; + debug_o : out std_logic_vector(5 downto 0); + +-- Debug FIFO readout interrupt + dbg_fifo_irq_o : out std_logic + ); + +end wr_softpll_ng; + +architecture rtl of wr_softpll_ng is + + alias rst_n_i : std_logic is rst_sys_n_i; + + constant c_log2_replication : integer := 2; + constant c_use_multi_dmtd : boolean := false; + + constant c_DBG_FIFO_THRESHOLD : integer := 8180; + constant c_DBG_FIFO_COALESCE : integer := 100; + constant c_BB_ERROR_BITS : integer := 16; + + component dmtd_with_deglitcher + generic ( + g_counter_bits : natural; + g_divide_input_by_2 : boolean; + g_reverse : boolean); + port ( + rst_n_dmtdclk_i : in std_logic; + rst_n_sysclk_i : in std_logic; + clk_in_i : in std_logic; + clk_dmtd_i : in std_logic; + clk_sys_i : in std_logic; + resync_p_a_i : in std_logic := '0'; + resync_p_o : out std_logic; + resync_start_p_i : in std_logic; + resync_done_o : out std_logic; + shift_en_i : in std_logic; + shift_dir_i : in std_logic; + clk_dmtd_en_i : in std_logic := '1'; + deglitch_threshold_i : in std_logic_vector(15 downto 0); + dbg_dmtdout_o : out std_logic; + tag_o : out std_logic_vector(g_counter_bits-1 downto 0); + tag_stb_p1_o : out std_logic; + dbg_clk_d3_o : out std_logic); + end component; + + component spll_wb_slave + generic ( + g_with_debug_fifo : integer); + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(5 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + wb_int_o : out std_logic; + irq_tag_i : in std_logic; + regs_i : in t_spll_in_registers; + regs_o : out t_spll_out_registers); + end component; + + component spll_aligner + generic ( + g_counter_width : integer; + g_ref_clock_rate : integer; + g_in_clock_rate : integer; + g_sample_rate : integer); + port ( + clk_sys_i : in std_logic; + clk_in_i : in std_logic; + clk_ref_i : in std_logic; + rst_n_sys_i : in std_logic; + rst_n_ref_i : in std_logic; + rst_n_ext_i : in std_logic; + pps_ext_a_i : in std_logic; + pps_csync_p1_i : in std_logic; + sample_cref_o : out std_logic_vector(g_counter_width-1 downto 0); + sample_cin_o : out std_logic_vector(g_counter_width-1 downto 0); + sample_valid_o : out std_logic; + sample_ack_i : in std_logic); + end component; + function f_num_total_channels + return integer is + begin + if(g_with_ext_clock_input) then + return g_num_ref_inputs + g_num_outputs + 1; + else + return g_num_ref_inputs + g_num_outputs; + end if; + end f_num_total_channels; + + function f_pick ( + cond : boolean; + if_true : std_logic; + if_false : std_logic + ) return std_logic is + begin + if(cond) then + return if_true; + else + return if_false; + end if; + end f_pick; + + function f_pick ( + cond : boolean; + if_true : integer; + if_false : integer + ) return integer is + begin + if(cond) then + return if_true; + else + return if_false; + end if; + end f_pick; + + function resize(x : std_logic_vector; new_length : integer) return std_logic_vector is + variable tmp : std_logic_vector(new_length-1 downto 0); + begin + tmp := (others => '0'); + tmp (x'length-1 downto 0) := x; + return tmp; + end resize; + + type t_tag_array is array (0 to f_num_total_channels-1) of std_logic_vector(g_tag_bits-1 downto 0); + + type t_phase_error_array is array(0 to g_num_outputs-1) of std_logic_vector(c_BB_ERROR_BITS-1 downto 0); + + signal tags, tags_masked : t_tag_array; + signal tags_grant_p, tags_p, tags_req, tags_grant : std_logic_vector(f_num_total_channels-1 downto 0); + signal tag_muxed : std_logic_vector(g_tag_bits-1 downto 0); + signal tag_src, tag_src_pre : std_logic_vector (5 downto 0); + signal tag_valid, tag_valid_pre : std_logic; + + signal deglitch_thr_slv : std_logic_vector(15 downto 0); + + signal irq_tag : std_logic; + + signal rcer_int : std_logic_vector(g_num_ref_inputs-1 downto 0); + signal ocer_int : std_logic_vector(g_num_outputs-1 downto 0); + + signal wb_irq_out : std_logic; + + signal wb_out : t_wishbone_slave_out; + signal wb_in : t_wishbone_slave_in; + signal regs_in : t_SPLL_out_registers; + signal regs_out : t_SPLL_in_registers; + + -- Debug FIFO signals + signal dbg_fifo_almostfull : std_logic; + signal dbg_seq_id : unsigned(15 downto 0); + signal dbg_fifo_permit_write : std_logic; + signal dbg_fifo_irq : std_logic := '0'; + + -- Temporary vectors for DDMTD clock selection (straight/reversed) + signal dmtd_ref_clk_in, dmtd_ref_clk_dmtd : std_logic_vector(g_num_ref_inputs-1 downto 0); + signal rst_n_dmtd_ref_clk : std_logic_vector(g_num_ref_inputs-1 downto 0); + + signal dmtd_fb_clk_in, dmtd_fb_clk_dmtd : std_logic_vector(g_num_outputs-1 downto 0); + signal rst_n_dmtd_fb_clk : std_logic_vector(g_num_outputs-1 downto 0); + + signal ext_ref_present : std_logic; + signal fb_resync_out : std_logic_vector(g_num_outputs-1 downto 0); + + signal ref_resync_start_p : std_logic_vector(31 downto 0); + signal fb_resync_start_p : std_logic_vector(15 downto 0); + + type t_aligner_sample_array is array(0 to g_num_outputs) of std_logic_vector(27 downto 0); + + signal aligner_sample_valid, aligner_sample_ack : std_logic_vector(g_num_outputs downto 0); + signal aligner_sample_cref, aligner_sample_cin : t_aligner_sample_array; + +begin -- rtl + + U_Adapter : wb_slave_adapter + generic map( + g_master_use_struct => true, + g_master_mode => CLASSIC, + g_master_granularity => WORD, + g_slave_use_struct => false, + g_slave_mode => g_interface_mode, + g_slave_granularity => g_address_granularity) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + master_i => wb_out, + master_o => wb_in, + sl_adr_i => wb_adr_i, + sl_dat_i => wb_dat_i, + sl_sel_i => wb_sel_i, + sl_cyc_i => wb_cyc_i, + sl_stb_i => wb_stb_i, + sl_we_i => wb_we_i, + sl_dat_o => wb_dat_o, + sl_ack_o => wb_ack_o, + sl_stall_o => wb_stall_o); + + U_Meas_DMTD_Freq: gc_frequency_meter + generic map ( + g_with_internal_timebase => false, + g_clk_sys_freq => 1, + g_counter_bits => 28) + port map ( + clk_sys_i => clk_sys_i, + clk_in_i => clk_dmtd_i, + rst_n_i => rst_n_i, + pps_p1_i => pps_ext_a_i, + freq_o => regs_out.f_dmtd_freq_i, + freq_valid_o => open); -- fixme + + U_Meas_REF_Freq: gc_frequency_meter + generic map ( + g_with_internal_timebase => false, + g_clk_sys_freq => 1, + g_counter_bits => 28) + port map ( + clk_sys_i => clk_sys_i, + clk_in_i => clk_fb_i(0), + rst_n_i => rst_n_i, + pps_p1_i => pps_ext_a_i, + freq_o => regs_out.f_ref_freq_i, + freq_valid_o => open); -- fixme + + U_Meas_EXT_Freq: gc_frequency_meter + generic map ( + g_with_internal_timebase => false, + g_clk_sys_freq => 1, + g_counter_bits => 28) + port map ( + clk_sys_i => clk_sys_i, + clk_in_i => clk_ext_i, + rst_n_i => rst_n_i, + pps_p1_i => pps_ext_a_i, + freq_o => regs_out.f_ext_freq_i, + freq_valid_o => open); -- fixme + + + gen_ref_dmtds : for i in 0 to g_num_ref_inputs-1 generate + + DMTD_REF : dmtd_with_deglitcher + generic map ( + g_counter_bits => g_tag_bits, + g_divide_input_by_2 => g_divide_input_by_2, + g_reverse => g_reverse_dmtds) + port map ( + rst_n_dmtdclk_i => rst_dmtd_n_i, + rst_n_sysclk_i => rst_n_i, + + clk_dmtd_i => clk_dmtd_i, + clk_dmtd_en_i => '1', + + clk_sys_i => clk_sys_i, + clk_in_i => clk_ref_i(i), + + resync_done_o => open, + resync_start_p_i => '0', + resync_p_a_i => fb_resync_out(0), + resync_p_o => open, + + tag_o => tags(i), + tag_stb_p1_o => tags_p(i), + shift_en_i => '0', + shift_dir_i => '0', + deglitch_threshold_i => deglitch_thr_slv, + dbg_dmtdout_o => open); + + + end generate gen_ref_dmtds; + + gen_feedback_dmtds : for i in 0 to g_num_outputs-1 generate + + DMTD_FB : dmtd_with_deglitcher + generic map ( + g_counter_bits => g_tag_bits, + g_divide_input_by_2 => g_divide_input_by_2, + g_reverse => g_reverse_dmtds) + port map ( + rst_n_dmtdclk_i => rst_dmtd_n_i, + rst_n_sysclk_i => rst_n_i, + + clk_dmtd_i => clk_dmtd_i, + clk_dmtd_en_i => '1', + + clk_sys_i => clk_sys_i, + clk_in_i => clk_fb_i(i), + + resync_done_o => open, + resync_start_p_i => '0', + resync_p_a_i => fb_resync_out(0), + resync_p_o => fb_resync_out(i), + + tag_o => tags(i+g_num_ref_inputs), + tag_stb_p1_o => tags_p(i+g_num_ref_inputs), + shift_en_i => '0', + shift_dir_i => '0', + + deglitch_threshold_i => deglitch_thr_slv, + dbg_dmtdout_o => open, + dbg_clk_d3_o => open); --debug_o(4)); + + + end generate gen_feedback_dmtds; + + -- drive unused debug output + debug_o(4) <= '0'; + + gen_with_ext_clock_input : if(g_with_ext_clock_input) generate + + debug_o(0) <= fb_resync_out(0); + debug_o(1) <= tags_p(g_num_ref_inputs + g_num_outputs); + debug_o(2) <= tags_p(g_num_ref_inputs); + + U_DMTD_EXT : dmtd_with_deglitcher + generic map ( + g_counter_bits => g_tag_bits, + g_divide_input_by_2 => g_divide_input_by_2, + g_reverse => g_reverse_dmtds) + port map ( + rst_n_dmtdclk_i => rst_dmtd_n_i, + rst_n_sysclk_i => rst_n_i, + clk_dmtd_i => clk_dmtd_i, + clk_dmtd_en_i => '1', + + clk_sys_i => clk_sys_i, + clk_in_i => clk_ext_mul_i, + + resync_done_o => open, + resync_start_p_i => '0', + resync_p_a_i => fb_resync_out(0), + resync_p_o => open, + + tag_o => tags(g_num_ref_inputs + g_num_outputs), + tag_stb_p1_o => tags_p(g_num_ref_inputs + g_num_outputs), + shift_en_i => '0', + shift_dir_i => '0', + + deglitch_threshold_i => deglitch_thr_slv, + dbg_dmtdout_o => debug_o(3), + dbg_clk_d3_o => debug_o(5)); + + U_Aligner_EXT : spll_aligner + generic map ( + g_counter_width => 28, + g_ref_clock_rate => g_ref_clock_rate, + g_in_clock_rate => g_ext_clock_rate, + g_sample_rate => 100) + port map ( + clk_sys_i => clk_sys_i, + clk_in_i => clk_ext_i, + clk_ref_i => clk_fb_i(0), + rst_n_sys_i => rst_n_i, + rst_n_ref_i => rst_ref_n_i, + rst_n_ext_i => rst_ext_n_i, + pps_ext_a_i => pps_ext_a_i, + pps_csync_p1_i => pps_csync_p1_i, + sample_cref_o => aligner_sample_cref(g_num_outputs), + sample_cin_o => aligner_sample_cin(g_num_outputs), + sample_valid_o => aligner_sample_valid(g_num_outputs), + sample_ack_i => aligner_sample_ack(g_num_outputs) + ); + + aligner_sample_valid(g_num_outputs-1 downto 0) <= (others => '0'); + + aligner_sample_cref(0 to g_num_outputs-1) <= (others => (others => '0')); + aligner_sample_cin(0 to g_num_outputs-1) <= (others => (others => '0')); + + regs_out.eccr_ext_supported_i <= '1' when g_with_ext_clock_input else '0'; + regs_out.eccr_ext_ref_locked_i <= clk_ext_mul_locked_i; + regs_out.eccr_ext_ref_stopped_i <= clk_ext_stopped_i; + clk_ext_rst_o <= regs_in.eccr_ext_ref_pllrst_o; + end generate gen_with_ext_clock_input; + + + gen_without_ext_clock_input : if(not g_with_ext_clock_input) generate + aligner_sample_valid <= (others => '0'); + aligner_sample_cref <= (others => (others => '0')); + aligner_sample_cin <= (others => (others => '0')); + + regs_out.eccr_ext_supported_i <= '0'; + regs_out.eccr_ext_ref_locked_i <= '0'; + regs_out.eccr_ext_ref_stopped_i <= '0'; + clk_ext_rst_o <= '0'; + -- drive unused debug outputs + debug_o(0) <= '0'; + debug_o(1) <= '0'; + debug_o(2) <= '0'; + debug_o(3) <= '0'; + debug_o(5) <= '0'; + end generate gen_without_ext_clock_input; + + p_ack_aligner_samples: process(regs_in, aligner_sample_valid) + begin + regs_out.al_cr_valid_i <= (others => '0'); + for i in 0 to g_num_outputs loop + aligner_sample_ack(i) <= regs_in.al_cr_valid_o(i) and regs_in.al_cr_valid_load_o; + regs_out.al_cr_valid_i(i) <= aligner_sample_valid(i); + end loop; -- i in 0 to g_num_outputs + end process; + + p_mux_aligner_samples: process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + for i in 0 to g_num_outputs loop + if(aligner_sample_ack(i) = '1') then + regs_out.al_cref_i <= resize( aligner_sample_cref(i), 32 ); + regs_out.al_cin_i <= resize( aligner_sample_cin(i), 32 ); + end if; + end loop; + end if; + end process; + + + U_WB_SLAVE : spll_wb_slave + generic map ( + g_with_debug_fifo => f_pick(g_with_debug_fifo, 1, 0)) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + wb_adr_i => wb_in.adr(5 downto 0), + wb_dat_i => wb_in.dat, + wb_dat_o => wb_out.dat, + wb_cyc_i => wb_in.cyc, + wb_sel_i => wb_in.sel, + wb_stb_i => wb_in.stb, + wb_we_i => wb_in.we, + wb_ack_o => wb_out.ack, + wb_int_o => wb_irq_out, + wb_stall_o => open, + + regs_o => regs_in, + regs_i => regs_out, + + irq_tag_i => irq_tag); + + -- drive unused outputs + wb_out.err <= '0'; + wb_out.rty <= '0'; + wb_out.stall <= '0'; + wb_out.int <= '0'; + + p_ocer_rcer_regs : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + ocer_int <= (others => '0'); + rcer_int <= (others => '0'); + else + if(regs_in.ocer_load_o = '1') then + ocer_int <= regs_in.ocer_o(g_num_outputs -1 downto 0); + end if; + + if(regs_in.rcer_load_o = '1') then + rcer_int <= regs_in.rcer_o(g_num_ref_inputs -1 downto 0); + end if; + end if; + end if; + end process; + + regs_out.ocer_i(g_num_outputs-1 downto 0) <= ocer_int; + regs_out.ocer_i(7 downto g_num_outputs) <= (others => '0'); + + regs_out.rcer_i(g_num_ref_inputs-1 downto 0) <= rcer_int; + regs_out.rcer_i(31 downto g_num_ref_inputs) <= (others => '0'); + + p_latch_tags : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if(rst_n_i = '0') then + tags_req <= (others => '0'); + tags_grant <= (others => '0'); + else + f_rr_arbitrate(tags_req, tags_grant, tags_grant); + + for i in 0 to g_num_ref_inputs-1 loop + if(tags_p(i) = '1') then + tags_req(i) <= rcer_int(i); + elsif(tags_grant(i) = '1') then + tags_req(i) <= '0'; + end if; + end loop; -- i + + for i in 0 to g_num_outputs-1 loop + if(tags_p(i + g_num_ref_inputs) = '1') then + tags_req(i + g_num_ref_inputs) <= ocer_int(i); + elsif(tags_grant(i + g_num_ref_inputs) = '1') then + tags_req(i + g_num_ref_inputs) <= '0'; + end if; + end loop; -- i + + if(g_with_ext_clock_input and tags_p(f_num_total_channels-1) = '1') then + tags_req(f_num_total_channels-1) <= regs_in.eccr_ext_en_o; + elsif(g_with_ext_clock_input and tags_grant(f_num_total_channels-1) = '1') then + tags_req(f_num_total_channels-1) <= '0'; + end if; + + end if; + end if; + end process; + + tags_grant_p <= tags_req and tags_grant; + + p_mux_tags : process(clk_sys_i) + variable muxed : std_logic_vector(g_tag_bits-1 downto 0); + variable src_id : std_logic_vector(5 downto 0); + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + tag_muxed <= (others => '0'); + tag_src_pre <= (others => '0'); + tag_src <= (others => '0'); + tag_valid_pre <= '0'; + tag_valid <= '0'; + else + + for i in 0 to f_num_total_channels-1 loop + if(tags_grant_p(i) = '1') then + tags_masked(i) <= tags(i); + else + tags_masked(i) <= (others => '0'); + end if; + end loop; -- i + + if(unsigned(tags_grant_p) /= 0) then + tag_valid_pre <= '1'; + else + tag_valid_pre <= '0'; + end if; + + tag_valid <= tag_valid_pre; + + tag_src_pre <= f_onehot_decode(tags_grant_p, tag_src_pre'length); + tag_src <= tag_src_pre; + + muxed := (others => '0'); + + for i in 0 to f_num_total_channels-1 loop + muxed := muxed or tags_masked(i); + end loop; + + tag_muxed <= muxed; + + end if; + end if; + end process; + + regs_out.trr_wr_req_i <= tag_valid and not regs_in.trr_wr_full_o; + regs_out.trr_chan_id_i <= '0'&tag_src; + + regs_out.trr_value_i(g_tag_bits-1 downto 0) <= tag_muxed; + regs_out.trr_value_i(23 downto g_tag_bits) <= (others => '0'); + + regs_out.occr_out_en_i(g_num_outputs-1 downto 0) <= out_enable_i; + regs_out.occr_out_en_i(7 downto g_num_outputs) <= (others => '0'); + + out_locked_o <= regs_in.occr_out_lock_o(g_num_outputs-1 downto 0); + + irq_tag <= not regs_in.trr_wr_empty_o; + + deglitch_thr_slv <= regs_in.deglitch_thr_o; + + + + ----------------------------------------------------------------------------- + -- Debugging FIFO + ----------------------------------------------------------------------------- + + gen_with_debug_fifo : if(g_with_debug_fifo = true) generate + + dbg_fifo_almostfull <= '1' when unsigned(regs_in.dfr_host_wr_usedw_o) > 8180 else '0'; + + p_request_counter : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + dbg_seq_id <= (others => '0'); + else + if(regs_in.dfr_spll_eos_o = '1' and regs_in.dfr_spll_eos_wr_o = '1') then + dbg_seq_id <= dbg_seq_id + 1; + end if; + end if; + end if; + end process; + + p_fifo_permit_write : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + dbg_fifo_permit_write <= '1'; + else + if(dbg_fifo_almostfull = '0') then + dbg_fifo_permit_write <= '1'; + elsif(regs_in.dfr_spll_eos_o = '1' and regs_in.dfr_spll_eos_wr_o = '1') then + dbg_fifo_permit_write <= '0'; + end if; + end if; + end if; + end process; + + p_coalesce_fifo_irq : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + dbg_fifo_irq <= '0'; + else + if(unsigned(regs_in.dfr_host_wr_usedw_o) = 0) then + dbg_fifo_irq <= '0'; + elsif(unsigned(regs_in.dfr_host_wr_usedw_o) = c_DBG_FIFO_COALESCE) then + dbg_fifo_irq <= '1'; + end if; + end if; + end if; + end process; + + regs_out.dfr_host_wr_req_i <= regs_in.dfr_spll_value_wr_o and dbg_fifo_permit_write; + regs_out.dfr_host_value_i <= regs_in.dfr_spll_eos_o & regs_in.dfr_spll_value_o; + regs_out.dfr_host_seq_id_i <= std_logic_vector(dbg_seq_id); + + end generate gen_with_debug_fifo; + + gen_without_debug_fifo : if(g_with_debug_fifo = false) generate + dbg_fifo_irq <= '0'; + regs_out.dfr_host_wr_req_i <= '0'; + regs_out.dfr_host_value_i <= (others => '0'); + regs_out.dfr_host_seq_id_i <= (others => '0'); + end generate gen_without_debug_fifo; + + dbg_fifo_irq_o <= dbg_fifo_irq; + + ----------------------------------------------------------------------------- + -- CSR N_OUT/N_REF fields + ----------------------------------------------------------------------------- + + regs_out.csr_n_ref_i <= std_logic_vector(to_unsigned(g_num_ref_inputs, regs_out.csr_n_ref_i'length)); + regs_out.csr_n_out_i <= std_logic_vector(to_unsigned(g_num_outputs, regs_out.csr_n_out_i'length)); + + dac_dmtd_load_o <= regs_in.dac_hpll_wr_o; + dac_dmtd_data_o <= regs_in.dac_hpll_o; + + dac_out_data_o <= regs_in.dac_main_value_o; + dac_out_sel_o <= regs_in.dac_main_dac_sel_o; + dac_out_load_o <= regs_in.dac_main_value_wr_o; + + wb_irq_o <= wb_irq_out; + + regs_out.al_cr_required_i <= (others => '0'); + regs_out.csr_dbg_supported_i <= '0'; + regs_out.f_dmtd_valid_i <= '0'; + regs_out.f_ref_valid_i <= '0'; + regs_out.f_ext_valid_i <= '0'; + regs_out.trr_disc_i <= '0'; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/xwr_softpll_ng.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/xwr_softpll_ng.vhd new file mode 100644 index 000000000..ea3b6ab63 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/xwr_softpll_ng.vhd @@ -0,0 +1,244 @@ +------------------------------------------------------------------------------- +-- Title : White Rabbit Softcore PLL (new generation) - SoftPLL-ng +-- Project : White Rabbit +------------------------------------------------------------------------------- +-- File : xwr_softpll_ng.vhd +-- Author : Tomasz Włostowski +-- Company : CERN BE-CO-HT +-- Created : 2011-01-29 +-- Last update: 2017-02-20 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: +-- +-- Struct'ized version of wr_softpll_ng. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2012-2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.wishbone_pkg.all; +use work.softpll_pkg.all; + +entity xwr_softpll_ng is + generic( +-- Number of bits in phase tags produced by DDMTDs. +-- Must be large enough to cover at least a hundred of DDMTD periods to ensure +-- correct operation of the SoftPLL software servo algorithm - that +-- means, for a typical DMTD frequency offset N=16384, there number of tag bits +-- should be log2(N) + 7 == 21. Note: the value must match the TAG_BITS constant +-- in spll_defs.h file! + g_tag_bits : integer; + +-- These two are obvious: + g_num_ref_inputs : integer := 1; + g_num_outputs : integer := 1; + +-- When true, an additional FIFO is instantiated, providing a realtime record +-- of user-selectable SoftPLL parameters (e.g. tag values, phase error, DAC drive). +-- These values can be read by "spll_dbg_proxy" daemon for further analysis. + g_with_debug_fifo : boolean := false; + +-- When true, an additional accumulating bang-bang phase detector is instantiated +-- for wideband locking of the local oscillator to an external stable reference +-- (e.g. GPSDO/Cesium 10 MHz) + g_with_ext_clock_input : boolean := false; + +-- When true, DDMTD inputs are reverse (so that the DDMTD offset clocks is +-- being sampled by the measured clock). This is functionally equivalent to +-- "direct" operation, but may improve FPGA timing/routability. + g_reverse_dmtds : boolean := true; + +-- Divides the DDMTD clock inputs by 2, removing the "CLOCK_DEDICATED_ROUTE" +-- errors under ISE tools, at the cost of bandwidth reduction. Use with care. + g_divide_input_by_2 : boolean := false; + + g_ref_clock_rate : integer := 125000000; + g_ext_clock_rate : integer := 10000000; + + g_interface_mode : t_wishbone_interface_mode := PIPELINED; + g_address_granularity : t_wishbone_address_granularity := BYTE + ); + + port( + clk_sys_i : in std_logic; + rst_sys_n_i : in std_logic; + rst_ref_n_i : in std_logic; + rst_ext_n_i : in std_logic; + rst_dmtd_n_i : in std_logic; + +-- Reference inputs (i.e. the RX clocks recovered by the PHYs) + clk_ref_i : in std_logic_vector(g_num_ref_inputs-1 downto 0); +-- Feedback clocks (i.e. the outputs of the main or aux oscillator) + clk_fb_i : in std_logic_vector(g_num_outputs-1 downto 0); +-- DMTD Offset clock + clk_dmtd_i : in std_logic; + +-- External reference clock (e.g. 10 MHz from Cesium/GPSDO). Used only if +-- g_with_ext_clock_input == true + clk_ext_i : in std_logic; + +-- External clock, multiplied to 125 MHz using the FPGA's PLL + clk_ext_mul_i : in std_logic; + clk_ext_mul_locked_i : in std_logic := '1'; + clk_ext_stopped_i : in std_logic := '0'; + clk_ext_rst_o : out std_logic; + +-- External clock sync/alignment singnal. SoftPLL will clk_ext_i/clk_fb_i(0) +-- to match the edges immediately following the rising edge in sync_p_i. + pps_csync_p1_i : in std_logic; + + pps_ext_a_i : in std_logic; + +-- DMTD oscillator drive + dac_dmtd_data_o : out std_logic_vector(15 downto 0); + dac_dmtd_load_o : out std_logic; + +-- Output channel DAC value + dac_out_data_o : out std_logic_vector(15 downto 0); +-- Output channel select (0 = channel 0, etc. ) + dac_out_sel_o : out std_logic_vector(3 downto 0); + dac_out_load_o : out std_logic; + + out_enable_i : in std_logic_vector(g_num_outputs-1 downto 0); + out_locked_o : out std_logic_vector(g_num_outputs-1 downto 0); + + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + + debug_o : out std_logic_vector(5 downto 0); + dbg_fifo_irq_o : out std_logic + ); + +end xwr_softpll_ng; + +architecture wrapper of xwr_softpll_ng is + component wr_softpll_ng + generic ( + g_tag_bits : integer; + g_num_ref_inputs : integer; + g_num_outputs : integer; + g_with_debug_fifo : boolean; + g_with_ext_clock_input : boolean; + g_reverse_dmtds : boolean; + g_divide_input_by_2 : boolean; + g_ref_clock_rate : integer; + g_ext_clock_rate : integer; + g_interface_mode : t_wishbone_interface_mode; + g_address_granularity : t_wishbone_address_granularity); + port ( + clk_sys_i : in std_logic; + rst_sys_n_i : in std_logic; + rst_ref_n_i : in std_logic; + rst_ext_n_i : in std_logic; + rst_dmtd_n_i : in std_logic; + clk_ref_i : in std_logic_vector(g_num_ref_inputs-1 downto 0); + clk_fb_i : in std_logic_vector(g_num_outputs-1 downto 0); + clk_dmtd_i : in std_logic; + clk_ext_i : in std_logic; + clk_ext_mul_i : in std_logic; + clk_ext_mul_locked_i : in std_logic; + clk_ext_stopped_i : in std_logic; + clk_ext_rst_o : out std_logic; + pps_csync_p1_i : in std_logic; + pps_ext_a_i : in std_logic; + dac_dmtd_data_o : out std_logic_vector(15 downto 0); + dac_dmtd_load_o : out std_logic; + dac_out_data_o : out std_logic_vector(15 downto 0); + dac_out_sel_o : out std_logic_vector(3 downto 0); + dac_out_load_o : out std_logic; + out_enable_i : in std_logic_vector(g_num_outputs-1 downto 0); + out_locked_o : out std_logic_vector(g_num_outputs-1 downto 0); + + wb_adr_i : in std_logic_vector(c_wishbone_address_width-1 downto 0); + wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + wb_irq_o : out std_logic; + debug_o : out std_logic_vector(5 downto 0); + dbg_fifo_irq_o : out std_logic); + end component; + +begin -- behavioral + + U_Wrapped_Softpll : wr_softpll_ng + generic map ( + g_tag_bits => g_tag_bits, + g_interface_mode => g_interface_mode, + g_address_granularity => g_address_granularity, + g_num_ref_inputs => g_num_ref_inputs, + g_num_outputs => g_num_outputs, + g_with_debug_fifo => g_with_debug_fifo, + g_with_ext_clock_input => g_with_ext_clock_input, + g_reverse_dmtds => g_reverse_dmtds, + g_divide_input_by_2 => g_divide_input_by_2, + g_ref_clock_rate => g_ref_clock_rate, + g_ext_clock_rate => g_ext_clock_rate + ) + port map ( + clk_sys_i => clk_sys_i, + rst_sys_n_i => rst_sys_n_i, + rst_ref_n_i => rst_ref_n_i, + rst_ext_n_i => rst_ext_n_i, + rst_dmtd_n_i => rst_dmtd_n_i, + clk_ref_i => clk_ref_i, + clk_fb_i => clk_fb_i, + clk_dmtd_i => clk_dmtd_i, + clk_ext_i => clk_ext_i, + clk_ext_mul_i => clk_ext_mul_i, + clk_ext_mul_locked_i => clk_ext_mul_locked_i, + clk_ext_stopped_i => clk_ext_stopped_i, + clk_ext_rst_o => clk_ext_rst_o, + pps_csync_p1_i => pps_csync_p1_i, + pps_ext_a_i => pps_ext_a_i, + dac_dmtd_data_o => dac_dmtd_data_o, + dac_dmtd_load_o => dac_dmtd_load_o, + dac_out_data_o => dac_out_data_o, + dac_out_sel_o => dac_out_sel_o, + dac_out_load_o => dac_out_load_o, + out_enable_i => out_enable_i, + out_locked_o => out_locked_o, + wb_adr_i => slave_i.adr, + wb_dat_i => slave_i.dat, + wb_dat_o => slave_o.dat, + wb_cyc_i => slave_i.cyc, + wb_sel_i => slave_i.sel, + wb_stb_i => slave_i.stb, + wb_we_i => slave_i.we, + wb_ack_o => slave_o.ack, + wb_stall_o => slave_o.stall, + wb_irq_o => slave_o.int, + debug_o => debug_o, + dbg_fifo_irq_o => dbg_fifo_irq_o); + + slave_o.err <= '0'; + slave_o.rty <= '0'; + +end wrapper; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/dropping_buffer.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/dropping_buffer.vhd new file mode 100644 index 000000000..364ba970f --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/dropping_buffer.vhd @@ -0,0 +1,142 @@ +------------------------------------------------------------------------------- +-- Title : Dropping buffer +-- Project : WR Stramers +-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers +------------------------------------------------------------------------------- +-- File : dropping_buffer.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN +-- Platform : FPGA-generics +-- Standard : VHDL +-- Created : 2012-11-02 +------------------------------------------------------------------------------- +-- Description: +-- +-- A FIFO that can be cleared fast +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2012-2017 CERN/BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.genram_pkg.all; -- needed for f_log2_size() + +entity dropping_buffer is + generic ( + g_size : integer; + g_data_width : integer); + + port + ( + clk_i : in std_logic; + rst_n_i : in std_logic; + + d_i : in std_logic_vector(g_data_width-1 downto 0); + d_req_o : out std_logic; + d_drop_i : in std_logic; + d_accept_i : in std_logic; + d_valid_i : in std_logic; + + d_o : out std_logic_vector(g_data_width-1 downto 0); + d_valid_o : out std_logic; + d_req_i : in std_logic); + + +end dropping_buffer; + +architecture behavioral of dropping_buffer is + + type t_mem_array is array(0 to g_size-1) of std_logic_vector(g_data_width-1 downto 0); + subtype t_counter is unsigned(f_log2_size(g_size)-1 downto 0); + + signal wr_ptr, rd_ptr, boundary : t_counter := (others => '0'); + signal full, empty_comb : std_logic; + signal empty_reg : std_logic := '0'; + signal mem : t_mem_array; + +begin -- behavioral + + p_counters : process(clk_i) + begin + if rising_edge(clk_i) then + if rst_n_i = '0' then + wr_ptr <= (others => '0'); + rd_ptr <= (others => '0'); + boundary <= (others => '0'); + else + if(d_accept_i = '1') then + boundary <= wr_ptr; + end if; + + if(d_drop_i = '1') then + wr_ptr <= boundary; + elsif(d_valid_i = '1' and full = '0') then + wr_ptr <= wr_ptr + 1; + end if; + + if (d_req_i = '1' and empty_reg = '0' and empty_comb = '0') then + rd_ptr <= rd_ptr + 1; + end if; + end if; + end if; + end process; + + empty_comb <= '1' when (boundary = rd_ptr) else '0'; + full <= '1' when (wr_ptr + 1 = rd_ptr) else '0'; + + d_req_o <= not full; + + p_empty_reg : process(clk_i) + begin + if rising_edge(clk_i) then + if rst_n_i = '0' then + empty_reg <= '1'; + else + empty_reg <= empty_comb; + end if; + end if; + end process; + + + p_mem_read : process(clk_i) + begin + if rising_edge(clk_i) then + if(d_req_i = '1' and empty_reg = '0' and empty_comb = '0') then + d_o <= mem(to_integer(rd_ptr)); + d_valid_o <= '1'; + else + d_o <= (others => '0'); + d_valid_o <= '0'; + end if; + end if; + end process; + + p_mem_write : process(clk_i) + begin + if rising_edge(clk_i) then + if(d_valid_i = '1') then + mem(to_integer(wr_ptr)) <= d_i; + end if; + end if; + end process; + +end behavioral; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/escape_detector.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/escape_detector.vhd new file mode 100644 index 000000000..bdf112f7a --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/escape_detector.vhd @@ -0,0 +1,106 @@ +------------------------------------------------------------------------------- +-- Title : Escape detecotr +-- Project : WR Streamers +-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers +------------------------------------------------------------------------------- +-- File : escape_detector.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN +-- Platform : FPGA-generics +-- Standard : VHDL +-- Created : 2012-10-01 +------------------------------------------------------------------------------- +-- Description: +-- +-- It detects the "escape code" (e.g.0xCAFE) and removes it from the data stream. +-- See escape_inserter for details +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2012-2017 CERN/BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +entity escape_detector is + generic( + g_data_width : integer; + g_escape_code : std_logic_vector + ); + port( + clk_i : in std_logic; + rst_n_i : in std_logic; + + + d_i : in std_logic_vector(g_data_width-1 downto 0); + d_detect_enable_i : in std_logic; + d_valid_i : in std_logic; + d_req_o : out std_logic; + + d_o : out std_logic_vector(g_data_width-1 downto 0); + d_escape_o : out std_logic; + d_valid_o : out std_logic; + d_req_i : in std_logic + ); + +end escape_detector; + +architecture behavioral of escape_detector is + + type t_state is (IDLE, CHECK_ESCAPE); + + signal state : t_state; + signal is_escape_code : std_logic; + +begin -- behavioral + + d_req_o <= d_req_i; + + is_escape_code <= '1' when (d_detect_enable_i = '1' and state = IDLE and d_valid_i = '1' and d_i = g_escape_code) else '0'; + + d_o <= g_escape_code when (state = CHECK_ESCAPE and d_i = x"0000") else d_i; + + d_valid_o <= d_valid_i and not is_escape_code; + d_escape_o <= '1' when (state = CHECK_ESCAPE and d_i /= x"0000") else '0'; + + p_fsm : process(clk_i) + begin + if rising_edge(clk_i) then + if rst_n_i = '0' or d_detect_enable_i = '0' then + state <= IDLE; + else + case state is + when IDLE => + if(d_i = g_escape_code and d_valid_i = '1') then + state <= CHECK_ESCAPE; + + end if; + + when CHECK_ESCAPE => + if(d_valid_i = '1') then + state <= IDLE; + end if; + end case; + end if; + end if; + end process; + +end behavioral; + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/escape_inserter.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/escape_inserter.vhd new file mode 100644 index 000000000..e289a060d --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/escape_inserter.vhd @@ -0,0 +1,141 @@ +------------------------------------------------------------------------------- +-- Title : Escape insertion unit +-- Project : WR Streamers +-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers +------------------------------------------------------------------------------- +-- File : gc_escape_inserter.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2012-10-01 +-- Platform : FPGA-generic +-- Standard : VHDL '93 +------------------------------------------------------------------------------ +-- Description: Unit for inserting escaped codes in a continuous data stream. +-- Allows for insertion of easily distinguishable control codes, such as start- +-- or end-of-frame markers. Given an input tuple (E[d_escape_i], D[d_i]), the +-- output (d_o) is: +-- - D when E == 0 and D != g_escape_code +-- - g_escape_code followed by 0 when E == 0 and D == g_escape_code +-- - g_escape_code followed by D when E == 1. +-- Note: When E == 1, D must not be 0. +------------------------------------------------------------------------------ +-- +-- Copyright (c) 2012 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +entity gc_escape_inserter is + generic( + -- data path width + g_data_width : integer; + -- unique escape character (of g_data_width bits), must not be 0. + g_escape_code : std_logic_vector + ); + port( + clk_i : in std_logic; + rst_n_i : in std_logic; + + -- data input (unescaped) + d_i : in std_logic_vector(g_data_width-1 downto 0); + + -- when 1, escape insertion logic is enabled (i.e. if d_i == g_escape_code, + -- it's translated to g_escape_code followed by 0 instead of just being passed + -- through + d_insert_enable_i : in std_logic; + + -- when 1, d_i is treated as a escaped character + d_escape_i : in std_logic; + + -- when 1, d_i and d_escape_i contain valid character + d_valid_i : in std_logic; + + -- when 1, module can accept data in the following clock cycle. + d_req_o : out std_logic; + + -- data output + d_o : out std_logic_vector (g_data_width-1 downto 0); + + -- when 1, d_o contains a valid character + d_valid_o : out std_logic; + + -- when 1, d_o/d_valid_o may output a character in the next clock cycle. + d_req_i : in std_logic + ); + +end gc_escape_inserter; + +architecture behavioral of gc_escape_inserter is + + type t_state is (IDLE, INSERT_ESCAPE); + + signal d_prev : std_logic_vector(g_data_width-1 downto 0); + signal d_req_prev : std_logic; + signal state : t_state; + signal match_esc_code : std_logic; + +begin -- behavioral + + match_esc_code <= '1' when d_i = g_escape_code else '0'; + + -- stop the traffic if we need to insert an escaped sequence. This + -- can happen when + -- - the input character is an escape code (d_escape_i = '1') + -- - the input character is not to be escaped, but it's equal to g_escape_code + d_req_o <= d_req_i and not (d_valid_i and (d_escape_i or match_esc_code)); + + d_o <= d_prev when (state = INSERT_ESCAPE) else + d_i when d_escape_i = '0' else + g_escape_code; + + d_valid_o <= d_valid_i when (state = IDLE) else + d_req_prev; + + p_fsm : process(clk_i) + begin + if rising_edge(clk_i) then + if rst_n_i = '0' or d_insert_enable_i = '0' then + state <= IDLE; + d_req_prev <= '0'; + else + d_req_prev <= d_req_i; + case state is + when IDLE => + -- case 1: escape the escape character sent as normal character + if(d_i = g_escape_code and d_valid_i = '1' and d_escape_i = '0') then + state <= INSERT_ESCAPE; + d_prev <= x"0000"; + -- case 2: send an escaped character + elsif(d_escape_i = '1' and d_valid_i = '1') then + state <= INSERT_ESCAPE; + d_prev <= d_i; + end if; + + when INSERT_ESCAPE => + if(d_req_prev = '1') then + state <= IDLE; + end if; + end case; + end if; + end if; + end process; + +end behavioral; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/streamers_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/streamers_pkg.vhd new file mode 100644 index 000000000..b4fa5a289 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/streamers_pkg.vhd @@ -0,0 +1,332 @@ +------------------------------------------------------------------------------- +-- Title : Package for WR Steamers +-- Project : WR Streamers +-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers +------------------------------------------------------------------------------- +-- File : streamers_pkg.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN +-- Platform : FPGA-generics +-- Standard : VHDL +-- Created : 2012-10-01 +------------------------------------------------------------------------------- +-- Description: +-- +-- Package with declaration of streamer components, types and constants. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2012-2017 CERN/BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use work.wr_fabric_pkg.all; +use work.wrcore_pkg.all; +use work.wishbone_pkg.all; -- needed for t_wishbone_slave_in, etc + +package streamers_pkg is + type t_streamers_op_mode is (RX_ONLY, TX_ONLY, TX_AND_RX); + ----------------------------------------------------------------------------------------- + -- Transmission parameters (tx) + ----------------------------------------------------------------------------------------- + type t_tx_streamer_params is record + -- Width of data words on tx_data_i, must be multiple of 16 bits. + data_width : integer; + + -- Size of Tx buffer, in data words. + buffer_size : integer; + + -- Minimum number of data words in the TX buffer that will trigger transmission of an + -- Ethernet frame. It cannot be breater than g_tx_buffer_size; it is recommended that + -- g_tx_buffer_size = 2 * g_tx_threshold. + -- Note that in order for a frame to be transmitted, the buffer must conatain at + -- least one complete block.ransmitted, the buffer must conatain at + -- least one complete block. + threshold : integer; + + -- Maximum number of data words in a single Ethernet frame. It also defines + -- the maximum block size (since blocks can't be currently split across + -- multiple frames). It cannot be greater than g_tx_buffer_size + max_words_per_frame : integer; + + -- Transmission timeout (in clk_sys_i cycles), after which the contents + -- of TX buffer are sent regardless of the amount of data that is currently + -- stored in the buffer, so that data in the buffer does not get stuck. + timeout : integer; + + -- DO NOT USE unless you know what you are doing + -- legacy: the streamers initially used in Btrain did not check/insert the escape + -- code. This is justified if only one block of a known number of words is sent/expected + escape_code_disable : boolean; + end record; + + ----------------------------------------------------------------------------------------- + -- Reception parameters (rx) + ----------------------------------------------------------------------------------------- + type t_rx_streamer_params is record + -- Width of the data words, must be multiple of 16 bits. This value set to this generic + -- on the receviving device must be the same as the value of g_tx_data_width set on the + -- transmitting node. The g_rx_data_width and g_tx_data_width can be set to different + -- values in the same device (i.e. instantiation of xwr_transmission entity). It is the + -- responsibility of a network designer to make sure these parameters are properly set + -- in the network. + data_width : integer; + + -- Size of RX buffer, in data words. + buffer_size : integer; + + -- DO NOT USE unless you know what you are doing + -- legacy: the streamers that were initially used in Btrain did not check/insert + -- the escape code. This is justified if only one block of a known number of words is + -- sent/expected. + escape_code_disable : boolean; + + -- DO NOT USE unless you know what you are doing + -- legacy: the streamers that were initially used in Btrain accepted only a fixed + -- number of words, regardless of the frame content. If this generic is set to number + -- other than zero, only a fixed number of words is accepted. + -- In combination with the g_escape_code_disable generic set to TRUE, the behaviour of + -- the "Btrain streamers" can be recreated. + expected_words_number : integer; + end record; + + constant c_tx_streamer_params_defaut: t_tx_streamer_params :=( + data_width => 32, + buffer_size => 256, + threshold => 128, + max_words_per_frame => 256, + timeout => 1024, + escape_code_disable => FALSE); + + constant c_rx_streamer_params_defaut: t_rx_streamer_params :=( + data_width => 32, + buffer_size => 256, + escape_code_disable => FALSE, + expected_words_number => 0); + + type t_rx_streamer_cfg is record + -- Local MAC address. Leave at 0x0...0 when using with the WR MAC/Core, it will + -- insert its own source MAC. + mac_local : std_logic_vector(47 downto 0); + -- Remote MAC address, i.e. MAC of the device from which the data should be accpated + mac_remote : std_logic_vector(47 downto 0); + -- Ethertype of our frames. Default value is accepted by standard + -- configuration of the WR PTP Core + ethertype : std_logic_vector(15 downto 0); + -- 1: accept all broadcast packets + -- 0: accept only unicasts + accept_broadcasts : std_logic; + -- filtering of streamer frames on reception by source MAC address + -- 0: accept frames from any source + -- 1: accept frames only from the source MAC address defined in cfg_mac_remote_i + filter_remote : std_logic; + -- value in cycles of fixed-latency enforced on data + fixed_latency : std_logic_vector(27 downto 0); + end record; + + type t_tx_streamer_cfg is record + -- Local MAC address. Leave at 0x0...0 when using with the WR MAC/Core, it will + -- insert its own source MAC. + mac_local : std_logic_vector(47 downto 0); + -- Destination MAC address, i.e. MAC of a device to which data is streamed. + mac_target : std_logic_vector(47 downto 0); + -- Ethertype of our frames. Default value is accepted by standard + -- configuration of the WR PTP Core + ethertype : std_logic_vector(15 downto 0); + -- enable tagging with VLAN tags + qtag_ena : std_logic; + ---VLAN used to tag + qtag_vid : std_logic_vector(11 downto 0); + -- priority used to tag + qtag_prio : std_logic_vector(2 downto 0); + end record; + + constant c_rx_streamer_cfg_default: t_rx_streamer_cfg :=( + mac_local => x"000000000000", + mac_remote => x"000000000000", + ethertype => x"dbff", + accept_broadcasts => '1', + filter_remote => '0', + fixed_latency => x"0000000"); + + constant c_tx_streamer_cfg_default: t_tx_streamer_cfg :=( + mac_local => x"000000000000", + mac_target => x"ffffffffffff", + ethertype => x"dbff", + qtag_ena => '0', + qtag_vid => x"000", + qtag_prio => "000"); + + component xtx_streamer + generic ( + g_data_width : integer := 32; + g_tx_buffer_size : integer := 256; + g_tx_threshold : integer := 128; + g_tx_max_words_per_frame : integer := 256; + g_tx_timeout : integer := 1024; + g_escape_code_disable : boolean := FALSE; + g_simulation : integer := 0; + g_sim_startup_cnt : integer := 6250);--100us + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + src_i : in t_wrf_source_in; + src_o : out t_wrf_source_out; + clk_ref_i : in std_logic := '0'; + tm_time_valid_i : in std_logic := '0'; + tm_tai_i : in std_logic_vector(39 downto 0) := x"0000000000"; + tm_cycles_i : in std_logic_vector(27 downto 0) := x"0000000"; + link_ok_i : in std_logic := '1'; + tx_data_i : in std_logic_vector(g_data_width-1 downto 0); + tx_valid_i : in std_logic; + tx_dreq_o : out std_logic; + tx_last_p1_i : in std_logic := '1'; + tx_flush_p1_i : in std_logic := '0'; + tx_reset_seq_i : in std_logic := '0'; + tx_frame_p1_o : out std_logic; + tx_streamer_cfg_i: in t_tx_streamer_cfg := c_tx_streamer_cfg_default); + end component; + + component xrx_streamer + generic ( + g_data_width : integer := 32; + g_buffer_size : integer := 256; + g_escape_code_disable : boolean := FALSE; + g_expected_words_number : integer := 0); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + snk_i : in t_wrf_sink_in; + snk_o : out t_wrf_sink_out; + clk_ref_i : in std_logic := '0'; + tm_time_valid_i : in std_logic := '0'; + tm_tai_i : in std_logic_vector(39 downto 0) := x"0000000000"; + tm_cycles_i : in std_logic_vector(27 downto 0) := x"0000000"; + rx_first_p1_o : out std_logic; + rx_last_p1_o : out std_logic; + rx_data_o : out std_logic_vector(g_data_width-1 downto 0); + rx_valid_o : out std_logic; + rx_dreq_i : in std_logic; + rx_lost_p1_o : out std_logic := '0'; + rx_lost_blocks_p1_o : out std_logic := '0'; + rx_lost_frames_p1_o : out std_logic := '0'; + rx_lost_frames_cnt_o : out std_logic_vector(14 downto 0); + rx_latency_o : out std_logic_vector(27 downto 0); + rx_latency_valid_o : out std_logic; + rx_frame_p1_o : out std_logic; + rx_streamer_cfg_i : in t_rx_streamer_cfg := c_rx_streamer_cfg_default); + end component; + + constant c_WRS_STATS_ARR_SIZE_OUT : integer := 18; + constant c_WRS_STATS_ARR_SIZE_IN : integer := 1; + + component xrtx_streamers_stats is + generic ( + g_streamers_op_mode : t_streamers_op_mode := TX_AND_RX; + g_cnt_width : integer := 50; + g_acc_width : integer := 64 + ); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + sent_frame_i : in std_logic; + rcvd_frame_i : in std_logic; + lost_block_i : in std_logic; + lost_frame_i : in std_logic; + lost_frames_cnt_i : in std_logic_vector(14 downto 0); + rcvd_latency_i : in std_logic_vector(27 downto 0); + rcvd_latency_valid_i : in std_logic; + clk_ref_i : in std_logic; + tm_time_valid_i : in std_logic := '0'; + tm_tai_i : in std_logic_vector(39 downto 0) := x"0000000000"; + tm_cycles_i : in std_logic_vector(27 downto 0) := x"0000000"; + reset_stats_i : in std_logic; + snapshot_ena_i : in std_logic := '0'; + reset_time_tai_o : out std_logic_vector(39 downto 0) := x"0000000000"; + reset_time_cycles_o : out std_logic_vector(27 downto 0) := x"0000000"; + sent_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0); + rcvd_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0); + lost_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0); + lost_block_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0); + latency_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0); + latency_acc_overflow_o : out std_logic; + latency_acc_o : out std_logic_vector(g_acc_width-1 downto 0); + latency_max_o : out std_logic_vector(27 downto 0); + latency_min_o : out std_logic_vector(27 downto 0); + snmp_array_o : out t_generic_word_array(c_WRS_STATS_ARR_SIZE_OUT-1 downto 0); + snmp_array_i : in t_generic_word_array(c_WRS_STATS_ARR_SIZE_IN -1 downto 0) := (others => (others=>'0')) + ); + end component; + + constant c_WR_STREAMERS_ARR_SIZE_OUT : integer := c_WRS_STATS_ARR_SIZE_OUT+2; + constant c_WR_STREAMERS_ARR_SIZE_IN : integer := c_WRS_STATS_ARR_SIZE_IN; + + component xwr_streamers is + generic ( + g_streamers_op_mode : t_streamers_op_mode := TX_AND_RX; + --tx/rx + g_tx_streamer_params : t_tx_streamer_params := c_tx_streamer_params_defaut; + g_rx_streamer_params : t_rx_streamer_params := c_rx_streamer_params_defaut; + -- stats + g_stats_cnt_width : integer := 50; + g_stats_acc_width : integer := 64; + -- WB i/f + g_slave_mode : t_wishbone_interface_mode := CLASSIC; + g_slave_granularity : t_wishbone_address_granularity := BYTE; + g_simulation : integer := 0 + ); + + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + -- WR tx/rx interface + src_i : in t_wrf_source_in; + src_o : out t_wrf_source_out; + snk_i : in t_wrf_sink_in; + snk_o : out t_wrf_sink_out; + -- User tx interface + tx_data_i : in std_logic_vector(g_tx_streamer_params.data_width-1 downto 0); + tx_valid_i : in std_logic; + tx_dreq_o : out std_logic; + tx_last_p1_i : in std_logic := '1'; + tx_flush_p1_i : in std_logic := '0'; + -- User rx interface + rx_first_p1_o : out std_logic; + rx_last_p1_o : out std_logic; + rx_data_o : out std_logic_vector(g_rx_streamer_params.data_width-1 downto 0); + rx_valid_o : out std_logic; + rx_dreq_i : in std_logic; + -- WRC Timing interface, used for latency measurement + clk_ref_i : in std_logic := '0'; + tm_time_valid_i : in std_logic := '0'; + tm_tai_i : in std_logic_vector(39 downto 0) := x"0000000000"; + tm_cycles_i : in std_logic_vector(27 downto 0) := x"0000000"; + link_ok_i : in std_logic := '1'; + wb_slave_i : in t_wishbone_slave_in := cc_dummy_slave_in; + wb_slave_o : out t_wishbone_slave_out; + snmp_array_o : out t_generic_word_array(c_WR_STREAMERS_ARR_SIZE_OUT-1 downto 0); + snmp_array_i : in t_generic_word_array(c_WR_STREAMERS_ARR_SIZE_IN -1 downto 0); + -- Transmission (tx) configuration + tx_streamer_cfg_i : in t_tx_streamer_cfg := c_tx_streamer_cfg_default; + rx_streamer_cfg_i : in t_rx_streamer_cfg := c_rx_streamer_cfg_default + ); + end component; + +end streamers_pkg; \ No newline at end of file diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/streamers_priv_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/streamers_priv_pkg.vhd new file mode 100644 index 000000000..42c9aae8a --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/streamers_priv_pkg.vhd @@ -0,0 +1,201 @@ +------------------------------------------------------------------------------- +-- Title : WR Streamers Private Packages +-- Project : WR Streamers +-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers +------------------------------------------------------------------------------- +-- File : streamers_priv_pkg.vhd +-- Author : Maciej Lipinski +-- Company : CERN +-- Platform : FPGA-generics +-- Standard : VHDL +-- Created : 2017-04-20 +------------------------------------------------------------------------------- +-- Description: +-- Private package of streamers: all the components/functions used only by +-- streamers, not useful by users/applications +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2017 CERN/BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use IEEE.NUMERIC_STD.ALL; +use work.wishbone_pkg.all; -- needed for t_wishbone_slave_in, etc +use work.streamers_pkg.all; +use work.wr_streamers_wbgen2_pkg.all; + +package streamers_priv_pkg is + + component xtx_streamers_stats is + generic ( + g_cnt_width : integer := 32); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + sent_frame_i : in std_logic; + reset_stats_i : in std_logic; + snapshot_ena_i : in std_logic := '0'; + sent_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0)); + end component; + + component xrx_streamers_stats is + generic ( + g_cnt_width : integer := 32; + g_acc_width : integer := 64); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + rcvd_frame_i : in std_logic; + lost_block_i : in std_logic; + lost_frame_i : in std_logic; + lost_frames_cnt_i : in std_logic_vector(14 downto 0); + rcvd_latency_i : in std_logic_vector(27 downto 0); + rcvd_latency_valid_i : in std_logic; + tm_time_valid_i : in std_logic; + snapshot_ena_i : in std_logic := '0'; + reset_stats_i : in std_logic; + rcvd_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0); + lost_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0); + lost_block_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0); + latency_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0); + latency_acc_overflow_o : out std_logic; + latency_acc_o : out std_logic_vector(g_acc_width-1 downto 0); + latency_max_o : out std_logic_vector(27 downto 0); + latency_min_o : out std_logic_vector(27 downto 0)); + end component; + + component wr_streamers_wb is + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(5 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + regs_i : in t_wr_streamers_in_registers; + regs_o : out t_wr_streamers_out_registers + ); + end component; + + -- component from wr-core/modules/timing + component pulse_stamper + port ( + clk_ref_i : in std_logic; + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + pulse_a_i : in std_logic; + tm_time_valid_i : in std_logic; + tm_tai_i : in std_logic_vector(39 downto 0); + tm_cycles_i : in std_logic_vector(27 downto 0); + tag_tai_o : out std_logic_vector(39 downto 0); + tag_cycles_o : out std_logic_vector(27 downto 0); + tag_valid_o : out std_logic); + end component; + + type t_pipe is record + dvalid : std_logic; + dreq : std_logic; + sof : std_logic; + eof : std_logic; + error : std_logic; + data : std_logic_vector(15 downto 0); + addr : std_logic_vector(1 downto 0); + bytesel : std_logic; + end record; + + component escape_detector + generic ( + g_data_width : integer; + g_escape_code : std_logic_vector); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + d_i : in std_logic_vector(g_data_width-1 downto 0); + d_detect_enable_i : in std_logic; + d_valid_i : in std_logic; + d_req_o : out std_logic; + d_o : out std_logic_vector(g_data_width-1 downto 0); + d_escape_o : out std_logic; + d_valid_o : out std_logic; + d_req_i : in std_logic); + end component; + + component dropping_buffer + generic ( + g_size : integer; + g_data_width : integer); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + d_i : in std_logic_vector(g_data_width-1 downto 0); + d_req_o : out std_logic; + d_drop_i : in std_logic; + d_accept_i : in std_logic; + d_valid_i : in std_logic; + d_o : out std_logic_vector(g_data_width-1 downto 0); + d_valid_o : out std_logic; + d_req_i : in std_logic); + end component; + + component gc_escape_inserter + generic ( + g_data_width : integer; + g_escape_code : std_logic_vector); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + d_i : in std_logic_vector(g_data_width-1 downto 0); + d_insert_enable_i : in std_logic; + d_escape_i : in std_logic; + d_valid_i : in std_logic; + d_req_o : out std_logic; + d_o : out std_logic_vector (g_data_width-1 downto 0); + d_valid_o : out std_logic; + d_req_i : in std_logic); + end component; + -- functions + function f_dbg_word_starting_at_bit(data_in, start_bit : std_logic_vector; g_data_width: integer) return std_logic_vector; + +end streamers_priv_pkg; + +package body streamers_priv_pkg is + + function f_dbg_word_starting_at_bit(data_in, start_bit : std_logic_vector; g_data_width: integer) return std_logic_vector is + variable sb : integer := 0; + variable result : std_logic_vector(31 downto 0); + begin + sb := to_integer(unsigned(start_bit)); + for i in 0 to 31 loop + if (sb + i < g_data_width) then + result(i) := data_in(sb + i); + else + result(i) := '0'; + end if; + end loop; + return result; + end f_dbg_word_starting_at_bit; + +end streamers_priv_pkg; \ No newline at end of file diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/wr_streamers_wb.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/wr_streamers_wb.vhd new file mode 100644 index 000000000..c18bc310a --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/wr_streamers_wb.vhd @@ -0,0 +1,706 @@ +--------------------------------------------------------------------------------------- +-- Title : Wishbone slave core for WR Transmission control, status and debug +--------------------------------------------------------------------------------------- +-- File : wr_streamers_wb.vhd +-- Author : auto-generated by wbgen2 from wr_streamers_wb.wb +-- Created : Wed Aug 16 22:45:12 2017 +-- Version : 0x00000001 +-- Standard : VHDL'87 +--------------------------------------------------------------------------------------- +-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE wr_streamers_wb.wb +-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY! +--------------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.wr_streamers_wbgen2_pkg.all; + + +entity wr_streamers_wb is + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(5 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + regs_i : in t_wr_streamers_in_registers; + regs_o : out t_wr_streamers_out_registers + ); +end wr_streamers_wb; + +architecture syn of wr_streamers_wb is + +signal wr_streamers_ver_id_int : std_logic_vector(31 downto 0); +signal wr_streamers_sscr1_rst_stats_dly0 : std_logic ; +signal wr_streamers_sscr1_rst_stats_int : std_logic ; +signal wr_streamers_sscr1_rst_seq_id_dly0 : std_logic ; +signal wr_streamers_sscr1_rst_seq_id_int : std_logic ; +signal wr_streamers_sscr1_snapshot_stats_int : std_logic ; +signal wr_streamers_tx_cfg0_ethertype_int : std_logic_vector(15 downto 0); +signal wr_streamers_tx_cfg1_mac_local_lsb_int : std_logic_vector(31 downto 0); +signal wr_streamers_tx_cfg2_mac_local_msb_int : std_logic_vector(15 downto 0); +signal wr_streamers_tx_cfg3_mac_target_lsb_int : std_logic_vector(31 downto 0); +signal wr_streamers_tx_cfg4_mac_target_msb_int : std_logic_vector(15 downto 0); +signal wr_streamers_tx_cfg5_qtag_ena_int : std_logic ; +signal wr_streamers_tx_cfg5_qtag_vid_int : std_logic_vector(11 downto 0); +signal wr_streamers_tx_cfg5_qtag_prio_int : std_logic_vector(2 downto 0); +signal wr_streamers_rx_cfg0_ethertype_int : std_logic_vector(15 downto 0); +signal wr_streamers_rx_cfg0_accept_broadcast_int : std_logic ; +signal wr_streamers_rx_cfg0_filter_remote_int : std_logic ; +signal wr_streamers_rx_cfg1_mac_local_lsb_int : std_logic_vector(31 downto 0); +signal wr_streamers_rx_cfg2_mac_local_msb_int : std_logic_vector(15 downto 0); +signal wr_streamers_rx_cfg3_mac_remote_lsb_int : std_logic_vector(31 downto 0); +signal wr_streamers_rx_cfg4_mac_remote_msb_int : std_logic_vector(15 downto 0); +signal wr_streamers_rx_cfg5_fixed_latency_int : std_logic_vector(27 downto 0); +signal wr_streamers_cfg_or_tx_ethtype_int : std_logic ; +signal wr_streamers_cfg_or_tx_mac_loc_int : std_logic ; +signal wr_streamers_cfg_or_tx_mac_tar_int : std_logic ; +signal wr_streamers_cfg_or_tx_qtag_int : std_logic ; +signal wr_streamers_cfg_or_rx_ethertype_int : std_logic ; +signal wr_streamers_cfg_or_rx_mac_loc_int : std_logic ; +signal wr_streamers_cfg_or_rx_mac_rem_int : std_logic ; +signal wr_streamers_cfg_or_rx_acc_broadcast_int : std_logic ; +signal wr_streamers_cfg_or_rx_ftr_remote_int : std_logic ; +signal wr_streamers_cfg_or_rx_fix_lat_int : std_logic ; +signal wr_streamers_dbg_ctrl_mux_int : std_logic ; +signal wr_streamers_dbg_ctrl_start_byte_int : std_logic_vector(7 downto 0); +signal ack_sreg : std_logic_vector(9 downto 0); +signal rddata_reg : std_logic_vector(31 downto 0); +signal wrdata_reg : std_logic_vector(31 downto 0); +signal rwaddr_reg : std_logic_vector(5 downto 0); +signal ack_in_progress : std_logic ; + +begin +-- Some internal signals assignments + wrdata_reg <= wb_dat_i; +-- +-- Main register bank access process. + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + ack_sreg <= "0000000000"; + ack_in_progress <= '0'; + rddata_reg <= "00000000000000000000000000000000"; + wr_streamers_ver_id_int <= "00000000000000000000000000000001"; + wr_streamers_sscr1_rst_stats_int <= '0'; + wr_streamers_sscr1_rst_seq_id_int <= '0'; + wr_streamers_sscr1_snapshot_stats_int <= '0'; + wr_streamers_tx_cfg0_ethertype_int <= "0000000000000000"; + wr_streamers_tx_cfg1_mac_local_lsb_int <= "00000000000000000000000000000000"; + wr_streamers_tx_cfg2_mac_local_msb_int <= "0000000000000000"; + wr_streamers_tx_cfg3_mac_target_lsb_int <= "00000000000000000000000000000000"; + wr_streamers_tx_cfg4_mac_target_msb_int <= "0000000000000000"; + wr_streamers_tx_cfg5_qtag_ena_int <= '0'; + wr_streamers_tx_cfg5_qtag_vid_int <= "000000000000"; + wr_streamers_tx_cfg5_qtag_prio_int <= "000"; + wr_streamers_rx_cfg0_ethertype_int <= "0000000000000000"; + wr_streamers_rx_cfg0_accept_broadcast_int <= '0'; + wr_streamers_rx_cfg0_filter_remote_int <= '0'; + wr_streamers_rx_cfg1_mac_local_lsb_int <= "00000000000000000000000000000000"; + wr_streamers_rx_cfg2_mac_local_msb_int <= "0000000000000000"; + wr_streamers_rx_cfg3_mac_remote_lsb_int <= "00000000000000000000000000000000"; + wr_streamers_rx_cfg4_mac_remote_msb_int <= "0000000000000000"; + wr_streamers_rx_cfg5_fixed_latency_int <= "0000000000000000000000000000"; + wr_streamers_cfg_or_tx_ethtype_int <= '0'; + wr_streamers_cfg_or_tx_mac_loc_int <= '0'; + wr_streamers_cfg_or_tx_mac_tar_int <= '0'; + wr_streamers_cfg_or_tx_qtag_int <= '0'; + wr_streamers_cfg_or_rx_ethertype_int <= '0'; + wr_streamers_cfg_or_rx_mac_loc_int <= '0'; + wr_streamers_cfg_or_rx_mac_rem_int <= '0'; + wr_streamers_cfg_or_rx_acc_broadcast_int <= '0'; + wr_streamers_cfg_or_rx_ftr_remote_int <= '0'; + wr_streamers_cfg_or_rx_fix_lat_int <= '0'; + wr_streamers_dbg_ctrl_mux_int <= '0'; + wr_streamers_dbg_ctrl_start_byte_int <= "00000000"; + elsif rising_edge(clk_sys_i) then +-- advance the ACK generator shift register + ack_sreg(8 downto 0) <= ack_sreg(9 downto 1); + ack_sreg(9) <= '0'; + if (ack_in_progress = '1') then + if (ack_sreg(0) = '1') then + wr_streamers_sscr1_rst_stats_int <= '0'; + wr_streamers_sscr1_rst_seq_id_int <= '0'; + ack_in_progress <= '0'; + else + end if; + else + if ((wb_cyc_i = '1') and (wb_stb_i = '1')) then + case rwaddr_reg(5 downto 0) is + when "000000" => + if (wb_we_i = '1') then + wr_streamers_ver_id_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= wr_streamers_ver_id_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "000001" => + if (wb_we_i = '1') then + wr_streamers_sscr1_rst_stats_int <= wrdata_reg(0); + wr_streamers_sscr1_rst_seq_id_int <= wrdata_reg(1); + wr_streamers_sscr1_snapshot_stats_int <= wrdata_reg(2); + end if; + rddata_reg(0) <= '0'; + rddata_reg(1) <= '0'; + rddata_reg(2) <= wr_streamers_sscr1_snapshot_stats_int; + rddata_reg(3) <= regs_i.sscr1_rx_latency_acc_overflow_i; + rddata_reg(31 downto 4) <= regs_i.sscr1_rst_ts_cyc_i; + ack_sreg(2) <= '1'; + ack_in_progress <= '1'; + when "000010" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.sscr2_rst_ts_tai_lsb_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "000011" => + if (wb_we_i = '1') then + end if; + rddata_reg(7 downto 0) <= regs_i.sscr3_rst_ts_tai_msb_i; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "000100" => + if (wb_we_i = '1') then + end if; + rddata_reg(27 downto 0) <= regs_i.rx_stat0_rx_latency_max_i; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "000101" => + if (wb_we_i = '1') then + end if; + rddata_reg(27 downto 0) <= regs_i.rx_stat1_rx_latency_min_i; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "000110" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.tx_stat2_tx_sent_cnt_lsb_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "000111" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.tx_stat3_tx_sent_cnt_msb_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "001000" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.rx_stat4_rx_rcvd_cnt_lsb_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "001001" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.rx_stat5_rx_rcvd_cnt_msb_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "001010" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.rx_stat6_rx_loss_cnt_lsb_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "001011" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.rx_stat7_rx_loss_cnt_msb_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "001100" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.rx_stat8_rx_lost_block_cnt_lsb_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "001101" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.rx_stat9_rx_lost_block_cnt_msb_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "001110" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.rx_stat10_rx_latency_acc_lsb_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "001111" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.rx_stat11_rx_latency_acc_msb_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "010000" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.rx_stat12_rx_latency_acc_cnt_lsb_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "010001" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.rx_stat13_rx_latency_acc_cnt_msb_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "010010" => + if (wb_we_i = '1') then + wr_streamers_tx_cfg0_ethertype_int <= wrdata_reg(15 downto 0); + end if; + rddata_reg(15 downto 0) <= wr_streamers_tx_cfg0_ethertype_int; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "010011" => + if (wb_we_i = '1') then + wr_streamers_tx_cfg1_mac_local_lsb_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= wr_streamers_tx_cfg1_mac_local_lsb_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "010100" => + if (wb_we_i = '1') then + wr_streamers_tx_cfg2_mac_local_msb_int <= wrdata_reg(15 downto 0); + end if; + rddata_reg(15 downto 0) <= wr_streamers_tx_cfg2_mac_local_msb_int; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "010101" => + if (wb_we_i = '1') then + wr_streamers_tx_cfg3_mac_target_lsb_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= wr_streamers_tx_cfg3_mac_target_lsb_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "010110" => + if (wb_we_i = '1') then + wr_streamers_tx_cfg4_mac_target_msb_int <= wrdata_reg(15 downto 0); + end if; + rddata_reg(15 downto 0) <= wr_streamers_tx_cfg4_mac_target_msb_int; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "010111" => + if (wb_we_i = '1') then + wr_streamers_tx_cfg5_qtag_ena_int <= wrdata_reg(0); + wr_streamers_tx_cfg5_qtag_vid_int <= wrdata_reg(19 downto 8); + wr_streamers_tx_cfg5_qtag_prio_int <= wrdata_reg(26 downto 24); + end if; + rddata_reg(0) <= wr_streamers_tx_cfg5_qtag_ena_int; + rddata_reg(19 downto 8) <= wr_streamers_tx_cfg5_qtag_vid_int; + rddata_reg(26 downto 24) <= wr_streamers_tx_cfg5_qtag_prio_int; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "011000" => + if (wb_we_i = '1') then + wr_streamers_rx_cfg0_ethertype_int <= wrdata_reg(15 downto 0); + wr_streamers_rx_cfg0_accept_broadcast_int <= wrdata_reg(16); + wr_streamers_rx_cfg0_filter_remote_int <= wrdata_reg(17); + end if; + rddata_reg(15 downto 0) <= wr_streamers_rx_cfg0_ethertype_int; + rddata_reg(16) <= wr_streamers_rx_cfg0_accept_broadcast_int; + rddata_reg(17) <= wr_streamers_rx_cfg0_filter_remote_int; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "011001" => + if (wb_we_i = '1') then + wr_streamers_rx_cfg1_mac_local_lsb_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= wr_streamers_rx_cfg1_mac_local_lsb_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "011010" => + if (wb_we_i = '1') then + wr_streamers_rx_cfg2_mac_local_msb_int <= wrdata_reg(15 downto 0); + end if; + rddata_reg(15 downto 0) <= wr_streamers_rx_cfg2_mac_local_msb_int; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "011011" => + if (wb_we_i = '1') then + wr_streamers_rx_cfg3_mac_remote_lsb_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= wr_streamers_rx_cfg3_mac_remote_lsb_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "011100" => + if (wb_we_i = '1') then + wr_streamers_rx_cfg4_mac_remote_msb_int <= wrdata_reg(15 downto 0); + end if; + rddata_reg(15 downto 0) <= wr_streamers_rx_cfg4_mac_remote_msb_int; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "011101" => + if (wb_we_i = '1') then + wr_streamers_rx_cfg5_fixed_latency_int <= wrdata_reg(27 downto 0); + end if; + rddata_reg(27 downto 0) <= wr_streamers_rx_cfg5_fixed_latency_int; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "011110" => + if (wb_we_i = '1') then + wr_streamers_cfg_or_tx_ethtype_int <= wrdata_reg(0); + wr_streamers_cfg_or_tx_mac_loc_int <= wrdata_reg(1); + wr_streamers_cfg_or_tx_mac_tar_int <= wrdata_reg(2); + wr_streamers_cfg_or_tx_qtag_int <= wrdata_reg(3); + wr_streamers_cfg_or_rx_ethertype_int <= wrdata_reg(16); + wr_streamers_cfg_or_rx_mac_loc_int <= wrdata_reg(17); + wr_streamers_cfg_or_rx_mac_rem_int <= wrdata_reg(18); + wr_streamers_cfg_or_rx_acc_broadcast_int <= wrdata_reg(19); + wr_streamers_cfg_or_rx_ftr_remote_int <= wrdata_reg(20); + wr_streamers_cfg_or_rx_fix_lat_int <= wrdata_reg(21); + end if; + rddata_reg(0) <= wr_streamers_cfg_or_tx_ethtype_int; + rddata_reg(1) <= wr_streamers_cfg_or_tx_mac_loc_int; + rddata_reg(2) <= wr_streamers_cfg_or_tx_mac_tar_int; + rddata_reg(3) <= wr_streamers_cfg_or_tx_qtag_int; + rddata_reg(16) <= wr_streamers_cfg_or_rx_ethertype_int; + rddata_reg(17) <= wr_streamers_cfg_or_rx_mac_loc_int; + rddata_reg(18) <= wr_streamers_cfg_or_rx_mac_rem_int; + rddata_reg(19) <= wr_streamers_cfg_or_rx_acc_broadcast_int; + rddata_reg(20) <= wr_streamers_cfg_or_rx_ftr_remote_int; + rddata_reg(21) <= wr_streamers_cfg_or_rx_fix_lat_int; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "011111" => + if (wb_we_i = '1') then + wr_streamers_dbg_ctrl_mux_int <= wrdata_reg(0); + wr_streamers_dbg_ctrl_start_byte_int <= wrdata_reg(15 downto 8); + end if; + rddata_reg(0) <= wr_streamers_dbg_ctrl_mux_int; + rddata_reg(15 downto 8) <= wr_streamers_dbg_ctrl_start_byte_int; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "100000" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.dbg_data_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "100001" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.dummy_dummy_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when others => +-- prevent the slave from hanging the bus on invalid address + ack_in_progress <= '1'; + ack_sreg(0) <= '1'; + end case; + end if; + end if; + end if; + end process; + + +-- Drive the data output bus + wb_dat_o <= rddata_reg; +-- Version identifier + regs_o.ver_id_o <= wr_streamers_ver_id_int; +-- Reset statistics + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + wr_streamers_sscr1_rst_stats_dly0 <= '0'; + regs_o.sscr1_rst_stats_o <= '0'; + elsif rising_edge(clk_sys_i) then + wr_streamers_sscr1_rst_stats_dly0 <= wr_streamers_sscr1_rst_stats_int; + regs_o.sscr1_rst_stats_o <= wr_streamers_sscr1_rst_stats_int and (not wr_streamers_sscr1_rst_stats_dly0); + end if; + end process; + + +-- Reset tx seq id + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + wr_streamers_sscr1_rst_seq_id_dly0 <= '0'; + regs_o.sscr1_rst_seq_id_o <= '0'; + elsif rising_edge(clk_sys_i) then + wr_streamers_sscr1_rst_seq_id_dly0 <= wr_streamers_sscr1_rst_seq_id_int; + regs_o.sscr1_rst_seq_id_o <= wr_streamers_sscr1_rst_seq_id_int and (not wr_streamers_sscr1_rst_seq_id_dly0); + end if; + end process; + + +-- Snapshot statistics + regs_o.sscr1_snapshot_stats_o <= wr_streamers_sscr1_snapshot_stats_int; +-- Latency accumulator overflow +-- Reset timestamp cycles +-- Reset timestamp 32 LSB of TAI +-- Reset timestamp 8 MSB of TAI +-- WR Streamer frame latency +-- WR Streamer frame latency +-- WR Streamer frame sent count (LSB) +-- WR Streamer frame sent count (MSB) +-- WR Streamer frame received count (LSB) +-- WR Streamer frame received count (MSB) +-- WR Streamer frame loss count (LSB) +-- WR Streamer frame loss count (MSB) +-- WR Streamer block loss count (LSB) +-- WR Streamer block loss count (MSB) +-- WR Streamer frame latency (LSB) +-- WR Streamer frame latency (MSB) +-- WR Streamer frame latency counter (LSB) +-- WR Streamer frame latency counter (MSB) +-- Ethertype + regs_o.tx_cfg0_ethertype_o <= wr_streamers_tx_cfg0_ethertype_int; +-- MAC Local LSB + regs_o.tx_cfg1_mac_local_lsb_o <= wr_streamers_tx_cfg1_mac_local_lsb_int; +-- MAC Local MSB + regs_o.tx_cfg2_mac_local_msb_o <= wr_streamers_tx_cfg2_mac_local_msb_int; +-- MAC Target LSB + regs_o.tx_cfg3_mac_target_lsb_o <= wr_streamers_tx_cfg3_mac_target_lsb_int; +-- MAC Target MSB + regs_o.tx_cfg4_mac_target_msb_o <= wr_streamers_tx_cfg4_mac_target_msb_int; +-- Enable tagging with Qtags + regs_o.tx_cfg5_qtag_ena_o <= wr_streamers_tx_cfg5_qtag_ena_int; +-- VLAN ID + regs_o.tx_cfg5_qtag_vid_o <= wr_streamers_tx_cfg5_qtag_vid_int; +-- Priority + regs_o.tx_cfg5_qtag_prio_o <= wr_streamers_tx_cfg5_qtag_prio_int; +-- Ethertype + regs_o.rx_cfg0_ethertype_o <= wr_streamers_rx_cfg0_ethertype_int; +-- Accept Broadcast + regs_o.rx_cfg0_accept_broadcast_o <= wr_streamers_rx_cfg0_accept_broadcast_int; +-- Filter Remote + regs_o.rx_cfg0_filter_remote_o <= wr_streamers_rx_cfg0_filter_remote_int; +-- MAC Local LSB + regs_o.rx_cfg1_mac_local_lsb_o <= wr_streamers_rx_cfg1_mac_local_lsb_int; +-- MAC Local MSB + regs_o.rx_cfg2_mac_local_msb_o <= wr_streamers_rx_cfg2_mac_local_msb_int; +-- MAC Remote LSB + regs_o.rx_cfg3_mac_remote_lsb_o <= wr_streamers_rx_cfg3_mac_remote_lsb_int; +-- MAC Remote MSB + regs_o.rx_cfg4_mac_remote_msb_o <= wr_streamers_rx_cfg4_mac_remote_msb_int; +-- Fixed Latency + regs_o.rx_cfg5_fixed_latency_o <= wr_streamers_rx_cfg5_fixed_latency_int; +-- Tx Ethertype + regs_o.cfg_or_tx_ethtype_o <= wr_streamers_cfg_or_tx_ethtype_int; +-- Tx MAC Local + regs_o.cfg_or_tx_mac_loc_o <= wr_streamers_cfg_or_tx_mac_loc_int; +-- Tx MAC Target + regs_o.cfg_or_tx_mac_tar_o <= wr_streamers_cfg_or_tx_mac_tar_int; +-- QTAG + regs_o.cfg_or_tx_qtag_o <= wr_streamers_cfg_or_tx_qtag_int; +-- Rx Ethertype + regs_o.cfg_or_rx_ethertype_o <= wr_streamers_cfg_or_rx_ethertype_int; +-- Rx MAC Local + regs_o.cfg_or_rx_mac_loc_o <= wr_streamers_cfg_or_rx_mac_loc_int; +-- Rx MAC Remote + regs_o.cfg_or_rx_mac_rem_o <= wr_streamers_cfg_or_rx_mac_rem_int; +-- Rx Accept Broadcast + regs_o.cfg_or_rx_acc_broadcast_o <= wr_streamers_cfg_or_rx_acc_broadcast_int; +-- Rx Filter Remote + regs_o.cfg_or_rx_ftr_remote_o <= wr_streamers_cfg_or_rx_ftr_remote_int; +-- Rx Fixed Latency + regs_o.cfg_or_rx_fix_lat_o <= wr_streamers_cfg_or_rx_fix_lat_int; +-- Debug Tx (0) or Rx (1) + regs_o.dbg_ctrl_mux_o <= wr_streamers_dbg_ctrl_mux_int; +-- Debug Start byte + regs_o.dbg_ctrl_start_byte_o <= wr_streamers_dbg_ctrl_start_byte_int; +-- Debug content +-- DUMMY value to read + rwaddr_reg <= wb_adr_i; + wb_stall_o <= (not ack_sreg(0)) and (wb_stb_i and wb_cyc_i); +-- ACK signal generation. Just pass the LSB of ACK counter. + wb_ack_o <= ack_sreg(0); +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/wr_streamers_wbgen2_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/wr_streamers_wbgen2_pkg.vhd new file mode 100644 index 000000000..a39fc326b --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/wr_streamers_wbgen2_pkg.vhd @@ -0,0 +1,191 @@ +--------------------------------------------------------------------------------------- +-- Title : Wishbone slave core for WR Transmission control, status and debug +--------------------------------------------------------------------------------------- +-- File : wr_streamers_wbgen2_pkg.vhd +-- Author : auto-generated by wbgen2 from wr_streamers_wb.wb +-- Created : Wed Aug 16 22:45:12 2017 +-- Version : 0x00000001 +-- Standard : VHDL'87 +--------------------------------------------------------------------------------------- +-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE wr_streamers_wb.wb +-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY! +--------------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +package wr_streamers_wbgen2_pkg is + + + -- Input registers (user design -> WB slave) + + type t_wr_streamers_in_registers is record + sscr1_rx_latency_acc_overflow_i : std_logic; + sscr1_rst_ts_cyc_i : std_logic_vector(27 downto 0); + sscr2_rst_ts_tai_lsb_i : std_logic_vector(31 downto 0); + sscr3_rst_ts_tai_msb_i : std_logic_vector(7 downto 0); + rx_stat0_rx_latency_max_i : std_logic_vector(27 downto 0); + rx_stat1_rx_latency_min_i : std_logic_vector(27 downto 0); + tx_stat2_tx_sent_cnt_lsb_i : std_logic_vector(31 downto 0); + tx_stat3_tx_sent_cnt_msb_i : std_logic_vector(31 downto 0); + rx_stat4_rx_rcvd_cnt_lsb_i : std_logic_vector(31 downto 0); + rx_stat5_rx_rcvd_cnt_msb_i : std_logic_vector(31 downto 0); + rx_stat6_rx_loss_cnt_lsb_i : std_logic_vector(31 downto 0); + rx_stat7_rx_loss_cnt_msb_i : std_logic_vector(31 downto 0); + rx_stat8_rx_lost_block_cnt_lsb_i : std_logic_vector(31 downto 0); + rx_stat9_rx_lost_block_cnt_msb_i : std_logic_vector(31 downto 0); + rx_stat10_rx_latency_acc_lsb_i : std_logic_vector(31 downto 0); + rx_stat11_rx_latency_acc_msb_i : std_logic_vector(31 downto 0); + rx_stat12_rx_latency_acc_cnt_lsb_i : std_logic_vector(31 downto 0); + rx_stat13_rx_latency_acc_cnt_msb_i : std_logic_vector(31 downto 0); + dbg_data_i : std_logic_vector(31 downto 0); + dummy_dummy_i : std_logic_vector(31 downto 0); + end record; + + constant c_wr_streamers_in_registers_init_value: t_wr_streamers_in_registers := ( + sscr1_rx_latency_acc_overflow_i => '0', + sscr1_rst_ts_cyc_i => (others => '0'), + sscr2_rst_ts_tai_lsb_i => (others => '0'), + sscr3_rst_ts_tai_msb_i => (others => '0'), + rx_stat0_rx_latency_max_i => (others => '0'), + rx_stat1_rx_latency_min_i => (others => '0'), + tx_stat2_tx_sent_cnt_lsb_i => (others => '0'), + tx_stat3_tx_sent_cnt_msb_i => (others => '0'), + rx_stat4_rx_rcvd_cnt_lsb_i => (others => '0'), + rx_stat5_rx_rcvd_cnt_msb_i => (others => '0'), + rx_stat6_rx_loss_cnt_lsb_i => (others => '0'), + rx_stat7_rx_loss_cnt_msb_i => (others => '0'), + rx_stat8_rx_lost_block_cnt_lsb_i => (others => '0'), + rx_stat9_rx_lost_block_cnt_msb_i => (others => '0'), + rx_stat10_rx_latency_acc_lsb_i => (others => '0'), + rx_stat11_rx_latency_acc_msb_i => (others => '0'), + rx_stat12_rx_latency_acc_cnt_lsb_i => (others => '0'), + rx_stat13_rx_latency_acc_cnt_msb_i => (others => '0'), + dbg_data_i => (others => '0'), + dummy_dummy_i => (others => '0') + ); + + -- Output registers (WB slave -> user design) + + type t_wr_streamers_out_registers is record + ver_id_o : std_logic_vector(31 downto 0); + sscr1_rst_stats_o : std_logic; + sscr1_rst_seq_id_o : std_logic; + sscr1_snapshot_stats_o : std_logic; + tx_cfg0_ethertype_o : std_logic_vector(15 downto 0); + tx_cfg1_mac_local_lsb_o : std_logic_vector(31 downto 0); + tx_cfg2_mac_local_msb_o : std_logic_vector(15 downto 0); + tx_cfg3_mac_target_lsb_o : std_logic_vector(31 downto 0); + tx_cfg4_mac_target_msb_o : std_logic_vector(15 downto 0); + tx_cfg5_qtag_ena_o : std_logic; + tx_cfg5_qtag_vid_o : std_logic_vector(11 downto 0); + tx_cfg5_qtag_prio_o : std_logic_vector(2 downto 0); + rx_cfg0_ethertype_o : std_logic_vector(15 downto 0); + rx_cfg0_accept_broadcast_o : std_logic; + rx_cfg0_filter_remote_o : std_logic; + rx_cfg1_mac_local_lsb_o : std_logic_vector(31 downto 0); + rx_cfg2_mac_local_msb_o : std_logic_vector(15 downto 0); + rx_cfg3_mac_remote_lsb_o : std_logic_vector(31 downto 0); + rx_cfg4_mac_remote_msb_o : std_logic_vector(15 downto 0); + rx_cfg5_fixed_latency_o : std_logic_vector(27 downto 0); + cfg_or_tx_ethtype_o : std_logic; + cfg_or_tx_mac_loc_o : std_logic; + cfg_or_tx_mac_tar_o : std_logic; + cfg_or_tx_qtag_o : std_logic; + cfg_or_rx_ethertype_o : std_logic; + cfg_or_rx_mac_loc_o : std_logic; + cfg_or_rx_mac_rem_o : std_logic; + cfg_or_rx_acc_broadcast_o : std_logic; + cfg_or_rx_ftr_remote_o : std_logic; + cfg_or_rx_fix_lat_o : std_logic; + dbg_ctrl_mux_o : std_logic; + dbg_ctrl_start_byte_o : std_logic_vector(7 downto 0); + end record; + + constant c_wr_streamers_out_registers_init_value: t_wr_streamers_out_registers := ( + ver_id_o => (others => '0'), + sscr1_rst_stats_o => '0', + sscr1_rst_seq_id_o => '0', + sscr1_snapshot_stats_o => '0', + tx_cfg0_ethertype_o => (others => '0'), + tx_cfg1_mac_local_lsb_o => (others => '0'), + tx_cfg2_mac_local_msb_o => (others => '0'), + tx_cfg3_mac_target_lsb_o => (others => '0'), + tx_cfg4_mac_target_msb_o => (others => '0'), + tx_cfg5_qtag_ena_o => '0', + tx_cfg5_qtag_vid_o => (others => '0'), + tx_cfg5_qtag_prio_o => (others => '0'), + rx_cfg0_ethertype_o => (others => '0'), + rx_cfg0_accept_broadcast_o => '0', + rx_cfg0_filter_remote_o => '0', + rx_cfg1_mac_local_lsb_o => (others => '0'), + rx_cfg2_mac_local_msb_o => (others => '0'), + rx_cfg3_mac_remote_lsb_o => (others => '0'), + rx_cfg4_mac_remote_msb_o => (others => '0'), + rx_cfg5_fixed_latency_o => (others => '0'), + cfg_or_tx_ethtype_o => '0', + cfg_or_tx_mac_loc_o => '0', + cfg_or_tx_mac_tar_o => '0', + cfg_or_tx_qtag_o => '0', + cfg_or_rx_ethertype_o => '0', + cfg_or_rx_mac_loc_o => '0', + cfg_or_rx_mac_rem_o => '0', + cfg_or_rx_acc_broadcast_o => '0', + cfg_or_rx_ftr_remote_o => '0', + cfg_or_rx_fix_lat_o => '0', + dbg_ctrl_mux_o => '0', + dbg_ctrl_start_byte_o => (others => '0') + ); + function "or" (left, right: t_wr_streamers_in_registers) return t_wr_streamers_in_registers; + function f_x_to_zero (x:std_logic) return std_logic; + function f_x_to_zero (x:std_logic_vector) return std_logic_vector; +end package; + +package body wr_streamers_wbgen2_pkg is +function f_x_to_zero (x:std_logic) return std_logic is +begin +if x = '1' then +return '1'; +else +return '0'; +end if; +end function; +function f_x_to_zero (x:std_logic_vector) return std_logic_vector is +variable tmp: std_logic_vector(x'length-1 downto 0); +begin +for i in 0 to x'length-1 loop +if x(i) = '1' then +tmp(i):= '1'; +else +tmp(i):= '0'; +end if; +end loop; +return tmp; +end function; +function "or" (left, right: t_wr_streamers_in_registers) return t_wr_streamers_in_registers is +variable tmp: t_wr_streamers_in_registers; +begin +tmp.sscr1_rx_latency_acc_overflow_i := f_x_to_zero(left.sscr1_rx_latency_acc_overflow_i) or f_x_to_zero(right.sscr1_rx_latency_acc_overflow_i); +tmp.sscr1_rst_ts_cyc_i := f_x_to_zero(left.sscr1_rst_ts_cyc_i) or f_x_to_zero(right.sscr1_rst_ts_cyc_i); +tmp.sscr2_rst_ts_tai_lsb_i := f_x_to_zero(left.sscr2_rst_ts_tai_lsb_i) or f_x_to_zero(right.sscr2_rst_ts_tai_lsb_i); +tmp.sscr3_rst_ts_tai_msb_i := f_x_to_zero(left.sscr3_rst_ts_tai_msb_i) or f_x_to_zero(right.sscr3_rst_ts_tai_msb_i); +tmp.rx_stat0_rx_latency_max_i := f_x_to_zero(left.rx_stat0_rx_latency_max_i) or f_x_to_zero(right.rx_stat0_rx_latency_max_i); +tmp.rx_stat1_rx_latency_min_i := f_x_to_zero(left.rx_stat1_rx_latency_min_i) or f_x_to_zero(right.rx_stat1_rx_latency_min_i); +tmp.tx_stat2_tx_sent_cnt_lsb_i := f_x_to_zero(left.tx_stat2_tx_sent_cnt_lsb_i) or f_x_to_zero(right.tx_stat2_tx_sent_cnt_lsb_i); +tmp.tx_stat3_tx_sent_cnt_msb_i := f_x_to_zero(left.tx_stat3_tx_sent_cnt_msb_i) or f_x_to_zero(right.tx_stat3_tx_sent_cnt_msb_i); +tmp.rx_stat4_rx_rcvd_cnt_lsb_i := f_x_to_zero(left.rx_stat4_rx_rcvd_cnt_lsb_i) or f_x_to_zero(right.rx_stat4_rx_rcvd_cnt_lsb_i); +tmp.rx_stat5_rx_rcvd_cnt_msb_i := f_x_to_zero(left.rx_stat5_rx_rcvd_cnt_msb_i) or f_x_to_zero(right.rx_stat5_rx_rcvd_cnt_msb_i); +tmp.rx_stat6_rx_loss_cnt_lsb_i := f_x_to_zero(left.rx_stat6_rx_loss_cnt_lsb_i) or f_x_to_zero(right.rx_stat6_rx_loss_cnt_lsb_i); +tmp.rx_stat7_rx_loss_cnt_msb_i := f_x_to_zero(left.rx_stat7_rx_loss_cnt_msb_i) or f_x_to_zero(right.rx_stat7_rx_loss_cnt_msb_i); +tmp.rx_stat8_rx_lost_block_cnt_lsb_i := f_x_to_zero(left.rx_stat8_rx_lost_block_cnt_lsb_i) or f_x_to_zero(right.rx_stat8_rx_lost_block_cnt_lsb_i); +tmp.rx_stat9_rx_lost_block_cnt_msb_i := f_x_to_zero(left.rx_stat9_rx_lost_block_cnt_msb_i) or f_x_to_zero(right.rx_stat9_rx_lost_block_cnt_msb_i); +tmp.rx_stat10_rx_latency_acc_lsb_i := f_x_to_zero(left.rx_stat10_rx_latency_acc_lsb_i) or f_x_to_zero(right.rx_stat10_rx_latency_acc_lsb_i); +tmp.rx_stat11_rx_latency_acc_msb_i := f_x_to_zero(left.rx_stat11_rx_latency_acc_msb_i) or f_x_to_zero(right.rx_stat11_rx_latency_acc_msb_i); +tmp.rx_stat12_rx_latency_acc_cnt_lsb_i := f_x_to_zero(left.rx_stat12_rx_latency_acc_cnt_lsb_i) or f_x_to_zero(right.rx_stat12_rx_latency_acc_cnt_lsb_i); +tmp.rx_stat13_rx_latency_acc_cnt_msb_i := f_x_to_zero(left.rx_stat13_rx_latency_acc_cnt_msb_i) or f_x_to_zero(right.rx_stat13_rx_latency_acc_cnt_msb_i); +tmp.dbg_data_i := f_x_to_zero(left.dbg_data_i) or f_x_to_zero(right.dbg_data_i); +tmp.dummy_dummy_i := f_x_to_zero(left.dummy_dummy_i) or f_x_to_zero(right.dummy_dummy_i); +return tmp; +end function; +end package body; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrtx_streamers_stats.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrtx_streamers_stats.vhd new file mode 100644 index 000000000..05f22a807 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrtx_streamers_stats.vhd @@ -0,0 +1,362 @@ +------------------------------------------------------------------------------- +-- Title : WR Streamers statistics +-- Project : WR Streamers +-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers +------------------------------------------------------------------------------- +-- File : xrtx_streamers_stats.vhd +-- Author : Maciej Lipinski +-- Company : CERN +-- Created : 2016-06-08 +-- Platform : FPGA-generics +-- Standard : VHDL +------------------------------------------------------------------------------- +-- Description: +-- Module to collect, reset, snapshot statistics from the streamers. The +-- statistics are made available through wishbone I/F (outside this entity) +-- and diags_i/o (generic input/output arrays of 32-bit registers). Wishbone I/F +-- can be read via bus (PCI, VME,...). Diags can be read via wrpc commands and +-- SNMP. +-- +-- The module provides basic statistics such as: +-- * number of sent/received streamer frames +-- * number of lost frames/blocks +-- * accumulated latency of streamer frames +-- * count of the accumulated latencies +-- * max/min latency +-- * timestamp of the reset pulse +-- +-- The module allows to snapshot the statistics values as to have a coherent +-- view. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2016-2017CERN/BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.NUMERIC_STD.ALL; + +library work; +use work.wishbone_pkg.all; -- needed for t_wishbone_slave_in, etc +use work.streamers_pkg.all; -- needed for streamers +use work.wr_fabric_pkg.all; -- neede for :t_wrf_source_in, etc +use work.wrcore_pkg.all; -- needed for t_generic_word_array +use work.streamers_priv_pkg.all; + +entity xrtx_streamers_stats is + generic ( + -- Indicates whether this module instantiates both streamers (rx and tx) or only one + -- of them. An application that only receives or only transmits might want to use + -- RX_ONLY or TX_ONLY mode to save resources. + g_streamers_op_mode : t_streamers_op_mode := TX_AND_RX; + -- Width of frame counters + g_cnt_width : integer := 50; -- min:15, max:64, 50 bits should be ok for 50 years + g_acc_width : integer := 64 -- max value 64 + ); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + + -- input signals from streamers + sent_frame_i : in std_logic; + rcvd_frame_i : in std_logic; + lost_block_i : in std_logic; + lost_frame_i : in std_logic; + lost_frames_cnt_i : in std_logic_vector(14 downto 0); + rcvd_latency_i : in std_logic_vector(27 downto 0); + rcvd_latency_valid_i : in std_logic; + + clk_ref_i : in std_logic; + tm_time_valid_i : in std_logic := '0'; + tm_tai_i : in std_logic_vector(39 downto 0) := x"0000000000"; + tm_cycles_i : in std_logic_vector(27 downto 0) := x"0000000"; + + -- statistic control + reset_stats_i : in std_logic; + snapshot_ena_i : in std_logic := '0'; + ----------------------- statistics ---------------------------------------- + -- output statistics: time of last reset of statistics + reset_time_tai_o : out std_logic_vector(39 downto 0) := x"0000000000"; + reset_time_cycles_o : out std_logic_vector(27 downto 0) := x"0000000"; + -- output statistics: tx/rx counters + sent_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0); + rcvd_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0); + lost_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0); + lost_block_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0); + -- output statistics: latency + latency_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0); + latency_acc_overflow_o : out std_logic; + latency_acc_o : out std_logic_vector(g_acc_width-1 downto 0); + latency_max_o : out std_logic_vector(27 downto 0); + latency_min_o : out std_logic_vector(27 downto 0); + + snmp_array_o : out t_generic_word_array(c_WRS_STATS_ARR_SIZE_OUT-1 downto 0); + snmp_array_i : in t_generic_word_array(c_WRS_STATS_ARR_SIZE_IN -1 downto 0) + ); + +end xrtx_streamers_stats; + +architecture rtl of xrtx_streamers_stats is + + signal reset_time_tai : std_logic_vector(39 downto 0); + signal reset_time_cycles : std_logic_vector(27 downto 0); + + signal sent_frame_cnt : unsigned(g_cnt_width-1 downto 0); + signal rcvd_frame_cnt : unsigned(g_cnt_width-1 downto 0); + signal lost_frame_cnt : unsigned(g_cnt_width-1 downto 0); + signal lost_block_cnt : unsigned(g_cnt_width-1 downto 0); + signal latency_cnt : unsigned(g_cnt_width-1 downto 0); + + signal latency_max : std_logic_vector(27 downto 0); + signal latency_min : std_logic_vector(27 downto 0); + signal latency_acc : unsigned(g_acc_width-1+1 downto 0); + signal latency_acc_overflow: std_logic; + + signal sent_frame_cnt_out : std_logic_vector(g_cnt_width-1 downto 0); + signal rcvd_frame_cnt_out : std_logic_vector(g_cnt_width-1 downto 0); + signal lost_frame_cnt_out : std_logic_vector(g_cnt_width-1 downto 0); + signal lost_block_cnt_out : std_logic_vector(g_cnt_width-1 downto 0); + signal latency_cnt_out : std_logic_vector(g_cnt_width-1 downto 0); + signal latency_acc_overflow_out : std_logic; + signal latency_acc_out : std_logic_vector(g_acc_width-1 downto 0); + signal latency_max_out : std_logic_vector(27 downto 0); + signal latency_min_out : std_logic_vector(27 downto 0); + + --- statistics resets: + signal reset_stats_remote: std_logic; + signal reset_stats : std_logic; + signal reset_stats_d1 : std_logic; + signal reset_stats_p : std_logic; + signal snapshot_remote_ena : std_logic; + signal snapshot_ena : std_logic; + signal snapshot_ena_d1 : std_logic; + + -- for code cleanness + constant c_cw : integer := g_cnt_width; + constant c_aw : integer := g_acc_width; +begin + + -- reset statistics when receiving signal from SNMP or Wishbone + reset_stats <= reset_stats_remote or reset_stats_i; + ------------------------------------------------------------------------------------------- + -- produce pulse of reset input signal, this pulse produces timesstamp to be timestamped + ------------------------------------------------------------------------------------------- + -- pulse is on falling and rising edge of the reset signal (reset when signal HIGH) + -- in this way, one can + -- 1. read the timestamp of the start of statistics acquisition + -- 2. reset HIGH + -- 3. read the timestamp of the end of statistics acquisition + -- 4. start acqusition + ------------------------------------------------------------------------------------------- + -- when exiting the reset, produce pulse for the timestamper + p_stats_reset: process(clk_i) + begin + if rising_edge(clk_i) then + if (rst_n_i = '0') then + reset_stats_p <= '0'; + reset_stats_d1 <= '0'; + else + reset_stats_d1 <= reset_stats; + reset_stats_p <= reset_stats xor reset_stats_d1; + end if; + end if; + end process; + + ------------------------------------------------------------------------------------------- + -- Timestamp of reset + ------------------------------------------------------------------------------------------- + -- process that timestamps the reset so that we can make statistics over time + U_Reset_Timestamper : pulse_stamper + port map ( + clk_ref_i => clk_ref_i, + clk_sys_i => clk_i, + rst_n_i => rst_n_i, + pulse_a_i => reset_stats_p, + tm_time_valid_i => tm_time_valid_i, + tm_tai_i => tm_tai_i, + tm_cycles_i => tm_cycles_i, + tag_tai_o => reset_time_tai, + tag_cycles_o => reset_time_cycles); + + reset_time_tai_o <= reset_time_tai; + reset_time_cycles_o <= reset_time_cycles; + + ------------------------------------------------------------------------------------------- + -- snapshot + ------------------------------------------------------------------------------------------- + -- snapshot is used to expose to user coherent value, so that the count for accumulated + -- latency is coherent with the accumulated latency and the average can be accurately + -- calculated + ------------------------------------------------------------------------------------------- + snapshot_ena <= snapshot_ena_i or snapshot_remote_ena; + -- snapshot + + gen_tx_stats: if(g_streamers_op_mode=TX_ONLY OR g_streamers_op_mode=TX_AND_RX) generate + U_TX_STATS: xtx_streamers_stats + generic map ( + g_cnt_width => g_cnt_width + ) + port map( + clk_i => clk_i, + rst_n_i => rst_n_i, + sent_frame_i => sent_frame_i, + reset_stats_i => reset_stats, + snapshot_ena_i => snapshot_ena, + sent_frame_cnt_o => sent_frame_cnt_out); + end generate gen_tx_stats; + gen_not_tx_stats: if(g_streamers_op_mode=RX_ONLY) generate + sent_frame_cnt_out <= (others => '0'); + end generate gen_not_tx_stats; + + gen_rx_stats: if(g_streamers_op_mode=RX_ONLY OR g_streamers_op_mode=TX_AND_RX) generate + U_RX_STATS: xrx_streamers_stats + generic map( + g_cnt_width => g_cnt_width, + g_acc_width => g_acc_width + ) + port map( + clk_i => clk_i, + rst_n_i => rst_n_i, + rcvd_frame_i => rcvd_frame_i, + lost_block_i => lost_block_i, + lost_frame_i => lost_frame_i, + lost_frames_cnt_i => lost_frames_cnt_i, + rcvd_latency_i => rcvd_latency_i, + rcvd_latency_valid_i => rcvd_latency_valid_i, + tm_time_valid_i => tm_time_valid_i, + snapshot_ena_i => snapshot_ena, + reset_stats_i => reset_stats, + rcvd_frame_cnt_o => rcvd_frame_cnt_out, + lost_frame_cnt_o => lost_frame_cnt_out, + lost_block_cnt_o => lost_block_cnt_out, + latency_cnt_o => latency_cnt_out, + latency_acc_overflow_o => latency_acc_overflow_out, + latency_acc_o => latency_acc_out, + latency_max_o => latency_max_out, + latency_min_o => latency_min_out); + end generate gen_rx_stats; + gen_not_rx_stats: if(g_streamers_op_mode=TX_ONLY) generate + rcvd_frame_cnt_out <= (others => '0'); + lost_frame_cnt_out <= (others => '0'); + lost_block_cnt_out <= (others => '0'); + latency_cnt_out <= (others => '0'); + latency_acc_overflow_out <= '0'; + latency_acc_out <= (others => '0'); + latency_max_out <= (others => '0'); + latency_min_out <= (others => '0'); + end generate gen_not_rx_stats; + ------------------------------------------------------------------------------------------- + -- wishbone local output + ------------------------------------------------------------------------------------------- + sent_frame_cnt_o <= sent_frame_cnt_out; + rcvd_frame_cnt_o <= rcvd_frame_cnt_out; + lost_frame_cnt_o <= lost_frame_cnt_out; + lost_block_cnt_o <= lost_block_cnt_out; + latency_max_o <= latency_max_out; + latency_min_o <= latency_min_out; + latency_acc_o <= latency_acc_out; + latency_cnt_o <= latency_cnt_out; + latency_acc_overflow_o <= latency_acc_overflow_out; + + ------------------------------------------------------------------------------------------- + -- SNMP remote output + -- Generic communication with WRPC that allows SNMP access via generic array of 32-bits + -- std_logic_vectors. The mapping of the generic vectors to meaningful information needs + -- to be made available to the user of SNMP + ------------------------------------------------------------------------------------------- + -- check sanity of values + assert (c_cw <= 64) + report "g_cnt_width value not suppported by f_pack_streamers_statistics" severity error; + assert (c_aw <= 64) + report "g_acc_width value not suppported by f_pack_streamers_statistics" severity error; + + -- translate generic input vectors to meaningful signals + reset_stats_remote <= snmp_array_i(0)(0); + snapshot_remote_ena <= snmp_array_i(0)(1); + + snmp_array_o(0)( 0) <= reset_stats; -- loop back for diagnostics + snmp_array_o(0)( 1) <= latency_acc_overflow_out; + snmp_array_o(0) (31 downto 2) <= (others => '0'); + + snmp_array_o(1)( 31 downto 0) <= x"0" & reset_time_cycles( 27 downto 0); + snmp_array_o(2)( 31 downto 0) <= reset_time_tai( 31 downto 0); + snmp_array_o(3)( 31 downto 0) <= x"000000" & reset_time_tai( 39 downto 32); + + -- translate meaningful signals (statistics values) to generic output vectors + snmp_array_o(4 )(31 downto 0) <= x"0" & latency_max_out(27 downto 0); + snmp_array_o(5 )(31 downto 0) <= x"0" & latency_min_out(27 downto 0); + + CNT_SINGLE_WORD_gen: if(c_cw < 33) generate + snmp_array_o(6 )(c_cw-1 downto 0) <= sent_frame_cnt_out; + snmp_array_o(6 )(31 downto c_cw) <= (others => '0'); + snmp_array_o(7 )(31 downto 0) <= (others => '0'); + + snmp_array_o(8 )(c_cw-1 downto 0) <= rcvd_frame_cnt_out; + snmp_array_o(8 )(31 downto c_cw) <= (others => '0'); + snmp_array_o(9 )(31 downto 0) <= (others => '0'); + + snmp_array_o(10)(c_cw-1 downto 0) <= lost_frame_cnt_out; + snmp_array_o(10)(31 downto c_cw) <= (others => '0'); + snmp_array_o(11)(31 downto 0) <= (others => '0'); + + snmp_array_o(12)(c_cw-1 downto 0) <= lost_block_cnt_out; + snmp_array_o(12)(31 downto c_cw) <= (others => '0'); + snmp_array_o(13)(31 downto 0) <= (others => '0'); + + snmp_array_o(14)(c_cw-1 downto 0) <= latency_cnt_out; + snmp_array_o(14)(31 downto c_cw) <= (others => '0'); + snmp_array_o(15)(31 downto 0) <= (others => '0'); + end generate; + ACC_SINGLE_WORD_gen: if(c_aw < 33) generate + snmp_array_o(16)(c_aw-1 downto 0) <= latency_acc_out; + snmp_array_o(16)(31 downto c_aw) <= (others => '0'); + snmp_array_o(17)(31 downto 0) <= (others => '0'); + end generate; + + --- + CNT_TWO_WORDs_gen: if(c_cw > 32) generate + snmp_array_o(6 )(31 downto 0) <= sent_frame_cnt_out(31 downto 0); + snmp_array_o(7 )(c_cw-32-1 downto 0) <= sent_frame_cnt_out(c_cw-1 downto 32); + snmp_array_o(7 )(31 downto c_cw-32) <= (others => '0'); + + snmp_array_o(8 )(31 downto 0) <= rcvd_frame_cnt_out(31 downto 0); + snmp_array_o(9 )(c_cw-32-1 downto 0) <= rcvd_frame_cnt_out(c_cw-1 downto 32); + snmp_array_o(9 )(31 downto c_cw-32) <= (others => '0'); + + snmp_array_o(10)(31 downto 0) <= lost_frame_cnt_out(31 downto 0); + snmp_array_o(11)(c_cw-32-1 downto 0) <= lost_frame_cnt_out(c_cw-1 downto 32); + snmp_array_o(11 )(31 downto c_cw-32) <= (others => '0'); + + snmp_array_o(12)(31 downto 0) <= lost_block_cnt_out(31 downto 0); + snmp_array_o(13)(c_cw-32-1 downto 0) <= lost_block_cnt_out(c_cw-1 downto 32); + snmp_array_o(13 )(31 downto c_cw-32) <= (others => '0'); + + snmp_array_o(14)(31 downto 0) <= latency_cnt_out(31 downto 0); + snmp_array_o(15)(c_cw-32-1 downto 0) <= latency_cnt_out(c_cw-1 downto 32); + snmp_array_o(15 )(31 downto c_cw-32) <= (others => '0'); + end generate; + ACC_TWO_WORDs_gen: if(c_aw > 32) generate + snmp_array_o(16)(31 downto 0) <= latency_acc_out(31 downto 0); + snmp_array_o(17)(c_aw-32-1 downto 0) <= latency_acc_out(c_aw-1 downto 32) ; + snmp_array_o(17)(31 downto c_aw-32) <= (others => '0'); + end generate; + +end rtl; + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrx_streamer.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrx_streamer.vhd new file mode 100644 index 000000000..e135c0b08 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrx_streamer.vhd @@ -0,0 +1,677 @@ +------------------------------------------------------------------------------- +-- Title : Transmission Streamer +-- Project : WR Streamers +-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers +------------------------------------------------------------------------------- +-- File : xrx_streamer.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2012-11-02 +-- Platform : FPGA-generic +-- Standard : VHDL +------------------------------------------------------------------------------- +-- Description: A simple core demonstrating how to encapsulate a continuous +-- stream of data words into Ethernet frames, in a format that is accepted by +-- the White Rabbit PTP core. This core decodes Ethernet frames encoded by +-- xtx_streamer. More info in the documentation. +------------------------------------------------------------------------------- +-- Copyright (c) 2012-2017 CERN/BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.wishbone_pkg.all; +use work.wr_fabric_pkg.all; +use work.gencores_pkg.all; +use work.genram_pkg.all; +use work.streamers_priv_pkg.all; +use work.streamers_pkg.all; + +entity xrx_streamer is + + generic ( + -- Width of the data words, must be multiple of 16 bits. This value set to this generic + -- on the receviving device must be the same as the value of g_tx_data_width set on the + -- transmitting node. The g_rx_data_width and g_tx_data_width can be set to different + -- values in the same device (i.e. instantiation of xwr_transmission entity). It is the + -- responsibility of a network designer to make sure these parameters are properly set + -- in the network. + g_data_width : integer := 32; + + -- Size of RX buffer, in data words. + g_buffer_size : integer := 256; + + -- DO NOT USE unless you know what you are doing + -- legacy: the streamers that were initially used in Btrain did not check/insert + -- the escape code. This is justified if only one block of a known number of words is + -- sent/expected. + g_escape_code_disable : boolean := FALSE; + + -- DO NOT USE unless you know what you are doing + -- legacy: the streamers that were initially used in Btrain accepted only a fixed + -- number of words, regardless of the frame content. If this generic is set to number + -- other than zero, only a fixed number of words is accepted. + -- In combination with the g_escape_code_disable generic set to TRUE, the behaviour of + -- the "Btrain streamers" can be recreated. + g_expected_words_number : integer := 0 + ); + + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + -- Endpoint/WRC interface + snk_i : in t_wrf_sink_in; + snk_o : out t_wrf_sink_out; + + --------------------------------------------------------------------------- + -- WRC Timing interface, used for latency measurement + -- Caution: uses clk_ref_i clock domain! + --------------------------------------------------------------------------- + + -- White Rabbit reference clock + clk_ref_i : in std_logic := '0'; + + -- Time valid flag + tm_time_valid_i : in std_logic := '0'; + + -- TAI seconds + tm_tai_i : in std_logic_vector(39 downto 0) := x"0000000000"; + + -- Fractional part of the second (in clk_ref_i cycles) + tm_cycles_i : in std_logic_vector(27 downto 0) := x"0000000"; + + --------------------------------------------------------------------------- + -- User interface + --------------------------------------------------------------------------- + + -- 1 indicates the 1st word of the data block on rx_data_o. + rx_first_p1_o : out std_logic; + -- 1 indicates the last word of the data block on rx_data_o. + rx_last_p1_o : out std_logic; + -- Received data. + rx_data_o : out std_logic_vector(g_data_width-1 downto 0); + -- 1 indicted that rx_data_o is outputting a valid data word. + rx_valid_o : out std_logic; + -- Synchronous data request input: when 1, the streamer may output another + -- data word in the subsequent clock cycle. + rx_dreq_i : in std_logic; + -- Lost output: 1 indicates that one or more frames or blocks have been lost + -- (left for backward compatibility). + rx_lost_p1_o : out std_logic := '0'; + -- indicates that one or more blocks within frame are missing + rx_lost_blocks_p1_o : out std_logic := '0'; + -- indicates that one or more frames are missing, the number of frames is provied + rx_lost_frames_p1_o : out std_logic := '0'; + --number of lost frames, the 0xF...F means that counter overflew + rx_lost_frames_cnt_o : out std_logic_vector(14 downto 0); + -- Latency measurement output: indicates the transport latency (between the + -- TX streamer in remote device and this streamer), in clk_ref_i clock cycles. + rx_latency_o : out std_logic_vector(27 downto 0); + -- 1 when the latency on rx_latency_o is valid. + rx_latency_valid_o : out std_logic; + -- received streamer frame (counts all frames, corrupted and not) + rx_frame_p1_o : out std_logic; + -- configuration + rx_streamer_cfg_i : in t_rx_streamer_cfg := c_rx_streamer_cfg_default + ); + +end xrx_streamer; + +architecture rtl of xrx_streamer is + + type t_rx_state is (IDLE, HEADER, FRAME_SEQ_ID, PAYLOAD, SUBFRAME_HEADER, EOF); + + signal fab, fsm_in : t_pipe; + + signal state : t_rx_state; + + signal ser_count : unsigned(7 downto 0); + signal seq_no, seq_new,count : unsigned(14 downto 0); + + signal crc_match, crc_en, crc_en_masked, crc_restart : std_logic; + + signal detect_escapes, is_escape : std_logic; + signal rx_pending : std_logic; + + signal pack_data, fifo_data : std_logic_vector(g_data_width-1 downto 0); + + signal fifo_drop, fifo_accept, fifo_accept_d0, fifo_dvalid : std_logic; + signal fifo_sync, fifo_last, frames_lost, blocks_lost : std_logic; + signal fifo_dout, fifo_din : std_logic_vector(g_data_width + 1 downto 0); + + signal pending_write, fab_dvalid_pre : std_logic; + + + signal tx_tag_cycles, rx_tag_cycles : std_logic_vector(27 downto 0); + signal tx_tag_valid, rx_tag_valid : std_logic; + + signal got_next_subframe : std_logic; + signal is_frame_seq_id : std_logic; + signal word_count : unsigned(11 downto 0); + signal sync_seq_no : std_logic; + + -- fixed latency signals + type t_rx_delay_state is (DISABLED, DELAY, ALLOW); + signal timestamped : std_logic; + signal delay_cnt : unsigned(27 downto 0); + signal rx_dreq_allow : std_logic; + signal rx_latency : unsigned(27 downto 0); + signal rx_latency_stored : unsigned(27 downto 0); + signal rx_latency_valid : std_logic; + signal delay_state : t_rx_delay_state; + signal rx_dreq : std_logic; + signal is_vlan : std_logic; + + constant c_fixed_latency_zero : unsigned(27 downto 0) := (others => '0'); + constant c_timestamper_delay : unsigned(27 downto 0) := to_unsigned(12, 28); -- cycles + +begin -- rtl + + U_rx_crc_generator : gc_crc_gen + generic map ( + g_polynomial => x"1021", + g_init_value => x"ffff", + g_residue => x"470f", + g_data_width => 16, + g_sync_reset => 1, + g_dual_width => 0, + g_registered_match_output => true) + port map ( + clk_i => clk_sys_i, + rst_i => '0', + restart_i => crc_restart, + en_i => crc_en_masked, + data_i => fsm_in.data, + half_i => '0', + match_o => crc_match); + + crc_en_masked <= crc_en and fsm_in.dvalid; + + U_Fabric_Sink : xwb_fabric_sink + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + snk_i => snk_i, + snk_o => snk_o, + addr_o => fab.addr, + data_o => fab.data, + dvalid_o => fab_dvalid_pre, + sof_o => fab.sof, + eof_o => fab.eof, + error_o => fab.error, + bytesel_o => fab.bytesel, + dreq_i => fab.dreq); + + fab.dvalid <= '1' when fab_dvalid_pre = '1' and fab.addr = c_WRF_DATA and fab.bytesel = '0' else '0'; + gen_escape: if (g_escape_code_disable = FALSE) generate + U_Escape_Detect : escape_detector + generic map ( + g_data_width => 16, + g_escape_code => x"cafe") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + d_i => fab.data, + d_detect_enable_i => detect_escapes, + d_valid_i => fab.dvalid, + d_req_o => fab.dreq, + d_o => fsm_in.data, + d_escape_o => is_escape, + d_valid_o => fsm_in.dvalid, + d_req_i => fsm_in.dreq); + end generate gen_escape; + gen_no_escape: if (g_escape_code_disable = TRUE) generate + fsm_in.dvalid <= fab.dvalid; + fsm_in.data <= fab.data; + fab.dreq <= fsm_in.dreq; + is_escape <= '0'; + end generate gen_no_escape; + fsm_in.eof <= fab.eof or fab.error; + fsm_in.sof <= fab.sof; + + + U_Output_FIFO : dropping_buffer + generic map ( + g_size => g_buffer_size, + g_data_width => g_data_width + 2) + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + d_i => fifo_din, + d_req_o => fsm_in.dreq, + d_drop_i => fifo_drop, + d_accept_i => fifo_accept_d0, + d_valid_i => fifo_dvalid, + d_o => fifo_dout, + d_valid_o => rx_valid_o, + d_req_i => rx_dreq); + + fifo_din(g_data_width+1) <= fifo_sync; + fifo_din(g_data_width) <= fifo_last or + ((not pending_write) and is_escape); -- when word is 16 bits + fifo_din(g_data_width-1 downto 0) <= fifo_data; + + rx_data_o <= fifo_dout(g_data_width-1 downto 0); + rx_first_p1_o <= fifo_dout(g_data_width+1); + rx_last_p1_o <= fifo_dout(g_data_width); + + U_RX_Timestamper : pulse_stamper + port map ( + clk_ref_i => clk_ref_i, + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + pulse_a_i => fsm_in.sof, + tm_time_valid_i => tm_time_valid_i, + tm_tai_i => tm_tai_i, + tm_cycles_i => tm_cycles_i, + tag_cycles_o => rx_tag_cycles); + + ------------------------------------------------------------------------------------------- + -- fixed latency implementation + ------------------------------------------------------------------------------------------- + + -- mask rx_dreq to prevent reception + rx_dreq <= rx_dreq_i and rx_dreq_allow; + -- produce a pulse when SOF is timestamped, this pulse starts counter in clk_sys clock + -- domain + U_sync_with_clk : gc_sync_ffs + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + data_i => fsm_in.sof, + synced_o => timestamped); + + -- introduce fixed latency, if configured to do so + p_fixed_latency_fsm : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + delay_state <= DISABLED; + rx_latency_stored <= (others=>'0'); + rx_dreq_allow <= '1'; + delay_cnt <= c_timestamper_delay; + else + case delay_state is + when DISABLED => + if unsigned(rx_streamer_cfg_i.fixed_latency) /= c_fixed_latency_zero then + delay_state <= ALLOW; + end if; + rx_latency_stored <= (others=>'0'); + delay_cnt <= c_timestamper_delay; + rx_dreq_allow <= '1'; + when ALLOW => + if unsigned(rx_streamer_cfg_i.fixed_latency) = c_fixed_latency_zero then + delay_state <= DISABLED; + elsif(rx_latency_valid ='1') then + rx_dreq_allow <= '0'; + rx_latency_stored <= rx_latency; + delay_state <= DELAY; + end if; + if(timestamped = '1') then + delay_cnt <= c_timestamper_delay; + else + delay_cnt <= delay_cnt + 2; + end if; + when DELAY => + if unsigned(rx_streamer_cfg_i.fixed_latency) <= delay_cnt + rx_latency_stored then + rx_latency_stored <= (others=>'0'); + rx_dreq_allow <= '1'; + delay_state <= ALLOW; + else + delay_cnt <= delay_cnt + 2; + end if; + end case; + end if; + end if; + end process; + + ------------------------------------------------------------------------------------------- + -- end of fixed latency implementation + -- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + p_fsm : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + state <= IDLE; + count <= (others => '0'); + seq_no <= (others => '1'); + detect_escapes <= '0'; + crc_en <= '0'; + fifo_accept <= '0'; + fifo_drop <= '0'; + fifo_dvalid <= '0'; + pending_write <= '0'; + got_next_subframe <= '0'; + fifo_sync <= '0'; + fifo_last <= '0'; + tx_tag_valid <= '0'; + ser_count <= (others => '0'); + word_count <= (others => '0'); + sync_seq_no <= '1'; + rx_frame_p1_o <= '0'; + rx_lost_frames_cnt_o <= (others => '0'); + frames_lost <= '0'; + rx_latency <= (others=>'0'); + rx_latency_valid <= '0'; + blocks_lost <= '0'; + pack_data <= (others=>'0'); + is_vlan <= '0'; + else + case state is + when IDLE => + detect_escapes <= '0'; + crc_en <= '0'; + count <= (others => '0'); + fifo_accept <= '0'; + fifo_drop <= '0'; + fifo_dvalid <= '0'; + pending_write <= '0'; + got_next_subframe <='0'; + ser_count <= (others => '0'); + fifo_sync <='0'; + fifo_last <= '0'; + word_count <= (others => '0'); + tx_tag_valid <= '0'; + rx_frame_p1_o <= '0'; + rx_lost_frames_cnt_o <= (others => '0'); + frames_lost <= '0'; + blocks_lost <= '0'; + rx_latency <= (others=>'0'); + rx_latency_valid <= '0'; + is_vlan <= '0'; + + if(fsm_in.sof = '1') then + state <= HEADER; + end if; + + when HEADER => + if(fsm_in.eof = '1') then + state <= IDLE; + elsif(fsm_in.dvalid = '1') then + case count(7 downto 0) is + when x"00" => + if(fsm_in.data /= rx_streamer_cfg_i.mac_local(47 downto 32) nor (rx_streamer_cfg_i.accept_broadcasts = '1' and fsm_in.data /= x"ffff")) then + state <= IDLE; + end if; + count <= count + 1; + when x"01" => + if(fsm_in.data /= rx_streamer_cfg_i.mac_local(31 downto 16) nor (rx_streamer_cfg_i.accept_broadcasts = '1' and fsm_in.data /= x"ffff")) then + state <= IDLE; + end if; + count <= count + 1; + when x"02" => + if(fsm_in.data /= rx_streamer_cfg_i.mac_local(15 downto 0) nor (rx_streamer_cfg_i.accept_broadcasts = '1' and fsm_in.data /= x"ffff")) then + state <= IDLE; + end if; + count <= count + 1; + when x"03" => + if(fsm_in.data /= rx_streamer_cfg_i.mac_remote(47 downto 32) and rx_streamer_cfg_i.filter_remote ='1') then + state <= IDLE; + end if; + count <= count + 1; + when x"04" => + if(fsm_in.data /= rx_streamer_cfg_i.mac_remote(31 downto 16) and rx_streamer_cfg_i.filter_remote ='1') then + state <= IDLE; + end if; + count <= count + 1; + when x"05" => + if(fsm_in.data /= rx_streamer_cfg_i.mac_remote(15 downto 0) and rx_streamer_cfg_i.filter_remote ='1') then + state <= IDLE; + end if; + count <= count + 1; + when x"06" => + if(fsm_in.data = x"8100") then + is_vlan <='1'; + elsif(fsm_in.data /= rx_streamer_cfg_i.ethertype) then + state <= IDLE; + is_vlan <='0'; + end if; + count <= count + 1; + when x"07" => + if(is_vlan = '0') then + tx_tag_valid <= fsm_in.data(15); + tx_tag_cycles(27 downto 16)<= fsm_in.data(11 downto 0); + end if; + count <= count + 1; + when x"08" => + if(is_vlan = '0') then + tx_tag_cycles(15 downto 0) <= fsm_in.data; + count <= count + 1; + crc_en <= '1'; + detect_escapes <= '1'; + state <= FRAME_SEQ_ID; + rx_frame_p1_o <= '1'; + elsif(fsm_in.data /= rx_streamer_cfg_i.ethertype) then + state <= IDLE; + end if; + count <= count + 1; + when x"09" => + tx_tag_valid <= fsm_in.data(15); + tx_tag_cycles(27 downto 16)<= fsm_in.data(11 downto 0); + count <= count + 1; + when x"0A" => + tx_tag_cycles(15 downto 0) <= fsm_in.data; + count <= count + 1; + crc_en <= '1'; + detect_escapes <= '1'; + state <= FRAME_SEQ_ID; + rx_frame_p1_o <= '1'; + count <= count + 1; + when others => null; + end case; + end if; + + when FRAME_SEQ_ID => + rx_frame_p1_o <= '0'; + if(fsm_in.eof = '1') then + state <= IDLE; + elsif(fsm_in.dvalid = '1') then + count <= "000" & x"001"; -- use as subframe seq_no + state <= PAYLOAD; + fifo_drop <= '0'; + fifo_accept <= '0'; + ser_count <= (others => '0'); + word_count <= word_count + 1; -- count words, increment in advance + got_next_subframe <= '1'; + if(tx_tag_valid = '1') then + rx_latency_valid <= '1'; + if(unsigned(tx_tag_cycles) > unsigned(rx_tag_cycles)) then + rx_latency <= unsigned(rx_tag_cycles) - unsigned(tx_tag_cycles) + to_unsigned(125000000, 28); + else + rx_latency <= unsigned(rx_tag_cycles) - unsigned(tx_tag_cycles); + end if; + tx_tag_valid <= '0'; + else + rx_latency_valid <= '0'; + end if; + + if(std_logic_vector(seq_no) /= fsm_in.data(14 downto 0)) then + seq_no <= unsigned(fsm_in.data(14 downto 0))+1; + if (sync_seq_no = '1') then -- sync to the first received seq_no + sync_seq_no <= '0'; + frames_lost <= '0'; + rx_lost_frames_cnt_o <= (others => '0'); + else + rx_lost_frames_cnt_o <= std_logic_vector(unsigned(fsm_in.data(14 downto 0)) - seq_no); + frames_lost <= '1'; + end if; + else + seq_no <= unsigned(seq_no + 1); + frames_lost <= '0'; + rx_lost_frames_cnt_o <= (others => '0'); + end if; + end if; + + when SUBFRAME_HEADER => + fifo_drop <= '0'; + fifo_accept <= '0'; + ser_count <= (others => '0'); + + if(fsm_in.eof = '1') then + state <= IDLE; + got_next_subframe <= '0'; + blocks_lost <= '0'; + elsif (fsm_in.dvalid = '1' and is_escape = '1') then + got_next_subframe <= '1'; + + if(std_logic_vector(count) /= fsm_in.data(14 downto 0)) then + count <= unsigned(fsm_in.data(14 downto 0))+1; + blocks_lost <= '1'; + else + count <= count + 1; + blocks_lost <= '0'; + end if; + state <= PAYLOAD; + end if; + + when PAYLOAD => + frames_lost <= '0'; + rx_lost_frames_cnt_o <= (others => '0'); + rx_latency_valid <= '0'; + fifo_sync <= got_next_subframe; + + if(fsm_in.eof = '1') then + state <= IDLE; + fifo_drop <= '1'; + fifo_accept <= '0'; + got_next_subframe <= '0'; + + elsif(fsm_in.dvalid = '1') then + + + + if(is_escape = '1') then + ser_count <= (others => '0'); + fifo_last <= '1'; + + got_next_subframe <= '1'; + + if(fsm_in.data(15) = '1') then + + if(std_logic_vector(count) /= fsm_in.data(14 downto 0)) then + count <= unsigned(fsm_in.data(14 downto 0)); + blocks_lost <= '1'; + else + count <= unsigned(count + 1); + blocks_lost <= '0'; + end if; + + state <= PAYLOAD; + + fifo_accept <= crc_match; --_latched; + fifo_drop <= not crc_match; --_latched; + fifo_dvalid <= pending_write and not fifo_dvalid; + pending_write <= '0'; + + elsif fsm_in.data = x"0bad" then + blocks_lost <= '0'; + state <= EOF; + fifo_accept <= crc_match; --_latched; + fifo_drop <= not crc_match; --_latched; + fifo_dvalid <= pending_write and not fifo_dvalid; + else + blocks_lost <= '0'; + state <= EOF; + fifo_drop <= '1'; + fifo_accept <= '0'; + end if; + + else --of: if(is_escape = '1' or word_count = g_expected_words_number) then + + fifo_last <= '0'; + fifo_accept <= '0'; + fifo_drop <= '0'; + blocks_lost <= '0'; + + pack_data(to_integer(ser_count) * 16 + 15 downto to_integer(ser_count) * 16) <= fsm_in.data; + + if(ser_count = g_data_width/16 - 1) then + ser_count <= (others => '0'); + + if (ser_count = x"00") then -- ML: the case when g_data_width == 16 + fifo_sync <= got_next_subframe; + fifo_data(g_data_width-1 downto 0) <= pack_data(g_data_width-1 downto 0); + fifo_dvalid <= not is_escape; + pending_write <= '0'; + else + ser_count <= (others => '0'); + fifo_data(g_data_width-16-1 downto 0) <= pack_data(g_data_width-16-1 downto 0); + fifo_data(g_data_width-1 downto g_data_width-16) <= fsm_in.data; + fifo_dvalid <= '0'; + pending_write <= '1'; + end if; + if(word_count = g_expected_words_number) then + state <= EOF; + fifo_accept <= '1'; + fifo_drop <= '0'; + fifo_dvalid <= '1'; + else + word_count <= word_count + 1; + end if; + elsif(ser_count = g_data_width/16-2 and pending_write = '1') then + pending_write <= '0'; + ser_count <= ser_count + 1; + fifo_dvalid <= '1'; + fifo_sync <= got_next_subframe; + got_next_subframe <= '0'; + else + ser_count <= ser_count + 1; + fifo_dvalid <= '0'; + end if; + + end if; + else --of: elsif(fsm_in.dvalid = '1') then + fifo_dvalid <= '0'; + end if; + + if(fifo_dvalid = '1') then + fifo_sync <= '0'; + end if; + + + when EOF => + fifo_dvalid <= '0'; + fifo_drop <= '0'; + fifo_accept <= '0'; + state <= IDLE; + + end case; + end if; + end if; + end process; + + p_delay_fifo_accept : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + fifo_accept_d0 <= fifo_accept; + end if; + end process; + + rx_lost_p1_o <= frames_lost or blocks_lost; + rx_lost_blocks_p1_o <= blocks_lost; + rx_lost_frames_p1_o <= frames_lost; + rx_latency_o <= std_logic_vector(rx_latency); + rx_latency_valid_o <= rx_latency_valid; + crc_restart <= '1' when (state = FRAME_SEQ_ID or (is_escape = '1' and fsm_in.data(15) = '1')) else not rst_n_i; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrx_streamers_stats.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrx_streamers_stats.vhd new file mode 100644 index 000000000..d2257ce57 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrx_streamers_stats.vhd @@ -0,0 +1,231 @@ +------------------------------------------------------------------------------- +-- Title : WR Recpetion Streamers statistics +-- Project : White Rabbit Streamers +-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers +------------------------------------------------------------------------------- +-- File : xrx_streamers_stats.vhd +-- Author : Maciej Lipinski +-- Company : CERN +-- Created : 2017-04-19 +-- Platform : FPGA-generics +-- Standard : VHDL +------------------------------------------------------------------------------- +-- Description: +-- This module provies the reception portion of statistics and +-- allows to snapshot their values. See xrtx_streamers_stats for +-- more detailed description. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2016 CERN/BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +--------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.NUMERIC_STD.ALL; + +library work; +use work.wishbone_pkg.all; -- needed for t_wishbone_slave_in, etc +use work.streamers_pkg.all; -- needed for streamers +use work.wr_fabric_pkg.all; -- neede for :t_wrf_source_in, etc +use work.wrcore_pkg.all; -- needed for t_generic_word_array +-- use work.wr_transmission_wbgen2_pkg.all; + +entity xrx_streamers_stats is + + generic ( + -- Width of frame counters + g_cnt_width : integer := 50; -- min:15, max:64, 50 bits should be ok for 50 years + g_acc_width : integer := 64 -- max value 64 + ); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + + -- input signals from streamers + rcvd_frame_i : in std_logic; + lost_block_i : in std_logic; + lost_frame_i : in std_logic; + lost_frames_cnt_i : in std_logic_vector(14 downto 0); + rcvd_latency_i : in std_logic_vector(27 downto 0); + rcvd_latency_valid_i : in std_logic; + tm_time_valid_i : in std_logic; + + snapshot_ena_i : in std_logic := '0'; + reset_stats_i : in std_logic; + ----------------------- statistics ---------------------------------------- + -- output statistics: tx/rx counters + rcvd_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0); + lost_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0); + lost_block_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0); + -- output statistics: latency + latency_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0); + latency_acc_overflow_o : out std_logic; + latency_acc_o : out std_logic_vector(g_acc_width-1 downto 0); + latency_max_o : out std_logic_vector(27 downto 0); + latency_min_o : out std_logic_vector(27 downto 0) + ); + +end xrx_streamers_stats; + +architecture rtl of xrx_streamers_stats is + + + signal rcvd_frame_cnt : unsigned(g_cnt_width-1 downto 0); + signal lost_frame_cnt : unsigned(g_cnt_width-1 downto 0); + signal lost_block_cnt : unsigned(g_cnt_width-1 downto 0); + signal latency_cnt : unsigned(g_cnt_width-1 downto 0); + + signal latency_max : std_logic_vector(27 downto 0); + signal latency_min : std_logic_vector(27 downto 0); + signal latency_acc : unsigned(g_acc_width-1+1 downto 0); + signal latency_acc_overflow: std_logic; + + -- snaphsot + signal rcvd_frame_cnt_d1 : unsigned(g_cnt_width-1 downto 0); + signal lost_frame_cnt_d1 : unsigned(g_cnt_width-1 downto 0); + signal lost_block_cnt_d1 : unsigned(g_cnt_width-1 downto 0); + signal latency_cnt_d1 : unsigned(g_cnt_width-1 downto 0); + + signal latency_max_d1 : std_logic_vector(27 downto 0); + signal latency_min_d1 : std_logic_vector(27 downto 0); + signal latency_acc_d1 : unsigned(g_acc_width-1+1 downto 0); + signal latency_acc_overflow_d1: std_logic; + + signal snapshot_ena_d1 : std_logic; + +begin + + ------------------------------------------------------------------------------------------- + -- frame/block statistics, i.e. lost, sent, received + ------------------------------------------------------------------------------------------- + -- process that counts: receved/lost frames + p_cnts: process(clk_i) + begin + if rising_edge(clk_i) then + if (rst_n_i = '0' or reset_stats_i = '1') then + rcvd_frame_cnt <= (others => '0'); + lost_frame_cnt <= (others => '0'); + lost_block_cnt <= (others => '0'); + else + -- count received frames + if(rcvd_frame_i = '1') then + rcvd_frame_cnt <= rcvd_frame_cnt + 1; + end if; + -- count lost frames + if(lost_frame_i = '1') then + lost_frame_cnt <= lost_frame_cnt + resize(unsigned(lost_frames_cnt_i),lost_frame_cnt'length); + end if; + -- count lost blocks + if(lost_block_i = '1') then + lost_block_cnt <= lost_block_cnt + 1; + end if; + end if; + end if; + end process; + + ------------------------------------------------------------------------------------------- + -- latency statistics + ------------------------------------------------------------------------------------------- + p_latency_stats: process(clk_i) + begin + if rising_edge(clk_i) then + if (rst_n_i = '0' or reset_stats_i = '1') then + latency_max <= (others => '0'); + latency_min <= (others => '1'); + latency_acc <= (others => '0'); + latency_cnt <= (others => '0'); + latency_acc_overflow <= '0'; + else + if(rcvd_latency_valid_i = '1' and tm_time_valid_i = '1') then + if(latency_max < rcvd_latency_i) then + latency_max <= rcvd_latency_i; + end if; + if(latency_min > rcvd_latency_i) then + latency_min <= rcvd_latency_i; + end if; + if(latency_acc(g_acc_width) ='1') then + latency_acc_overflow <= '1'; + end if; + latency_cnt <= latency_cnt + 1; + latency_acc <= latency_acc + resize(unsigned(rcvd_latency_i),latency_acc'length); + end if; + end if; + end if; + end process; + + ------------------------------------------------------------------------------------------- + -- snapshot + ------------------------------------------------------------------------------------------- + -- snapshot is used to expose to user coherent value, so that the count for accumulated + -- latency is coherent with the accumulated latency and the average can be accurately + -- calculated + ------------------------------------------------------------------------------------------- + + -- snapshot + p_stats_snapshot: process(clk_i) + begin + if rising_edge(clk_i) then + if (rst_n_i = '0') then + snapshot_ena_d1 <= '0'; + rcvd_frame_cnt_d1 <= (others=>'0'); + lost_frame_cnt_d1 <= (others=>'0'); + lost_block_cnt_d1 <= (others=>'0'); + latency_cnt_d1 <= (others=>'0'); + + latency_max_d1 <= (others=>'0'); + latency_min_d1 <= (others=>'0'); + latency_acc_d1 <= (others=>'0'); + latency_acc_overflow_d1 <= '0'; + else + if(snapshot_ena_i = '1' and snapshot_ena_d1 = '0') then + rcvd_frame_cnt_d1 <= rcvd_frame_cnt; + lost_frame_cnt_d1 <= lost_frame_cnt; + lost_block_cnt_d1 <= lost_block_cnt; + latency_cnt_d1 <= latency_cnt; + + latency_max_d1 <= latency_max; + latency_min_d1 <= latency_min; + latency_acc_d1 <= latency_acc; + latency_acc_overflow_d1 <= latency_acc_overflow; + end if; + snapshot_ena_d1 <= snapshot_ena_i; + end if; + end if; + end process; + + ------------------------------------------------------------------------------------------- + -- snapshot or current value + ------------------------------------------------------------------------------------------- + rcvd_frame_cnt_o <= std_logic_vector(rcvd_frame_cnt_d1) when (snapshot_ena_d1 = '1') else + std_logic_vector(rcvd_frame_cnt); + lost_frame_cnt_o <= std_logic_vector(lost_frame_cnt_d1) when (snapshot_ena_d1 = '1') else + std_logic_vector(lost_frame_cnt); + lost_block_cnt_o <= std_logic_vector(lost_block_cnt_d1) when (snapshot_ena_d1 = '1') else + std_logic_vector(lost_block_cnt); + latency_max_o <= latency_max_d1 when (snapshot_ena_d1 = '1') else + latency_max; + latency_min_o <= latency_min_d1 when (snapshot_ena_d1 = '1') else + latency_min; + latency_acc_o <= std_logic_vector(latency_acc_d1(g_acc_width-1 downto 0)) when (snapshot_ena_d1 = '1') else + std_logic_vector(latency_acc(g_acc_width-1 downto 0)); + latency_cnt_o <= std_logic_vector(latency_cnt_d1) when (snapshot_ena_d1 = '1') else + std_logic_vector(latency_cnt); + latency_acc_overflow_o <= latency_acc_overflow_d1 when (snapshot_ena_d1 = '1') else + latency_acc_overflow; + +end rtl; \ No newline at end of file diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xtx_streamer.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xtx_streamer.vhd new file mode 100644 index 000000000..fea78ab7e --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xtx_streamer.vhd @@ -0,0 +1,597 @@ +------------------------------------------------------------------------------- +-- Title : Reception streamer +-- Project : WR streamers +-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers +------------------------------------------------------------------------------- +-- File : xtx_streamer.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2012-11-02 +-- Platform : FPGA-generic +-- Standard : VHDL +------------------------------------------------------------------------------- +-- Description: A simple core demonstrating how to encapsulate a continuous +-- stream of data words into Ethernet frames, in a format that is accepted by +-- the White Rabbit PTP core. More info in the documentation. +------------------------------------------------------------------------------- +-- Copyright (c) 2012-2017 CERN/BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.wishbone_pkg.all; +use work.wr_fabric_pkg.all; +use work.gencores_pkg.all; +use work.genram_pkg.all; +use work.streamers_priv_pkg.all; +use work.streamers_pkg.all; + +entity xtx_streamer is + generic ( + -- Width of data words on tx_data_i, must be multiple of 16 bits. + g_data_width : integer := 32; + + -- Size of Tx buffer, in data words. + g_tx_buffer_size : integer := 256; + + -- Minimum number of data words in the TX buffer that will trigger transmission of an + -- Ethernet frame. It cannot be breater than g_tx_buffer_size; it is recommended that + -- g_tx_buffer_size = 2 * g_tx_threshold. + -- Note that in order for a frame to be transmitted, the buffer must conatain at + -- least one complete block. + g_tx_threshold : integer := 128; + + -- Maximum number of data words in a single Ethernet frame. It also defines + -- the maximum block size (since blocks can't be currently split across + -- multiple frames). It cannot be greater than g_tx_buffer_size + g_tx_max_words_per_frame : integer := 256; + + -- Transmission timeout (in clk_sys_i cycles), after which the contents + -- of TX buffer are sent regardless of the amount of data that is currently + -- stored in the buffer, so that data in the buffer does not get stuck. + g_tx_timeout : integer := 1024; + + -- DO NOT USE unless you know what you are doing + -- legacy stuff: the streamers initially used in Btrain did not check/insert the escape + -- code. This is justified if only one block of a known number of words is sent/expected + g_escape_code_disable : boolean := FALSE; + + -- simulation mode: it is set to override the startaup-timer, the value with which + -- the timer is overriden is set in the second generic + g_simulation : integer :=0; + -- startup counter, used only in simulatin mode (value in 16ns cycles) + g_sim_startup_cnt : integer := 6250-- 100us + ); + + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + -- Endpoint/WRC interface - packet source + src_i : in t_wrf_source_in; + src_o : out t_wrf_source_out; + + --------------------------------------------------------------------------- + -- WRC Timing interface, used for latency measurement + -- Caution: uses clk_ref_i clock domain! + --------------------------------------------------------------------------- + + -- White Rabbit reference clock + clk_ref_i : in std_logic := '0'; + + -- Time valid flag + tm_time_valid_i : in std_logic := '0'; + + -- TAI seconds + tm_tai_i : in std_logic_vector(39 downto 0) := x"0000000000"; + + -- Fractional part of the second (in clk_ref_i cycles) + tm_cycles_i : in std_logic_vector(27 downto 0) := x"0000000"; + + -- status of the link, in principle the tx can be done only if link is oK + link_ok_i : in std_logic := '1'; + --------------------------------------------------------------------------- + -- User interface + --------------------------------------------------------------------------- + + -- Data word to be sent. + tx_data_i : in std_logic_vector(g_data_width-1 downto 0); + + -- 1 indicates that the tx_data_i contains a valid data word. + tx_valid_i : in std_logic; + + -- Synchronous data request: if active, the user may send a data word in + -- the following clock cycle. + tx_dreq_o : out std_logic; + + -- Last signal. Can be used to indicate the last data word in a larger + -- block of samples (see documentation for more details). + tx_last_p1_i : in std_logic := '1'; + + -- Flush input. When asserted, the streamer will immediatly send out all + -- the data that is stored in its TX buffer, ignoring g_tx_timeout. + tx_flush_p1_i : in std_logic := '0'; + + -- Reset sequence number. When asserted, the internal sequence number + -- generator used to detect loss of frames is reset to 0. Advanced feature. + tx_reset_seq_i : in std_logic := '0'; + -- successfully sent streamer frame + tx_frame_p1_o : out std_logic; + -- Configuration + tx_streamer_cfg_i : in t_tx_streamer_cfg := c_tx_streamer_cfg_default + ); + +end xtx_streamer; + +architecture rtl of xtx_streamer is + + type t_tx_state is (IDLE, SOF, ETH_HEADER, FRAME_SEQ_ID, SUBFRAME_HEADER, PAYLOAD, CRC_WORD, PADDING, EOF); + + constant c_min_packet_size : integer := 32; + + signal tx_threshold_hit : std_logic; + signal tx_timeout_hit : std_logic; + signal tx_flush_latched : std_logic; + + signal tx_fifo_last, tx_fifo_we, tx_fifo_full, tx_fifo_empty, tx_fifo_rd : std_logic; + signal tx_fifo_q, tx_fifo_d : std_logic_vector(g_data_width downto 0); + signal state : t_tx_state; + signal seq_no, count : unsigned(14 downto 0); + signal ser_count : unsigned(7 downto 0); + signal word_count : unsigned(11 downto 0); --2^12 = 4096*2 bytes (can accommodate jambo frame) + signal total_words : unsigned(10 downto 0); + + signal timeout_counter : unsigned(11 downto 0); + + signal pack_data : std_logic_vector(15 downto 0); + + signal fsm_out, escaper, fab_src : t_pipe; + signal fsm_escape, fsm_escape_enable : std_logic; + + signal crc_en, crc_en_masked, crc_reset : std_logic; + signal crc_value : std_logic_vector(15 downto 0); + + signal tx_almost_empty, tx_almost_full : std_logic; + + signal buf_frame_count : unsigned(5 downto 0) := (others => '0'); + + + signal tag_cycles : std_logic_vector(27 downto 0); + signal tag_valid, tag_valid_latched : std_logic; + + signal link_ok_delay_cnt : unsigned(25 downto 0); + constant c_link_ok_rst_delay : unsigned(25 downto 0) := to_unsigned(62500000, 26);-- 1s + constant c_link_ok_rst_delay_sim : unsigned(25 downto 0) := to_unsigned(g_sim_startup_cnt, 26); + +begin -- rtl + + ------------------------------------------------------------------------------------------- + -- check sanity of input generics + ------------------------------------------------------------------------------------------- + assert g_tx_buffer_size >= g_tx_threshold + report "The size of the tx buffer must be greater or equal the tx threashold" + severity FAILURE; + + assert g_tx_buffer_size >= g_tx_max_words_per_frame + report "The size of tx buffer must be greater or equal the max number of words in frame" + severity FAILURE; + ------------------------------------------------------------------------------------------- + + U_tx_crc_generator : gc_crc_gen + generic map ( + g_polynomial => x"1021", + g_init_value => x"ffff", + g_residue => x"0000", + g_data_width => 16, + g_sync_reset => 1, + g_dual_width => 0, + g_registered_match_output => false, + g_registered_crc_output => false) + port map ( + clk_i => clk_sys_i, + rst_i => crc_reset, + restart_i => '0', + en_i => crc_en_masked, + data_i => fsm_out.data, + half_i => '0', + crc_o => crc_value); + + crc_en_masked <= crc_en and fsm_out.dvalid; + + U_Fab_Source : xwb_fabric_source + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + src_i => src_i, + src_o => src_o, + addr_i => c_WRF_DATA, + data_i => fab_src.data, + dvalid_i => fab_src.dvalid, + sof_i => fab_src.sof, + eof_i => fab_src.eof, + error_i => '0', + bytesel_i => '0', + dreq_o => fab_src.dreq); + + fab_src.sof <= fsm_out.sof; + fab_src.eof <= fsm_out.eof; + + + gen_escape: if (g_escape_code_disable = FALSE) generate + U_Insert_Escape : gc_escape_inserter + generic map ( + g_data_width => 16, + g_escape_code => x"cafe") + port map ( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + d_i => fsm_out.data, + d_insert_enable_i => fsm_escape_enable, + d_escape_i => fsm_escape, + d_valid_i => fsm_out.dvalid, + d_req_o => fsm_out.dreq, + + d_o => fab_src.data, + d_valid_o => fab_src.dvalid, + d_req_i => fab_src.dreq); + end generate gen_escape; + gen_no_escape: if (g_escape_code_disable = TRUE) generate + fab_src.data <= fsm_out.data; + fab_src.dvalid <= fsm_out.dvalid; + fsm_out.dreq <= fab_src.dreq; + end generate gen_no_escape; + + tx_fifo_we <= tx_valid_i and not tx_fifo_full; + tx_fifo_d <= tx_last_p1_i & tx_data_i; + + U_TX_Buffer : generic_sync_fifo + generic map ( + g_data_width => g_data_width + 1, + g_size => g_tx_buffer_size, + g_with_almost_full => true, + g_with_almost_empty => true, + g_almost_empty_threshold => g_tx_threshold, + g_almost_full_threshold => g_tx_buffer_size - 2, + g_show_ahead => true) + port map ( + rst_n_i => rst_n_i, + clk_i => clk_sys_i, + d_i => tx_fifo_d, + we_i => tx_fifo_we, + q_o => tx_fifo_q, + rd_i => tx_fifo_rd, + empty_o => tx_fifo_empty, + full_o => tx_fifo_full, + almost_empty_o => tx_almost_empty, + almost_full_o => tx_almost_full + ); + tx_fifo_rd <= '1' when (state = PAYLOAD and ser_count = g_data_width/16-1 and + fsm_out.dreq = '1' and tx_fifo_empty = '0') else + '0'; + tx_threshold_hit <= '1' when tx_almost_empty = '0' and (buf_frame_count /= 0) else '0'; + tx_fifo_last <= tx_fifo_q(g_data_width); + + U_Timestamper : pulse_stamper + port map ( + clk_ref_i => clk_ref_i, + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + pulse_a_i => fsm_out.sof, + tm_time_valid_i => tm_time_valid_i, + tm_tai_i => tm_tai_i, + tm_cycles_i => tm_cycles_i, + tag_tai_o => open, + tag_cycles_o => tag_cycles, + tag_valid_o => tag_valid); + + p_frame_counter : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + buf_frame_count <= (others => '0'); + else + if(tx_fifo_we = '1' and tx_last_p1_i = '1' and (tx_fifo_rd = '0' or tx_fifo_last = '0')) then + buf_frame_count <= buf_frame_count+ 1; + elsif((tx_fifo_we = '0' or tx_last_p1_i = '0') and (tx_fifo_rd = '1' and tx_fifo_last = '1')) then + buf_frame_count <= buf_frame_count - 1; + end if; + end if; + end if; + end process; + + p_tx_timeout : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + timeout_counter <= (others => '0'); + tx_timeout_hit <= '0'; + else + if(tx_fifo_empty = '0' and tx_threshold_hit = '0') then + timeout_counter <= timeout_counter + 1; + else + timeout_counter <= (others => '0'); + end if; + + if(timeout_counter = g_tx_timeout) then + tx_timeout_hit <= '1'; + else + tx_timeout_hit <= '0'; + end if; + end if; + end if; + end process; + + p_fsm : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + state <= IDLE; + fsm_out.sof <= '0'; + fsm_out.eof <= '0'; + fsm_out.dvalid <= '0'; + fsm_out.data <= (others => '0'); + count <= (others => '0'); + seq_no <= (others => '0'); + word_count <= (others => '0'); + crc_en <= '0'; + crc_reset <= '1'; + tx_frame_p1_o <= '0'; + tag_valid_latched <= '0'; + tx_flush_latched <= '0'; + fsm_escape_enable <= '0'; + fsm_escape <= '0'; + ser_count <= (others => '0'); + else + if(tx_reset_seq_i = '1') then + seq_no <= (others => '0'); + end if; + if(tag_valid = '1') then + tag_valid_latched <= '1'; -- overriden in IDLE + end if; + tx_flush_latched <= '0';-- overriden in IDLE + + case state is + when IDLE => + tag_valid_latched <= '0'; + tx_flush_latched <= tx_flush_p1_i or tx_timeout_hit; + crc_en <= '0'; + crc_reset <= '0'; + fsm_out.eof <= '0'; + tx_frame_p1_o <= '0'; + + if(fsm_out.dreq = '1' and (tx_flush_latched = '1' or tx_flush_p1_i = '1' or tx_threshold_hit = '1')) then + state <= SOF; + fsm_out.sof <= '1'; + end if; + + fsm_escape_enable <= '0'; + fsm_escape <= '0'; + + when SOF => + fsm_out.sof <= '0'; + ser_count <= (others => '0'); + state <= ETH_HEADER; + count <= (others => '0'); + word_count <= (others => '0'); + + when ETH_HEADER => + if(fsm_out.dreq = '1') then + case count(7 downto 0) is + when x"00" => + fsm_out.data <= tx_streamer_cfg_i.mac_target(47 downto 32); + count <= count + 1; + when x"01" => + fsm_out.data <= tx_streamer_cfg_i.mac_target(31 downto 16); + count <= count + 1; + when x"02" => + fsm_out.data <= tx_streamer_cfg_i.mac_target(15 downto 0); + count <= count + 1; + when x"03" => + fsm_out.data <= tx_streamer_cfg_i.mac_local(47 downto 32); + count <= count + 1; + when x"04" => + fsm_out.data <= tx_streamer_cfg_i.mac_local(31 downto 16); + count <= count + 1; + when x"05" => + fsm_out.data <= tx_streamer_cfg_i.mac_local(15 downto 0); + count <= count + 1; + when x"06" => + if(tx_streamer_cfg_i.qtag_ena = '0') then + fsm_out.data <= tx_streamer_cfg_i.ethertype; + else + fsm_out.data <= x"8100"; + end if; + count <= count + 1; + when x"07" => + if(tx_streamer_cfg_i.qtag_ena = '0') then + fsm_out.data <= tag_valid_latched & "000" & tag_cycles(27 downto 16); + else + fsm_out.data <= tx_streamer_cfg_i.qtag_prio & '0' & tx_streamer_cfg_i.qtag_vid; + end if; + count <= count + 1; + when x"08" => + if(tx_streamer_cfg_i.qtag_ena = '0') then + fsm_out.data <= tag_cycles(15 downto 0); + state <= FRAME_SEQ_ID; + else + fsm_out.data <= tx_streamer_cfg_i.ethertype; + end if; + count <= count + 1; + when x"09" => + fsm_out.data <= tag_valid_latched & "000" & tag_cycles(27 downto 16); + count <= count + 1; + when x"0A" => + fsm_out.data <= tag_cycles(15 downto 0); + state <= FRAME_SEQ_ID; + count <= count + 1; + when others => + fsm_out.data <= (others => 'X'); + count <= (others => 'X'); + end case; + fsm_out.dvalid <= '1'; + else + fsm_out.dvalid <= '0'; + end if; + when FRAME_SEQ_ID => + if(fsm_out.dreq = '1') then + fsm_out.data <= '1' & std_logic_vector(seq_no); + seq_no <= seq_no + 1; + count <= "000" & x"001"; + fsm_out.dvalid <= '1'; + fsm_escape <= '0'; + fsm_escape_enable <= '1'; + crc_en <= '1'; + crc_reset <= '0'; + state <= PAYLOAD; + else + fsm_out.dvalid <= '0'; + end if; + + when SUBFRAME_HEADER => + crc_en <= '1'; + crc_reset <= '0'; + + if(fsm_out.dreq = '1') then + fsm_out.dvalid <= '1'; + fsm_escape <= '1'; + fsm_escape_enable <= '1'; + fsm_out.data <= '1' & std_logic_vector(count); + count <= count + 1; + state <= PAYLOAD; + else + fsm_out.dvalid <= '0'; + fsm_out.data <= (others => 'X'); + end if; + + when PAYLOAD => + fsm_escape <= '0'; + + if(fsm_out.dreq = '1') then + -- next subframe? + if(tx_fifo_empty = '1' or (ser_count = g_data_width/16-1 and tx_fifo_last = '1')) then + state <= CRC_WORD; + end if; + + if(ser_count = g_data_width/16-1) then + word_count <= word_count + 1; + ser_count <= (others => '0'); + else + ser_count <= ser_count + 1; + end if; + + fsm_out.data <= tx_fifo_q((to_integer(ser_count) + 1)* 16 -1 downto to_integer(ser_count) * 16); + fsm_out.dvalid <= not tx_fifo_empty; + else + fsm_out.data <= (others => 'X'); + fsm_out.dvalid <= '0'; + end if; + + when CRC_WORD => + crc_en <= '0'; + ser_count <= (others => '0'); + + if(fsm_out.dreq = '1') then + fsm_out.dvalid <= '1'; + fsm_out.data <= crc_value; + + crc_reset <= '1'; + + if(tx_fifo_empty = '1' or word_count >= g_tx_max_words_per_frame) then + state <= PADDING; + else + state <= SUBFRAME_HEADER; + end if; + else + fsm_out.data <= (others => 'X'); + fsm_out.dvalid <= '0'; + end if; + + when PADDING => + if(fsm_out.dreq = '1') then + fsm_escape <= '1'; + fsm_out.dvalid <= '1'; + fsm_out.data <= x"0bad"; + if(total_words >= c_min_packet_size) then + state <= EOF; + end if; + crc_reset <= '0'; + else + fsm_out.dvalid <= '0'; + fsm_out.data <= (others => 'X'); + end if; + + when EOF => + fsm_out.dvalid <= '0'; + if(fsm_out.dreq = '1') then + fsm_out.eof <= '1'; + tx_frame_p1_o <= '1'; + state <= IDLE; + end if; + end case; + end if; + end if; + end process; + + p_count_words : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + total_words <= (others => '0'); + else + if fsm_out.sof = '1' then + total_words <= (others => '0'); + elsif fsm_out.dvalid = '1' then + total_words <= total_words +1; + end if; + end if; + end if; + end process; + + -- after reset, leave some time before accepting requests. This delay + -- is dependent on link_ok signal. This is because after startup (and + -- any reset possibly) the PHY first shows link_ok but it is latter + -- restarted by softare... it is a bit of a mess in which we better + -- not send anything. Once this startup is done, we only relay on + -- link_ok, i.e. we do not accept requests when link_ok is false. + -- During operation (i.e. after start-up/reset, the behaviour of link_ok + -- signal is satisfactory + p_delay_reset: process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + if(g_simulation = 1) then + link_ok_delay_cnt <= c_link_ok_rst_delay_sim; + else + link_ok_delay_cnt <= c_link_ok_rst_delay; + end if; + else + -- first initial moments of link_ok_i high are ignored + if(link_ok_i = '1' and link_ok_delay_cnt > 0) then + link_ok_delay_cnt <= link_ok_delay_cnt-1; + end if; + end if; + end if; + end process; + + tx_dreq_o <= '0' when (link_ok_delay_cnt > 0) else + (not tx_almost_full) and link_ok_i; + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xtx_streamers_stats.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xtx_streamers_stats.vhd new file mode 100644 index 000000000..983e4e640 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xtx_streamers_stats.vhd @@ -0,0 +1,125 @@ +------------------------------------------------------------------------------- +-- Title : WR tx streamers statistics +-- Project : WR streamers +-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers +------------------------------------------------------------------------------- +-- File : xrtx_streamers_stats.vhd +-- Author : Maciej Lipinski +-- Company : CERN +-- Created : 2017-04-19 +-- Platform : FPGA-generics +-- Standard : VHDL +------------------------------------------------------------------------------- +-- Description: +-- This module provies the reception portion of statistics and +-- allows to snapshot their values. See xrtx_streamers_stats for +-- more detailed description. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2017 CERN/BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.NUMERIC_STD.ALL; + +library work; +use work.wishbone_pkg.all; -- needed for t_wishbone_slave_in, etc +use work.streamers_pkg.all; -- needed for streamers +use work.wr_fabric_pkg.all; -- neede for :t_wrf_source_in, etc +use work.wrcore_pkg.all; -- needed for t_generic_word_array +-- use work.wr_transmission_wbgen2_pkg.all; + +entity xtx_streamers_stats is + + generic ( + -- Width of frame counters + g_cnt_width : integer := 32 -- minimum 15 bits, max 32 + ); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + + -- input signals from streamers + sent_frame_i : in std_logic; + + -- statistic control + reset_stats_i : in std_logic; + snapshot_ena_i : in std_logic := '0'; + ----------------------- statistics ---------------------------------------- + -- output statistics: tx/rx counters + sent_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0) + ); + +end xtx_streamers_stats; + +architecture rtl of xtx_streamers_stats is + + signal sent_frame_cnt : unsigned(g_cnt_width-1 downto 0); + signal sent_frame_cnt_d1 : unsigned(g_cnt_width-1 downto 0); + signal snapshot_ena_d1 : std_logic; +begin + + ------------------------------------------------------------------------------------------- + -- frame/block statistics, i.e. lost, sent, received + ------------------------------------------------------------------------------------------- + -- process that counts + p_cnts: process(clk_i) + begin + if rising_edge(clk_i) then + if (rst_n_i = '0' or reset_stats_i = '1') then + sent_frame_cnt <= (others => '0'); + else + -- count sent frames + if(sent_frame_i = '1') then + sent_frame_cnt <= sent_frame_cnt + 1; + end if; + end if; + end if; + end process; + + ------------------------------------------------------------------------------------------- + -- snapshot + ------------------------------------------------------------------------------------------- + -- snapshot is used to expose to user coherent value, so that the count for accumulated + -- latency is coherent with the accumulated latency and the average can be accurately + -- calculated + ------------------------------------------------------------------------------------------- + p_stats_snapshot: process(clk_i) + begin + if rising_edge(clk_i) then + if (rst_n_i = '0') then + snapshot_ena_d1 <= '0'; + sent_frame_cnt_d1 <= (others=>'0'); + else + if(snapshot_ena_i = '1' and snapshot_ena_d1 = '0') then + sent_frame_cnt_d1 <= sent_frame_cnt; + end if; + snapshot_ena_d1 <= snapshot_ena_i; + end if; + end if; + end process; + + ------------------------------------------------------------------------------------------- + -- snapshot or current value + ------------------------------------------------------------------------------------------- + sent_frame_cnt_o <= std_logic_vector(sent_frame_cnt_d1) when (snapshot_ena_d1 = '1') else + std_logic_vector(sent_frame_cnt); + +end rtl; \ No newline at end of file diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xwr_streamers.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xwr_streamers.vhd new file mode 100644 index 000000000..774a54a37 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xwr_streamers.vhd @@ -0,0 +1,467 @@ +------------------------------------------------------------------------------- +-- Title : WR Streamrs +-- Project : WR Streamers +-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers +------------------------------------------------------------------------------- +-- File : xwr_streamers.vhd (renamed from xwr_transmission.vhd) +-- Author : Maciej Lipinski +-- Company : CERN +-- Platform : FPGA-generics +-- Standard : VHDL +-- Created : 2016-05-30 +------------------------------------------------------------------------------- +-- Description: +-- +-- This module is a top-level entity for WR streamers to be used conveniently +-- in application. It is inlcluded in the board top entity of wr-cores as one +-- of transportation means. +-- +-- It allows to send and receive streames of data over Ethernet network. In +-- other words, it provides communication over Ethernet network that looks as +-- FIFO: one one node (e.g. SPEC, the user writes to tx streamer words of +-- configureable size. These words are received by the rx streamer in another +-- node (e.g. SVEC) in the same order. +-- +-- This module wraps WR_Streamers-related stuff: i.e. +-- 1) IP core modules provided in wr-cores: xtx_streamer, xrx_streamer, +-- xrtx_streamers_stats +-- 2) wishbone registers that provide access to the statistics and streamer's +-- control/status registers. +-- +-- This module interfaces: +-- 1) WR PTP Core for transmission/reception of raw ethernet frames +-- 2) Application-specific module for transmission/reception of data +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2016 CERN/BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +--------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.NUMERIC_STD.ALL; + +library work; +use work.wishbone_pkg.all; -- needed for t_wishbone_slave_in, etc +use work.streamers_pkg.all; -- needed for streamers and c_WR_TRANS_ARR_SIZE_* +use work.wr_fabric_pkg.all; -- needed for :t_wrf_source_in, etc +use work.wrcore_pkg.all; -- needed for t_generic_word_array +use work.wr_streamers_wbgen2_pkg.all; +use work.streamers_priv_pkg.all; + +entity xwr_streamers is + generic ( + -- Indicates whether this module instantiates both streamers (rx and tx) or only one + -- of them. An application that only receives or only transmits might want to use + -- RX_ONLY or TX_ONLY mode to save resources. + g_streamers_op_mode : t_streamers_op_mode := TX_AND_RX; + ----------------------------------------------------------------------------------------- + -- Transmission/reception parameters + ----------------------------------------------------------------------------------------- + g_tx_streamer_params : t_tx_streamer_params := c_tx_streamer_params_defaut; + g_rx_streamer_params : t_rx_streamer_params := c_rx_streamer_params_defaut; + ----------------------------------------------------------------------------------------- + -- Statistics config + ----------------------------------------------------------------------------------------- + -- width of counters: frame rx/tx/lost, block lost, counter of accumuted latency + -- (min:15, max:64, 50 bits should be ok for 50 years) + g_stats_cnt_width : integer := 50; + -- width of latency accumulator (max value 64) + g_stats_acc_width : integer := 64; + ----------------------------------------------------------------------------------------- + -- WB I/F configuration + ----------------------------------------------------------------------------------------- + g_slave_mode : t_wishbone_interface_mode := CLASSIC; + g_slave_granularity : t_wishbone_address_granularity := BYTE; + g_simulation : integer := 0 + ); + + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + --------------------------------------------------------------------------- + -- WR tx/rx interface + --------------------------------------------------------------------------- + -- Tx + src_i : in t_wrf_source_in; + src_o : out t_wrf_source_out; + -- Rx + snk_i : in t_wrf_sink_in; + snk_o : out t_wrf_sink_out; + + --------------------------------------------------------------------------- + -- User tx interface + --------------------------------------------------------------------------- + -- Data word to be sent. + tx_data_i : in std_logic_vector(g_tx_streamer_params.data_width-1 downto 0); + -- 1 indicates that the tx_data_i contains a valid data word. + tx_valid_i : in std_logic; + -- Synchronous data request: if active, the user may send a data word in + -- the following clock cycle. + tx_dreq_o : out std_logic; + -- Last signal. Can be used to indicate the last data word in a larger + -- block of samples (see documentation for more details). + tx_last_p1_i : in std_logic := '1'; + -- Flush input. When asserted, the streamer will immediatly send out all + -- the data that is stored in its TX buffer, ignoring g_tx_timeout. + tx_flush_p1_i : in std_logic := '0'; + + --------------------------------------------------------------------------- + -- User rx interface + --------------------------------------------------------------------------- + -- 1 indicates the 1st word of the data block on rx_data_o. + rx_first_p1_o : out std_logic; + -- 1 indicates the last word of the data block on rx_data_o. + rx_last_p1_o : out std_logic; + -- Received data. + rx_data_o : out std_logic_vector(g_rx_streamer_params.data_width-1 downto 0); + -- 1 indicted that rx_data_o is outputting a valid data word. + rx_valid_o : out std_logic; + -- Synchronous data request input: when 1, the streamer may output another + -- data word in the subsequent clock cycle. + rx_dreq_i : in std_logic; + + --------------------------------------------------------------------------- + -- WRC Timing interface, used for latency measurement + --------------------------------------------------------------------------- + + -- White Rabbit reference clock + clk_ref_i : in std_logic := '0'; + -- Time valid flag + tm_time_valid_i : in std_logic := '0'; + -- TAI seconds + tm_tai_i : in std_logic_vector(39 downto 0) := x"0000000000"; + -- Fractional part of the second (in clk_ref_i cycles) + tm_cycles_i : in std_logic_vector(27 downto 0) := x"0000000"; + + -- status of the link, in principle the tx can be done only if link is oK + link_ok_i : in std_logic; + -- wishbone interface + wb_slave_i : in t_wishbone_slave_in := cc_dummy_slave_in; + wb_slave_o : out t_wishbone_slave_out; + + snmp_array_o : out t_generic_word_array(c_WR_STREAMERS_ARR_SIZE_OUT-1 downto 0); + snmp_array_i : in t_generic_word_array(c_WR_STREAMERS_ARR_SIZE_IN -1 downto 0); + + ----------------------------------------------------------------------------------------- + -- Transmission and Reception configuration + ----------------------------------------------------------------------------------------- + tx_streamer_cfg_i : in t_tx_streamer_cfg := c_tx_streamer_cfg_default; + rx_streamer_cfg_i : in t_rx_streamer_cfg := c_rx_streamer_cfg_default + ); + +end xwr_streamers; + +architecture rtl of xwr_streamers is + + signal to_wb : t_wr_streamers_in_registers; + signal from_wb : t_wr_streamers_out_registers; + signal dbg_word : std_logic_vector(31 downto 0); + signal start_bit : std_logic_vector(from_wb.dbg_ctrl_start_byte_o'length-1+3 downto 0); + signal rx_data : std_logic_vector(g_rx_streamer_params.data_width-1 downto 0); + signal wb_regs_slave_in : t_wishbone_slave_in; + signal wb_regs_slave_out : t_wishbone_slave_out; + signal tx_frame : std_logic; + signal reset_time_tai : std_logic_vector(39 downto 0); + signal latency_acc : std_logic_vector(g_stats_acc_width-1 downto 0); + signal latency_cnt : std_logic_vector(g_stats_cnt_width-1 downto 0); + signal sent_frame_cnt_out : std_logic_vector(g_stats_cnt_width-1 downto 0); + signal rcvd_frame_cnt_out : std_logic_vector(g_stats_cnt_width-1 downto 0); + signal lost_frame_cnt_out : std_logic_vector(g_stats_cnt_width-1 downto 0); + signal lost_block_cnt_out : std_logic_vector(g_stats_cnt_width-1 downto 0); + signal rx_valid : std_logic; + + signal rx_latency_valid : std_logic; + signal rx_latency : std_logic_vector(27 downto 0); + signal rx_lost_frames : std_logic; + signal rx_lost_frames_cnt : std_logic_vector(14 downto 0); + signal rx_lost_blocks : std_logic; + signal rx_frame : std_logic; + + signal tx_streamer_cfg : t_tx_streamer_cfg; + signal rx_streamer_cfg : t_rx_streamer_cfg; + + -- for code cleanness + constant c_cw : integer := g_stats_cnt_width; + constant c_aw : integer := g_stats_acc_width; +begin + + ------------------------------------------------------------------------------------------- + -- Instantiate transmission streamer, if configured to do so + ------------------------------------------------------------------------------------------- + gen_tx: if(g_streamers_op_mode=TX_ONLY OR g_streamers_op_mode=TX_AND_RX) generate + U_TX: xtx_streamer + generic map( + g_data_width => g_tx_streamer_params.data_width, + g_tx_buffer_size => g_tx_streamer_params.buffer_size, + g_tx_threshold => g_tx_streamer_params.threshold, + g_tx_max_words_per_frame => g_tx_streamer_params.max_words_per_frame, + g_tx_timeout => g_tx_streamer_params.timeout, + g_escape_code_disable => g_tx_streamer_params.escape_code_disable, + g_simulation => g_simulation) + port map( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + src_i => src_i, + src_o => src_o, + clk_ref_i => clk_ref_i, + tm_time_valid_i => tm_time_valid_i, + tm_tai_i => tm_tai_i, + tm_cycles_i => tm_cycles_i, + link_ok_i => link_ok_i, + tx_data_i => tx_data_i, + tx_valid_i => tx_valid_i, + tx_dreq_o => tx_dreq_o, + tx_last_p1_i => tx_last_p1_i, + tx_flush_p1_i => tx_flush_p1_i, + tx_reset_seq_i => from_wb.sscr1_rst_seq_id_o, + tx_frame_p1_o => tx_frame, + tx_streamer_cfg_i => tx_streamer_cfg); + end generate gen_tx; + + gen_not_tx: if(g_streamers_op_mode=RX_ONLY) generate + src_o <= c_dummy_snk_in; + tx_dreq_o <= '0'; + tx_frame <= '0'; + end generate gen_not_tx; + + ------------------------------------------------------------------------------------------- + -- -- Instantiate reception streamer, if configured to do so + ------------------------------------------------------------------------------------------- + gen_rx: if(g_streamers_op_mode=RX_ONLY OR g_streamers_op_mode=TX_AND_RX) generate + U_RX: xrx_streamer + generic map( + g_data_width => g_rx_streamer_params.data_width, + g_buffer_size => g_rx_streamer_params.buffer_size, + g_escape_code_disable => g_rx_streamer_params.escape_code_disable, + g_expected_words_number => g_rx_streamer_params.expected_words_number + ) + port map( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + snk_i => snk_i, + snk_o => snk_o, + clk_ref_i => clk_ref_i, + tm_time_valid_i => tm_time_valid_i, + tm_tai_i => tm_tai_i, + tm_cycles_i => tm_cycles_i, + rx_first_p1_o => rx_first_p1_o, + rx_last_p1_o => rx_last_p1_o, + rx_data_o => rx_data, + rx_valid_o => rx_valid, + rx_dreq_i => rx_dreq_i, + rx_lost_p1_o => rx_lost_blocks, + rx_lost_frames_p1_o => rx_lost_frames, + rx_lost_frames_cnt_o => rx_lost_frames_cnt, + rx_latency_o => rx_latency, + rx_latency_valid_o => rx_latency_valid, + rx_frame_p1_o => rx_frame, + rx_streamer_cfg_i => rx_streamer_cfg); + end generate gen_rx; + gen_not_rx: if(g_streamers_op_mode=TX_ONLY) generate + snk_o <= c_dummy_src_in; + rx_first_p1_o <= '0'; + rx_last_p1_o <= '0'; + rx_data <= (others => '0'); + rx_valid <= '0'; + end generate gen_not_rx; + + ------------------------------------------------------------------------------------------- + -- Instantiate statistics module - it calculates statistics of rx/tx frames + ------------------------------------------------------------------------------------------- + U_STATS: xrtx_streamers_stats + generic map( + g_streamers_op_mode => g_streamers_op_mode, + g_cnt_width => g_stats_cnt_width, + g_acc_width => g_stats_acc_width + ) + port map( + clk_i => clk_sys_i, + rst_n_i => rst_n_i, + sent_frame_i => tx_frame, + rcvd_frame_i => rx_frame, + lost_frame_i => rx_lost_frames, + lost_block_i => rx_lost_blocks, + lost_frames_cnt_i => rx_lost_frames_cnt, + rcvd_latency_i => rx_latency, + rcvd_latency_valid_i => rx_latency_valid, + clk_ref_i => clk_ref_i, + tm_time_valid_i => tm_time_valid_i, + tm_tai_i => tm_tai_i, + tm_cycles_i => tm_cycles_i, + reset_stats_i => from_wb.sscr1_rst_stats_o, + snapshot_ena_i => from_wb.sscr1_snapshot_stats_o, + reset_time_tai_o => reset_time_tai, + reset_time_cycles_o => to_wb.sscr1_rst_ts_cyc_i, + sent_frame_cnt_o => sent_frame_cnt_out, + rcvd_frame_cnt_o => rcvd_frame_cnt_out, + lost_frame_cnt_o => lost_frame_cnt_out, + lost_block_cnt_o => lost_block_cnt_out, + latency_cnt_o => latency_cnt, + latency_acc_o => latency_acc, + latency_max_o => to_wb.rx_stat0_rx_latency_max_i, + latency_min_o => to_wb.rx_stat1_rx_latency_min_i, + latency_acc_overflow_o => to_wb.sscr1_rx_latency_acc_overflow_i, + snmp_array_o => snmp_array_o(c_WRS_STATS_ARR_SIZE_OUT-1 downto 0), + snmp_array_i => snmp_array_i + ); + + to_wb.sscr2_rst_ts_tai_lsb_i <= reset_time_tai(31 downto 0); + to_wb.sscr3_rst_ts_tai_msb_i <= reset_time_tai(39 downto 32); + + assert (g_stats_acc_width <= 64 and g_stats_acc_width > 32) + report "g_stats_acc_width (c_aw) must be between 33 and 64" severity error; + assert (g_stats_cnt_width <= 64 and g_stats_cnt_width > 32) + report "g_stats_cnt_width (c_cw) must be between 33 and 64" severity error; + + to_wb.tx_stat2_tx_sent_cnt_lsb_i <= sent_frame_cnt_out(31 downto 0); + to_wb.tx_stat3_tx_sent_cnt_msb_i (c_cw-32-1 downto 0) <= sent_frame_cnt_out(c_cw-1 downto 32); + to_wb.rx_stat4_rx_rcvd_cnt_lsb_i <= rcvd_frame_cnt_out(31 downto 0); + to_wb.rx_stat5_rx_rcvd_cnt_msb_i (c_cw-32-1 downto 0) <= rcvd_frame_cnt_out(c_cw-1 downto 32); + to_wb.rx_stat6_rx_loss_cnt_lsb_i <= lost_frame_cnt_out(31 downto 0); + to_wb.rx_stat7_rx_loss_cnt_msb_i (c_cw-32-1 downto 0) <= lost_frame_cnt_out(c_cw-1 downto 32); + to_wb.rx_stat8_rx_lost_block_cnt_lsb_i <= lost_block_cnt_out(31 downto 0); + to_wb.rx_stat9_rx_lost_block_cnt_msb_i (c_cw-32-1 downto 0) <= lost_block_cnt_out(c_cw-1 downto 32); + to_wb.rx_stat10_rx_latency_acc_lsb_i <= latency_acc (31 downto 0); + to_wb.rx_stat11_rx_latency_acc_msb_i (c_aw-32-1 downto 0) <= latency_acc (c_aw-1 downto 32); + to_wb.rx_stat12_rx_latency_acc_cnt_lsb_i <= latency_cnt (31 downto 0); + to_wb.rx_stat13_rx_latency_acc_cnt_msb_i(c_cw-32-1 downto 0) <= latency_cnt (c_cw-1 downto 32); + + rx_data_o <= rx_data; + rx_valid_o <= rx_valid; + + ------------------------------------------------------------------------------------------- + -- Wishbone access to statistics and configuration + ------------------------------------------------------------------------------------------- + U_WB_ADAPTER : wb_slave_adapter + generic map ( + g_master_use_struct => true, + g_master_mode => CLASSIC, + g_master_granularity => WORD, + g_slave_use_struct => true, + g_slave_mode => g_slave_mode, + g_slave_granularity => g_slave_granularity) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + slave_i => wb_slave_i, + slave_o => wb_slave_o, + master_i => wb_regs_slave_out, + master_o => wb_regs_slave_in); + + U_WB: wr_streamers_wb + port map ( + rst_n_i => rst_n_i, + clk_sys_i => clk_sys_i, + wb_adr_i => wb_regs_slave_in.adr(5 downto 0), + wb_dat_i => wb_regs_slave_in.dat, + wb_dat_o => wb_regs_slave_out.dat, + wb_cyc_i => wb_regs_slave_in.cyc, + wb_sel_i => wb_regs_slave_in.sel(3 downto 0), + wb_stb_i => wb_regs_slave_in.stb, + wb_we_i => wb_regs_slave_in.we, + wb_ack_o => wb_regs_slave_out.ack, + wb_stall_o => wb_regs_slave_out.stall, + regs_i => to_wb, + regs_o => from_wb + ); + + ------------------------------------------------------------------------------------------- + -- Provide generic debugging through WB - user can read 32 bits from each send or received + -- word. It is possible to configure through WB which 32-bits of each word should be + -- "snooped". In particular, user can sent: + -- * whether he/she wishes to look at received or sent words + -- * the byte number at which the snooping shall start, i.e. say users sets byte=2, it means + -- that he will be able to read through wishbone bytes 3-6 of each word, provided the + -- word is of sufficient width + ------------------------------------------------------------------------------------------- + start_bit <= from_wb.dbg_ctrl_start_byte_o & "000"; + p_debug_mux: process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + dbg_word <= (others =>'0'); + else + if(from_wb.dbg_ctrl_mux_o = '1') then --rx + if(rx_valid = '1') then + dbg_word <= f_dbg_word_starting_at_bit(rx_data,start_bit,g_rx_streamer_params.data_width); + end if; + else -- tx + if(tx_valid_i = '1') then + dbg_word <= f_dbg_word_starting_at_bit(tx_data_i,start_bit,g_tx_streamer_params.data_width); + end if; + end if; + end if; + end if; + end process; + + snmp_array_o(c_WRS_STATS_ARR_SIZE_OUT) <= dbg_word; + snmp_array_o(c_WRS_STATS_ARR_SIZE_OUT+1) <= x"DEADBEEF"; + + to_wb.dbg_data_i <= dbg_word; + to_wb.dummy_dummy_i <= x"DEADBEEF"; + + ------------------------------------------------------------------------------------------- + -- set configuration: the user can access configuration through two channels: + -- 1) records (tx_streamer_cfg & rx_streamer_cfg) with input signals + -- 2) wishbone write + -- By default, the input signals are used. A user can overwrite this default + -- configuration using WB access. To override the default configuration two + -- values needs to be written: + -- 1) the value of a proper configuration, e.g.: tx_cfg0_ethertype, rx_cfg0_filter_remote + -- 2) bit that enables overriding of the configuration, e.g. cfg_or_tx_ethtype and + -- cfg_or_rx_ftr_remote_o respectively + -- The latter (overriding bit) is the so that user can first configure all values + -- that he wishes to and then enable all his desired configuration at the same instant. + -- Otherwise, during the transition (e.g. between writing lsb and msb of MAC), the + -- behaviour could be unpredictable. + ------------------------------------------------------------------------------------------- + -- tx config + tx_streamer_cfg.ethertype <= from_wb.tx_cfg0_ethertype_o when (from_wb.cfg_or_tx_ethtype_o='1') else + tx_streamer_cfg_i.ethertype; + tx_streamer_cfg.mac_local <= from_wb.tx_cfg2_mac_local_msb_o & + from_wb.tx_cfg1_mac_local_lsb_o when (from_wb.cfg_or_tx_mac_loc_o='1') else + tx_streamer_cfg_i.mac_local; + tx_streamer_cfg.mac_target <= from_wb.tx_cfg4_mac_target_msb_o & + from_wb.tx_cfg3_mac_target_lsb_o when (from_wb.cfg_or_tx_mac_tar_o='1') else + tx_streamer_cfg_i.mac_target; + tx_streamer_cfg.qtag_ena <= from_wb.tx_cfg5_qtag_ena_o when (from_wb.cfg_or_tx_qtag_o='1') else + tx_streamer_cfg_i.qtag_ena; + tx_streamer_cfg.qtag_vid <= from_wb.tx_cfg5_qtag_vid_o when (from_wb.cfg_or_tx_qtag_o='1') else + tx_streamer_cfg_i.qtag_vid; + tx_streamer_cfg.qtag_prio <= from_wb.tx_cfg5_qtag_prio_o when (from_wb.cfg_or_tx_qtag_o='1') else + tx_streamer_cfg_i.qtag_prio; + + -- rx config + rx_streamer_cfg.ethertype <= from_wb.rx_cfg0_ethertype_o when (from_wb.cfg_or_rx_ethertype_o='1') else + rx_streamer_cfg_i.ethertype; + rx_streamer_cfg.mac_local <= from_wb.rx_cfg2_mac_local_msb_o & + from_wb.rx_cfg1_mac_local_lsb_o when (from_wb.cfg_or_rx_mac_loc_o='1') else + rx_streamer_cfg_i.mac_local; + rx_streamer_cfg.mac_remote <= from_wb.rx_cfg4_mac_remote_msb_o & + from_wb.rx_cfg3_mac_remote_lsb_o when (from_wb.cfg_or_rx_mac_rem_o='1') else + rx_streamer_cfg_i.mac_remote; + rx_streamer_cfg.accept_broadcasts <= from_wb.rx_cfg0_accept_broadcast_o when (from_wb.cfg_or_rx_acc_broadcast_o='1') else + rx_streamer_cfg_i.accept_broadcasts; + rx_streamer_cfg.filter_remote <= from_wb.rx_cfg0_filter_remote_o when (from_wb.cfg_or_rx_ftr_remote_o='1') else + rx_streamer_cfg_i.filter_remote; + rx_streamer_cfg.fixed_latency <= from_wb.rx_cfg5_fixed_latency_o when (from_wb.cfg_or_rx_fix_lat_o='1') else + rx_streamer_cfg_i.fixed_latency; +end rtl; \ No newline at end of file diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_tbi_phy/disparity_gen_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_tbi_phy/disparity_gen_pkg.vhd new file mode 100644 index 000000000..3c23afa59 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_tbi_phy/disparity_gen_pkg.vhd @@ -0,0 +1,90 @@ +-- 8b10b disparity generator, based on 8b10b encoder core (c) Mathias Kreider + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +package disparity_gen_pkg is + + type t_8b10b_disparity is (RD_PLUS, RD_MINUS); + + function f_next_8b10b_disparity8 (cur_disp : t_8b10b_disparity; + ctrl : std_logic; + data : std_logic_vector) + return t_8b10b_disparity; + + function f_next_8b10b_disparity16 ( + cur_disp : t_8b10b_disparity; + ctrl : std_logic_vector; + data : std_logic_vector) + return t_8b10b_disparity; + + function to_std_logic(t : t_8b10b_disparity) return std_logic; + + + +end disparity_gen_pkg; + +package body disparity_gen_pkg is + + function f_next_8b10b_disparity8(cur_disp : t_8b10b_disparity; + ctrl : std_logic; + data : std_logic_vector) return t_8b10b_disparity is + + constant c_disPar_6b : std_logic_vector(0 to 31) := ("11101000100000011000000110010111"); + + constant c_disPar_4b : std_logic_vector(0 to 7) := ("10001001"); + variable dp4bit, dp6bit : std_logic; + variable new_disp : t_8b10b_disparity; + begin +-- use 3bit at 7-5 as index for 4bit code and disparity table \n + + dp4bit := c_disPar_4b(to_integer(unsigned(data(7 downto 5)))); + dp6bit := c_disPar_6b(to_integer(unsigned(data(4 downto 0)))); + + new_disp := cur_disp; + + case cur_disp is + when RD_MINUS => + if (ctrl xor dp6bit xor dp4bit) /= '0' then + new_disp := RD_PLUS; + end if; + + when RD_PLUS => + if (ctrl xor dp6bit xor dP4bit) /= '0' then + new_disp := RD_MINUS; + end if; + end case; + + if ( data(1 downto 0) /= "00" and ctrl = '1') then + new_disp := cur_disp; + end if; + + return new_disp; + end f_next_8b10b_disparity8; + + function f_next_8b10b_disparity16(cur_disp : t_8b10b_disparity; + ctrl : std_logic_vector; + data : std_logic_vector) return t_8b10b_disparity is + + variable tmp : t_8b10b_disparity; + variable msb : std_logic_vector(7 downto 0); + begin + + msb := data(15 downto 8); + tmp := f_next_8b10b_disparity8(cur_disp, ctrl(1), msb); + tmp := f_next_8b10b_disparity8(tmp, ctrl(0), data(7 downto 0)); + return tmp; + end f_next_8b10b_disparity16; + + function to_std_logic(t : t_8b10b_disparity) return std_logic is + begin + if(t = RD_MINUS) then + return '0'; + else + return '1'; + end if; + end to_std_logic; + +end package body; + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wr_core.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wr_core.vhd new file mode 100644 index 000000000..c87f5a405 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wr_core.vhd @@ -0,0 +1,1157 @@ +------------------------------------------------------------------------------- +-- Title : WhiteRabbit PTP Core +-- Project : WhiteRabbit +------------------------------------------------------------------------------- +-- File : wr_core.vhd +-- Author : Grzegorz Daniluk +-- Company : CERN (BE-CO-HT) +-- Created : 2011-02-02 +-- Last update: 2017-05-29 +-- Platform : FPGA-generics +-- Standard : VHDL +------------------------------------------------------------------------------- +-- Description: +-- WR PTP Core is a HDL module implementing a complete gigabit Ethernet +-- interface (MAC + PCS + PHY) with integrated PTP slave ordinary clock +-- compatible with White Rabbit protocol. It performs subnanosecond clock +-- synchronization via WR protocol and also acts as an Ethernet "gateway", +-- providing access to TX/RX interfaces of the built-in WR MAC. +-- +-- Starting from version 2.0 all modules are interconnected with pipelined +-- wishbone interface (using wb crossbars). Separate pipelined wishbone bus is +-- used for passing packets between Endpoint, Mini-NIC and External +-- MAC interface. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2012 - 2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Memory map: +-- 0x00000000: I/D Memory +-- 0x00020000: Peripheral interconnect +-- +0x000: Minic +-- +0x100: Endpoint +-- +0x200: Softpll +-- +0x300: PPS gen +-- +0x400: Syscon +-- +0x500: UART +-- +0x600: OneWire +-- +0x700: Auxillary space (Etherbone config, etc) +-- +0x800: WRPC diagnostics registers + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.wrcore_pkg.all; +use work.gencores_pkg.all; +use work.genram_pkg.all; +use work.wishbone_pkg.all; +use work.endpoint_pkg.all; +use work.wr_fabric_pkg.all; +use work.sysc_wbgen2_pkg.all; +use work.softpll_pkg.all; + +entity wr_core is + generic( + --if set to 1, then blocks in PCS use smaller calibration counter to speed + --up simulation + g_simulation : integer := 0; + g_with_external_clock_input : boolean := true; + -- + g_board_name : string := "NA "; + g_flash_secsz_kb : integer := 256; -- default for SVEC (M25P128) + g_flash_sdbfs_baddr : integer := 16#600000#; -- default for SVEC (M25P128) + g_phys_uart : boolean := true; + g_virtual_uart : boolean := true; + g_aux_clks : integer := 0; + g_rx_buffer_size : integer := 1024; + g_tx_runt_padding : boolean := true; + g_dpram_initf : string := "default"; + g_dpram_size : integer := 131072/4; --in 32-bit words + g_interface_mode : t_wishbone_interface_mode := PIPELINED; + g_address_granularity : t_wishbone_address_granularity := BYTE; + g_aux_sdb : t_sdb_device := c_wrc_periph3_sdb; + g_softpll_enable_debugger : boolean := false; + g_vuart_fifo_size : integer := 1024; + g_pcs_16bit : boolean := false; + g_records_for_phy : boolean := false; + g_diag_id : integer := 0; + g_diag_ver : integer := 0; + g_diag_ro_size : integer := 0; + g_diag_rw_size : integer := 0); + port( + --------------------------------------------------------------------------- + -- Clocks/resets + --------------------------------------------------------------------------- + + -- system reference clock (any frequency <= f(clk_ref_i)) + clk_sys_i : in std_logic; + + -- DDMTD offset clock (125.x MHz) + clk_dmtd_i : in std_logic; + + -- Timing reference (125 MHz) + clk_ref_i : in std_logic; + + -- Aux clocks (i.e. the FMC clock), which can be disciplined by the WR Core + clk_aux_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0'); + + clk_ext_mul_i : in std_logic := '0'; + clk_ext_mul_locked_i : in std_logic := '1'; + clk_ext_stopped_i : in std_logic := '0'; + clk_ext_rst_o : out std_logic; + + -- External 10 MHz reference (cesium, GPSDO, etc.), used in Grandmaster mode + clk_ext_i : in std_logic := '0'; + + -- External PPS input (cesium, GPSDO, etc.), used in Grandmaster mode + pps_ext_i : in std_logic := '0'; + + rst_n_i : in std_logic; + + ----------------------------------------- + --Timing system + ----------------------------------------- + dac_hpll_load_p1_o : out std_logic; + dac_hpll_data_o : out std_logic_vector(15 downto 0); + + dac_dpll_load_p1_o : out std_logic; + dac_dpll_data_o : out std_logic_vector(15 downto 0); + + -- PHY I/f + phy_ref_clk_i : in std_logic; + + phy_tx_data_o : out std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0); + phy_tx_k_o : out std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0); + phy_tx_disparity_i : in std_logic; + phy_tx_enc_err_i : in std_logic; + + phy_rx_data_i : in std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0); + phy_rx_rbclk_i : in std_logic; + phy_rx_k_i : in std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0); + phy_rx_enc_err_i : in std_logic; + phy_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_pcs_16bit)-1 downto 0); + + phy_rst_o : out std_logic; + phy_rdy_i : in std_logic := '1'; + phy_loopen_o : out std_logic; + phy_loopen_vec_o : out std_logic_vector(2 downto 0); + phy_tx_prbs_sel_o : out std_logic_vector(2 downto 0); + phy_sfp_tx_fault_i : in std_logic := '0'; + phy_sfp_los_i : in std_logic := '0'; + phy_sfp_tx_disable_o : out std_logic; + + -- PHY I/F record-based + phy8_o : out t_phy_8bits_from_wrc; + phy8_i : in t_phy_8bits_to_wrc := c_dummy_phy8_to_wrc; + phy16_o : out t_phy_16bits_from_wrc; + phy16_i : in t_phy_16bits_to_wrc := c_dummy_phy16_to_wrc; + + ----------------------------------------- + --GPIO + ----------------------------------------- + led_act_o : out std_logic; + led_link_o : out std_logic; + scl_o : out std_logic; + scl_i : in std_logic := '1'; + sda_o : out std_logic; + sda_i : in std_logic := '1'; + sfp_scl_o : out std_logic; + sfp_scl_i : in std_logic := '1'; + sfp_sda_o : out std_logic; + sfp_sda_i : in std_logic := '1'; + sfp_det_i : in std_logic := '1'; + btn1_i : in std_logic := '1'; + btn2_i : in std_logic := '1'; + spi_sclk_o : out std_logic; + spi_ncs_o : out std_logic; + spi_mosi_o : out std_logic; + spi_miso_i : in std_logic := '0'; + + ----------------------------------------- + --UART + ----------------------------------------- + uart_rxd_i : in std_logic := '1'; + uart_txd_o : out std_logic; + + ----------------------------------------- + -- 1-wire + ----------------------------------------- + owr_pwren_o : out std_logic_vector(1 downto 0); + owr_en_o : out std_logic_vector(1 downto 0); + owr_i : in std_logic_vector(1 downto 0) := (others => '1'); + + ----------------------------------------- + --External WB interface + ----------------------------------------- + wb_adr_i : in std_logic_vector(c_wishbone_address_width-1 downto 0) := (others => '0'); + wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0) := (others => '0'); + wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_sel_i : in std_logic_vector(c_wishbone_address_width/8-1 downto 0) := (others => '0'); + wb_we_i : in std_logic := '0'; + wb_cyc_i : in std_logic := '0'; + wb_stb_i : in std_logic := '0'; + wb_ack_o : out std_logic; + wb_err_o : out std_logic; + wb_rty_o : out std_logic; + wb_stall_o : out std_logic; + + ----------------------------------------- + -- Auxillary WB master + ----------------------------------------- + aux_adr_o : out std_logic_vector(c_wishbone_address_width-1 downto 0); + aux_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + aux_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0); + aux_sel_o : out std_logic_vector(c_wishbone_address_width/8-1 downto 0); + aux_we_o : out std_logic; + aux_cyc_o : out std_logic; + aux_stb_o : out std_logic; + aux_ack_i : in std_logic := '1'; + aux_stall_i : in std_logic := '0'; + + ----------------------------------------- + -- External Fabric I/F + ----------------------------------------- + ext_snk_adr_i : in std_logic_vector(1 downto 0) := "00"; + ext_snk_dat_i : in std_logic_vector(15 downto 0) := x"0000"; + ext_snk_sel_i : in std_logic_vector(1 downto 0) := "00"; + ext_snk_cyc_i : in std_logic := '0'; + ext_snk_we_i : in std_logic := '0'; + ext_snk_stb_i : in std_logic := '0'; + ext_snk_ack_o : out std_logic; + ext_snk_err_o : out std_logic; + ext_snk_stall_o : out std_logic; + + ext_src_adr_o : out std_logic_vector(1 downto 0); + ext_src_dat_o : out std_logic_vector(15 downto 0); + ext_src_sel_o : out std_logic_vector(1 downto 0); + ext_src_cyc_o : out std_logic; + ext_src_stb_o : out std_logic; + ext_src_we_o : out std_logic; + ext_src_ack_i : in std_logic := '1'; + ext_src_err_i : in std_logic := '0'; + ext_src_stall_i : in std_logic := '0'; + + ------------------------------------------ + -- External TX Timestamp I/F + ------------------------------------------ + txtsu_port_id_o : out std_logic_vector(4 downto 0); + txtsu_frame_id_o : out std_logic_vector(15 downto 0); + txtsu_ts_value_o : out std_logic_vector(31 downto 0); + txtsu_ts_incorrect_o : out std_logic; + txtsu_stb_o : out std_logic; + txtsu_ack_i : in std_logic := '1'; + + ----------------------------------------- + -- Timestamp helper signals, used for Absolute Calibration + ----------------------------------------- + abscal_txts_o : out std_logic; + abscal_rxts_o : out std_logic; + + ----------------------------------------- + -- Pause Frame Control + ----------------------------------------- + fc_tx_pause_req_i : in std_logic := '0'; + fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000"; + fc_tx_pause_ready_o : out std_logic; + + ----------------------------------------- + -- Timecode/Servo Control + ----------------------------------------- + + tm_link_up_o : out std_logic; + -- DAC Control + tm_dac_value_o : out std_logic_vector(23 downto 0); + tm_dac_wr_o : out std_logic_vector(g_aux_clks-1 downto 0); + -- Aux clock lock enable + tm_clk_aux_lock_en_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0'); + -- Aux clock locked flag + tm_clk_aux_locked_o : out std_logic_vector(g_aux_clks-1 downto 0); + -- Timecode output + tm_time_valid_o : out std_logic; + tm_tai_o : out std_logic_vector(39 downto 0); + tm_cycles_o : out std_logic_vector(27 downto 0); + -- 1PPS output + pps_csync_o : out std_logic; + pps_p_o : out std_logic; + pps_led_o : out std_logic; + + rst_aux_n_o : out std_logic; + + link_ok_o : out std_logic; + + ------------------------------------- + -- DIAG to/from external modules + ------------------------------------- + aux_diag_i : in t_generic_word_array(g_diag_ro_size-1 downto 0) := (others=>(others=>'0')); + aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0) + ); +end wr_core; + +architecture struct of wr_core is + + function f_choose_lm32_firmware_file return string is + begin + if(g_dpram_initf = "default") then + if(g_simulation /= 0) then + report "[WR Core] Using simulation LM32 firmware." severity note; + return "wrc-simulation.ram"; + else + report "[WR Core] Using release LM32 firmware." severity note; + return "wrc-release.ram"; + end if; + else + report "[WR Core] Using user-provided LM32 firmware." severity note; + return g_dpram_initf; + end if; + end function; + + function f_check_if_lm32_firmware_necessary return boolean is + begin + if(g_dpram_initf /= "") then + return true; + else + return false; + end if; + end function; + + ----------------------------------------------------------------------------- + --Local resets for peripheral + ----------------------------------------------------------------------------- + signal rst_wrc_n : std_logic; + signal rst_net_n : std_logic; + + ----------------------------------------------------------------------------- + --Local resets (resynced) + ----------------------------------------------------------------------------- + signal rst_net_resync_ref_n : std_logic; + signal rst_net_resync_ext_n : std_logic; + signal rst_net_resync_dmtd_n : std_logic; + signal rst_net_resync_rxclk_n : std_logic; + signal rst_net_resync_txclk_n : std_logic; + + ----------------------------------------------------------------------------- + --PPS generator + ----------------------------------------------------------------------------- + signal s_pps_csync : std_logic; + signal pps_valid : std_logic; + signal ppsg_link_ok: std_logic; + + signal ppsg_wb_in : t_wishbone_slave_in; + signal ppsg_wb_out : t_wishbone_slave_out; + + ----------------------------------------------------------------------------- + --Timing system + ----------------------------------------------------------------------------- + signal phy_rx_clk : std_logic; + signal phy_tx_clk : std_logic; + signal spll_wb_in : t_wishbone_slave_in; + signal spll_wb_out : t_wishbone_slave_out; + + ----------------------------------------------------------------------------- + --Endpoint + ----------------------------------------------------------------------------- + signal ep_txtsu_port_id : std_logic_vector(4 downto 0); + signal ep_txtsu_frame_id : std_logic_vector(15 downto 0); + signal ep_txtsu_ts_value : std_logic_vector(31 downto 0); + signal ep_txtsu_ts_incorrect : std_logic; + signal ep_txtsu_stb, ep_txtsu_ack : std_logic; + signal ep_led_link : std_logic; + + signal phy_rst : std_logic; + + constant c_mnic_memsize_log2 : integer := f_log2_size(g_dpram_size); + + ----------------------------------------------------------------------------- + --Mini-NIC + ----------------------------------------------------------------------------- + signal mnic_mem_data_o : std_logic_vector(31 downto 0); + signal mnic_mem_addr_o : std_logic_vector(c_mnic_memsize_log2-1 downto 0); + signal mnic_mem_wr_o : std_logic; + signal mnic_txtsu_ack : std_logic; + signal mnic_txtsu_stb : std_logic; + + ----------------------------------------------------------------------------- + --Dual-port RAM + ----------------------------------------------------------------------------- + signal dpram_wbb_i : t_wishbone_slave_in; + + ----------------------------------------------------------------------------- + --WB Peripherials + ----------------------------------------------------------------------------- + signal periph_slave_i : t_wishbone_slave_in_array(0 to 3); + signal periph_slave_o : t_wishbone_slave_out_array(0 to 3); + signal sysc_in_regs : t_sysc_in_registers; + signal sysc_out_regs : t_sysc_out_registers; + + ----------------------------------------------------------------------------- + --WB Secondary Crossbar + ----------------------------------------------------------------------------- + constant c_secbar_layout : t_sdb_record_array(8 downto 0) := + (0 => f_sdb_embed_device(c_xwr_mini_nic_sdb, x"00000000"), + 1 => f_sdb_embed_device(c_xwr_endpoint_sdb, x"00000100"), + 2 => f_sdb_embed_device(c_xwr_softpll_ng_sdb, x"00000200"), + 3 => f_sdb_embed_device(c_xwr_pps_gen_sdb, x"00000300"), + 4 => f_sdb_embed_device(c_wrc_periph0_sdb, x"00000400"), -- Syscon + 5 => f_sdb_embed_device(c_wrc_periph1_sdb, x"00000500"), -- UART + 6 => f_sdb_embed_device(c_wrc_periph2_sdb, x"00000600"), -- 1-Wire + 7 => f_sdb_embed_device(g_aux_sdb, x"00000700"), -- aux WB bus + 8 => f_sdb_embed_device(c_wrc_periph4_sdb, x"00000800") -- WRPC diag registers + ); + + constant c_secbar_sdb_address : t_wishbone_address := x"00000C00"; + constant c_secbar_bridge_sdb : t_sdb_bridge := + f_xwb_bridge_layout_sdb(true, c_secbar_layout, c_secbar_sdb_address); + + signal secbar_master_i : t_wishbone_master_in_array(8 downto 0); + signal secbar_master_o : t_wishbone_master_out_array(8 downto 0); + + ----------------------------------------------------------------------------- + --WB intercon + ----------------------------------------------------------------------------- + constant c_layout : t_sdb_record_array(1 downto 0) := + (0 => f_sdb_embed_device(f_xwb_dpram(g_dpram_size), x"00000000"), + 1 => f_sdb_embed_bridge(c_secbar_bridge_sdb, x"00020000")); + constant c_sdb_address : t_wishbone_address := x"00030000"; + + signal cbar_slave_i : t_wishbone_slave_in_array (2 downto 0); + signal cbar_slave_o : t_wishbone_slave_out_array(2 downto 0); + signal cbar_master_i : t_wishbone_master_in_array(1 downto 0); + signal cbar_master_o : t_wishbone_master_out_array(1 downto 0); + + ----------------------------------------------------------------------------- + --External WB interface + ----------------------------------------------------------------------------- + signal ext_wb_in : t_wishbone_slave_in; + signal ext_wb_out : t_wishbone_slave_out; + + ----------------------------------------------------------------------------- + -- External Tx TSU interface + ----------------------------------------------------------------------------- + + --===========================-- + -- For SPEC -- + --===========================-- + + signal hpll_auxout : std_logic_vector(2 downto 0); + signal dmpll_auxout : std_logic_vector(2 downto 0); + + signal clk_ref_slv : std_logic_vector(0 downto 0); + signal clk_rx_slv : std_logic_vector(0 downto 0); + + signal s_dummy_addr : std_logic_vector(31 downto 0); + + signal softpll_irq : std_logic; + + signal lm32_irq_slv : std_logic_vector(31 downto 0); + + + signal ep_wb_in : t_wishbone_slave_in; + signal ep_wb_out : t_wishbone_slave_out; + + signal minic_wb_in : t_wishbone_slave_in; + signal minic_wb_out : t_wishbone_slave_out; + + signal ep_src_out : t_wrf_source_out; + signal ep_src_in : t_wrf_source_in; + signal ep_snk_out : t_wrf_sink_out; + signal ep_snk_in : t_wrf_sink_in; + + + signal mux_src_out : t_wrf_source_out_array(1 downto 0); + signal mux_src_in : t_wrf_source_in_array(1 downto 0); + signal mux_snk_out : t_wrf_sink_out_array(1 downto 0); + signal mux_snk_in : t_wrf_sink_in_array(1 downto 0); + signal mux_class : t_wrf_mux_class(1 downto 0); + + signal spll_out_locked : std_logic_vector(g_aux_clks downto 0); + + signal dac_dpll_data : std_logic_vector(15 downto 0); + signal dac_dpll_sel : std_logic_vector(3 downto 0); + signal dac_dpll_load_p1 : std_logic; + + signal clk_fb : std_logic_vector(g_aux_clks downto 0); + signal out_enable : std_logic_vector(g_aux_clks downto 0); + + --component chipscope_ila + -- port ( + -- CONTROL : inout std_logic_vector(35 downto 0); + -- CLK : in std_logic; + -- TRIG0 : in std_logic_vector(31 downto 0); + -- TRIG1 : in std_logic_vector(31 downto 0); + -- TRIG2 : in std_logic_vector(31 downto 0); + -- TRIG3 : in std_logic_vector(31 downto 0)); + --end component; + + --component chipscope_icon + -- port ( + -- CONTROL0 : inout std_logic_vector (35 downto 0)); + --end component; + + --signal CONTROL : std_logic_vector(35 downto 0); + --signal CLK : std_logic; + --signal TRIG0 : std_logic_vector(31 downto 0); + --signal TRIG1 : std_logic_vector(31 downto 0); + --signal TRIG2 : std_logic_vector(31 downto 0); + --signal TRIG3 : std_logic_vector(31 downto 0); +begin + + ----------------------------------------------------------------------------- + -- PHY TX/RX clock selection based on generics + ----------------------------------------------------------------------------- + + GEN_16BIT_PHY_IF: if g_pcs_16bit and g_records_for_phy generate + phy_rx_clk <= phy16_i.rx_clk; + phy_tx_clk <= phy16_i.ref_clk; + end generate; + + GEN_8BIT_PHY_IF: if not g_pcs_16bit and g_records_for_phy generate + phy_rx_clk <= phy8_i.rx_clk; + phy_tx_clk <= phy8_i.ref_clk; + end generate; + + GEN_STD_PHY_IF: if not g_records_for_phy generate + phy_rx_clk <= phy_rx_rbclk_i; + phy_tx_clk <= phy_ref_clk_i; + end generate; + + ----------------------------------------------------------------------------- + -- Reset resync and distribution + ----------------------------------------------------------------------------- + + rst_aux_n_o <= rst_net_n; + + U_Sync_reset_refclk : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_ref_i, + rst_n_i => '1', + data_i => rst_net_n, + synced_o => rst_net_resync_ref_n); + + U_sync_reset_dmtd : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_dmtd_i, + rst_n_i => '1', + data_i => rst_net_n, + synced_o => rst_net_resync_dmtd_n); + + U_sync_reset_ext : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => clk_ext_i, + rst_n_i => '1', + data_i => rst_net_n, + synced_o => rst_net_resync_ext_n); + + U_sync_reset_rxclk : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => phy_rx_clk, + rst_n_i => '1', + data_i => rst_net_n, + synced_o => rst_net_resync_rxclk_n); + + U_sync_reset_txclk : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => phy_tx_clk, + rst_n_i => '1', + data_i => rst_net_n, + synced_o => rst_net_resync_txclk_n); + + ----------------------------------------------------------------------------- + -- PPS generator + ----------------------------------------------------------------------------- + PPS_GEN : xwr_pps_gen + generic map( + g_interface_mode => PIPELINED, + g_address_granularity => BYTE, + g_ref_clock_rate => f_refclk_rate(g_pcs_16bit), + g_ext_clock_rate => 10000000, + g_with_ext_clock_input => g_with_external_clock_input) + port map( + clk_ref_i => clk_ref_i, + clk_sys_i => clk_sys_i, + + rst_sys_n_i => rst_net_n, + rst_ref_n_i => rst_net_resync_ref_n, + + slave_i => ppsg_wb_in, + slave_o => ppsg_wb_out, + + -- used for fast masking of PPS output when link goes down + link_ok_i => ppsg_link_ok, + + -- Single-pulse PPS output for synchronizing endpoint to + pps_in_i => pps_ext_i, + pps_csync_o => s_pps_csync, + pps_out_o => pps_p_o, + pps_led_o => pps_led_o, + pps_valid_o => pps_valid, + + tm_utc_o => tm_tai_o, + tm_cycles_o => tm_cycles_o, + tm_time_valid_o => tm_time_valid_o + ); + ppsg_link_ok <= not phy_rst; + pps_csync_o <= s_pps_csync; + + ----------------------------------------------------------------------------- + -- Software PLL + ----------------------------------------------------------------------------- + U_SOFTPLL : xwr_softpll_ng + generic map( + g_with_ext_clock_input => g_with_external_clock_input, + g_reverse_dmtds => false, + g_divide_input_by_2 => not g_pcs_16bit, + g_with_debug_fifo => g_softpll_enable_debugger, + g_tag_bits => 22, + g_interface_mode => PIPELINED, + g_address_granularity => BYTE, + g_num_ref_inputs => 1, + g_num_outputs => 1 + g_aux_clks, + g_ref_clock_rate => f_refclk_rate(g_pcs_16bit), + g_ext_clock_rate => 10000000) + port map( + clk_sys_i => clk_sys_i, + rst_sys_n_i => rst_net_n, + rst_ref_n_i => rst_net_resync_ref_n, + rst_ext_n_i => rst_net_resync_ext_n, + rst_dmtd_n_i => rst_net_resync_dmtd_n, + + -- Reference inputs (i.e. the RX clocks recovered by the PHYs) + clk_ref_i(0) => phy_rx_clk, + -- Feedback clocks (i.e. the outputs of the main or aux oscillator) + clk_fb_i => clk_fb, + -- DMTD Offset clock + clk_dmtd_i => clk_dmtd_i, + + clk_ext_i => clk_ext_i, + clk_ext_mul_i => clk_ext_mul_i, + clk_ext_mul_locked_i => clk_ext_mul_locked_i, + clk_ext_stopped_i => clk_ext_stopped_i, + clk_ext_rst_o => clk_ext_rst_o, + + pps_csync_p1_i => s_pps_csync, + pps_ext_a_i => pps_ext_i, + + -- DMTD oscillator drive + dac_dmtd_data_o => dac_hpll_data_o, + dac_dmtd_load_o => dac_hpll_load_p1_o, + + -- Output channel DAC value + dac_out_data_o => dac_dpll_data, --: out std_logic_vector(15 downto 0); + -- Output channel select (0 = channel 0, etc. ) + dac_out_sel_o => dac_dpll_sel, --for now use only one output + dac_out_load_o => dac_dpll_load_p1, + + out_enable_i => out_enable, + + out_locked_o => spll_out_locked, + + slave_i => spll_wb_in, + slave_o => spll_wb_out, + + debug_o => open); + + clk_fb(0) <= clk_ref_i; + clk_fb(g_aux_clks downto 1) <= clk_aux_i; + out_enable(0) <= '1'; + out_enable(g_aux_clks downto 1) <= tm_clk_aux_lock_en_i; + + dac_dpll_data_o <= dac_dpll_data; + dac_dpll_load_p1_o <= '1' when (dac_dpll_load_p1 = '1' and dac_dpll_sel = x"0") else '0'; + + tm_dac_value_o <= x"00" & dac_dpll_data; + + p_decode_dac_writes : process(dac_dpll_load_p1, dac_dpll_sel) + begin + for i in 0 to g_aux_clks-1 loop + if dac_dpll_sel = std_logic_vector(to_unsigned(i+1, 4)) then + tm_dac_wr_o(i) <= dac_dpll_load_p1; + else + tm_dac_wr_o(i) <= '0'; + end if; + end loop; -- i + end process; + + locked_spll : if g_aux_clks > 0 generate + tm_clk_aux_locked_o <= spll_out_locked(g_aux_clks downto 1); + end generate; + + softpll_irq <= spll_wb_out.int; + + ----------------------------------------------------------------------------- + -- Endpoint + ----------------------------------------------------------------------------- + U_Endpoint : xwr_endpoint + generic map ( + g_interface_mode => PIPELINED, + g_address_granularity => BYTE, + g_simulation => f_int2bool(g_simulation), + g_tx_runt_padding => g_tx_runt_padding, + g_pcs_16bit => g_pcs_16bit, + g_records_for_phy => g_records_for_phy, + g_rx_buffer_size => g_rx_buffer_size, + g_with_rx_buffer => true, + g_with_flow_control => false, + g_with_timestamper => true, + g_with_dpi_classifier => true, + g_with_vlans => false, + g_with_rtu => false, + g_with_leds => true, + g_with_packet_injection => false, + g_use_new_rxcrc => true, + g_use_new_txcrc => false) + port map ( + clk_ref_i => clk_ref_i, + clk_sys_i => clk_sys_i, + clk_dmtd_i => clk_dmtd_i, + rst_sys_n_i => rst_net_n, + rst_ref_n_i => rst_net_resync_ref_n, + rst_dmtd_n_i => rst_net_resync_dmtd_n, + rst_txclk_n_i => rst_net_resync_txclk_n, + rst_rxclk_n_i => rst_net_resync_rxclk_n, + pps_csync_p1_i => s_pps_csync, + pps_valid_i => pps_valid, + + phy_rst_o => phy_rst, + phy_rdy_i => phy_rdy_i, + phy_loopen_o => phy_loopen_o, + phy_loopen_vec_o => phy_loopen_vec_o, + phy_tx_prbs_sel_o => phy_tx_prbs_sel_o, + phy_sfp_tx_fault_i => phy_sfp_tx_fault_i, + phy_sfp_los_i => phy_sfp_los_i, + phy_sfp_tx_disable_o => phy_sfp_tx_disable_o, + phy_ref_clk_i => phy_ref_clk_i, + phy_tx_data_o => phy_tx_data_o, + phy_tx_k_o => phy_tx_k_o, + phy_tx_disparity_i => phy_tx_disparity_i, + phy_tx_enc_err_i => phy_tx_enc_err_i, + phy_rx_data_i => phy_rx_data_i, + phy_rx_clk_i => phy_rx_rbclk_i, + phy_rx_k_i => phy_rx_k_i, + phy_rx_enc_err_i => phy_rx_enc_err_i, + phy_rx_bitslide_i => phy_rx_bitslide_i, + + phy8_o => phy8_o, + phy8_i => phy8_i, + phy16_o => phy16_o, + phy16_i => phy16_i, + + src_o => ep_src_out, + src_i => ep_src_in, + snk_o => ep_snk_out, + snk_i => ep_snk_in, + + txtsu_port_id_o => ep_txtsu_port_id, + txtsu_frame_id_o => ep_txtsu_frame_id, + txtsu_ts_value_o => ep_txtsu_ts_value, + txtsu_ts_incorrect_o => ep_txtsu_ts_incorrect, + txtsu_stb_o => ep_txtsu_stb, + txtsu_ack_i => ep_txtsu_ack, + wb_i => ep_wb_in, + wb_o => ep_wb_out, + rmon_events_o => open, + txts_o => abscal_txts_o, + rxts_o => abscal_rxts_o, + fc_tx_pause_req_i => fc_tx_pause_req_i, + fc_tx_pause_delay_i => fc_tx_pause_delay_i, + fc_tx_pause_ready_o => fc_tx_pause_ready_o, + led_link_o => ep_led_link, + led_act_o => led_act_o); + + led_link_o <= ep_led_link; + link_ok_o <= ep_led_link; + + tm_link_up_o <= ep_led_link; + + phy_rst_o <= phy_rst; + + ----------------------------------------------------------------------------- + -- Mini-NIC + ----------------------------------------------------------------------------- + MINI_NIC : xwr_mini_nic + generic map ( + g_interface_mode => PIPELINED, + g_address_granularity => BYTE, + g_tx_fifo_size => 1024, + g_rx_fifo_size => 2048, + g_buffer_little_endian => false) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_net_n, + + src_o => mux_snk_in(0), + src_i => mux_snk_out(0), + snk_o => mux_src_in(0), + snk_i => mux_src_out(0), + + txtsu_port_id_i => ep_txtsu_port_id, + txtsu_frame_id_i => ep_txtsu_frame_id, + txtsu_tsval_i => ep_txtsu_ts_value, + txtsu_tsincorrect_i => ep_txtsu_ts_incorrect, + txtsu_stb_i => mnic_txtsu_stb, + txtsu_ack_o => mnic_txtsu_ack, + + wb_i => minic_wb_in, + wb_o => minic_wb_out + ); + + lm32_irq_slv(31 downto 1) <= (others => '0'); + lm32_irq_slv(0) <= softpll_irq; -- according to the doc, it's active low. + + ----------------------------------------------------------------------------- + -- LM32 + ----------------------------------------------------------------------------- + LM32_CORE : xwb_lm32 + generic map(g_profile => "medium_icache") + port map( + clk_sys_i => clk_sys_i, + rst_n_i => rst_wrc_n, + irq_i => lm32_irq_slv, + + dwb_o => cbar_slave_i(0), + dwb_i => cbar_slave_o(0), + iwb_o => cbar_slave_i(1), + iwb_i => cbar_slave_o(1) + ); + + ----------------------------------------------------------------------------- + -- Dual-port RAM + ----------------------------------------------------------------------------- + DPRAM : xwb_dpram + generic map( + g_size => g_dpram_size, + g_init_file => f_choose_lm32_firmware_file, + g_must_have_init_file => f_check_if_lm32_firmware_necessary, + g_slave1_interface_mode => PIPELINED, + g_slave2_interface_mode => PIPELINED, + g_slave1_granularity => BYTE, + g_slave2_granularity => WORD) + port map( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + + slave1_i => cbar_master_o(0), + slave1_o => cbar_master_i(0), + slave2_i => dpram_wbb_i, + slave2_o => open + ); + + dpram_wbb_i.cyc <= '0'; + dpram_wbb_i.stb <= '0'; + dpram_wbb_i.adr <= (c_mnic_memsize_log2-1 downto 0 => '0', others=>'0'); --mnic_mem_addr_o; + dpram_wbb_i.sel <= "1111"; + dpram_wbb_i.we <= '0'; --mnic_mem_wr_o; + dpram_wbb_i.dat <= (others=>'0'); --mnic_mem_data_o; + + ----------------------------------------------------------------------------- + -- WB Peripherials + ----------------------------------------------------------------------------- + PERIPH : wrc_periph + generic map( + g_board_name => g_board_name, + g_flash_secsz_kb => g_flash_secsz_kb, + g_flash_sdbfs_baddr => g_flash_sdbfs_baddr, + g_phys_uart => g_phys_uart, + g_virtual_uart => g_virtual_uart, + g_mem_words => g_dpram_size, + g_vuart_fifo_size => g_vuart_fifo_size, + g_diag_id => g_diag_id, + g_diag_ver => g_diag_ver, + g_diag_ro_size => g_diag_ro_size, + g_diag_rw_size => g_diag_rw_size) + port map( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + rst_net_n_o => rst_net_n, + rst_wrc_n_o => rst_wrc_n, + + led_red_o => open, --led_red_o, + led_green_o => open, --led_green_o, + scl_o => scl_o, + scl_i => scl_i, + sda_o => sda_o, + sda_i => sda_i, + sfp_scl_o => sfp_scl_o, + sfp_scl_i => sfp_scl_i, + sfp_sda_o => sfp_sda_o, + sfp_sda_i => sfp_sda_i, + sfp_det_i => sfp_det_i, + memsize_i => "0000", + btn1_i => btn1_i, + btn2_i => btn2_i, + spi_sclk_o => spi_sclk_o, + spi_ncs_o => spi_ncs_o, + spi_mosi_o => spi_mosi_o, + spi_miso_i => spi_miso_i, + + slave_i => periph_slave_i, + slave_o => periph_slave_o, + + uart_rxd_i => uart_rxd_i, + uart_txd_o => uart_txd_o, + + owr_pwren_o => owr_pwren_o, + owr_en_o => owr_en_o, + owr_i => owr_i, + + diag_array_in => aux_diag_i, + diag_array_out => aux_diag_o + ); + + U_Adapter : wb_slave_adapter + generic map( + g_master_use_struct => true, + g_master_mode => PIPELINED, + g_master_granularity => BYTE, + g_slave_use_struct => false, + g_slave_mode => g_interface_mode, + g_slave_granularity => g_address_granularity) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + master_i => ext_wb_out, + master_o => ext_wb_in, + sl_adr_i => wb_adr_i, + sl_dat_i => wb_dat_i, + sl_sel_i => wb_sel_i, + sl_cyc_i => wb_cyc_i, + sl_stb_i => wb_stb_i, + sl_we_i => wb_we_i, + sl_dat_o => wb_dat_o, + sl_ack_o => wb_ack_o, + sl_err_o => wb_err_o, + sl_rty_o => wb_rty_o, + sl_stall_o => wb_stall_o); + + ----------------------------------------------------------------------------- + -- WB intercon + ----------------------------------------------------------------------------- + WB_CON : xwb_sdb_crossbar + generic map( + g_num_masters => 3, + g_num_slaves => 2, + g_registered => true, + g_wraparound => true, + g_layout => c_layout, + g_sdb_addr => c_sdb_address + ) + port map( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + -- Master connections (INTERCON is a slave) + slave_i => cbar_slave_i, + slave_o => cbar_slave_o, + -- Slave connections (INTERCON is a master) + master_i => cbar_master_i, + master_o => cbar_master_o + ); + + cbar_slave_i(2) <= ext_wb_in; + ext_wb_out <= cbar_slave_o(2); + + --chipscope_ila_1 : chipscope_ila + -- port map ( + -- CONTROL => CONTROL, + -- CLK => clk_sys_i, + -- TRIG0 => TRIG0, + -- TRIG1 => TRIG1, + -- TRIG2 => TRIG2, + -- TRIG3 => TRIG3); + + --chipscope_icon_1 : chipscope_icon + -- port map ( + -- CONTROL0 => CONTROL); + + --TRIG0(15 downto 0) <= ep_snk_in.dat; + --trig0(17 downto 16) <= ep_snk_in.adr; + --trig0(19 downto 18) <= ep_snk_in.sel; + --trig0(20) <= ep_snk_in.cyc; + --trig0(21) <= ep_snk_in.stb; + --trig0(22) <= ep_snk_in.we; + --trig0(23) <= ep_snk_out.ack; + --trig0(24) <= ep_snk_out.stall; + --trig0(26) <= ep_snk_out.err; + + --TRIG1(15 downto 0) <= mux_snk_in(0).dat; + --trig1(17 downto 16) <= mux_snk_in(0).adr; + --trig1(19 downto 18) <= mux_snk_in(0).sel; + --trig1(20) <= mux_snk_in(0).cyc; + --trig1(21) <= mux_snk_in(0).stb; + --trig1(22) <= mux_snk_in(0).we; + --trig1(23) <= mux_snk_out(0).ack; + --trig1(24) <= mux_snk_out(0).stall; + --trig1(26) <= mux_snk_out(0).err; + + --TRIG2(15 downto 0) <= mux_snk_in(1).dat; + --trig2(17 downto 16) <= mux_snk_in(1).adr; + --trig2(19 downto 18) <= mux_snk_in(1).sel; + --trig2(20) <= mux_snk_in(1).cyc; + --trig2(21) <= mux_snk_in(1).stb; + --trig2(22) <= mux_snk_in(1).we; + --trig2(23) <= mux_snk_out(1).ack; + --trig2(24) <= mux_snk_out(1).stall; + --trig2(26) <= mux_snk_out(1).err; + ----------------------------------------------------------------------------- + -- WB Secondary Crossbar + ----------------------------------------------------------------------------- + WB_SECONDARY_CON : xwb_sdb_crossbar + generic map( + g_num_masters => 1, + g_num_slaves => 9, + g_registered => true, + g_wraparound => true, + g_layout => c_secbar_layout, + g_sdb_addr => c_secbar_sdb_address + ) + port map( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + -- Master connections (INTERCON is a slave) + slave_i(0) => cbar_master_o(1), + slave_o(0) => cbar_master_i(1), + -- Slave connections (INTERCON is a master) + master_i => secbar_master_i, + master_o => secbar_master_o + ); + + secbar_master_i(0) <= minic_wb_out; + minic_wb_in <= secbar_master_o(0); + secbar_master_i(1) <= ep_wb_out; + ep_wb_in <= secbar_master_o(1); + secbar_master_i(2) <= spll_wb_out; + spll_wb_in <= secbar_master_o(2); + secbar_master_i(3) <= ppsg_wb_out; + ppsg_wb_in <= secbar_master_o(3); + --peripherials + secbar_master_i(4) <= periph_slave_o(0); + secbar_master_i(5) <= periph_slave_o(1); + secbar_master_i(6) <= periph_slave_o(2); + secbar_master_i(8) <= periph_slave_o(3); + periph_slave_i(0) <= secbar_master_o(4); + periph_slave_i(1) <= secbar_master_o(5); + periph_slave_i(2) <= secbar_master_o(6); + periph_slave_i(3) <= secbar_master_o(8); + + + aux_adr_o <= secbar_master_o(7).adr; + aux_dat_o <= secbar_master_o(7).dat; + aux_sel_o <= secbar_master_o(7).sel; + aux_cyc_o <= secbar_master_o(7).cyc; + aux_stb_o <= secbar_master_o(7).stb; + aux_we_o <= secbar_master_o(7).we; + + secbar_master_i(7).dat <= aux_dat_i; + secbar_master_i(7).ack <= aux_ack_i; + secbar_master_i(7).stall <= aux_stall_i; + secbar_master_i(7).err <= '0'; + secbar_master_i(7).rty <= '0'; + secbar_master_i(7).int <= '0'; + + --secbar_master_i(6).err <= '0'; + --secbar_master_i(5).err <= '0'; + --secbar_master_i(4).err <= '0'; + --secbar_master_i(3).err <= '0'; + --secbar_master_i(2).err <= '0'; + --secbar_master_i(1).err <= '0'; + --secbar_master_i(0).err <= '0'; + + --secbar_master_i(6).rty <= '0'; + --secbar_master_i(5).rty <= '0'; + --secbar_master_i(4).rty <= '0'; + --secbar_master_i(3).rty <= '0'; + --secbar_master_i(2).rty <= '0'; + --secbar_master_i(1).rty <= '0'; + --secbar_master_i(0).rty <= '0'; + + + + ----------------------------------------------------------------------------- + -- WBP MUX + ----------------------------------------------------------------------------- + U_WBP_Mux : xwrf_mux + generic map( + g_muxed_ports => 2) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_net_n, + ep_src_o => ep_snk_in, + ep_src_i => ep_snk_out, + ep_snk_o => ep_src_in, + ep_snk_i => ep_src_out, + mux_src_o => mux_src_out, + mux_src_i => mux_src_in, + mux_snk_o => mux_snk_out, + mux_snk_i => mux_snk_in, + mux_class_i => mux_class); + + mux_class(0) <= x"0f"; + mux_class(1) <= x"f0"; + ext_src_adr_o <= mux_src_out(1).adr; + ext_src_dat_o <= mux_src_out(1).dat; + ext_src_stb_o <= mux_src_out(1).stb; + ext_src_cyc_o <= mux_src_out(1).cyc; + ext_src_sel_o <= mux_src_out(1).sel; + ext_src_we_o <= '1'; + + mux_src_in(1).ack <= ext_src_ack_i; + mux_src_in(1).stall <= ext_src_stall_i; + mux_src_in(1).err <= ext_src_err_i; + mux_src_in(1).rty <= '0'; + + mux_snk_in(1).adr <= ext_snk_adr_i; + mux_snk_in(1).dat <= ext_snk_dat_i; + mux_snk_in(1).stb <= ext_snk_stb_i; + mux_snk_in(1).cyc <= ext_snk_cyc_i; + mux_snk_in(1).sel <= ext_snk_sel_i; + mux_snk_in(1).we <= ext_snk_we_i; + + ext_snk_ack_o <= mux_snk_out(1).ack; + ext_snk_err_o <= mux_snk_out(1).err; + ext_snk_stall_o <= mux_snk_out(1).stall; + + ----------------------------------------------------------------------------- + -- External Tx Timestamping I/F + ----------------------------------------------------------------------------- + txtsu_port_id_o <= ep_txtsu_port_id; + txtsu_frame_id_o <= ep_txtsu_frame_id; + txtsu_ts_value_o <= ep_txtsu_ts_value; + txtsu_ts_incorrect_o <= ep_txtsu_ts_incorrect; + + -- ts goes to external I/F + txtsu_stb_o <= '1' when (ep_txtsu_stb = '1' and (ep_txtsu_frame_id /= x"0000")) else + '0'; + -- ts goes to minic + mnic_txtsu_stb <= '1' when (ep_txtsu_stb = '1' and (ep_txtsu_frame_id = x"0000")) else + '0'; + + ep_txtsu_ack <= txtsu_ack_i or mnic_txtsu_ack; + +end struct; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_diags_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_diags_pkg.vhd new file mode 100644 index 000000000..1bedca028 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_diags_pkg.vhd @@ -0,0 +1,134 @@ +--------------------------------------------------------------------------------------- +-- Title : Wishbone slave core for WR Core Diagnostics +--------------------------------------------------------------------------------------- +-- File : wrc_diags_pkg.vhd +-- Author : auto-generated by wbgen2 from wrc_diags_wb.wb +-- Created : Mon Nov 27 13:37:56 2017 +-- Version : 0x00000001 +-- Standard : VHDL'87 +--------------------------------------------------------------------------------------- +-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE wrc_diags_wb.wb +-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY! +--------------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +package wrc_diags_wbgen2_pkg is + + + -- Input registers (user design -> WB slave) + + type t_wrc_diags_in_registers is record + ctrl_data_valid_i : std_logic; + wdiag_sstat_wr_mode_i : std_logic; + wdiag_sstat_servostate_i : std_logic_vector(3 downto 0); + wdiag_pstat_link_i : std_logic; + wdiag_pstat_locked_i : std_logic; + wdiag_ptpstat_ptpstate_i : std_logic_vector(7 downto 0); + wdiag_astat_aux_i : std_logic_vector(7 downto 0); + wdiag_txfcnt_i : std_logic_vector(31 downto 0); + wdiag_rxfcnt_i : std_logic_vector(31 downto 0); + wdiag_sec_msb_i : std_logic_vector(31 downto 0); + wdiag_sec_lsb_i : std_logic_vector(31 downto 0); + wdiag_ns_i : std_logic_vector(31 downto 0); + wdiag_mu_msb_i : std_logic_vector(31 downto 0); + wdiag_mu_lsb_i : std_logic_vector(31 downto 0); + wdiag_dms_msb_i : std_logic_vector(31 downto 0); + wdiag_dms_lsb_i : std_logic_vector(31 downto 0); + wdiag_asym_i : std_logic_vector(31 downto 0); + wdiag_cko_i : std_logic_vector(31 downto 0); + wdiag_setp_i : std_logic_vector(31 downto 0); + wdiag_ucnt_i : std_logic_vector(31 downto 0); + wdiag_temp_i : std_logic_vector(31 downto 0); + end record; + + constant c_wrc_diags_in_registers_init_value: t_wrc_diags_in_registers := ( + ctrl_data_valid_i => '0', + wdiag_sstat_wr_mode_i => '0', + wdiag_sstat_servostate_i => (others => '0'), + wdiag_pstat_link_i => '0', + wdiag_pstat_locked_i => '0', + wdiag_ptpstat_ptpstate_i => (others => '0'), + wdiag_astat_aux_i => (others => '0'), + wdiag_txfcnt_i => (others => '0'), + wdiag_rxfcnt_i => (others => '0'), + wdiag_sec_msb_i => (others => '0'), + wdiag_sec_lsb_i => (others => '0'), + wdiag_ns_i => (others => '0'), + wdiag_mu_msb_i => (others => '0'), + wdiag_mu_lsb_i => (others => '0'), + wdiag_dms_msb_i => (others => '0'), + wdiag_dms_lsb_i => (others => '0'), + wdiag_asym_i => (others => '0'), + wdiag_cko_i => (others => '0'), + wdiag_setp_i => (others => '0'), + wdiag_ucnt_i => (others => '0'), + wdiag_temp_i => (others => '0') + ); + + -- Output registers (WB slave -> user design) + + type t_wrc_diags_out_registers is record + ver_id_o : std_logic_vector(31 downto 0); + ctrl_data_snapshot_o : std_logic; + end record; + + constant c_wrc_diags_out_registers_init_value: t_wrc_diags_out_registers := ( + ver_id_o => (others => '0'), + ctrl_data_snapshot_o => '0' + ); + function "or" (left, right: t_wrc_diags_in_registers) return t_wrc_diags_in_registers; + function f_x_to_zero (x:std_logic) return std_logic; + function f_x_to_zero (x:std_logic_vector) return std_logic_vector; +end package; + +package body wrc_diags_wbgen2_pkg is +function f_x_to_zero (x:std_logic) return std_logic is +begin +if x = '1' then +return '1'; +else +return '0'; +end if; +end function; +function f_x_to_zero (x:std_logic_vector) return std_logic_vector is +variable tmp: std_logic_vector(x'length-1 downto 0); +begin +for i in 0 to x'length-1 loop +if x(i) = '1' then +tmp(i):= '1'; +else +tmp(i):= '0'; +end if; +end loop; +return tmp; +end function; +function "or" (left, right: t_wrc_diags_in_registers) return t_wrc_diags_in_registers is +variable tmp: t_wrc_diags_in_registers; +begin +tmp.ctrl_data_valid_i := f_x_to_zero(left.ctrl_data_valid_i) or f_x_to_zero(right.ctrl_data_valid_i); +tmp.wdiag_sstat_wr_mode_i := f_x_to_zero(left.wdiag_sstat_wr_mode_i) or f_x_to_zero(right.wdiag_sstat_wr_mode_i); +tmp.wdiag_sstat_servostate_i := f_x_to_zero(left.wdiag_sstat_servostate_i) or f_x_to_zero(right.wdiag_sstat_servostate_i); +tmp.wdiag_pstat_link_i := f_x_to_zero(left.wdiag_pstat_link_i) or f_x_to_zero(right.wdiag_pstat_link_i); +tmp.wdiag_pstat_locked_i := f_x_to_zero(left.wdiag_pstat_locked_i) or f_x_to_zero(right.wdiag_pstat_locked_i); +tmp.wdiag_ptpstat_ptpstate_i := f_x_to_zero(left.wdiag_ptpstat_ptpstate_i) or f_x_to_zero(right.wdiag_ptpstat_ptpstate_i); +tmp.wdiag_astat_aux_i := f_x_to_zero(left.wdiag_astat_aux_i) or f_x_to_zero(right.wdiag_astat_aux_i); +tmp.wdiag_txfcnt_i := f_x_to_zero(left.wdiag_txfcnt_i) or f_x_to_zero(right.wdiag_txfcnt_i); +tmp.wdiag_rxfcnt_i := f_x_to_zero(left.wdiag_rxfcnt_i) or f_x_to_zero(right.wdiag_rxfcnt_i); +tmp.wdiag_sec_msb_i := f_x_to_zero(left.wdiag_sec_msb_i) or f_x_to_zero(right.wdiag_sec_msb_i); +tmp.wdiag_sec_lsb_i := f_x_to_zero(left.wdiag_sec_lsb_i) or f_x_to_zero(right.wdiag_sec_lsb_i); +tmp.wdiag_ns_i := f_x_to_zero(left.wdiag_ns_i) or f_x_to_zero(right.wdiag_ns_i); +tmp.wdiag_mu_msb_i := f_x_to_zero(left.wdiag_mu_msb_i) or f_x_to_zero(right.wdiag_mu_msb_i); +tmp.wdiag_mu_lsb_i := f_x_to_zero(left.wdiag_mu_lsb_i) or f_x_to_zero(right.wdiag_mu_lsb_i); +tmp.wdiag_dms_msb_i := f_x_to_zero(left.wdiag_dms_msb_i) or f_x_to_zero(right.wdiag_dms_msb_i); +tmp.wdiag_dms_lsb_i := f_x_to_zero(left.wdiag_dms_lsb_i) or f_x_to_zero(right.wdiag_dms_lsb_i); +tmp.wdiag_asym_i := f_x_to_zero(left.wdiag_asym_i) or f_x_to_zero(right.wdiag_asym_i); +tmp.wdiag_cko_i := f_x_to_zero(left.wdiag_cko_i) or f_x_to_zero(right.wdiag_cko_i); +tmp.wdiag_setp_i := f_x_to_zero(left.wdiag_setp_i) or f_x_to_zero(right.wdiag_setp_i); +tmp.wdiag_ucnt_i := f_x_to_zero(left.wdiag_ucnt_i) or f_x_to_zero(right.wdiag_ucnt_i); +tmp.wdiag_temp_i := f_x_to_zero(left.wdiag_temp_i) or f_x_to_zero(right.wdiag_temp_i); +return tmp; +end function; +end package body; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_diags_wb.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_diags_wb.vhd new file mode 100644 index 000000000..99b6e9252 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_diags_wb.vhd @@ -0,0 +1,376 @@ +--------------------------------------------------------------------------------------- +-- Title : Wishbone slave core for WR Core Diagnostics +--------------------------------------------------------------------------------------- +-- File : wrc_diags_wb.vhd +-- Author : auto-generated by wbgen2 from wrc_diags_wb.wb +-- Created : Mon Nov 27 13:37:56 2017 +-- Version : 0x00000001 +-- Standard : VHDL'87 +--------------------------------------------------------------------------------------- +-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE wrc_diags_wb.wb +-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY! +--------------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.wrc_diags_wbgen2_pkg.all; + + +entity wrc_diags_wb is + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + regs_i : in t_wrc_diags_in_registers; + regs_o : out t_wrc_diags_out_registers + ); +end wrc_diags_wb; + +architecture syn of wrc_diags_wb is + +signal wrc_diags_ver_id_int : std_logic_vector(31 downto 0); +signal wrc_diags_ctrl_data_snapshot_int : std_logic ; +signal ack_sreg : std_logic_vector(9 downto 0); +signal rddata_reg : std_logic_vector(31 downto 0); +signal wrdata_reg : std_logic_vector(31 downto 0); +signal rwaddr_reg : std_logic_vector(4 downto 0); +signal ack_in_progress : std_logic ; + +begin +-- Some internal signals assignments + wrdata_reg <= wb_dat_i; +-- +-- Main register bank access process. + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + ack_sreg <= "0000000000"; + ack_in_progress <= '0'; + rddata_reg <= "00000000000000000000000000000000"; + wrc_diags_ver_id_int <= "00000000000000000000000000000001"; + wrc_diags_ctrl_data_snapshot_int <= '0'; + elsif rising_edge(clk_sys_i) then +-- advance the ACK generator shift register + ack_sreg(8 downto 0) <= ack_sreg(9 downto 1); + ack_sreg(9) <= '0'; + if (ack_in_progress = '1') then + if (ack_sreg(0) = '1') then + ack_in_progress <= '0'; + else + end if; + else + if ((wb_cyc_i = '1') and (wb_stb_i = '1')) then + case rwaddr_reg(4 downto 0) is + when "00000" => + if (wb_we_i = '1') then + wrc_diags_ver_id_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= wrc_diags_ver_id_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00001" => + if (wb_we_i = '1') then + wrc_diags_ctrl_data_snapshot_int <= wrdata_reg(8); + end if; + rddata_reg(0) <= regs_i.ctrl_data_valid_i; + rddata_reg(8) <= wrc_diags_ctrl_data_snapshot_int; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00010" => + if (wb_we_i = '1') then + end if; + rddata_reg(0) <= regs_i.wdiag_sstat_wr_mode_i; + rddata_reg(11 downto 8) <= regs_i.wdiag_sstat_servostate_i; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00011" => + if (wb_we_i = '1') then + end if; + rddata_reg(0) <= regs_i.wdiag_pstat_link_i; + rddata_reg(1) <= regs_i.wdiag_pstat_locked_i; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00100" => + if (wb_we_i = '1') then + end if; + rddata_reg(7 downto 0) <= regs_i.wdiag_ptpstat_ptpstate_i; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00101" => + if (wb_we_i = '1') then + end if; + rddata_reg(7 downto 0) <= regs_i.wdiag_astat_aux_i; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00110" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.wdiag_txfcnt_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00111" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.wdiag_rxfcnt_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01000" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.wdiag_sec_msb_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01001" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.wdiag_sec_lsb_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01010" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.wdiag_ns_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01011" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.wdiag_mu_msb_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01100" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.wdiag_mu_lsb_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01101" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.wdiag_dms_msb_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01110" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.wdiag_dms_lsb_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01111" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.wdiag_asym_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "10000" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.wdiag_cko_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "10001" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.wdiag_setp_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "10010" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.wdiag_ucnt_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "10011" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.wdiag_temp_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when others => +-- prevent the slave from hanging the bus on invalid address + ack_in_progress <= '1'; + ack_sreg(0) <= '1'; + end case; + end if; + end if; + end if; + end process; + + +-- Drive the data output bus + wb_dat_o <= rddata_reg; +-- Version identifier + regs_o.ver_id_o <= wrc_diags_ver_id_int; +-- WR DIAG data valid +-- WR DIAG data snapshot + regs_o.ctrl_data_snapshot_o <= wrc_diags_ctrl_data_snapshot_int; +-- WR valid +-- Servo State +-- Link Status +-- PLL Locked +-- PTP State +-- AUX channel +-- Data +-- Data +-- Data +-- Data +-- Data +-- Data +-- Data +-- Data +-- Data +-- Data +-- Data +-- Data +-- Data +-- Data + rwaddr_reg <= wb_adr_i; + wb_stall_o <= (not ack_sreg(0)) and (wb_stb_i and wb_cyc_i); +-- ACK signal generation. Just pass the LSB of ACK counter. + wb_ack_o <= ack_sreg(0); +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_periph.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_periph.vhd new file mode 100644 index 000000000..ee6035524 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_periph.vhd @@ -0,0 +1,520 @@ +------------------------------------------------------------------------------- +-- Title : WhiteRabbit PTP Core peripherials +-- Project : WhiteRabbit +------------------------------------------------------------------------------- +-- File : wrc_periph.vhd +-- Author : Grzegorz Daniluk +-- Company : CERN (BE-CO-HT) +-- Created : 2011-04-04 +-- Last update: 2017-04-25 +-- Platform : FPGA-generics +-- Standard : VHDL +------------------------------------------------------------------------------- +-- Description: +-- WRC_PERIPH integrates WRC_SYSCON, UART/VUART, 1-Wire Master, WRPC_DIAGS +-- +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2012 - 2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.wrcore_pkg.all; +use work.wishbone_pkg.all; +use work.sysc_wbgen2_pkg.all; +use work.wrc_diags_wbgen2_pkg.all; + +entity wrc_periph is + generic( + g_board_name : string := "NA "; + g_flash_secsz_kb : integer := 256; -- default for SVEC (M25P128) + g_flash_sdbfs_baddr : integer := 16#600000#; -- default for SVEC (M25P128) + g_phys_uart : boolean := true; + g_virtual_uart : boolean := false; + g_cntr_period : integer := 62500; + g_mem_words : integer := 16384; --in 32-bit words + g_vuart_fifo_size : integer := 1024; + g_diag_id : integer := 0; + g_diag_ver : integer := 0; + g_diag_ro_size : integer := 0; + g_diag_rw_size : integer := 0 + ); + port( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + + rst_net_n_o : out std_logic; + rst_wrc_n_o : out std_logic; + + led_red_o : out std_logic; + led_green_o : out std_logic; + scl_o : out std_logic; + scl_i : in std_logic; + sda_o : out std_logic; + sda_i : in std_logic; + sfp_scl_o : out std_logic; + sfp_scl_i : in std_logic; + sfp_sda_o : out std_logic; + sfp_sda_i : in std_logic; + sfp_det_i : in std_logic; + memsize_i : in std_logic_vector(3 downto 0); + btn1_i : in std_logic; + btn2_i : in std_logic; + spi_sclk_o : out std_logic; + spi_ncs_o : out std_logic; + spi_mosi_o : out std_logic; + spi_miso_i : in std_logic; + + slave_i : in t_wishbone_slave_in_array(0 to 3); + slave_o : out t_wishbone_slave_out_array(0 to 3); + + uart_rxd_i : in std_logic; + uart_txd_o : out std_logic; + + -- 1-Wire + owr_pwren_o: out std_logic_vector(1 downto 0); + owr_en_o : out std_logic_vector(1 downto 0); + owr_i : in std_logic_vector(1 downto 0); + + -- optional diagnostics from external HDL modules + diag_array_in : in t_generic_word_array(g_diag_ro_size-1 downto 0) := (others=>(others=>'0')); + diag_array_out : out t_generic_word_array(g_diag_rw_size-1 downto 0) + ); +end wrc_periph; + +architecture struct of wrc_periph is + + function f_cnt_memsize(words : integer) return std_logic_vector is + begin + return std_logic_vector(to_unsigned(words * 4 / 1024 / 16 - 1, 4)); + -- *4 - to get size in bytes + -- /1024 - to get size in kB + -- /16 -1 - to get size in format of MEMSIZE@sysc_hwfr register + end f_cnt_memsize; + + function f_board_name_conv(name : string) return std_logic_vector is + variable ret : std_logic_vector(31 downto 0); + begin + assert (name'length= 4) + report "Board name has to be exactly 4 letters string" severity failure; + ret(31 downto 24) := std_logic_vector(to_unsigned(character'pos(name(1)), 8)); + ret(23 downto 16) := std_logic_vector(to_unsigned(character'pos(name(2)), 8)); + ret(15 downto 8) := std_logic_vector(to_unsigned(character'pos(name(3)), 8)); + ret( 7 downto 0) := std_logic_vector(to_unsigned(character'pos(name(4)), 8)); + return ret; + end f_board_name_conv; + + signal sysc_regs_i : t_sysc_in_registers; + signal sysc_regs_o : t_sysc_out_registers; + + signal cntr_div : unsigned(23 downto 0); + signal cntr_tics : unsigned(31 downto 0); + signal cntr_overflow : std_logic; + + signal rst_wrc_n_o_reg : std_logic := '1'; + signal diag_adr : unsigned(15 downto 0); + signal diag_dat : std_logic_vector(31 downto 0); + signal diag_out_regs : t_generic_word_array(g_diag_rw_size - 1 downto 0); + signal diag_in : t_generic_word_array(g_diag_ro_size + g_diag_rw_size-1 downto 0); + signal wrpc_diag_regs_in : t_wrc_diags_in_registers; + signal wrpc_diag_regs_out : t_wrc_diags_out_registers; + +begin + + rst_wrc_n_o <= rst_n_i and rst_wrc_n_o_reg; + process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if(rst_n_i = '0') then + rst_net_n_o <= '0'; + rst_wrc_n_o_reg <= '1'; + else + + if(sysc_regs_o.rstr_trig_wr_o = '1' and sysc_regs_o.rstr_trig_o = x"deadbee") then + rst_wrc_n_o_reg <= not sysc_regs_o.rstr_rst_o; + end if; + + rst_net_n_o <= not sysc_regs_o.gpsr_net_rst_o; + end if; + end if; + end process; + + ------------------------------------- + -- LEDs + ------------------------------------- + process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if(sysc_regs_o.gpsr_led_link_o = '1') then + led_red_o <= '1'; + elsif(sysc_regs_o.gpcr_led_link_o = '1') then + led_red_o <= '0'; + end if; + + if(sysc_regs_o.gpsr_led_stat_o = '1') then + led_green_o <= '1'; + elsif(sysc_regs_o.gpcr_led_stat_o = '1') then + led_green_o <= '0'; + end if; + end if; + end process; + + ------------------------------------- + -- buttons + ------------------------------------- + sysc_regs_i.gpsr_btn1_i <= btn1_i; + sysc_regs_i.gpsr_btn2_i <= btn2_i; + + ------------------------------------- + -- MEMSIZE + ------------------------------------- + sysc_regs_i.hwfr_memsize_i(3 downto 0) <= f_cnt_memsize(g_mem_words); + + ------------------------------------- + -- BOARD NAME and Flash info + ------------------------------------- + sysc_regs_i.hwir_name_i <= f_board_name_conv(g_board_name); + sysc_regs_i.hwfr_storage_sec_i <= std_logic_vector(to_unsigned(g_flash_secsz_kb, 16)); + sysc_regs_i.hwfr_storage_type_i <= "00"; -- for now these parameters are only for Flash + sysc_regs_i.sdbfs_baddr_i <= std_logic_vector(to_unsigned(g_flash_sdbfs_baddr, 32)); + + ------------------------------------- + -- TIMER + ------------------------------------- + sysc_regs_i.tvr_i <= std_logic_vector(cntr_tics); + sysc_regs_i.tcr_tdiv_i <= (others => '0'); + + process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if(rst_n_i = '0') then + cntr_div <= (others => '0'); + cntr_overflow <= '0'; + elsif(sysc_regs_o.tcr_enable_o = '1') then + if(cntr_div = g_cntr_period-1) then + cntr_div <= (others => '0'); + cntr_overflow <= '1'; + else + cntr_div <= cntr_div + 1; + cntr_overflow <= '0'; + end if; + end if; + end if; + end process; + + --msec counter + process(clk_sys_i) + begin + if(rising_edge(clk_sys_i)) then + if(rst_n_i = '0') then + cntr_tics <= (others => '0'); + elsif(cntr_overflow = '1') then + cntr_tics <= cntr_tics + 1; + end if; + end if; + end process; + + ------------------------------------- + -- I2C - FMC + ------------------------------------- + p_drive_i2c : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + scl_o <= '1'; + sda_o <= '1'; + else + if(sysc_regs_o.gpsr_fmc_sda_load_o = '1' and sysc_regs_o.gpsr_fmc_sda_o = '1') then + sda_o <= '1'; + elsif(sysc_regs_o.gpcr_fmc_sda_o = '1') then + sda_o <= '0'; + end if; + + if(sysc_regs_o.gpsr_fmc_scl_load_o = '1' and sysc_regs_o.gpsr_fmc_scl_o = '1') then + scl_o <= '1'; + elsif(sysc_regs_o.gpcr_fmc_scl_o = '1') then + scl_o <= '0'; + end if; + end if; + end if; + end process; + + sysc_regs_i.gpsr_fmc_sda_i <= sda_i; + sysc_regs_i.gpsr_fmc_scl_i <= scl_i; + + ------------------------------------- + -- I2C - SFP + ------------------------------------- + p_drive_sfpi2c : process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + sfp_scl_o <= '1'; + sfp_sda_o <= '1'; + else + if(sysc_regs_o.gpsr_sfp_sda_load_o = '1' and sysc_regs_o.gpsr_sfp_sda_o = '1') then + sfp_sda_o <= '1'; + elsif(sysc_regs_o.gpcr_sfp_sda_o = '1') then + sfp_sda_o <= '0'; + end if; + + if(sysc_regs_o.gpsr_sfp_scl_load_o = '1' and sysc_regs_o.gpsr_sfp_scl_o = '1') then + sfp_scl_o <= '1'; + elsif(sysc_regs_o.gpcr_sfp_scl_o = '1') then + sfp_scl_o <= '0'; + end if; + end if; + end if; + end process; + + sysc_regs_i.gpsr_sfp_sda_i <= sfp_sda_i; + sysc_regs_i.gpsr_sfp_scl_i <= sfp_scl_i; + + sysc_regs_i.gpsr_sfp_det_i <= sfp_det_i; + + ------------------------------------- + -- SPI - Flash + ------------------------------------- + p_drive_spi: process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + spi_sclk_o <= '0'; + spi_mosi_o <= '0'; + spi_ncs_o <= '1'; + else + if(sysc_regs_o.gpsr_spi_sclk_load_o = '1' and sysc_regs_o.gpsr_spi_sclk_o = '1') then + spi_sclk_o <= '1'; + elsif(sysc_regs_o.gpcr_spi_sclk_o = '1') then + spi_sclk_o <= '0'; + end if; + + if(sysc_regs_o.gpsr_spi_ncs_load_o = '1' and sysc_regs_o.gpsr_spi_ncs_o = '1') then + spi_ncs_o <= '1'; + elsif(sysc_regs_o.gpcr_spi_cs_o = '1') then + spi_ncs_o <= '0'; + end if; + + if(sysc_regs_o.gpsr_spi_mosi_load_o = '1' and sysc_regs_o.gpsr_spi_mosi_o = '1') then + spi_mosi_o <= '1'; + elsif(sysc_regs_o.gpcr_spi_mosi_o = '1') then + spi_mosi_o <= '0'; + end if; + end if; + end if; + end process; + sysc_regs_i.gpsr_spi_sclk_i <= '0'; + sysc_regs_i.gpsr_spi_ncs_i <= '0'; + sysc_regs_i.gpsr_spi_mosi_i <= '0'; + sysc_regs_i.gpsr_spi_miso_i <= spi_miso_i; + + + ------------------------------------- + -- DIAG to/from external modules + ------------------------------------- + -- first, provide all the constants + sysc_regs_i.diag_info_id_i <= std_logic_vector(to_unsigned(g_diag_id, 16)); + sysc_regs_i.diag_info_ver_i <= std_logic_vector(to_unsigned(g_diag_ver, 16)); + sysc_regs_i.diag_nw_ro_i <= std_logic_vector(to_unsigned(g_diag_ro_size, 16)); + sysc_regs_i.diag_nw_rw_i <= std_logic_vector(to_unsigned(g_diag_rw_size, 16)); + + diag_array_out <= diag_out_regs; + -- r/w registers can be also read + diag_in(g_diag_rw_size - 1 downto 0) <= diag_out_regs; + -- r/o array after r/w registers for reading + diag_in(g_diag_ro_size + g_diag_rw_size-1 downto g_diag_rw_size) <= diag_array_in; + + p_diag_rw: process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + diag_adr <= (others=>'0'); + diag_dat <= (others=>'0'); + else + if sysc_regs_o.diag_cr_adr_load_o = '1' then + diag_adr <= unsigned(sysc_regs_o.diag_cr_adr_o); + end if; + if sysc_regs_o.diag_dat_load_o = '1' then + diag_dat <= sysc_regs_o.diag_dat_o; + end if; + end if; + end if; + end process; + + sysc_regs_i.diag_cr_adr_i <= std_logic_vector(diag_adr); + GEN_DIAG_NODAT: if g_diag_rw_size = 0 and g_diag_ro_size = 0 generate + sysc_regs_i.diag_dat_i <= (others=>'0'); + end generate; + GEN_DIAG_DAT: if g_diag_rw_size /= 0 or g_diag_ro_size /= 0 generate + sysc_regs_i.diag_dat_i <= diag_in(to_integer(diag_adr)); + end generate; + + -- Write request for each r/w register + GEN_DIAG_W: if g_diag_rw_size > 0 generate + GEN_LOOP: for I in 0 to g_diag_rw_size-1 generate + + process(clk_sys_i) + begin + if rising_edge(clk_sys_i) then + if rst_n_i = '0' then + diag_out_regs(I) <= (others=>'0'); + elsif sysc_regs_o.diag_cr_adr_load_o = '1' and sysc_regs_o.diag_cr_rw_o = '1' and + to_integer(unsigned(sysc_regs_o.diag_cr_adr_o)) = I then + diag_out_regs(I) <= diag_dat; + end if; + end if; + end process; + + end generate; + end generate; + + GEN_NODIAG_W: if g_diag_rw_size = 0 generate + diag_array_out <= (others=>(others=>'0')); + end generate; + + ---------------------------------------- + -- SYSCON + ---------------------------------------- + SYSCON : entity work.wrc_syscon_wb + port map ( + rst_n_i => rst_n_i, + clk_sys_i => clk_sys_i, + wb_adr_i => slave_i(0).adr(6 downto 2), -- shift address for word addressing + wb_dat_i => slave_i(0).dat, + wb_dat_o => slave_o(0).dat, + wb_cyc_i => slave_i(0).cyc, + wb_sel_i => slave_i(0).sel, + wb_stb_i => slave_i(0).stb, + wb_we_i => slave_i(0).we, + wb_ack_o => slave_o(0).ack, + wb_stall_o => slave_o(0).stall, + regs_i => sysc_regs_i, + regs_o => sysc_regs_o); + + slave_o(0).err <= '0'; + slave_o(0).rty <= '0'; + slave_o(0).int <= '0'; + + -------------------------------------- + -- UART + -------------------------------------- + UART : xwb_simple_uart + generic map( + g_with_virtual_uart => g_virtual_uart, + g_with_physical_uart => g_phys_uart, + g_interface_mode => PIPELINED, + g_address_granularity => BYTE, + g_vuart_fifo_size => g_vuart_fifo_size + ) + port map( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + + -- Wishbone + slave_i => slave_i(1), + slave_o => slave_o(1), + desc_o => open, + + uart_rxd_i => uart_rxd_i, + uart_txd_o => uart_txd_o + ); + + -------------------------------------- + -- 1-WIRE + -------------------------------------- + ONEWIRE : xwb_onewire_master + generic map( + g_interface_mode => PIPELINED, + g_address_granularity => BYTE, + g_num_ports => 2, + g_ow_btp_normal => "5.0", + g_ow_btp_overdrive => "1.0" + ) + port map( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + + -- Wishbone + slave_i => slave_i(2), + slave_o => slave_o(2), + desc_o => open, + + owr_pwren_o => owr_pwren_o, + owr_en_o => owr_en_o, + owr_i => owr_i + ); + + -------------------------------------- + -- WRPC Diags + -------------------------------------- + + -- access through WB (PCI/VME/application) to diagnostics of WRPC + DIAGS: xwr_diags_wb + generic map( + g_interface_mode => PIPELINED, + g_address_granularity => BYTE + ) + port map( + rst_n_i => rst_n_i, + clk_sys_i => clk_sys_i, + + slave_i => slave_i(3), + slave_o => slave_o(3), + + regs_i => wrpc_diag_regs_in, + regs_o => wrpc_diag_regs_out + ); + + -- the information written to syscon WB registers by LM32 are available to the + -- user via diag WB registers + -- It might look strange that we use two WB modules for that. Since both LM32 + -- and user application need to access these registers through the same + -- wishbone interface we would needed these registers to be R/W. By creating + -- another module (xwr_diags_wb) we make read-only registers to be read by + -- the external tool. We want to minimize the possibility of user application + -- overwriting these values, thus we want them to be read-only. + sysc_regs_i.wdiag_ctrl_data_snapshot_i <= wrpc_diag_regs_out.ctrl_data_snapshot_o; + wrpc_diag_regs_in.ctrl_data_valid_i <= sysc_regs_o.wdiag_ctrl_data_valid_o; + wrpc_diag_regs_in.wdiag_sstat_wr_mode_i <= sysc_regs_o.wdiag_sstat_wr_mode_o; + wrpc_diag_regs_in.wdiag_sstat_servostate_i <= sysc_regs_o.wdiag_sstat_servostate_o; + wrpc_diag_regs_in.wdiag_pstat_link_i <= sysc_regs_o.wdiag_pstat_link_o; + wrpc_diag_regs_in.wdiag_pstat_locked_i <= sysc_regs_o.wdiag_pstat_locked_o; + wrpc_diag_regs_in.wdiag_ptpstat_ptpstate_i <= sysc_regs_o.wdiag_ptpstat_ptpstate_o; + wrpc_diag_regs_in.wdiag_astat_aux_i <= sysc_regs_o.wdiag_astat_aux_o; + wrpc_diag_regs_in.wdiag_txfcnt_i <= sysc_regs_o.wdiag_txfcnt_o; + wrpc_diag_regs_in.wdiag_rxfcnt_i <= sysc_regs_o.wdiag_rxfcnt_o; + wrpc_diag_regs_in.wdiag_sec_msb_i <= sysc_regs_o.wdiag_sec_msb_o; + wrpc_diag_regs_in.wdiag_sec_lsb_i <= sysc_regs_o.wdiag_sec_lsb_o; + wrpc_diag_regs_in.wdiag_ns_i <= sysc_regs_o.wdiag_ns_o; + wrpc_diag_regs_in.wdiag_mu_msb_i <= sysc_regs_o.wdiag_mu_msb_o; + wrpc_diag_regs_in.wdiag_mu_lsb_i <= sysc_regs_o.wdiag_mu_lsb_o; + wrpc_diag_regs_in.wdiag_dms_msb_i <= sysc_regs_o.wdiag_dms_msb_o; + wrpc_diag_regs_in.wdiag_dms_lsb_i <= sysc_regs_o.wdiag_dms_lsb_o; + wrpc_diag_regs_in.wdiag_asym_i <= sysc_regs_o.wdiag_asym_o; + wrpc_diag_regs_in.wdiag_cko_i <= sysc_regs_o.wdiag_cko_o; + wrpc_diag_regs_in.wdiag_setp_i <= sysc_regs_o.wdiag_setp_o; + wrpc_diag_regs_in.wdiag_ucnt_i <= sysc_regs_o.wdiag_ucnt_o; + wrpc_diag_regs_in.wdiag_temp_i <= sysc_regs_o.wdiag_temp_o; + +end struct; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_syscon_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_syscon_pkg.vhd new file mode 100644 index 000000000..9b33530ce --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_syscon_pkg.vhd @@ -0,0 +1,253 @@ +--------------------------------------------------------------------------------------- +-- Title : Wishbone slave core for WR Core System Controller +--------------------------------------------------------------------------------------- +-- File : wrc_syscon_pkg.vhd +-- Author : auto-generated by wbgen2 from wrc_syscon_wb.wb +-- Created : Mon Nov 27 13:37:56 2017 +-- Standard : VHDL'87 +--------------------------------------------------------------------------------------- +-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE wrc_syscon_wb.wb +-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY! +--------------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +package sysc_wbgen2_pkg is + + + -- Input registers (user design -> WB slave) + + type t_sysc_in_registers is record + gpsr_fmc_scl_i : std_logic; + gpsr_fmc_sda_i : std_logic; + gpsr_btn1_i : std_logic; + gpsr_btn2_i : std_logic; + gpsr_sfp_det_i : std_logic; + gpsr_sfp_scl_i : std_logic; + gpsr_sfp_sda_i : std_logic; + gpsr_spi_sclk_i : std_logic; + gpsr_spi_ncs_i : std_logic; + gpsr_spi_mosi_i : std_logic; + gpsr_spi_miso_i : std_logic; + hwfr_memsize_i : std_logic_vector(3 downto 0); + hwfr_storage_type_i : std_logic_vector(1 downto 0); + hwfr_storage_sec_i : std_logic_vector(15 downto 0); + hwir_name_i : std_logic_vector(31 downto 0); + sdbfs_baddr_i : std_logic_vector(31 downto 0); + tcr_tdiv_i : std_logic_vector(11 downto 0); + tvr_i : std_logic_vector(31 downto 0); + diag_info_ver_i : std_logic_vector(15 downto 0); + diag_info_id_i : std_logic_vector(15 downto 0); + diag_nw_rw_i : std_logic_vector(15 downto 0); + diag_nw_ro_i : std_logic_vector(15 downto 0); + diag_cr_adr_i : std_logic_vector(15 downto 0); + diag_dat_i : std_logic_vector(31 downto 0); + wdiag_ctrl_data_snapshot_i : std_logic; + end record; + + constant c_sysc_in_registers_init_value: t_sysc_in_registers := ( + gpsr_fmc_scl_i => '0', + gpsr_fmc_sda_i => '0', + gpsr_btn1_i => '0', + gpsr_btn2_i => '0', + gpsr_sfp_det_i => '0', + gpsr_sfp_scl_i => '0', + gpsr_sfp_sda_i => '0', + gpsr_spi_sclk_i => '0', + gpsr_spi_ncs_i => '0', + gpsr_spi_mosi_i => '0', + gpsr_spi_miso_i => '0', + hwfr_memsize_i => (others => '0'), + hwfr_storage_type_i => (others => '0'), + hwfr_storage_sec_i => (others => '0'), + hwir_name_i => (others => '0'), + sdbfs_baddr_i => (others => '0'), + tcr_tdiv_i => (others => '0'), + tvr_i => (others => '0'), + diag_info_ver_i => (others => '0'), + diag_info_id_i => (others => '0'), + diag_nw_rw_i => (others => '0'), + diag_nw_ro_i => (others => '0'), + diag_cr_adr_i => (others => '0'), + diag_dat_i => (others => '0'), + wdiag_ctrl_data_snapshot_i => '0' + ); + + -- Output registers (WB slave -> user design) + + type t_sysc_out_registers is record + rstr_trig_o : std_logic_vector(27 downto 0); + rstr_trig_wr_o : std_logic; + rstr_rst_o : std_logic; + gpsr_led_stat_o : std_logic; + gpsr_led_link_o : std_logic; + gpsr_fmc_scl_o : std_logic; + gpsr_fmc_scl_load_o : std_logic; + gpsr_fmc_sda_o : std_logic; + gpsr_fmc_sda_load_o : std_logic; + gpsr_net_rst_o : std_logic; + gpsr_sfp_scl_o : std_logic; + gpsr_sfp_scl_load_o : std_logic; + gpsr_sfp_sda_o : std_logic; + gpsr_sfp_sda_load_o : std_logic; + gpsr_spi_sclk_o : std_logic; + gpsr_spi_sclk_load_o : std_logic; + gpsr_spi_ncs_o : std_logic; + gpsr_spi_ncs_load_o : std_logic; + gpsr_spi_mosi_o : std_logic; + gpsr_spi_mosi_load_o : std_logic; + gpcr_led_stat_o : std_logic; + gpcr_led_link_o : std_logic; + gpcr_fmc_scl_o : std_logic; + gpcr_fmc_sda_o : std_logic; + gpcr_sfp_scl_o : std_logic; + gpcr_sfp_sda_o : std_logic; + gpcr_spi_sclk_o : std_logic; + gpcr_spi_cs_o : std_logic; + gpcr_spi_mosi_o : std_logic; + tcr_enable_o : std_logic; + diag_cr_adr_o : std_logic_vector(15 downto 0); + diag_cr_adr_load_o : std_logic; + diag_cr_rw_o : std_logic; + diag_dat_o : std_logic_vector(31 downto 0); + diag_dat_load_o : std_logic; + wdiag_ctrl_data_valid_o : std_logic; + wdiag_sstat_wr_mode_o : std_logic; + wdiag_sstat_servostate_o : std_logic_vector(3 downto 0); + wdiag_pstat_link_o : std_logic; + wdiag_pstat_locked_o : std_logic; + wdiag_ptpstat_ptpstate_o : std_logic_vector(7 downto 0); + wdiag_astat_aux_o : std_logic_vector(7 downto 0); + wdiag_txfcnt_o : std_logic_vector(31 downto 0); + wdiag_rxfcnt_o : std_logic_vector(31 downto 0); + wdiag_sec_msb_o : std_logic_vector(31 downto 0); + wdiag_sec_lsb_o : std_logic_vector(31 downto 0); + wdiag_ns_o : std_logic_vector(31 downto 0); + wdiag_mu_msb_o : std_logic_vector(31 downto 0); + wdiag_mu_lsb_o : std_logic_vector(31 downto 0); + wdiag_dms_msb_o : std_logic_vector(31 downto 0); + wdiag_dms_lsb_o : std_logic_vector(31 downto 0); + wdiag_asym_o : std_logic_vector(31 downto 0); + wdiag_cko_o : std_logic_vector(31 downto 0); + wdiag_setp_o : std_logic_vector(31 downto 0); + wdiag_ucnt_o : std_logic_vector(31 downto 0); + wdiag_temp_o : std_logic_vector(31 downto 0); + end record; + + constant c_sysc_out_registers_init_value: t_sysc_out_registers := ( + rstr_trig_o => (others => '0'), + rstr_trig_wr_o => '0', + rstr_rst_o => '0', + gpsr_led_stat_o => '0', + gpsr_led_link_o => '0', + gpsr_fmc_scl_o => '0', + gpsr_fmc_scl_load_o => '0', + gpsr_fmc_sda_o => '0', + gpsr_fmc_sda_load_o => '0', + gpsr_net_rst_o => '0', + gpsr_sfp_scl_o => '0', + gpsr_sfp_scl_load_o => '0', + gpsr_sfp_sda_o => '0', + gpsr_sfp_sda_load_o => '0', + gpsr_spi_sclk_o => '0', + gpsr_spi_sclk_load_o => '0', + gpsr_spi_ncs_o => '0', + gpsr_spi_ncs_load_o => '0', + gpsr_spi_mosi_o => '0', + gpsr_spi_mosi_load_o => '0', + gpcr_led_stat_o => '0', + gpcr_led_link_o => '0', + gpcr_fmc_scl_o => '0', + gpcr_fmc_sda_o => '0', + gpcr_sfp_scl_o => '0', + gpcr_sfp_sda_o => '0', + gpcr_spi_sclk_o => '0', + gpcr_spi_cs_o => '0', + gpcr_spi_mosi_o => '0', + tcr_enable_o => '0', + diag_cr_adr_o => (others => '0'), + diag_cr_adr_load_o => '0', + diag_cr_rw_o => '0', + diag_dat_o => (others => '0'), + diag_dat_load_o => '0', + wdiag_ctrl_data_valid_o => '0', + wdiag_sstat_wr_mode_o => '0', + wdiag_sstat_servostate_o => (others => '0'), + wdiag_pstat_link_o => '0', + wdiag_pstat_locked_o => '0', + wdiag_ptpstat_ptpstate_o => (others => '0'), + wdiag_astat_aux_o => (others => '0'), + wdiag_txfcnt_o => (others => '0'), + wdiag_rxfcnt_o => (others => '0'), + wdiag_sec_msb_o => (others => '0'), + wdiag_sec_lsb_o => (others => '0'), + wdiag_ns_o => (others => '0'), + wdiag_mu_msb_o => (others => '0'), + wdiag_mu_lsb_o => (others => '0'), + wdiag_dms_msb_o => (others => '0'), + wdiag_dms_lsb_o => (others => '0'), + wdiag_asym_o => (others => '0'), + wdiag_cko_o => (others => '0'), + wdiag_setp_o => (others => '0'), + wdiag_ucnt_o => (others => '0'), + wdiag_temp_o => (others => '0') + ); + function "or" (left, right: t_sysc_in_registers) return t_sysc_in_registers; + function f_x_to_zero (x:std_logic) return std_logic; + function f_x_to_zero (x:std_logic_vector) return std_logic_vector; +end package; + +package body sysc_wbgen2_pkg is +function f_x_to_zero (x:std_logic) return std_logic is +begin +if x = '1' then +return '1'; +else +return '0'; +end if; +end function; +function f_x_to_zero (x:std_logic_vector) return std_logic_vector is +variable tmp: std_logic_vector(x'length-1 downto 0); +begin +for i in 0 to x'length-1 loop +if x(i) = '1' then +tmp(i):= '1'; +else +tmp(i):= '0'; +end if; +end loop; +return tmp; +end function; +function "or" (left, right: t_sysc_in_registers) return t_sysc_in_registers is +variable tmp: t_sysc_in_registers; +begin +tmp.gpsr_fmc_scl_i := f_x_to_zero(left.gpsr_fmc_scl_i) or f_x_to_zero(right.gpsr_fmc_scl_i); +tmp.gpsr_fmc_sda_i := f_x_to_zero(left.gpsr_fmc_sda_i) or f_x_to_zero(right.gpsr_fmc_sda_i); +tmp.gpsr_btn1_i := f_x_to_zero(left.gpsr_btn1_i) or f_x_to_zero(right.gpsr_btn1_i); +tmp.gpsr_btn2_i := f_x_to_zero(left.gpsr_btn2_i) or f_x_to_zero(right.gpsr_btn2_i); +tmp.gpsr_sfp_det_i := f_x_to_zero(left.gpsr_sfp_det_i) or f_x_to_zero(right.gpsr_sfp_det_i); +tmp.gpsr_sfp_scl_i := f_x_to_zero(left.gpsr_sfp_scl_i) or f_x_to_zero(right.gpsr_sfp_scl_i); +tmp.gpsr_sfp_sda_i := f_x_to_zero(left.gpsr_sfp_sda_i) or f_x_to_zero(right.gpsr_sfp_sda_i); +tmp.gpsr_spi_sclk_i := f_x_to_zero(left.gpsr_spi_sclk_i) or f_x_to_zero(right.gpsr_spi_sclk_i); +tmp.gpsr_spi_ncs_i := f_x_to_zero(left.gpsr_spi_ncs_i) or f_x_to_zero(right.gpsr_spi_ncs_i); +tmp.gpsr_spi_mosi_i := f_x_to_zero(left.gpsr_spi_mosi_i) or f_x_to_zero(right.gpsr_spi_mosi_i); +tmp.gpsr_spi_miso_i := f_x_to_zero(left.gpsr_spi_miso_i) or f_x_to_zero(right.gpsr_spi_miso_i); +tmp.hwfr_memsize_i := f_x_to_zero(left.hwfr_memsize_i) or f_x_to_zero(right.hwfr_memsize_i); +tmp.hwfr_storage_type_i := f_x_to_zero(left.hwfr_storage_type_i) or f_x_to_zero(right.hwfr_storage_type_i); +tmp.hwfr_storage_sec_i := f_x_to_zero(left.hwfr_storage_sec_i) or f_x_to_zero(right.hwfr_storage_sec_i); +tmp.hwir_name_i := f_x_to_zero(left.hwir_name_i) or f_x_to_zero(right.hwir_name_i); +tmp.sdbfs_baddr_i := f_x_to_zero(left.sdbfs_baddr_i) or f_x_to_zero(right.sdbfs_baddr_i); +tmp.tcr_tdiv_i := f_x_to_zero(left.tcr_tdiv_i) or f_x_to_zero(right.tcr_tdiv_i); +tmp.tvr_i := f_x_to_zero(left.tvr_i) or f_x_to_zero(right.tvr_i); +tmp.diag_info_ver_i := f_x_to_zero(left.diag_info_ver_i) or f_x_to_zero(right.diag_info_ver_i); +tmp.diag_info_id_i := f_x_to_zero(left.diag_info_id_i) or f_x_to_zero(right.diag_info_id_i); +tmp.diag_nw_rw_i := f_x_to_zero(left.diag_nw_rw_i) or f_x_to_zero(right.diag_nw_rw_i); +tmp.diag_nw_ro_i := f_x_to_zero(left.diag_nw_ro_i) or f_x_to_zero(right.diag_nw_ro_i); +tmp.diag_cr_adr_i := f_x_to_zero(left.diag_cr_adr_i) or f_x_to_zero(right.diag_cr_adr_i); +tmp.diag_dat_i := f_x_to_zero(left.diag_dat_i) or f_x_to_zero(right.diag_dat_i); +tmp.wdiag_ctrl_data_snapshot_i := f_x_to_zero(left.wdiag_ctrl_data_snapshot_i) or f_x_to_zero(right.wdiag_ctrl_data_snapshot_i); +return tmp; +end function; +end package body; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_syscon_wb.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_syscon_wb.vhd new file mode 100644 index 000000000..82bfb0e66 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_syscon_wb.vhd @@ -0,0 +1,975 @@ +--------------------------------------------------------------------------------------- +-- Title : Wishbone slave core for WR Core System Controller +--------------------------------------------------------------------------------------- +-- File : wrc_syscon_wb.vhd +-- Author : auto-generated by wbgen2 from wrc_syscon_wb.wb +-- Created : Mon Nov 27 13:37:56 2017 +-- Standard : VHDL'87 +--------------------------------------------------------------------------------------- +-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE wrc_syscon_wb.wb +-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY! +--------------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.sysc_wbgen2_pkg.all; + + +entity wrc_syscon_wb is + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + regs_i : in t_sysc_in_registers; + regs_o : out t_sysc_out_registers + ); +end wrc_syscon_wb; + +architecture syn of wrc_syscon_wb is + +signal sysc_rstr_rst_int : std_logic ; +signal sysc_gpsr_led_stat_dly0 : std_logic ; +signal sysc_gpsr_led_stat_int : std_logic ; +signal sysc_gpsr_led_link_dly0 : std_logic ; +signal sysc_gpsr_led_link_int : std_logic ; +signal sysc_gpsr_net_rst_dly0 : std_logic ; +signal sysc_gpsr_net_rst_int : std_logic ; +signal sysc_gpcr_led_stat_dly0 : std_logic ; +signal sysc_gpcr_led_stat_int : std_logic ; +signal sysc_gpcr_led_link_dly0 : std_logic ; +signal sysc_gpcr_led_link_int : std_logic ; +signal sysc_gpcr_fmc_scl_dly0 : std_logic ; +signal sysc_gpcr_fmc_scl_int : std_logic ; +signal sysc_gpcr_fmc_sda_dly0 : std_logic ; +signal sysc_gpcr_fmc_sda_int : std_logic ; +signal sysc_gpcr_sfp_scl_dly0 : std_logic ; +signal sysc_gpcr_sfp_scl_int : std_logic ; +signal sysc_gpcr_sfp_sda_dly0 : std_logic ; +signal sysc_gpcr_sfp_sda_int : std_logic ; +signal sysc_gpcr_spi_sclk_dly0 : std_logic ; +signal sysc_gpcr_spi_sclk_int : std_logic ; +signal sysc_gpcr_spi_cs_dly0 : std_logic ; +signal sysc_gpcr_spi_cs_int : std_logic ; +signal sysc_gpcr_spi_mosi_dly0 : std_logic ; +signal sysc_gpcr_spi_mosi_int : std_logic ; +signal sysc_tcr_enable_int : std_logic ; +signal sysc_diag_cr_rw_int : std_logic ; +signal sysc_wdiag_ctrl_data_valid_int : std_logic ; +signal sysc_wdiag_sstat_wr_mode_int : std_logic ; +signal sysc_wdiag_sstat_servostate_int : std_logic_vector(3 downto 0); +signal sysc_wdiag_pstat_link_int : std_logic ; +signal sysc_wdiag_pstat_locked_int : std_logic ; +signal sysc_wdiag_ptpstat_ptpstate_int : std_logic_vector(7 downto 0); +signal sysc_wdiag_astat_aux_int : std_logic_vector(7 downto 0); +signal sysc_wdiag_txfcnt_int : std_logic_vector(31 downto 0); +signal sysc_wdiag_rxfcnt_int : std_logic_vector(31 downto 0); +signal sysc_wdiag_sec_msb_int : std_logic_vector(31 downto 0); +signal sysc_wdiag_sec_lsb_int : std_logic_vector(31 downto 0); +signal sysc_wdiag_ns_int : std_logic_vector(31 downto 0); +signal sysc_wdiag_mu_msb_int : std_logic_vector(31 downto 0); +signal sysc_wdiag_mu_lsb_int : std_logic_vector(31 downto 0); +signal sysc_wdiag_dms_msb_int : std_logic_vector(31 downto 0); +signal sysc_wdiag_dms_lsb_int : std_logic_vector(31 downto 0); +signal sysc_wdiag_asym_int : std_logic_vector(31 downto 0); +signal sysc_wdiag_cko_int : std_logic_vector(31 downto 0); +signal sysc_wdiag_setp_int : std_logic_vector(31 downto 0); +signal sysc_wdiag_ucnt_int : std_logic_vector(31 downto 0); +signal sysc_wdiag_temp_int : std_logic_vector(31 downto 0); +signal ack_sreg : std_logic_vector(9 downto 0); +signal rddata_reg : std_logic_vector(31 downto 0); +signal wrdata_reg : std_logic_vector(31 downto 0); +signal rwaddr_reg : std_logic_vector(4 downto 0); +signal ack_in_progress : std_logic ; + +begin +-- Some internal signals assignments + wrdata_reg <= wb_dat_i; +-- +-- Main register bank access process. + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + ack_sreg <= "0000000000"; + ack_in_progress <= '0'; + rddata_reg <= "00000000000000000000000000000000"; + regs_o.rstr_trig_wr_o <= '0'; + sysc_rstr_rst_int <= '0'; + sysc_gpsr_led_stat_int <= '0'; + sysc_gpsr_led_link_int <= '0'; + regs_o.gpsr_fmc_scl_load_o <= '0'; + regs_o.gpsr_fmc_sda_load_o <= '0'; + sysc_gpsr_net_rst_int <= '0'; + regs_o.gpsr_sfp_scl_load_o <= '0'; + regs_o.gpsr_sfp_sda_load_o <= '0'; + regs_o.gpsr_spi_sclk_load_o <= '0'; + regs_o.gpsr_spi_ncs_load_o <= '0'; + regs_o.gpsr_spi_mosi_load_o <= '0'; + sysc_gpcr_led_stat_int <= '0'; + sysc_gpcr_led_link_int <= '0'; + sysc_gpcr_fmc_scl_int <= '0'; + sysc_gpcr_fmc_sda_int <= '0'; + sysc_gpcr_sfp_scl_int <= '0'; + sysc_gpcr_sfp_sda_int <= '0'; + sysc_gpcr_spi_sclk_int <= '0'; + sysc_gpcr_spi_cs_int <= '0'; + sysc_gpcr_spi_mosi_int <= '0'; + sysc_tcr_enable_int <= '0'; + regs_o.diag_cr_adr_load_o <= '0'; + sysc_diag_cr_rw_int <= '0'; + regs_o.diag_dat_load_o <= '0'; + sysc_wdiag_ctrl_data_valid_int <= '0'; + sysc_wdiag_sstat_wr_mode_int <= '0'; + sysc_wdiag_sstat_servostate_int <= "0000"; + sysc_wdiag_pstat_link_int <= '0'; + sysc_wdiag_pstat_locked_int <= '0'; + sysc_wdiag_ptpstat_ptpstate_int <= "00000000"; + sysc_wdiag_astat_aux_int <= "00000000"; + sysc_wdiag_txfcnt_int <= "00000000000000000000000000000000"; + sysc_wdiag_rxfcnt_int <= "00000000000000000000000000000000"; + sysc_wdiag_sec_msb_int <= "00000000000000000000000000000000"; + sysc_wdiag_sec_lsb_int <= "00000000000000000000000000000000"; + sysc_wdiag_ns_int <= "00000000000000000000000000000000"; + sysc_wdiag_mu_msb_int <= "00000000000000000000000000000000"; + sysc_wdiag_mu_lsb_int <= "00000000000000000000000000000000"; + sysc_wdiag_dms_msb_int <= "00000000000000000000000000000000"; + sysc_wdiag_dms_lsb_int <= "00000000000000000000000000000000"; + sysc_wdiag_asym_int <= "00000000000000000000000000000000"; + sysc_wdiag_cko_int <= "00000000000000000000000000000000"; + sysc_wdiag_setp_int <= "00000000000000000000000000000000"; + sysc_wdiag_ucnt_int <= "00000000000000000000000000000000"; + sysc_wdiag_temp_int <= "00000000000000000000000000000000"; + elsif rising_edge(clk_sys_i) then +-- advance the ACK generator shift register + ack_sreg(8 downto 0) <= ack_sreg(9 downto 1); + ack_sreg(9) <= '0'; + if (ack_in_progress = '1') then + if (ack_sreg(0) = '1') then + regs_o.rstr_trig_wr_o <= '0'; + sysc_gpsr_led_stat_int <= '0'; + sysc_gpsr_led_link_int <= '0'; + regs_o.gpsr_fmc_scl_load_o <= '0'; + regs_o.gpsr_fmc_sda_load_o <= '0'; + sysc_gpsr_net_rst_int <= '0'; + regs_o.gpsr_sfp_scl_load_o <= '0'; + regs_o.gpsr_sfp_sda_load_o <= '0'; + regs_o.gpsr_spi_sclk_load_o <= '0'; + regs_o.gpsr_spi_ncs_load_o <= '0'; + regs_o.gpsr_spi_mosi_load_o <= '0'; + sysc_gpcr_led_stat_int <= '0'; + sysc_gpcr_led_link_int <= '0'; + sysc_gpcr_fmc_scl_int <= '0'; + sysc_gpcr_fmc_sda_int <= '0'; + sysc_gpcr_sfp_scl_int <= '0'; + sysc_gpcr_sfp_sda_int <= '0'; + sysc_gpcr_spi_sclk_int <= '0'; + sysc_gpcr_spi_cs_int <= '0'; + sysc_gpcr_spi_mosi_int <= '0'; + regs_o.diag_cr_adr_load_o <= '0'; + regs_o.diag_dat_load_o <= '0'; + ack_in_progress <= '0'; + else + regs_o.rstr_trig_wr_o <= '0'; + regs_o.gpsr_fmc_scl_load_o <= '0'; + regs_o.gpsr_fmc_sda_load_o <= '0'; + regs_o.gpsr_sfp_scl_load_o <= '0'; + regs_o.gpsr_sfp_sda_load_o <= '0'; + regs_o.gpsr_spi_sclk_load_o <= '0'; + regs_o.gpsr_spi_ncs_load_o <= '0'; + regs_o.gpsr_spi_mosi_load_o <= '0'; + regs_o.diag_cr_adr_load_o <= '0'; + regs_o.diag_dat_load_o <= '0'; + end if; + else + if ((wb_cyc_i = '1') and (wb_stb_i = '1')) then + case rwaddr_reg(4 downto 0) is + when "00000" => + if (wb_we_i = '1') then + regs_o.rstr_trig_wr_o <= '1'; + sysc_rstr_rst_int <= wrdata_reg(28); + end if; + rddata_reg(28) <= sysc_rstr_rst_int; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00001" => + if (wb_we_i = '1') then + sysc_gpsr_led_stat_int <= wrdata_reg(0); + sysc_gpsr_led_link_int <= wrdata_reg(1); + regs_o.gpsr_fmc_scl_load_o <= '1'; + regs_o.gpsr_fmc_sda_load_o <= '1'; + sysc_gpsr_net_rst_int <= wrdata_reg(4); + regs_o.gpsr_sfp_scl_load_o <= '1'; + regs_o.gpsr_sfp_sda_load_o <= '1'; + regs_o.gpsr_spi_sclk_load_o <= '1'; + regs_o.gpsr_spi_ncs_load_o <= '1'; + regs_o.gpsr_spi_mosi_load_o <= '1'; + end if; + rddata_reg(0) <= '0'; + rddata_reg(1) <= '0'; + rddata_reg(2) <= regs_i.gpsr_fmc_scl_i; + rddata_reg(3) <= regs_i.gpsr_fmc_sda_i; + rddata_reg(4) <= '0'; + rddata_reg(5) <= regs_i.gpsr_btn1_i; + rddata_reg(6) <= regs_i.gpsr_btn2_i; + rddata_reg(7) <= regs_i.gpsr_sfp_det_i; + rddata_reg(8) <= regs_i.gpsr_sfp_scl_i; + rddata_reg(9) <= regs_i.gpsr_sfp_sda_i; + rddata_reg(10) <= regs_i.gpsr_spi_sclk_i; + rddata_reg(11) <= regs_i.gpsr_spi_ncs_i; + rddata_reg(12) <= regs_i.gpsr_spi_mosi_i; + rddata_reg(13) <= regs_i.gpsr_spi_miso_i; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(2) <= '1'; + ack_in_progress <= '1'; + when "00010" => + if (wb_we_i = '1') then + sysc_gpcr_led_stat_int <= wrdata_reg(0); + sysc_gpcr_led_link_int <= wrdata_reg(1); + sysc_gpcr_fmc_scl_int <= wrdata_reg(2); + sysc_gpcr_fmc_sda_int <= wrdata_reg(3); + sysc_gpcr_sfp_scl_int <= wrdata_reg(8); + sysc_gpcr_sfp_sda_int <= wrdata_reg(9); + sysc_gpcr_spi_sclk_int <= wrdata_reg(10); + sysc_gpcr_spi_cs_int <= wrdata_reg(11); + sysc_gpcr_spi_mosi_int <= wrdata_reg(12); + end if; + rddata_reg(0) <= '0'; + rddata_reg(1) <= '0'; + rddata_reg(2) <= '0'; + rddata_reg(3) <= '0'; + rddata_reg(8) <= '0'; + rddata_reg(9) <= '0'; + rddata_reg(10) <= '0'; + rddata_reg(11) <= '0'; + rddata_reg(12) <= '0'; + rddata_reg(0) <= 'X'; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(2) <= '1'; + ack_in_progress <= '1'; + when "00011" => + if (wb_we_i = '1') then + end if; + rddata_reg(3 downto 0) <= regs_i.hwfr_memsize_i; + rddata_reg(9 downto 8) <= regs_i.hwfr_storage_type_i; + rddata_reg(31 downto 16) <= regs_i.hwfr_storage_sec_i; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00100" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.hwir_name_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00101" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.sdbfs_baddr_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00110" => + if (wb_we_i = '1') then + sysc_tcr_enable_int <= wrdata_reg(31); + end if; + rddata_reg(11 downto 0) <= regs_i.tcr_tdiv_i; + rddata_reg(31) <= sysc_tcr_enable_int; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "00111" => + if (wb_we_i = '1') then + end if; + rddata_reg(31 downto 0) <= regs_i.tvr_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01000" => + if (wb_we_i = '1') then + end if; + rddata_reg(15 downto 0) <= regs_i.diag_info_ver_i; + rddata_reg(31 downto 16) <= regs_i.diag_info_id_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01001" => + if (wb_we_i = '1') then + end if; + rddata_reg(15 downto 0) <= regs_i.diag_nw_rw_i; + rddata_reg(31 downto 16) <= regs_i.diag_nw_ro_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01010" => + if (wb_we_i = '1') then + regs_o.diag_cr_adr_load_o <= '1'; + sysc_diag_cr_rw_int <= wrdata_reg(31); + end if; + rddata_reg(15 downto 0) <= regs_i.diag_cr_adr_i; + rddata_reg(31) <= sysc_diag_cr_rw_int; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01011" => + if (wb_we_i = '1') then + regs_o.diag_dat_load_o <= '1'; + end if; + rddata_reg(31 downto 0) <= regs_i.diag_dat_i; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01100" => + if (wb_we_i = '1') then + sysc_wdiag_ctrl_data_valid_int <= wrdata_reg(0); + end if; + rddata_reg(0) <= sysc_wdiag_ctrl_data_valid_int; + rddata_reg(8) <= regs_i.wdiag_ctrl_data_snapshot_i; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01101" => + if (wb_we_i = '1') then + sysc_wdiag_sstat_wr_mode_int <= wrdata_reg(0); + sysc_wdiag_sstat_servostate_int <= wrdata_reg(11 downto 8); + end if; + rddata_reg(0) <= sysc_wdiag_sstat_wr_mode_int; + rddata_reg(11 downto 8) <= sysc_wdiag_sstat_servostate_int; + rddata_reg(1) <= 'X'; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01110" => + if (wb_we_i = '1') then + sysc_wdiag_pstat_link_int <= wrdata_reg(0); + sysc_wdiag_pstat_locked_int <= wrdata_reg(1); + end if; + rddata_reg(0) <= sysc_wdiag_pstat_link_int; + rddata_reg(1) <= sysc_wdiag_pstat_locked_int; + rddata_reg(2) <= 'X'; + rddata_reg(3) <= 'X'; + rddata_reg(4) <= 'X'; + rddata_reg(5) <= 'X'; + rddata_reg(6) <= 'X'; + rddata_reg(7) <= 'X'; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "01111" => + if (wb_we_i = '1') then + sysc_wdiag_ptpstat_ptpstate_int <= wrdata_reg(7 downto 0); + end if; + rddata_reg(7 downto 0) <= sysc_wdiag_ptpstat_ptpstate_int; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "10000" => + if (wb_we_i = '1') then + sysc_wdiag_astat_aux_int <= wrdata_reg(7 downto 0); + end if; + rddata_reg(7 downto 0) <= sysc_wdiag_astat_aux_int; + rddata_reg(8) <= 'X'; + rddata_reg(9) <= 'X'; + rddata_reg(10) <= 'X'; + rddata_reg(11) <= 'X'; + rddata_reg(12) <= 'X'; + rddata_reg(13) <= 'X'; + rddata_reg(14) <= 'X'; + rddata_reg(15) <= 'X'; + rddata_reg(16) <= 'X'; + rddata_reg(17) <= 'X'; + rddata_reg(18) <= 'X'; + rddata_reg(19) <= 'X'; + rddata_reg(20) <= 'X'; + rddata_reg(21) <= 'X'; + rddata_reg(22) <= 'X'; + rddata_reg(23) <= 'X'; + rddata_reg(24) <= 'X'; + rddata_reg(25) <= 'X'; + rddata_reg(26) <= 'X'; + rddata_reg(27) <= 'X'; + rddata_reg(28) <= 'X'; + rddata_reg(29) <= 'X'; + rddata_reg(30) <= 'X'; + rddata_reg(31) <= 'X'; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "10001" => + if (wb_we_i = '1') then + sysc_wdiag_txfcnt_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= sysc_wdiag_txfcnt_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "10010" => + if (wb_we_i = '1') then + sysc_wdiag_rxfcnt_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= sysc_wdiag_rxfcnt_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "10011" => + if (wb_we_i = '1') then + sysc_wdiag_sec_msb_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= sysc_wdiag_sec_msb_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "10100" => + if (wb_we_i = '1') then + sysc_wdiag_sec_lsb_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= sysc_wdiag_sec_lsb_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "10101" => + if (wb_we_i = '1') then + sysc_wdiag_ns_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= sysc_wdiag_ns_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "10110" => + if (wb_we_i = '1') then + sysc_wdiag_mu_msb_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= sysc_wdiag_mu_msb_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "10111" => + if (wb_we_i = '1') then + sysc_wdiag_mu_lsb_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= sysc_wdiag_mu_lsb_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "11000" => + if (wb_we_i = '1') then + sysc_wdiag_dms_msb_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= sysc_wdiag_dms_msb_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "11001" => + if (wb_we_i = '1') then + sysc_wdiag_dms_lsb_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= sysc_wdiag_dms_lsb_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "11010" => + if (wb_we_i = '1') then + sysc_wdiag_asym_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= sysc_wdiag_asym_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "11011" => + if (wb_we_i = '1') then + sysc_wdiag_cko_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= sysc_wdiag_cko_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "11100" => + if (wb_we_i = '1') then + sysc_wdiag_setp_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= sysc_wdiag_setp_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "11101" => + if (wb_we_i = '1') then + sysc_wdiag_ucnt_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= sysc_wdiag_ucnt_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when "11110" => + if (wb_we_i = '1') then + sysc_wdiag_temp_int <= wrdata_reg(31 downto 0); + end if; + rddata_reg(31 downto 0) <= sysc_wdiag_temp_int; + ack_sreg(0) <= '1'; + ack_in_progress <= '1'; + when others => +-- prevent the slave from hanging the bus on invalid address + ack_in_progress <= '1'; + ack_sreg(0) <= '1'; + end case; + end if; + end if; + end if; + end process; + + +-- Drive the data output bus + wb_dat_o <= rddata_reg; +-- Reset trigger +-- pass-through field: Reset trigger in register: Syscon reset register + regs_o.rstr_trig_o <= wrdata_reg(27 downto 0); +-- Reset line state value + regs_o.rstr_rst_o <= sysc_rstr_rst_int; +-- Status LED + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + sysc_gpsr_led_stat_dly0 <= '0'; + regs_o.gpsr_led_stat_o <= '0'; + elsif rising_edge(clk_sys_i) then + sysc_gpsr_led_stat_dly0 <= sysc_gpsr_led_stat_int; + regs_o.gpsr_led_stat_o <= sysc_gpsr_led_stat_int and (not sysc_gpsr_led_stat_dly0); + end if; + end process; + + +-- Link LED + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + sysc_gpsr_led_link_dly0 <= '0'; + regs_o.gpsr_led_link_o <= '0'; + elsif rising_edge(clk_sys_i) then + sysc_gpsr_led_link_dly0 <= sysc_gpsr_led_link_int; + regs_o.gpsr_led_link_o <= sysc_gpsr_led_link_int and (not sysc_gpsr_led_link_dly0); + end if; + end process; + + +-- FMC I2C bitbanged SCL + regs_o.gpsr_fmc_scl_o <= wrdata_reg(2); +-- FMC I2C bitbanged SDA + regs_o.gpsr_fmc_sda_o <= wrdata_reg(3); +-- Network AP reset + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + sysc_gpsr_net_rst_dly0 <= '0'; + regs_o.gpsr_net_rst_o <= '0'; + elsif rising_edge(clk_sys_i) then + sysc_gpsr_net_rst_dly0 <= sysc_gpsr_net_rst_int; + regs_o.gpsr_net_rst_o <= sysc_gpsr_net_rst_int and (not sysc_gpsr_net_rst_dly0); + end if; + end process; + + +-- SPEC Pushbutton 1 state +-- SPEC Pushbutton 2 state +-- SFP detect (MOD_DEF0 signal) +-- SFP I2C bitbanged SCL + regs_o.gpsr_sfp_scl_o <= wrdata_reg(8); +-- SFP I2C bitbanged SDA + regs_o.gpsr_sfp_sda_o <= wrdata_reg(9); +-- SPI bitbanged SCLK + regs_o.gpsr_spi_sclk_o <= wrdata_reg(10); +-- SPI bitbanged NCS + regs_o.gpsr_spi_ncs_o <= wrdata_reg(11); +-- SPI bitbanged MOSI + regs_o.gpsr_spi_mosi_o <= wrdata_reg(12); +-- SPI bitbanged MISO +-- Status LED + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + sysc_gpcr_led_stat_dly0 <= '0'; + regs_o.gpcr_led_stat_o <= '0'; + elsif rising_edge(clk_sys_i) then + sysc_gpcr_led_stat_dly0 <= sysc_gpcr_led_stat_int; + regs_o.gpcr_led_stat_o <= sysc_gpcr_led_stat_int and (not sysc_gpcr_led_stat_dly0); + end if; + end process; + + +-- Link LED + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + sysc_gpcr_led_link_dly0 <= '0'; + regs_o.gpcr_led_link_o <= '0'; + elsif rising_edge(clk_sys_i) then + sysc_gpcr_led_link_dly0 <= sysc_gpcr_led_link_int; + regs_o.gpcr_led_link_o <= sysc_gpcr_led_link_int and (not sysc_gpcr_led_link_dly0); + end if; + end process; + + +-- FMC I2C bitbanged SCL + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + sysc_gpcr_fmc_scl_dly0 <= '0'; + regs_o.gpcr_fmc_scl_o <= '0'; + elsif rising_edge(clk_sys_i) then + sysc_gpcr_fmc_scl_dly0 <= sysc_gpcr_fmc_scl_int; + regs_o.gpcr_fmc_scl_o <= sysc_gpcr_fmc_scl_int and (not sysc_gpcr_fmc_scl_dly0); + end if; + end process; + + +-- FMC I2C bitbanged SDA + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + sysc_gpcr_fmc_sda_dly0 <= '0'; + regs_o.gpcr_fmc_sda_o <= '0'; + elsif rising_edge(clk_sys_i) then + sysc_gpcr_fmc_sda_dly0 <= sysc_gpcr_fmc_sda_int; + regs_o.gpcr_fmc_sda_o <= sysc_gpcr_fmc_sda_int and (not sysc_gpcr_fmc_sda_dly0); + end if; + end process; + + +-- SFP I2C bitbanged SCL + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + sysc_gpcr_sfp_scl_dly0 <= '0'; + regs_o.gpcr_sfp_scl_o <= '0'; + elsif rising_edge(clk_sys_i) then + sysc_gpcr_sfp_scl_dly0 <= sysc_gpcr_sfp_scl_int; + regs_o.gpcr_sfp_scl_o <= sysc_gpcr_sfp_scl_int and (not sysc_gpcr_sfp_scl_dly0); + end if; + end process; + + +-- FMC I2C bitbanged SDA + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + sysc_gpcr_sfp_sda_dly0 <= '0'; + regs_o.gpcr_sfp_sda_o <= '0'; + elsif rising_edge(clk_sys_i) then + sysc_gpcr_sfp_sda_dly0 <= sysc_gpcr_sfp_sda_int; + regs_o.gpcr_sfp_sda_o <= sysc_gpcr_sfp_sda_int and (not sysc_gpcr_sfp_sda_dly0); + end if; + end process; + + +-- SPI bitbanged SCLK + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + sysc_gpcr_spi_sclk_dly0 <= '0'; + regs_o.gpcr_spi_sclk_o <= '0'; + elsif rising_edge(clk_sys_i) then + sysc_gpcr_spi_sclk_dly0 <= sysc_gpcr_spi_sclk_int; + regs_o.gpcr_spi_sclk_o <= sysc_gpcr_spi_sclk_int and (not sysc_gpcr_spi_sclk_dly0); + end if; + end process; + + +-- SPI bitbanged CS + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + sysc_gpcr_spi_cs_dly0 <= '0'; + regs_o.gpcr_spi_cs_o <= '0'; + elsif rising_edge(clk_sys_i) then + sysc_gpcr_spi_cs_dly0 <= sysc_gpcr_spi_cs_int; + regs_o.gpcr_spi_cs_o <= sysc_gpcr_spi_cs_int and (not sysc_gpcr_spi_cs_dly0); + end if; + end process; + + +-- SPI bitbanged MOSI + process (clk_sys_i, rst_n_i) + begin + if (rst_n_i = '0') then + sysc_gpcr_spi_mosi_dly0 <= '0'; + regs_o.gpcr_spi_mosi_o <= '0'; + elsif rising_edge(clk_sys_i) then + sysc_gpcr_spi_mosi_dly0 <= sysc_gpcr_spi_mosi_int; + regs_o.gpcr_spi_mosi_o <= sysc_gpcr_spi_mosi_int and (not sysc_gpcr_spi_mosi_dly0); + end if; + end process; + + +-- Memory size +-- Storage type +-- Storage sector size +-- Board name +-- Base address +-- Timer Divider +-- Timer Enable + regs_o.tcr_enable_o <= sysc_tcr_enable_int; +-- Timer Counter Value +-- Ver +-- Id +-- Read/write words +-- Read-only words +-- Address + regs_o.diag_cr_adr_o <= wrdata_reg(15 downto 0); +-- R/W + regs_o.diag_cr_rw_o <= sysc_diag_cr_rw_int; +-- Data + regs_o.diag_dat_o <= wrdata_reg(31 downto 0); +-- WR DIAG data valid + regs_o.wdiag_ctrl_data_valid_o <= sysc_wdiag_ctrl_data_valid_int; +-- WR DIAG data snapshot +-- WR valid + regs_o.wdiag_sstat_wr_mode_o <= sysc_wdiag_sstat_wr_mode_int; +-- Servo State + regs_o.wdiag_sstat_servostate_o <= sysc_wdiag_sstat_servostate_int; +-- Link Status + regs_o.wdiag_pstat_link_o <= sysc_wdiag_pstat_link_int; +-- PLL Locked + regs_o.wdiag_pstat_locked_o <= sysc_wdiag_pstat_locked_int; +-- PTP State + regs_o.wdiag_ptpstat_ptpstate_o <= sysc_wdiag_ptpstat_ptpstate_int; +-- AUX channel + regs_o.wdiag_astat_aux_o <= sysc_wdiag_astat_aux_int; +-- Data + regs_o.wdiag_txfcnt_o <= sysc_wdiag_txfcnt_int; +-- Data + regs_o.wdiag_rxfcnt_o <= sysc_wdiag_rxfcnt_int; +-- Data + regs_o.wdiag_sec_msb_o <= sysc_wdiag_sec_msb_int; +-- Data + regs_o.wdiag_sec_lsb_o <= sysc_wdiag_sec_lsb_int; +-- Data + regs_o.wdiag_ns_o <= sysc_wdiag_ns_int; +-- Data + regs_o.wdiag_mu_msb_o <= sysc_wdiag_mu_msb_int; +-- Data + regs_o.wdiag_mu_lsb_o <= sysc_wdiag_mu_lsb_int; +-- Data + regs_o.wdiag_dms_msb_o <= sysc_wdiag_dms_msb_int; +-- Data + regs_o.wdiag_dms_lsb_o <= sysc_wdiag_dms_lsb_int; +-- Data + regs_o.wdiag_asym_o <= sysc_wdiag_asym_int; +-- Data + regs_o.wdiag_cko_o <= sysc_wdiag_cko_int; +-- Data + regs_o.wdiag_setp_o <= sysc_wdiag_setp_int; +-- Data + regs_o.wdiag_ucnt_o <= sysc_wdiag_ucnt_int; +-- Data + regs_o.wdiag_temp_o <= sysc_wdiag_temp_int; + rwaddr_reg <= wb_adr_i; + wb_stall_o <= (not ack_sreg(0)) and (wb_stb_i and wb_cyc_i); +-- ACK signal generation. Just pass the LSB of ACK counter. + wb_ack_o <= ack_sreg(0); +end syn; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrcore_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrcore_pkg.vhd new file mode 100644 index 000000000..a16166cfe --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrcore_pkg.vhd @@ -0,0 +1,769 @@ +------------------------------------------------------------------------------- +-- Title : WhiteRabbit PTP Core +-- Project : WhiteRabbit +------------------------------------------------------------------------------- +-- File : wrcore_pkg.vhd +-- Author : Grzegorz Daniluk +-- Company : CERN (BE-CO-HT) +-- Created : 2011-05-11 +-- Last update: 2017-05-29 +-- Platform : FPGA-generics +-- Standard : VHDL +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2012 - 2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +library work; +use work.genram_pkg.all; +use work.wishbone_pkg.all; +use work.sysc_wbgen2_pkg.all; +use work.wrc_diags_wbgen2_pkg.all; +use work.wr_fabric_pkg.all; +use work.endpoint_pkg.all; +use work.softpll_pkg.all; + +package wrcore_pkg is + + function f_refclk_rate(pcs_16 : boolean) return integer; + + type t_generic_word_array is array (natural range <>) of std_logic_vector(31 downto 0); + + ----------------------------------------------------------------------------- + --PPS generator + ----------------------------------------------------------------------------- + constant c_xwr_pps_gen_sdb : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"01", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"00000000000000ff", + product => ( + vendor_id => x"000000000000CE42", -- CERN + device_id => x"de0d8ced", + version => x"00000001", + date => x"20120305", + name => "WR-PPS-Generator "))); + + component xwr_pps_gen is + generic( + g_interface_mode : t_wishbone_interface_mode; + g_address_granularity : t_wishbone_address_granularity; + g_ref_clock_rate : integer; + g_ext_clock_rate : integer; + g_with_ext_clock_input : boolean + ); + port ( + clk_ref_i : in std_logic; + clk_sys_i : in std_logic; + rst_ref_n_i : in std_logic; + rst_sys_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + link_ok_i : in std_logic; + pps_in_i : in std_logic; + pps_csync_o : out std_logic; + pps_out_o : out std_logic; + pps_led_o : out std_logic; + pps_valid_o : out std_logic; + tm_utc_o : out std_logic_vector(39 downto 0); + tm_cycles_o : out std_logic_vector(27 downto 0); + tm_time_valid_o : out std_logic + ); + end component; + + ----------------------------------------------------------------------------- + --Mini NIC + ----------------------------------------------------------------------------- + constant c_xwr_mini_nic_sdb : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"01", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"00000000000000ff", + product => ( + vendor_id => x"000000000000CE42", -- CERN + device_id => x"ab28633a", + version => x"00000001", + date => x"20120305", + name => "WR-Mini-NIC "))); + + component xwr_mini_nic + generic ( + g_interface_mode : t_wishbone_interface_mode; + g_address_granularity : t_wishbone_address_granularity; + g_tx_fifo_size : integer; + g_rx_fifo_size : integer; + g_buffer_little_endian : boolean); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + src_o : out t_wrf_source_out; + src_i : in t_wrf_source_in; + snk_o : out t_wrf_sink_out; + snk_i : in t_wrf_sink_in; + txtsu_port_id_i : in std_logic_vector(4 downto 0); + txtsu_frame_id_i : in std_logic_vector(16 - 1 downto 0); + txtsu_tsval_i : in std_logic_vector(28 + 4 - 1 downto 0); + txtsu_tsincorrect_i : in std_logic; + txtsu_stb_i : in std_logic; + txtsu_ack_o : out std_logic; + wb_i : in t_wishbone_slave_in; + wb_o : out t_wishbone_slave_out); + end component; + + ----------------------------------------------------------------------------- + -- PERIPHERIALS + ----------------------------------------------------------------------------- + component xwr_diags_wb is + generic( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD + ); + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + + regs_i : in t_wrc_diags_in_registers; + regs_o : out t_wrc_diags_out_registers + ); + end component; + + constant c_wrc_periph0_sdb : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"01", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"00000000000000ff", + product => ( + vendor_id => x"000000000000CE42", -- CERN + device_id => x"ff07fc47", + version => x"00000001", + date => x"20120305", + name => "WR-Periph-Syscon "))); + + constant c_wrc_periph1_sdb : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"01", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"00000000000000ff", + product => ( + vendor_id => x"000000000000CE42", -- CERN + device_id => x"e2d13d04", + version => x"00000001", + date => x"20120305", + name => "WR-Periph-UART "))); + + constant c_wrc_periph2_sdb : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"01", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"00000000000000ff", + product => ( + vendor_id => x"000000000000CE42", -- CERN + device_id => x"779c5443", + version => x"00000001", + date => x"20120305", + name => "WR-Periph-1Wire "))); + + + constant c_wrc_periph3_sdb : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"01", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"00000000000000ff", + product => ( + vendor_id => x"000000000000CE42", -- CERN + device_id => x"779c5445", + version => x"00000001", + date => x"20120615", + name => "WR-Periph-AuxWB "))); + + constant c_wrc_periph4_sdb : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"01", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"00000000000000ff", + product => ( + vendor_id => x"000000000000CE42", -- CERN + device_id => x"779c5446", + version => x"00000001", + date => x"20170424", + name => "WR-Periph-WRPC-DIAG"))); + + component wrc_periph is + generic( + g_board_name : string := "NA "; + g_flash_secsz_kb : integer := 64; + g_flash_sdbfs_baddr : integer := 16#2e0000#; + g_phys_uart : boolean := true; + g_virtual_uart : boolean := false; + g_cntr_period : integer := 62500; + g_mem_words : integer := 16384; + g_vuart_fifo_size : integer := 1024; + g_diag_id : integer := 0; + g_diag_ver : integer := 0; + g_diag_ro_size : integer := 0; + g_diag_rw_size : integer := 0 + ); + port( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + rst_net_n_o : out std_logic; + rst_wrc_n_o : out std_logic; + led_red_o : out std_logic; + led_green_o : out std_logic; + scl_o : out std_logic; + scl_i : in std_logic; + sda_o : out std_logic; + sda_i : in std_logic; + sfp_scl_o : out std_logic; + sfp_scl_i : in std_logic; + sfp_sda_o : out std_logic; + sfp_sda_i : in std_logic; + sfp_det_i : in std_logic; + memsize_i : in std_logic_vector(3 downto 0); + btn1_i : in std_logic; + btn2_i : in std_logic; + spi_sclk_o : out std_logic; + spi_ncs_o : out std_logic; + spi_mosi_o : out std_logic; + spi_miso_i : in std_logic; + slave_i : in t_wishbone_slave_in_array(0 to 3); + slave_o : out t_wishbone_slave_out_array(0 to 3); + uart_rxd_i : in std_logic; + uart_txd_o : out std_logic; + owr_pwren_o : out std_logic_vector(1 downto 0); + owr_en_o : out std_logic_vector(1 downto 0); + owr_i : in std_logic_vector(1 downto 0); + diag_array_in : in t_generic_word_array(g_diag_ro_size-1 downto 0); + diag_array_out : out t_generic_word_array(g_diag_rw_size-1 downto 0) + ); + end component; + + ----------------------------------------------------------------------------- + -- Soft-PLL + ----------------------------------------------------------------------------- + constant c_xwr_softpll_ng_sdb : t_sdb_device := ( + abi_class => x"0000", -- undocumented device + abi_ver_major => x"01", + abi_ver_minor => x"01", + wbd_endian => c_sdb_endian_big, + wbd_width => x"7", -- 8/16/32-bit port granularity + sdb_component => ( + addr_first => x"0000000000000000", + addr_last => x"00000000000000ff", + product => ( + vendor_id => x"000000000000CE42", -- CERN + device_id => x"65158dc0", + version => x"00000002", + date => x"20120305", + name => "WR-Soft-PLL "))); + + component xwr_softpll_ng + generic ( + g_tag_bits : integer; + g_num_ref_inputs : integer; + g_num_outputs : integer; + g_with_debug_fifo : boolean; + g_with_ext_clock_input : boolean; + g_reverse_dmtds : boolean; + g_divide_input_by_2 : boolean; + g_ref_clock_rate : integer; + g_ext_clock_rate : integer; + g_interface_mode : t_wishbone_interface_mode; + g_address_granularity : t_wishbone_address_granularity); + port ( + clk_sys_i : in std_logic; + rst_sys_n_i : in std_logic; + rst_ref_n_i : in std_logic; + rst_ext_n_i : in std_logic; + rst_dmtd_n_i : in std_logic; + clk_ref_i : in std_logic_vector(g_num_ref_inputs-1 downto 0); + clk_fb_i : in std_logic_vector(g_num_outputs-1 downto 0); + clk_dmtd_i : in std_logic; + clk_ext_i : in std_logic; + clk_ext_mul_i : in std_logic; + clk_ext_mul_locked_i : in std_logic; + clk_ext_stopped_i : in std_logic; + clk_ext_rst_o : out std_logic; + pps_csync_p1_i : in std_logic; + pps_ext_a_i : in std_logic; + dac_dmtd_data_o : out std_logic_vector(15 downto 0); + dac_dmtd_load_o : out std_logic; + dac_out_data_o : out std_logic_vector(15 downto 0); + dac_out_sel_o : out std_logic_vector(3 downto 0); + dac_out_load_o : out std_logic; + out_enable_i : in std_logic_vector(g_num_outputs-1 downto 0); + out_locked_o : out std_logic_vector(g_num_outputs-1 downto 0); + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + debug_o : out std_logic_vector(5 downto 0); + dbg_fifo_irq_o : out std_logic); + end component; + + constant cc_unused_master_in : t_wishbone_master_in := + ('1', '0', '0', '0', '0', cc_dummy_data); + + ----------------------------------------------------------------------------- + -- Public WR component definitions + ----------------------------------------------------------------------------- + component xwr_core is + generic( + g_simulation : integer := 0; + g_board_name : string := "NA "; + g_flash_secsz_kb : integer := 256; -- default for SVEC (M25P128) + g_flash_sdbfs_baddr : integer := 16#600000#; -- default for SVEC (M25P128) + g_phys_uart : boolean := true; + g_virtual_uart : boolean := true; + g_with_external_clock_input : boolean := true; + g_aux_clks : integer := 0; + g_ep_rxbuf_size : integer := 1024; + g_tx_runt_padding : boolean := true; + g_dpram_initf : string := "default"; + g_dpram_size : integer := 131072/4; --in 32-bit words + g_interface_mode : t_wishbone_interface_mode := PIPELINED; + g_address_granularity : t_wishbone_address_granularity := BYTE; + g_aux_sdb : t_sdb_device := c_wrc_periph3_sdb; + g_softpll_enable_debugger : boolean := false; + g_vuart_fifo_size : integer := 1024; + g_pcs_16bit : boolean := false; + g_records_for_phy : boolean := false; + g_diag_id : integer := 0; + g_diag_ver : integer := 0; + g_diag_ro_size : integer := 0; + g_diag_rw_size : integer := 0); + port( + clk_sys_i : in std_logic; + clk_dmtd_i : in std_logic := '0'; + clk_ref_i : in std_logic; + clk_aux_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0'); + clk_ext_mul_i : in std_logic := '0'; + clk_ext_mul_locked_i : in std_logic := '1'; + clk_ext_stopped_i : in std_logic := '0'; + clk_ext_rst_o : out std_logic; + clk_ext_i : in std_logic := '0'; + pps_ext_i : in std_logic := '0'; + rst_n_i : in std_logic; + + dac_hpll_load_p1_o : out std_logic; + dac_hpll_data_o : out std_logic_vector(15 downto 0); + dac_dpll_load_p1_o : out std_logic; + dac_dpll_data_o : out std_logic_vector(15 downto 0); + ----------------------------------------- + -- PHY I/f + ----------------------------------------- + phy_ref_clk_i : in std_logic := '0'; + phy_tx_data_o : out std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0); + phy_tx_k_o : out std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0); + phy_tx_disparity_i : in std_logic := '0'; + phy_tx_enc_err_i : in std_logic := '0'; + phy_rx_data_i : in std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0) := (others=>'0'); + phy_rx_rbclk_i : in std_logic := '0'; + phy_rx_k_i : in std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0) := (others=>'0'); + phy_rx_enc_err_i : in std_logic := '0'; + phy_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_pcs_16bit)-1 downto 0) := (others=>'0'); + phy_rst_o : out std_logic; + phy_rdy_i : in std_logic := '1'; + phy_loopen_o : out std_logic; + phy_loopen_vec_o : out std_logic_vector(2 downto 0); + phy_tx_prbs_sel_o : out std_logic_vector(2 downto 0); + phy_sfp_tx_fault_i : in std_logic := '0'; + phy_sfp_los_i : in std_logic := '0'; + phy_sfp_tx_disable_o : out std_logic; + ----------------------------------------- + -- PHY I/f - record-based + -- selection done with g_records_for_phy + ----------------------------------------- + phy8_o : out t_phy_8bits_from_wrc; + phy8_i : in t_phy_8bits_to_wrc := c_dummy_phy8_to_wrc; + phy16_o : out t_phy_16bits_from_wrc; + phy16_i : in t_phy_16bits_to_wrc := c_dummy_phy16_to_wrc; + + led_act_o : out std_logic; + led_link_o : out std_logic; + scl_o : out std_logic; + scl_i : in std_logic := 'H'; + sda_o : out std_logic; + sda_i : in std_logic := 'H'; + sfp_scl_o : out std_logic; + sfp_scl_i : in std_logic := 'H'; + sfp_sda_o : out std_logic; + sfp_sda_i : in std_logic := 'H'; + sfp_det_i : in std_logic := '1'; + btn1_i : in std_logic := 'H'; + btn2_i : in std_logic := 'H'; + spi_sclk_o : out std_logic; + spi_ncs_o : out std_logic; + spi_mosi_o : out std_logic; + spi_miso_i : in std_logic := '0'; + + uart_rxd_i : in std_logic := 'H'; + uart_txd_o : out std_logic; + + owr_pwren_o : out std_logic_vector(1 downto 0); + owr_en_o : out std_logic_vector(1 downto 0); + owr_i : in std_logic_vector(1 downto 0) := "HH"; + + slave_i : in t_wishbone_slave_in := cc_dummy_slave_in; + slave_o : out t_wishbone_slave_out; + + aux_master_o : out t_wishbone_master_out; + aux_master_i : in t_wishbone_master_in := cc_unused_master_in; + + wrf_src_o : out t_wrf_source_out; + wrf_src_i : in t_wrf_source_in := c_dummy_src_in; + wrf_snk_o : out t_wrf_sink_out; + wrf_snk_i : in t_wrf_sink_in := c_dummy_snk_in; + + timestamps_o : out t_txtsu_timestamp; + timestamps_ack_i : in std_logic := '1'; + + abscal_txts_o : out std_logic; + abscal_rxts_o : out std_logic; + + fc_tx_pause_req_i : in std_logic := '0'; + fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000"; + fc_tx_pause_ready_o : out std_logic; + + tm_link_up_o : out std_logic; + tm_dac_value_o : out std_logic_vector(23 downto 0); + tm_dac_wr_o : out std_logic_vector(g_aux_clks-1 downto 0); + tm_clk_aux_lock_en_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0'); + tm_clk_aux_locked_o : out std_logic_vector(g_aux_clks-1 downto 0); + tm_time_valid_o : out std_logic; + tm_tai_o : out std_logic_vector(39 downto 0); + tm_cycles_o : out std_logic_vector(27 downto 0); + pps_csync_o : out std_logic; + pps_p_o : out std_logic; + pps_led_o : out std_logic; + + rst_aux_n_o : out std_logic; + + link_ok_o : out std_logic; + + aux_diag_i : in t_generic_word_array(g_diag_ro_size-1 downto 0) := (others=>(others=>'0')); + aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0) + ); + end component; + + component wr_core is + generic( + --if set to 1, then blocks in PCS use smaller calibration counter to speed + --up simulation + g_simulation : integer := 0; + g_with_external_clock_input : boolean := true; + -- + g_board_name : string := "NA "; + g_flash_secsz_kb : integer := 256; -- default for SVEC (M25P128) + g_flash_sdbfs_baddr : integer := 16#600000#; -- default for SVEC (M25P128) + g_phys_uart : boolean := true; + g_virtual_uart : boolean := true; + g_aux_clks : integer := 0; + g_rx_buffer_size : integer := 1024; + g_tx_runt_padding : boolean := true; + g_dpram_initf : string := "default"; + g_dpram_size : integer := 131072/4; --in 32-bit words + g_interface_mode : t_wishbone_interface_mode := PIPELINED; + g_address_granularity : t_wishbone_address_granularity := BYTE; + g_aux_sdb : t_sdb_device := c_wrc_periph3_sdb; + g_softpll_enable_debugger : boolean := false; + g_vuart_fifo_size : integer := 1024; + g_pcs_16bit : boolean := false; + g_records_for_phy : boolean := false; + g_diag_id : integer := 0; + g_diag_ver : integer := 0; + g_diag_ro_size : integer := 0; + g_diag_rw_size : integer := 0); + port( + --------------------------------------------------------------------------- + -- Clocks/resets + --------------------------------------------------------------------------- + + -- system reference clock (any frequency <= f(clk_ref_i)) + clk_sys_i : in std_logic; + + -- DDMTD offset clock (125.x MHz) + clk_dmtd_i : in std_logic := '0'; + + -- Timing reference (125 MHz) + clk_ref_i : in std_logic; + + -- Aux clocks (i.e. the FMC clock), which can be disciplined by the WR Core + clk_aux_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0'); + + -- External 10 MHz reference (cesium, GPSDO, etc.), used in Grandmaster mode + clk_ext_i : in std_logic := '0'; + + clk_ext_mul_i : in std_logic := '0'; + clk_ext_mul_locked_i : in std_logic := '1'; + clk_ext_stopped_i : in std_logic := '0'; + clk_ext_rst_o : out std_logic; + + -- External PPS input (cesium, GPSDO, etc.), used in Grandmaster mode + pps_ext_i : in std_logic := '0'; + + rst_n_i : in std_logic; + + ----------------------------------------- + --Timing system + ----------------------------------------- + dac_hpll_load_p1_o : out std_logic; + dac_hpll_data_o : out std_logic_vector(15 downto 0); + + dac_dpll_load_p1_o : out std_logic; + dac_dpll_data_o : out std_logic_vector(15 downto 0); + + ----------------------------------------- + -- PHY I/f + ----------------------------------------- + phy_ref_clk_i : in std_logic; + + phy_tx_data_o : out std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0); + phy_tx_k_o : out std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0); + phy_tx_disparity_i : in std_logic := '0'; + phy_tx_enc_err_i : in std_logic := '0'; + + phy_rx_data_i : in std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0) := (others=>'0'); + phy_rx_rbclk_i : in std_logic := '0'; + phy_rx_k_i : in std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0):= (others=>'0'); + phy_rx_enc_err_i : in std_logic := '0'; + phy_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_pcs_16bit)-1 downto 0) := (others=>'0'); + + phy_rst_o : out std_logic; + phy_rdy_i : in std_logic := '1'; + phy_loopen_o : out std_logic; + phy_loopen_vec_o : out std_logic_vector(2 downto 0); + phy_tx_prbs_sel_o : out std_logic_vector(2 downto 0); + phy_sfp_tx_fault_i : in std_logic := '0'; + phy_sfp_los_i : in std_logic := '0'; + phy_sfp_tx_disable_o : out std_logic; + ----------------------------------------- + -- PHY I/f - record-based + -- selection done with g_records_for_phy + ----------------------------------------- + phy8_o : out t_phy_8bits_from_wrc; + phy8_i : in t_phy_8bits_to_wrc := c_dummy_phy8_to_wrc; + phy16_o : out t_phy_16bits_from_wrc; + phy16_i : in t_phy_16bits_to_wrc := c_dummy_phy16_to_wrc; + + ----------------------------------------- + --GPIO + ----------------------------------------- + led_act_o : out std_logic; + led_link_o : out std_logic; + scl_o : out std_logic; + scl_i : in std_logic := '1'; + sda_o : out std_logic; + sda_i : in std_logic := '1'; + sfp_scl_o : out std_logic; + sfp_scl_i : in std_logic := '1'; + sfp_sda_o : out std_logic; + sfp_sda_i : in std_logic := '1'; + sfp_det_i : in std_logic := '1'; + btn1_i : in std_logic := '1'; + btn2_i : in std_logic := '1'; + spi_sclk_o : out std_logic; + spi_ncs_o : out std_logic; + spi_mosi_o : out std_logic; + spi_miso_i : in std_logic := '0'; + + ----------------------------------------- + --UART + ----------------------------------------- + uart_rxd_i : in std_logic := '0'; + uart_txd_o : out std_logic; + + ----------------------------------------- + -- 1-wire + ----------------------------------------- + owr_pwren_o : out std_logic_vector(1 downto 0); + owr_en_o : out std_logic_vector(1 downto 0); + owr_i : in std_logic_vector(1 downto 0) := (others => '1'); + + ----------------------------------------- + --External WB interface + ----------------------------------------- + wb_adr_i : in std_logic_vector(c_wishbone_address_width-1 downto 0) := (others => '0'); + wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0) := (others => '0'); + wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_sel_i : in std_logic_vector(c_wishbone_address_width/8-1 downto 0) := (others => '0'); + wb_we_i : in std_logic := '0'; + wb_cyc_i : in std_logic := '0'; + wb_stb_i : in std_logic := '0'; + wb_ack_o : out std_logic; + wb_err_o : out std_logic; + wb_rty_o : out std_logic; + wb_stall_o : out std_logic; + + ----------------------------------------- + -- Auxillary WB master + ----------------------------------------- + aux_adr_o : out std_logic_vector(c_wishbone_address_width-1 downto 0); + aux_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + aux_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0) := (others => '0'); + aux_sel_o : out std_logic_vector(c_wishbone_address_width/8-1 downto 0); + aux_we_o : out std_logic; + aux_cyc_o : out std_logic; + aux_stb_o : out std_logic; + aux_ack_i : in std_logic := '1'; + aux_stall_i : in std_logic := '0'; + + ----------------------------------------- + -- External Fabric I/F + ----------------------------------------- + ext_snk_adr_i : in std_logic_vector(1 downto 0) := "00"; + ext_snk_dat_i : in std_logic_vector(15 downto 0) := x"0000"; + ext_snk_sel_i : in std_logic_vector(1 downto 0) := "00"; + ext_snk_cyc_i : in std_logic := '0'; + ext_snk_we_i : in std_logic := '0'; + ext_snk_stb_i : in std_logic := '0'; + ext_snk_ack_o : out std_logic; + ext_snk_err_o : out std_logic; + ext_snk_stall_o : out std_logic; + + ext_src_adr_o : out std_logic_vector(1 downto 0); + ext_src_dat_o : out std_logic_vector(15 downto 0); + ext_src_sel_o : out std_logic_vector(1 downto 0); + ext_src_cyc_o : out std_logic; + ext_src_stb_o : out std_logic; + ext_src_we_o : out std_logic; + ext_src_ack_i : in std_logic := '1'; + ext_src_err_i : in std_logic := '0'; + ext_src_stall_i : in std_logic := '0'; + + ------------------------------------------ + -- External TX Timestamp I/F + ------------------------------------------ + txtsu_port_id_o : out std_logic_vector(4 downto 0); + txtsu_frame_id_o : out std_logic_vector(15 downto 0); + txtsu_ts_value_o : out std_logic_vector(31 downto 0); + txtsu_ts_incorrect_o : out std_logic; + txtsu_stb_o : out std_logic; + txtsu_ack_i : in std_logic := '1'; + + ----------------------------------------- + -- Timestamp helper signals, used for Absolute Calibration + ----------------------------------------- + abscal_txts_o : out std_logic; + abscal_rxts_o : out std_logic; + + ----------------------------------------- + -- Pause Frame Control + ----------------------------------------- + fc_tx_pause_req_i : in std_logic := '0'; + fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000"; + fc_tx_pause_ready_o : out std_logic; + + ----------------------------------------- + -- Timecode/Servo Control + ----------------------------------------- + + tm_link_up_o : out std_logic; + + tm_dac_value_o : out std_logic_vector(23 downto 0); + tm_dac_wr_o : out std_logic_vector(g_aux_clks-1 downto 0) ; + tm_clk_aux_lock_en_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0'); + tm_clk_aux_locked_o : out std_logic_vector(g_aux_clks-1 downto 0) ; + + -- Timecode output + tm_time_valid_o : out std_logic; + tm_tai_o : out std_logic_vector(39 downto 0); + tm_cycles_o : out std_logic_vector(27 downto 0); + -- 1PPS output + pps_csync_o : out std_logic; + pps_p_o : out std_logic; + pps_led_o : out std_logic; + + rst_aux_n_o : out std_logic; + + link_ok_o : out std_logic; + + ------------------------------------- + -- DIAG to/from external modules + ------------------------------------- + aux_diag_i : in t_generic_word_array(g_diag_ro_size-1 downto 0) := (others=>(others=>'0')); + aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0) + ); + end component; + + component spec_serial_dac_arb + generic( + g_invert_sclk : boolean; + g_num_extra_bits : integer); + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + val1_i : in std_logic_vector(15 downto 0); + load1_i : in std_logic; + val2_i : in std_logic_vector(15 downto 0); + load2_i : in std_logic; + dac_cs_n_o : out std_logic_vector(1 downto 0); + dac_clr_n_o : out std_logic; + dac_sclk_o : out std_logic; + dac_din_o : out std_logic); + end component; + +end wrcore_pkg; + +package body wrcore_pkg is + + function f_refclk_rate(pcs_16 : boolean) + return integer is + begin + if (pcs_16) then + return 62500000; + else + return 125000000; + end if; + end function; + +end package body wrcore_pkg; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/xwr_core.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/xwr_core.vhd new file mode 100644 index 000000000..25bcc92a1 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/xwr_core.vhd @@ -0,0 +1,448 @@ +------------------------------------------------------------------------------- +-- Title : WhiteRabbit PTP Core +-- Project : WhiteRabbit +------------------------------------------------------------------------------- +-- File : xwr_core.vhd +-- Author : Grzegorz Daniluk +-- Company : CERN (BE-CO-HT) +-- Created : 2011-02-02 +-- Last update: 2017-05-29 +-- Platform : FPGA-generics +-- Standard : VHDL +------------------------------------------------------------------------------- +-- Description: +-- WR PTP Core is a HDL module implementing a complete gigabit Ethernet +-- interface (MAC + PCS + PHY) with integrated PTP slave ordinary clock +-- compatible with White Rabbit protocol. It performs subnanosecond clock +-- synchronization via WR protocol and also acts as an Ethernet "gateway", +-- providing access to TX/RX interfaces of the built-in WR MAC. +-- +-- Starting from version 2.0 all modules are interconnected with pipelined +-- wishbone interface (using wb crossbar and bus fanout). Separate pipelined +-- wishbone bus is used for passing packets between Endpoint, Mini-NIC +-- and External MAC interface. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2012 - 2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Memory map: +-- 0x00000000: I/D Memory +-- 0x00020000: Peripheral interconnect +-- +0x000: Minic +-- +0x100: Endpoint +-- +0x200: Softpll +-- +0x300: PPS gen +-- +0x400: Syscon +-- +0x500: UART +-- +0x600: OneWire +-- +0x700: Auxillary space (Etherbone config, etc) +-- +0x800: WRPC diagnostics registers + +library ieee; +use ieee.std_logic_1164.all; + +library work; +use work.wrcore_pkg.all; +use work.genram_pkg.all; +use work.wishbone_pkg.all; +use work.endpoint_pkg.all; +use work.wr_fabric_pkg.all; +use work.sysc_wbgen2_pkg.all; +use work.softpll_pkg.all; + + +entity xwr_core is + generic( + --if set to 1, then blocks in PCS use smaller calibration counter to speed + --up simulation + g_simulation : integer := 0; + g_with_external_clock_input : boolean := true; + -- + g_board_name : string := "NA "; + g_flash_secsz_kb : integer := 256; -- default for SVEC (M25P128) + g_flash_sdbfs_baddr : integer := 16#600000#; -- default for SVEC (M25P128) + g_phys_uart : boolean := true; + g_virtual_uart : boolean := true; + g_aux_clks : integer := 0; + g_ep_rxbuf_size : integer := 1024; + g_tx_runt_padding : boolean := true; + g_dpram_initf : string := ""; + g_dpram_size : integer := 131072/4; --in 32-bit words + g_interface_mode : t_wishbone_interface_mode := PIPELINED; + g_address_granularity : t_wishbone_address_granularity := BYTE; + g_aux_sdb : t_sdb_device := c_wrc_periph3_sdb; + g_softpll_enable_debugger : boolean := false; + g_vuart_fifo_size : integer := 1024; + g_pcs_16bit : boolean := false; + g_records_for_phy : boolean := false; + g_diag_id : integer := 0; + g_diag_ver : integer := 0; + g_diag_ro_size : integer := 0; + g_diag_rw_size : integer := 0); + port( + --------------------------------------------------------------------------- + -- Clocks/resets + --------------------------------------------------------------------------- + + -- system reference clock (any frequency <= f(clk_ref_i)) + clk_sys_i : in std_logic; + + -- DDMTD offset clock (125.x MHz) + clk_dmtd_i : in std_logic; + + -- Timing reference (125 MHz) + clk_ref_i : in std_logic; + + -- Aux clock (i.e. the FMC clock), which can be disciplined by the WR Core + clk_aux_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0'); + + -- External 10 MHz reference (cesium, GPSDO, etc.), used in Grandmaster mode + clk_ext_i : in std_logic := '0'; + + clk_ext_mul_i : in std_logic := '0'; + clk_ext_mul_locked_i : in std_logic := '1'; + clk_ext_stopped_i : in std_logic := '0'; + clk_ext_rst_o : out std_logic; + + -- External PPS input (cesium, GPSDO, etc.), used in Grandmaster mode + pps_ext_i : in std_logic := '0'; + + rst_n_i : in std_logic; + + ----------------------------------------- + --Timing system + ----------------------------------------- + dac_hpll_load_p1_o : out std_logic; + dac_hpll_data_o : out std_logic_vector(15 downto 0); + + dac_dpll_load_p1_o : out std_logic; + dac_dpll_data_o : out std_logic_vector(15 downto 0); + + ----------------------------------------- + -- PHY I/f + ----------------------------------------- + phy_ref_clk_i : in std_logic; + + phy_tx_data_o : out std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0); + phy_tx_k_o : out std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0); + phy_tx_disparity_i : in std_logic; + phy_tx_enc_err_i : in std_logic; + + phy_rx_data_i : in std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0); + phy_rx_rbclk_i : in std_logic; + phy_rx_k_i : in std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0); + phy_rx_enc_err_i : in std_logic; + phy_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_pcs_16bit)-1 downto 0); + + phy_rst_o : out std_logic; + phy_rdy_i : in std_logic := '1'; + phy_loopen_o : out std_logic; + phy_loopen_vec_o : out std_logic_vector(2 downto 0); + phy_tx_prbs_sel_o : out std_logic_vector(2 downto 0); + phy_sfp_tx_fault_i : in std_logic := '0'; + phy_sfp_los_i : in std_logic := '0'; + phy_sfp_tx_disable_o : out std_logic; + ----------------------------------------- + -- PHY I/f - record-based + -- selection done with g_records_for_phy + ----------------------------------------- + phy8_o : out t_phy_8bits_from_wrc; + phy8_i : in t_phy_8bits_to_wrc := c_dummy_phy8_to_wrc; + phy16_o : out t_phy_16bits_from_wrc; + phy16_i : in t_phy_16bits_to_wrc := c_dummy_phy16_to_wrc; + + ----------------------------------------- + --GPIO + ----------------------------------------- + led_act_o : out std_logic; + led_link_o : out std_logic; + scl_o : out std_logic; + scl_i : in std_logic := '1'; + sda_o : out std_logic; + sda_i : in std_logic := '1'; + sfp_scl_o : out std_logic; + sfp_scl_i : in std_logic := '1'; + sfp_sda_o : out std_logic; + sfp_sda_i : in std_logic := '1'; + sfp_det_i : in std_logic; + btn1_i : in std_logic := '1'; + btn2_i : in std_logic := '1'; + spi_sclk_o : out std_logic; + spi_ncs_o : out std_logic; + spi_mosi_o : out std_logic; + spi_miso_i : in std_logic := '0'; + + ----------------------------------------- + --UART + ----------------------------------------- + uart_rxd_i : in std_logic := '0'; + uart_txd_o : out std_logic; + + ----------------------------------------- + -- 1-wire + ----------------------------------------- + owr_pwren_o : out std_logic_vector(1 downto 0); + owr_en_o : out std_logic_vector(1 downto 0); + owr_i : in std_logic_vector(1 downto 0) := (others => '1'); + + ----------------------------------------- + --External WB interface + ----------------------------------------- + slave_i : in t_wishbone_slave_in := cc_dummy_slave_in; + slave_o : out t_wishbone_slave_out; + + aux_master_o : out t_wishbone_master_out; + aux_master_i : in t_wishbone_master_in := cc_dummy_master_in; + + ----------------------------------------- + -- External Fabric I/F + ----------------------------------------- + wrf_src_o : out t_wrf_source_out; + wrf_src_i : in t_wrf_source_in := c_dummy_src_in; + wrf_snk_o : out t_wrf_sink_out; + wrf_snk_i : in t_wrf_sink_in := c_dummy_snk_in; + + ----------------------------------------- + -- External Tx Timestamping I/F + ----------------------------------------- + timestamps_o : out t_txtsu_timestamp; + timestamps_ack_i : in std_logic := '1'; + + ----------------------------------------- + -- Timestamp helper signals, used for Absolute Calibration + ----------------------------------------- + abscal_txts_o : out std_logic; + abscal_rxts_o : out std_logic; + + ----------------------------------------- + -- Pause Frame Control + ----------------------------------------- + fc_tx_pause_req_i : in std_logic := '0'; + fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000"; + fc_tx_pause_ready_o : out std_logic; + + ----------------------------------------- + -- Timecode/Servo Control + ----------------------------------------- + + tm_link_up_o : out std_logic; + -- DAC Control + tm_dac_value_o : out std_logic_vector(23 downto 0); + tm_dac_wr_o : out std_logic_vector(g_aux_clks-1 downto 0); + -- Aux clock lock enable + tm_clk_aux_lock_en_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0'); + -- Aux clock locked flag + tm_clk_aux_locked_o : out std_logic_vector(g_aux_clks-1 downto 0); + -- Timecode output + tm_time_valid_o : out std_logic; + tm_tai_o : out std_logic_vector(39 downto 0); + tm_cycles_o : out std_logic_vector(27 downto 0); + -- 1PPS output + pps_csync_o : out std_logic; + pps_p_o : out std_logic; + pps_led_o : out std_logic; + + rst_aux_n_o : out std_logic; + + aux_diag_i : in t_generic_word_array(g_diag_ro_size-1 downto 0) := (others =>(others=>'0')); + aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0); + + link_ok_o : out std_logic + ); +end xwr_core; + +architecture struct of xwr_core is +begin + + WRPC : wr_core + generic map( + g_simulation => g_simulation, + g_board_name => g_board_name, + g_flash_secsz_kb => g_flash_secsz_kb, + g_flash_sdbfs_baddr => g_flash_sdbfs_baddr, + g_phys_uart => g_phys_uart, + g_virtual_uart => g_virtual_uart, + g_rx_buffer_size => g_ep_rxbuf_size, + g_tx_runt_padding => g_tx_runt_padding, + g_with_external_clock_input => g_with_external_clock_input, + g_aux_clks => g_aux_clks, + g_dpram_initf => g_dpram_initf, + g_dpram_size => g_dpram_size, + g_interface_mode => g_interface_mode, + g_address_granularity => g_address_granularity, + g_aux_sdb => g_aux_sdb, + g_softpll_enable_debugger => g_softpll_enable_debugger, + g_vuart_fifo_size => g_vuart_fifo_size, + g_pcs_16bit => g_pcs_16bit, + g_records_for_phy => g_records_for_phy, + g_diag_id => g_diag_id, + g_diag_ver => g_diag_ver, + g_diag_ro_size => g_diag_ro_size, + g_diag_rw_size => g_diag_rw_size + ) + port map( + clk_sys_i => clk_sys_i, + clk_dmtd_i => clk_dmtd_i, + clk_ref_i => clk_ref_i, + clk_aux_i => clk_aux_i, + clk_ext_i => clk_ext_i, + clk_ext_mul_i => clk_ext_mul_i, + clk_ext_mul_locked_i => clk_ext_mul_locked_i, + clk_ext_stopped_i => clk_ext_stopped_i, + clk_ext_rst_o => clk_ext_rst_o, + pps_ext_i => pps_ext_i, + rst_n_i => rst_n_i, + + dac_hpll_load_p1_o => dac_hpll_load_p1_o, + dac_hpll_data_o => dac_hpll_data_o, + dac_dpll_load_p1_o => dac_dpll_load_p1_o, + dac_dpll_data_o => dac_dpll_data_o, + + phy_ref_clk_i => phy_ref_clk_i, + phy_tx_data_o => phy_tx_data_o, + phy_tx_k_o => phy_tx_k_o, + phy_tx_disparity_i => phy_tx_disparity_i, + phy_tx_enc_err_i => phy_tx_enc_err_i, + phy_rx_data_i => phy_rx_data_i, + phy_rx_rbclk_i => phy_rx_rbclk_i, + phy_rx_k_i => phy_rx_k_i, + phy_rx_enc_err_i => phy_rx_enc_err_i, + phy_rx_bitslide_i => phy_rx_bitslide_i, + phy_rst_o => phy_rst_o, + phy_rdy_i => phy_rdy_i, + phy_loopen_o => phy_loopen_o, + phy_loopen_vec_o => phy_loopen_vec_o, + phy_tx_prbs_sel_o => phy_tx_prbs_sel_o, + phy_sfp_tx_fault_i => phy_sfp_tx_fault_i, + phy_sfp_los_i => phy_sfp_los_i, + phy_sfp_tx_disable_o => phy_sfp_tx_disable_o, + + phy8_o => phy8_o, + phy8_i => phy8_i, + phy16_o => phy16_o, + phy16_i => phy16_i, + + led_act_o => led_act_o, + led_link_o => led_link_o, + scl_o => scl_o, + scl_i => scl_i, + sda_o => sda_o, + sda_i => sda_i, + sfp_scl_o => sfp_scl_o, + sfp_scl_i => sfp_scl_i, + sfp_sda_o => sfp_sda_o, + sfp_sda_i => sfp_sda_i, + sfp_det_i => sfp_det_i, + btn1_i => btn1_i, + btn2_i => btn2_i, + spi_sclk_o => spi_sclk_o, + spi_ncs_o => spi_ncs_o, + spi_mosi_o => spi_mosi_o, + spi_miso_i => spi_miso_i, + uart_rxd_i => uart_rxd_i, + uart_txd_o => uart_txd_o, + + owr_pwren_o => owr_pwren_o, + owr_en_o => owr_en_o, + owr_i => owr_i, + + wb_adr_i => slave_i.adr, + wb_dat_i => slave_i.dat, + wb_dat_o => slave_o.dat, + wb_sel_i => slave_i.sel, + wb_we_i => slave_i.we, + wb_cyc_i => slave_i.cyc, + wb_stb_i => slave_i.stb, + wb_ack_o => slave_o.ack, + wb_err_o => slave_o.err, + wb_rty_o => slave_o.rty, + wb_stall_o => slave_o.stall, + + aux_adr_o => aux_master_o.adr, + aux_dat_o => aux_master_o.dat, + aux_sel_o => aux_master_o.sel, + aux_cyc_o => aux_master_o.cyc, + aux_stb_o => aux_master_o.stb, + aux_we_o => aux_master_o.we, + aux_stall_i => aux_master_i.stall, + aux_ack_i => aux_master_i.ack, + aux_dat_i => aux_master_i.dat, + + ext_snk_adr_i => wrf_snk_i.adr, + ext_snk_dat_i => wrf_snk_i.dat, + ext_snk_sel_i => wrf_snk_i.sel, + ext_snk_cyc_i => wrf_snk_i.cyc, + ext_snk_we_i => wrf_snk_i.we, + ext_snk_stb_i => wrf_snk_i.stb, + ext_snk_ack_o => wrf_snk_o.ack, + ext_snk_err_o => wrf_snk_o.err, + ext_snk_stall_o => wrf_snk_o.stall, + + ext_src_adr_o => wrf_src_o.adr, + ext_src_dat_o => wrf_src_o.dat, + ext_src_sel_o => wrf_src_o.sel, + ext_src_cyc_o => wrf_src_o.cyc, + ext_src_stb_o => wrf_src_o.stb, + ext_src_we_o => wrf_src_o.we, + ext_src_ack_i => wrf_src_i.ack, + ext_src_err_i => wrf_src_i.err, + ext_src_stall_i => wrf_src_i.stall, + + txtsu_port_id_o => timestamps_o.port_id(4 downto 0), + txtsu_frame_id_o => timestamps_o.frame_id, + txtsu_ts_value_o => timestamps_o.tsval, + txtsu_ts_incorrect_o => timestamps_o.incorrect, + txtsu_stb_o => timestamps_o.stb, + txtsu_ack_i => timestamps_ack_i, + + abscal_txts_o => abscal_txts_o, + abscal_rxts_o => abscal_rxts_o, + + fc_tx_pause_req_i => fc_tx_pause_req_i, + fc_tx_pause_delay_i => fc_tx_pause_delay_i, + fc_tx_pause_ready_o => fc_tx_pause_ready_o, + + tm_link_up_o => tm_link_up_o, + tm_dac_value_o => tm_dac_value_o, + tm_dac_wr_o => tm_dac_wr_o, + tm_clk_aux_lock_en_i => tm_clk_aux_lock_en_i, + tm_clk_aux_locked_o => tm_clk_aux_locked_o, + tm_time_valid_o => tm_time_valid_o, + tm_tai_o => tm_tai_o, + tm_cycles_o => tm_cycles_o, + pps_csync_o => pps_csync_o, + pps_p_o => pps_p_o, + pps_led_o => pps_led_o, + + rst_aux_n_o => rst_aux_n_o, + + link_ok_o => link_ok_o, + + aux_diag_i => aux_diag_i, + aux_diag_o => aux_diag_o + ); + + timestamps_o.port_id(5) <= '0'; + + slave_o.int <= '0'; + + wrf_snk_o.rty <= '0'; + +end struct; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/xwrc_diags_wb.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/xwrc_diags_wb.vhd new file mode 100644 index 000000000..cce48c8b1 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/xwrc_diags_wb.vhd @@ -0,0 +1,132 @@ +------------------------------------------------------------------------------- +-- Title : WR PTP Core Diagnostics +-- Project : WhiteRabbit +------------------------------------------------------------------------------- +-- File : xwrc_diags_wb.vhd +-- Author : Maciej Lipinski +-- Company : CERN +-- Created : 2017-04-24 +-- Platform : FPGA-generics +-- Standard : VHDL +------------------------------------------------------------------------------- +-- Description: +-- Wrapper for wrc_diags_wb. Uses types instead of std_logic signals and +-- can use pipelined or classic wishbone. +-- +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2017 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use work.wishbone_pkg.all; +use work.wrc_diags_wbgen2_pkg.all; + +entity xwr_diags_wb is + generic( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD + ); + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + + regs_i : in t_wrc_diags_in_registers; + regs_o : out t_wrc_diags_out_registers + ); +end xwr_diags_wb; + +architecture syn of xwr_diags_wb is + + component wrc_diags_wb is + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + regs_i : in t_wrc_diags_in_registers; + regs_o : out t_wrc_diags_out_registers + ); + end component; + + + signal wb_out : t_wishbone_slave_out; + signal wb_in : t_wishbone_slave_in; + +begin + + U_Adapter : wb_slave_adapter + generic map( + g_master_use_struct => true, + g_master_mode => CLASSIC, + g_master_granularity => WORD, + g_slave_use_struct => false, + g_slave_mode => g_interface_mode, + g_slave_granularity => g_address_granularity) + port map ( + clk_sys_i => clk_sys_i, + rst_n_i => rst_n_i, + master_i => wb_out, + master_o => wb_in, + sl_adr_i => slave_i.adr, + sl_dat_i => slave_i.dat, + sl_sel_i => slave_i.sel, + sl_cyc_i => slave_i.cyc, + sl_stb_i => slave_i.stb, + sl_we_i => slave_i.we, + sl_dat_o => slave_o.dat, + sl_ack_o => slave_o.ack, + sl_stall_o => slave_o.stall); + + WRAPPED_DIAGS: wrc_diags_wb + port map( + rst_n_i => rst_n_i, + clk_sys_i => clk_sys_i, + wb_adr_i => wb_in.adr(4 downto 0), + wb_dat_i => wb_in.dat, + wb_dat_o => wb_out.dat, + wb_cyc_i => wb_in.cyc, + wb_sel_i => wb_in.sel, + wb_stb_i => wb_in.stb, + wb_we_i => wb_in.we, + wb_ack_o => wb_out.ack, + wb_stall_o => wb_out.stall, + regs_i => regs_i, + regs_o => regs_o); + + slave_o.err <= '0'; + slave_o.rty <= '0'; + slave_o.int <= '0'; + +end syn; + + + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper.vhd new file mode 100644 index 000000000..f981871f4 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper.vhd @@ -0,0 +1,491 @@ +------------------------------------------------------------------------------- +-- ____ ____ +-- / /\/ / +-- /___/ \ / Vendor: Xilinx +-- \ \ \/ Version : 3.6 +-- \ \ Application : 7 Series FPGAs Transceivers Wizard +-- / / Filename : whiterabbit_gtpe2_channel_wrapper.vhd +-- /___/ /\ +-- \ \ / \ +-- \___\/\___\ +-- +-- +-- Module whiterabbit_gtpe2_channel_wrapper (a GT Wrapper) +-- Generated by Xilinx 7 Series FPGAs Transceivers Wizard +-- +-- +-- (c) Copyright 2010-2012 Xilinx, Inc. All rights reserved. +-- +-- This file contains confidential and proprietary information +-- of Xilinx, Inc. and is protected under U.S. and +-- international copyright and other intellectual property +-- laws. +-- +-- DISCLAIMER +-- This disclaimer is not a license and does not grant any +-- rights to the materials distributed herewith. Except as +-- otherwise provided in a valid license issued to you by +-- Xilinx, and to the maximum extent permitted by applicable +-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +-- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES +-- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +-- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +-- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +-- (2) Xilinx shall not be liable (whether in contract or tort, +-- including negligence, or under any other theory of +-- liability) for any loss or damage of any kind or nature +-- related to, arising under or in connection with these +-- materials, including for any direct, or any indirect, +-- special, incidental, or consequential loss or damage +-- (including loss of data, profits, goodwill, or any type of +-- loss or damage suffered as a result of any action brought +-- by a third party) even if such damage or loss was +-- reasonably foreseeable or Xilinx had been advised of the +-- possibility of the same. +-- +-- CRITICAL APPLICATIONS +-- Xilinx products are not designed or intended to be fail- +-- safe, or for use in any application requiring fail-safe +-- performance, such as life-support or safety devices or +-- systems, Class III medical devices, nuclear facilities, +-- applications related to the deployment of airbags, or any +-- other applications that could lead to death, personal +-- injury, or severe property or environmental damage +-- (individually and collectively, "Critical +-- Applications"). Customer assumes the sole risk and +-- liability of any use of Xilinx products in Critical +-- Applications, subject only to applicable laws and +-- regulations governing limitations on product liability. +-- +-- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +-- PART OF THIS FILE AT ALL TIMES. + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library UNISIM; +use UNISIM.VCOMPONENTS.ALL; + + +--***************************** Entity Declaration **************************** + +entity whiterabbit_gtpe2_channel_wrapper is +generic +( + -- Simulation attributes + EXAMPLE_SIMULATION : integer := 0; -- Set to 1 for simulation + WRAPPER_SIM_GTRESET_SPEEDUP : string := "FALSE" -- Set to "true" to speed up sim reset +); +port +( + --_________________________________________________________________________ + --_________________________________________________________________________ + --____________________________CHANNEL PORTS________________________________ + GT0_DRP_BUSY_OUT : out std_logic; + ---------------------------- Channel - DRP Ports -------------------------- + GT0_DRPADDR_IN : in std_logic_vector(8 downto 0); + GT0_DRPCLK_IN : in std_logic; + GT0_DRPDI_IN : in std_logic_vector(15 downto 0); + GT0_DRPDO_OUT : out std_logic_vector(15 downto 0); + GT0_DRPEN_IN : in std_logic; + GT0_DRPRDY_OUT : out std_logic; + GT0_DRPWE_IN : in std_logic; + ------------------------------- Loopback Ports ----------------------------- + GT0_LOOPBACK_IN : in std_logic_vector(2 downto 0); + --------------------- RX Initialization and Reset Ports -------------------- + GT0_RXUSERRDY_IN : in std_logic; + -------------------------- RX Margin Analysis Ports ------------------------ + GT0_EYESCANDATAERROR_OUT : out std_logic; + ------------------ Receive Ports - FPGA RX Interface Ports ----------------- + GT0_RXDATA_OUT : out std_logic_vector(15 downto 0); + GT0_RXUSRCLK_IN : in std_logic; + GT0_RXUSRCLK2_IN : in std_logic; + ------------------ Receive Ports - RX 8B/10B Decoder Ports ----------------- + GT0_RXCHARISCOMMA_OUT : out std_logic_vector(1 downto 0); + GT0_RXCHARISK_OUT : out std_logic_vector(1 downto 0); + GT0_RXDISPERR_OUT : out std_logic_vector(1 downto 0); + GT0_RXNOTINTABLE_OUT : out std_logic_vector(1 downto 0); + ------------------------ Receive Ports - RX AFE Ports ---------------------- + GT0_GTPRXN_IN : in std_logic; + GT0_GTPRXP_IN : in std_logic; + -------------- Receive Ports - RX Byte and Word Alignment Ports ------------ + GT0_RXBYTEISALIGNED_OUT : out std_logic; + GT0_RXCOMMADET_OUT : out std_logic; + GT0_RXSLIDE_IN : in std_logic; + --------------------- Receive Ports - RX Equilizer Ports ------------------- + GT0_RXLPMHFHOLD_IN : in std_logic; + GT0_RXLPMLFHOLD_IN : in std_logic; + --------------- Receive Ports - RX Fabric Output Control Ports ------------- + GT0_RXOUTCLK_OUT : out std_logic; + ------------- Receive Ports - RX Initialization and Reset Ports ------------ + GT0_GTRXRESET_IN : in std_logic; + -------------- Receive Ports -RX Initialization and Reset Ports ------------ + GT0_RXRESETDONE_OUT : out std_logic; + --------------------- TX Initialization and Reset Ports -------------------- + GT0_GTTXRESET_IN : in std_logic; + GT0_TXUSERRDY_IN : in std_logic; + ------------------ Transmit Ports - FPGA TX Interface Ports ---------------- + GT0_TXDATA_IN : in std_logic_vector(15 downto 0); + GT0_TXUSRCLK_IN : in std_logic; + GT0_TXUSRCLK2_IN : in std_logic; + ------------------ Transmit Ports - TX 8B/10B Encoder Ports ---------------- + GT0_TXCHARISK_IN : in std_logic_vector(1 downto 0); + --------------- Transmit Ports - TX Configurable Driver Ports -------------- + GT0_GTPTXN_OUT : out std_logic; + GT0_GTPTXP_OUT : out std_logic; + ----------- Transmit Ports - TX Fabric Clock Output Control Ports ---------- + GT0_TXOUTCLK_OUT : out std_logic; + GT0_TXOUTCLKFABRIC_OUT : out std_logic; + GT0_TXOUTCLKPCS_OUT : out std_logic; + ------------- Transmit Ports - TX Initialization and Reset Ports ----------- + GT0_TXRESETDONE_OUT : out std_logic; + ------------------ Transmit Ports - pattern Generator Ports ---------------- + GT0_TXPRBSSEL_IN : in std_logic_vector(2 downto 0); + + + --____________________________COMMON PORTS________________________________ + ----------------- Common Block - GTPE2_COMMON Clocking Ports --------------- + GT0_GTREFCLK0_IN : in std_logic; + -------------------------- Common Block - PLL Ports ------------------------ + GT0_PLL1LOCK_OUT : out std_logic; + GT0_PLL1LOCKDETCLK_IN : in std_logic; + GT0_PLL1REFCLKLOST_OUT : out std_logic; + GT0_PLL1RESET_IN : in std_logic + + +); + + +end whiterabbit_gtpe2_channel_wrapper; + +architecture RTL of whiterabbit_gtpe2_channel_wrapper is + + attribute CORE_GENERATION_INFO : string; + attribute CORE_GENERATION_INFO of RTL : architecture is "whiterabbit_gtpe2_channel_wrapper,gtwizard_v3_6_1,{protocol_file=Start_from_scratch}"; + + +--***********************************Parameter Declarations******************** + + constant DLY : time := 1 ns; + +--***************************** Signal Declarations ***************************** + + -- ground and tied_to_vcc_i signals + signal tied_to_ground_i : std_logic; + signal tied_to_ground_vec_i : std_logic_vector(63 downto 0); + signal tied_to_vcc_i : std_logic; + signal gt0_pll0outclk_i : std_logic; + signal gt0_pll0outrefclk_i : std_logic; + signal gt0_pll1outclk_i : std_logic; + signal gt0_pll1outrefclk_i : std_logic; + + + signal gt0_mgtrefclktx_i : std_logic_vector(1 downto 0); + signal gt0_mgtrefclkrx_i : std_logic_vector(1 downto 0); + + + signal gt0_pll0clk_i : std_logic; + signal gt0_pll0refclk_i : std_logic; + signal gt0_pll1clk_i : std_logic; + signal gt0_pll1refclk_i : std_logic; + signal gt0_rst_i : std_logic; + + + + +--*************************** Component Declarations ************************** +component whiterabbit_gtpe2_channel_wrapper_gt +generic +( + -- Simulation attributes + GT_SIM_GTRESET_SPEEDUP : string := "false"; + EXAMPLE_SIMULATION : integer := 0; + TXSYNC_OVRD_IN : bit := '0'; + TXSYNC_MULTILANE_IN : bit := '0' +); +port +( + RST_IN : in std_logic; + DRP_BUSY_OUT : out std_logic; + + ---------------------------- Channel - DRP Ports -------------------------- + DRPADDR_IN : in std_logic_vector(8 downto 0); + DRPCLK_IN : in std_logic; + DRPDI_IN : in std_logic_vector(15 downto 0); + DRPDO_OUT : out std_logic_vector(15 downto 0); + DRPEN_IN : in std_logic; + DRPRDY_OUT : out std_logic; + DRPWE_IN : in std_logic; + ------------------------ GTPE2_CHANNEL Clocking Ports ---------------------- + PLL0CLK_IN : in std_logic; + PLL0REFCLK_IN : in std_logic; + PLL1CLK_IN : in std_logic; + PLL1REFCLK_IN : in std_logic; + ------------------------------- Loopback Ports ----------------------------- + LOOPBACK_IN : in std_logic_vector(2 downto 0); + --------------------- RX Initialization and Reset Ports -------------------- + RXUSERRDY_IN : in std_logic; + -------------------------- RX Margin Analysis Ports ------------------------ + EYESCANDATAERROR_OUT : out std_logic; + ------------------ Receive Ports - FPGA RX Interface Ports ----------------- + RXDATA_OUT : out std_logic_vector(15 downto 0); + RXUSRCLK_IN : in std_logic; + RXUSRCLK2_IN : in std_logic; + ------------------ Receive Ports - RX 8B/10B Decoder Ports ----------------- + RXCHARISCOMMA_OUT : out std_logic_vector(1 downto 0); + RXCHARISK_OUT : out std_logic_vector(1 downto 0); + RXDISPERR_OUT : out std_logic_vector(1 downto 0); + RXNOTINTABLE_OUT : out std_logic_vector(1 downto 0); + ------------------------ Receive Ports - RX AFE Ports ---------------------- + GTPRXN_IN : in std_logic; + GTPRXP_IN : in std_logic; + -------------- Receive Ports - RX Byte and Word Alignment Ports ------------ + RXBYTEISALIGNED_OUT : out std_logic; + RXCOMMADET_OUT : out std_logic; + RXSLIDE_IN : in std_logic; + --------------------- Receive Ports - RX Equilizer Ports ------------------- + RXLPMHFHOLD_IN : in std_logic; + RXLPMLFHOLD_IN : in std_logic; + --------------- Receive Ports - RX Fabric Output Control Ports ------------- + RXOUTCLK_OUT : out std_logic; + ------------- Receive Ports - RX Initialization and Reset Ports ------------ + GTRXRESET_IN : in std_logic; + -------------- Receive Ports -RX Initialization and Reset Ports ------------ + RXRESETDONE_OUT : out std_logic; + --------------------- TX Initialization and Reset Ports -------------------- + GTTXRESET_IN : in std_logic; + TXUSERRDY_IN : in std_logic; + ------------------ Transmit Ports - FPGA TX Interface Ports ---------------- + TXDATA_IN : in std_logic_vector(15 downto 0); + TXUSRCLK_IN : in std_logic; + TXUSRCLK2_IN : in std_logic; + ------------------ Transmit Ports - TX 8B/10B Encoder Ports ---------------- + TXCHARISK_IN : in std_logic_vector(1 downto 0); + --------------- Transmit Ports - TX Configurable Driver Ports -------------- + GTPTXN_OUT : out std_logic; + GTPTXP_OUT : out std_logic; + ----------- Transmit Ports - TX Fabric Clock Output Control Ports ---------- + TXOUTCLK_OUT : out std_logic; + TXOUTCLKFABRIC_OUT : out std_logic; + TXOUTCLKPCS_OUT : out std_logic; + ------------- Transmit Ports - TX Initialization and Reset Ports ----------- + TXRESETDONE_OUT : out std_logic; + ------------------ Transmit Ports - pattern Generator Ports ---------------- + TXPRBSSEL_IN : in std_logic_vector(2 downto 0) + + +); +end component; + + + constant PLL0_FBDIV_IN : integer := 1; + constant PLL1_FBDIV_IN : integer := 4; + constant PLL0_FBDIV_45_IN : integer := 4; + constant PLL1_FBDIV_45_IN : integer := 5; + constant PLL0_REFCLK_DIV_IN : integer := 1; + constant PLL1_REFCLK_DIV_IN : integer := 1; + +--********************************* Main Body of Code************************** + +begin + + tied_to_ground_i <= '0'; + tied_to_ground_vec_i(63 downto 0) <= (others => '0'); + tied_to_vcc_i <= '1'; + gt0_pll0clk_i <= gt0_pll0outclk_i; + gt0_pll0refclk_i <= gt0_pll0outrefclk_i; + gt0_pll1clk_i <= gt0_pll1outclk_i; + gt0_pll1refclk_i <= gt0_pll1outrefclk_i; + + gt0_rst_i <= GT0_PLL1RESET_IN; + + + --------------------------- GT Instances ------------------------------- + --_________________________________________________________________________ + --_________________________________________________________________________ + GT_INST : whiterabbit_gtpe2_channel_wrapper_gt + generic map + ( + -- Simulation attributes + GT_SIM_GTRESET_SPEEDUP => WRAPPER_SIM_GTRESET_SPEEDUP, + EXAMPLE_SIMULATION => EXAMPLE_SIMULATION, + TXSYNC_OVRD_IN => ('0'), + TXSYNC_MULTILANE_IN => ('0') + ) + port map + ( + RST_IN => gt0_rst_i, + DRP_BUSY_OUT => GT0_DRP_BUSY_OUT, + + ---------------------------- Channel - DRP Ports -------------------------- + DRPADDR_IN => GT0_DRPADDR_IN, + DRPCLK_IN => GT0_DRPCLK_IN, + DRPDI_IN => GT0_DRPDI_IN, + DRPDO_OUT => GT0_DRPDO_OUT, + DRPEN_IN => GT0_DRPEN_IN, + DRPRDY_OUT => GT0_DRPRDY_OUT, + DRPWE_IN => GT0_DRPWE_IN, + ------------------------ GTPE2_CHANNEL Clocking Ports ---------------------- + PLL0CLK_IN => gt0_pll0clk_i, + PLL0REFCLK_IN => gt0_pll0refclk_i, + PLL1CLK_IN => gt0_pll1clk_i, + PLL1REFCLK_IN => gt0_pll1refclk_i, + ------------------------------- Loopback Ports ----------------------------- + LOOPBACK_IN => GT0_LOOPBACK_IN, + --------------------- RX Initialization and Reset Ports -------------------- + RXUSERRDY_IN => GT0_RXUSERRDY_IN, + -------------------------- RX Margin Analysis Ports ------------------------ + EYESCANDATAERROR_OUT => GT0_EYESCANDATAERROR_OUT, + ------------------ Receive Ports - FPGA RX Interface Ports ----------------- + RXDATA_OUT => GT0_RXDATA_OUT, + RXUSRCLK_IN => GT0_RXUSRCLK_IN, + RXUSRCLK2_IN => GT0_RXUSRCLK2_IN, + ------------------ Receive Ports - RX 8B/10B Decoder Ports ----------------- + RXCHARISCOMMA_OUT => GT0_RXCHARISCOMMA_OUT, + RXCHARISK_OUT => GT0_RXCHARISK_OUT, + RXDISPERR_OUT => GT0_RXDISPERR_OUT, + RXNOTINTABLE_OUT => GT0_RXNOTINTABLE_OUT, + ------------------------ Receive Ports - RX AFE Ports ---------------------- + GTPRXN_IN => GT0_GTPRXN_IN, + GTPRXP_IN => GT0_GTPRXP_IN, + -------------- Receive Ports - RX Byte and Word Alignment Ports ------------ + RXBYTEISALIGNED_OUT => GT0_RXBYTEISALIGNED_OUT, + RXCOMMADET_OUT => GT0_RXCOMMADET_OUT, + RXSLIDE_IN => GT0_RXSLIDE_IN, + --------------------- Receive Ports - RX Equilizer Ports ------------------- + RXLPMHFHOLD_IN => GT0_RXLPMHFHOLD_IN, + RXLPMLFHOLD_IN => GT0_RXLPMLFHOLD_IN, + --------------- Receive Ports - RX Fabric Output Control Ports ------------- + RXOUTCLK_OUT => GT0_RXOUTCLK_OUT, + ------------- Receive Ports - RX Initialization and Reset Ports ------------ + GTRXRESET_IN => GT0_GTRXRESET_IN, + -------------- Receive Ports -RX Initialization and Reset Ports ------------ + RXRESETDONE_OUT => GT0_RXRESETDONE_OUT, + --------------------- TX Initialization and Reset Ports -------------------- + GTTXRESET_IN => GT0_GTTXRESET_IN, + TXUSERRDY_IN => GT0_TXUSERRDY_IN, + ------------------ Transmit Ports - FPGA TX Interface Ports ---------------- + TXDATA_IN => GT0_TXDATA_IN, + TXUSRCLK_IN => GT0_TXUSRCLK_IN, + TXUSRCLK2_IN => GT0_TXUSRCLK2_IN, + ------------------ Transmit Ports - TX 8B/10B Encoder Ports ---------------- + TXCHARISK_IN => GT0_TXCHARISK_IN, + --------------- Transmit Ports - TX Configurable Driver Ports -------------- + GTPTXN_OUT => GT0_GTPTXN_OUT, + GTPTXP_OUT => GT0_GTPTXP_OUT, + ----------- Transmit Ports - TX Fabric Clock Output Control Ports ---------- + TXOUTCLK_OUT => GT0_TXOUTCLK_OUT, + TXOUTCLKFABRIC_OUT => GT0_TXOUTCLKFABRIC_OUT, + TXOUTCLKPCS_OUT => GT0_TXOUTCLKPCS_OUT, + ------------- Transmit Ports - TX Initialization and Reset Ports ----------- + TXRESETDONE_OUT => GT0_TXRESETDONE_OUT, + ------------------ Transmit Ports - pattern Generator Ports ---------------- + TXPRBSSEL_IN => GT0_TXPRBSSEL_IN + + ); + + + --_________________________________________________________________________ + --_________________________________________________________________________ + --_________________________GTPE2_COMMON____________________________________ + + gtpe2_common_0_i : GTPE2_COMMON + generic map + ( + -- Simulation attributes + SIM_RESET_SPEEDUP => WRAPPER_SIM_GTRESET_SPEEDUP, + SIM_PLL0REFCLK_SEL => ("001"), + SIM_PLL1REFCLK_SEL => ("001"), + SIM_VERSION => ("1.0"), + + PLL0_FBDIV => PLL0_FBDIV_IN , + PLL0_FBDIV_45 => PLL0_FBDIV_45_IN , + PLL0_REFCLK_DIV => PLL0_REFCLK_DIV_IN, + PLL1_FBDIV => PLL1_FBDIV_IN , + PLL1_FBDIV_45 => PLL1_FBDIV_45_IN , + PLL1_REFCLK_DIV => PLL1_REFCLK_DIV_IN, + + + ------------------COMMON BLOCK Attributes--------------- + BIAS_CFG => (x"0000000000050001"), + COMMON_CFG => (x"00000000"), + + ----------------------------PLL Attributes---------------------------- + PLL0_CFG => (x"01F03DC"), + PLL0_DMON_CFG => ('0'), + PLL0_INIT_CFG => (x"00001E"), + PLL0_LOCK_CFG => (x"1E8"), + PLL1_CFG => (x"01F03DC"), + PLL1_DMON_CFG => ('0'), + PLL1_INIT_CFG => (x"00001E"), + PLL1_LOCK_CFG => (x"1E8"), + PLL_CLKOUT_CFG => (x"00"), + + ----------------------------Reserved Attributes---------------------------- + RSVD_ATTR0 => (x"0000"), + RSVD_ATTR1 => (x"0000") + + + ) + port map + ( + DMONITOROUT => open, + ------------- Common Block - Dynamic Reconfiguration Port (DRP) ----------- + DRPADDR => tied_to_ground_vec_i(7 downto 0), + DRPCLK => tied_to_ground_i, + DRPDI => tied_to_ground_vec_i(15 downto 0), + DRPDO => open, + DRPEN => tied_to_ground_i, + DRPRDY => open, + DRPWE => tied_to_ground_i, + ----------------- Common Block - GTPE2_COMMON Clocking Ports --------------- + GTEASTREFCLK0 => tied_to_ground_i, + GTEASTREFCLK1 => tied_to_ground_i, + GTGREFCLK1 => tied_to_ground_i, + GTREFCLK0 => GT0_GTREFCLK0_IN, + GTREFCLK1 => tied_to_ground_i, + GTWESTREFCLK0 => tied_to_ground_i, + GTWESTREFCLK1 => tied_to_ground_i, + PLL0OUTCLK => gt0_pll0outclk_i, + PLL0OUTREFCLK => gt0_pll0outrefclk_i, + PLL1OUTCLK => gt0_pll1outclk_i, + PLL1OUTREFCLK => gt0_pll1outrefclk_i, + -------------------------- Common Block - PLL Ports ------------------------ + PLL0FBCLKLOST => open, + PLL0LOCK => open, + PLL0LOCKDETCLK => tied_to_ground_i, + PLL0LOCKEN => tied_to_vcc_i, + PLL0PD => '1', + PLL0REFCLKLOST => open, + PLL0REFCLKSEL => "001", + PLL0RESET => tied_to_ground_i, + PLL1FBCLKLOST => open, + PLL1LOCK => GT0_PLL1LOCK_OUT, + PLL1LOCKDETCLK => GT0_PLL1LOCKDETCLK_IN, + PLL1LOCKEN => tied_to_vcc_i, + PLL1PD => tied_to_ground_i, + PLL1REFCLKLOST => GT0_PLL1REFCLKLOST_OUT, + PLL1REFCLKSEL => "001", + PLL1RESET => GT0_PLL1RESET_IN, + ---------------------------- Common Block - Ports -------------------------- + BGRCALOVRDENB => tied_to_vcc_i, + GTGREFCLK0 => tied_to_ground_i, + PLLRSVD1 => "0000000000000000", + PLLRSVD2 => "00000", + REFCLKOUTMONITOR0 => open, + REFCLKOUTMONITOR1 => open, + ------------------------ Common Block - RX AFE Ports ----------------------- + PMARSVDOUT => open, + --------------------------------- QPLL Ports ------------------------------- + BGBYPASSB => tied_to_vcc_i, + BGMONITORENB => tied_to_vcc_i, + BGPDB => tied_to_vcc_i, + BGRCALOVRD => "00000", -- ug482 table 2-8 says "111111" + PMARSVD => "00000000", + RCALENB => tied_to_vcc_i + + ); + + +end RTL; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gt.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gt.vhd new file mode 100644 index 000000000..90ca8f391 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gt.vhd @@ -0,0 +1,1013 @@ +------------------------------------------------------------------------------- +-- ____ ____ +-- / /\/ / +-- /___/ \ / Vendor: Xilinx +-- \ \ \/ Version : 3.6 +-- \ \ Application : 7 Series FPGAs Transceivers Wizard +-- / / Filename : whiterabbit_gtpe2_channel_wrapper_gt.vhd +-- /___/ /\ +-- \ \ / \ +-- \___\/\___\ +-- +-- +-- Module whiterabbit_gtpe2_channel_wrapper_GT (a GT Wrapper) +-- Generated by Xilinx 7 Series FPGAs Transceivers Wizard +-- +-- +-- (c) Copyright 2010-2012 Xilinx, Inc. All rights reserved. +-- +-- This file contains confidential and proprietary information +-- of Xilinx, Inc. and is protected under U.S. and +-- international copyright and other intellectual property +-- laws. +-- +-- DISCLAIMER +-- This disclaimer is not a license and does not grant any +-- rights to the materials distributed herewith. Except as +-- otherwise provided in a valid license issued to you by +-- Xilinx, and to the maximum extent permitted by applicable +-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +-- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES +-- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +-- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +-- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +-- (2) Xilinx shall not be liable (whether in contract or tort, +-- including negligence, or under any other theory of +-- liability) for any loss or damage of any kind or nature +-- related to, arising under or in connection with these +-- materials, including for any direct, or any indirect, +-- special, incidental, or consequential loss or damage +-- (including loss of data, profits, goodwill, or any type of +-- loss or damage suffered as a result of any action brought +-- by a third party) even if such damage or loss was +-- reasonably foreseeable or Xilinx had been advised of the +-- possibility of the same. +-- +-- CRITICAL APPLICATIONS +-- Xilinx products are not designed or intended to be fail- +-- safe, or for use in any application requiring fail-safe +-- performance, such as life-support or safety devices or +-- systems, Class III medical devices, nuclear facilities, +-- applications related to the deployment of airbags, or any +-- other applications that could lead to death, personal +-- injury, or severe property or environmental damage +-- (individually and collectively, "Critical +-- Applications"). Customer assumes the sole risk and +-- liability of any use of Xilinx products in Critical +-- Applications, subject only to applicable laws and +-- regulations governing limitations on product liability. +-- +-- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +-- PART OF THIS FILE AT ALL TIMES. + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library UNISIM; +use UNISIM.VCOMPONENTS.ALL; + +--***************************** Entity Declaration **************************** + +entity whiterabbit_gtpe2_channel_wrapper_gt is +generic +( + -- Simulation attributes + GT_SIM_GTRESET_SPEEDUP : string := "FALSE"; -- Set to "true" to speed up sim reset + EXAMPLE_SIMULATION : integer := 0; -- Set to 1 for simulation + TXSYNC_OVRD_IN : bit := '0'; + TXSYNC_MULTILANE_IN : bit := '0' +); +port +( + RST_IN : in std_logic; -- Connect to System Reset + DRP_BUSY_OUT : out std_logic; -- Indicates that the DRP bus is not accessible to the User + ---------------------------- Channel - DRP Ports -------------------------- + drpaddr_in : in std_logic_vector(8 downto 0); + drpclk_in : in std_logic; + drpdi_in : in std_logic_vector(15 downto 0); + drpdo_out : out std_logic_vector(15 downto 0); + drpen_in : in std_logic; + drprdy_out : out std_logic; + drpwe_in : in std_logic; + ------------------------ GTPE2_CHANNEL Clocking Ports ---------------------- + pll0clk_in : in std_logic; + pll0refclk_in : in std_logic; + pll1clk_in : in std_logic; + pll1refclk_in : in std_logic; + ------------------------------- Loopback Ports ----------------------------- + loopback_in : in std_logic_vector(2 downto 0); + --------------------- RX Initialization and Reset Ports -------------------- + rxuserrdy_in : in std_logic; + -------------------------- RX Margin Analysis Ports ------------------------ + eyescandataerror_out : out std_logic; + ------------------ Receive Ports - FPGA RX Interface Ports ----------------- + rxdata_out : out std_logic_vector(15 downto 0); + rxusrclk_in : in std_logic; + rxusrclk2_in : in std_logic; + ------------------ Receive Ports - RX 8B/10B Decoder Ports ----------------- + rxchariscomma_out : out std_logic_vector(1 downto 0); + rxcharisk_out : out std_logic_vector(1 downto 0); + rxdisperr_out : out std_logic_vector(1 downto 0); + rxnotintable_out : out std_logic_vector(1 downto 0); + ------------------------ Receive Ports - RX AFE Ports ---------------------- + gtprxn_in : in std_logic; + gtprxp_in : in std_logic; + -------------- Receive Ports - RX Byte and Word Alignment Ports ------------ + rxbyteisaligned_out : out std_logic; + rxcommadet_out : out std_logic; + rxslide_in : in std_logic; + --------------------- Receive Ports - RX Equilizer Ports ------------------- + rxlpmhfhold_in : in std_logic; + rxlpmlfhold_in : in std_logic; + --------------- Receive Ports - RX Fabric Output Control Ports ------------- + rxoutclk_out : out std_logic; + ------------- Receive Ports - RX Initialization and Reset Ports ------------ + gtrxreset_in : in std_logic; + -------------- Receive Ports -RX Initialization and Reset Ports ------------ + rxresetdone_out : out std_logic; + --------------------- TX Initialization and Reset Ports -------------------- + gttxreset_in : in std_logic; + txuserrdy_in : in std_logic; + ------------------ Transmit Ports - FPGA TX Interface Ports ---------------- + txdata_in : in std_logic_vector(15 downto 0); + txusrclk_in : in std_logic; + txusrclk2_in : in std_logic; + ------------------ Transmit Ports - TX 8B/10B Encoder Ports ---------------- + txcharisk_in : in std_logic_vector(1 downto 0); + --------------- Transmit Ports - TX Configurable Driver Ports -------------- + gtptxn_out : out std_logic; + gtptxp_out : out std_logic; + ----------- Transmit Ports - TX Fabric Clock Output Control Ports ---------- + txoutclk_out : out std_logic; + txoutclkfabric_out : out std_logic; + txoutclkpcs_out : out std_logic; + ------------- Transmit Ports - TX Initialization and Reset Ports ----------- + txresetdone_out : out std_logic; + ------------------ Transmit Ports - pattern Generator Ports ---------------- + txprbssel_in : in std_logic_vector(2 downto 0) + +); + + +end whiterabbit_gtpe2_channel_wrapper_gt; + +architecture RTL of whiterabbit_gtpe2_channel_wrapper_gt is + +--*************************** Component Declarations ************************** +component whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq + port ( + RST : IN std_logic; + GTRXRESET_IN : IN std_logic; + RXPMARESETDONE: IN std_logic; + GTRXRESET_OUT : OUT std_logic; + + DRPCLK : IN std_logic; + DRPADDR : OUT std_logic_vector(8 downto 0); + DRPDO : IN std_logic_vector(15 downto 0); + DRPDI : OUT std_logic_vector(15 downto 0); + DRPRDY : IN std_logic; + DRPEN : OUT std_logic; + DRPWE : OUT std_logic; + DRP_OP_DONE : OUT std_logic +); +end component; + +--component whiterabbitgtp_wrapper_rxpmarst_seq +-- port ( +-- RST : IN std_logic; +-- RXPMARESET_IN : IN std_logic; +-- RXPMARESETDONE : IN std_logic; +-- RXPMARESET_OUT : OUT std_logic; +-- +-- DRPCLK : IN std_logic; +-- DRPADDR : OUT std_logic_vector(8 downto 0); +-- DRPDO : IN std_logic_vector(15 downto 0); +-- DRPDI : OUT std_logic_vector(15 downto 0); +-- DRPRDY : IN std_logic; +-- DRPEN : OUT std_logic; +-- DRPWE : OUT std_logic; +-- DRP_BUSY_IN : IN std_logic; +-- DRP_PMA_BUSY_OUT : OUT std_logic +--); +--end component; +-- +-- +--component whiterabbitgtp_wrapper_rxrate_seq +-- port ( +-- RST : IN std_logic; +-- RXRATE_IN : IN std_logic_vector(2 downto 0); +-- RXPMARESETDONE : IN std_logic; +-- RXRATE_OUT : OUT std_logic_vector(2 downto 0); +-- +-- DRPCLK : IN std_logic; +-- DRPADDR : OUT std_logic_vector(8 downto 0); +-- DRPDO : IN std_logic_vector(15 downto 0); +-- DRPDI : OUT std_logic_vector(15 downto 0); +-- DRPRDY : IN std_logic; +-- DRPEN : OUT std_logic; +-- DRPWE : OUT std_logic; +-- DRP_BUSY_IN : IN std_logic; +-- DRP_RATE_BUSY_OUT : OUT std_logic +--); +--end component; + +--**************************** Signal Declarations **************************** + + -- ground and tied_to_vcc_i signals + signal tied_to_ground_i : std_logic; + signal tied_to_ground_vec_i : std_logic_vector(63 downto 0); + signal tied_to_vcc_i : std_logic; + + + signal rxpmaresetdone_t : std_logic; + signal gtrxreset_out : std_logic; + signal rxpmareset_out : std_logic; + signal rxrate_out : std_logic_vector(2 downto 0); + signal drp_op_done : std_logic; + signal drp_pma_busy : std_logic; + signal drp_rate_busy : std_logic; + signal drp_busy_i1 : std_logic:= '0'; + signal drp_busy_i2 : std_logic:= '0'; + signal drpen_rst_t : std_logic; + signal drpaddr_rst_t : std_logic_vector(8 downto 0); + signal drpwe_rst_t : std_logic; + signal drpdo_rst_t : std_logic_vector(15 downto 0); + signal drpdi_rst_t : std_logic_vector(15 downto 0); + signal drprdy_rst_t : std_logic; + signal drpen_pma_t : std_logic; + signal drpaddr_pma_t : std_logic_vector(8 downto 0); + signal drpwe_pma_t : std_logic; + signal drpdo_pma_t : std_logic_vector(15 downto 0); + signal drpdi_pma_t : std_logic_vector(15 downto 0); + signal drprdy_pma_t : std_logic; + signal drpen_rate_t : std_logic; + signal drpaddr_rate_t : std_logic_vector(8 downto 0); + signal drpwe_rate_t : std_logic; + signal drpdo_rate_t : std_logic_vector(15 downto 0); + signal drpdi_rate_t : std_logic_vector(15 downto 0); + signal drprdy_rate_t : std_logic; + signal drpen_i : std_logic; + signal drpaddr_i : std_logic_vector(8 downto 0); + signal drpwe_i : std_logic; + signal drpdo_i : std_logic_vector(15 downto 0); + signal drpdi_i : std_logic_vector(15 downto 0); + signal drprdy_i : std_logic; + + -- RX Datapath signals + signal rxdata_i : std_logic_vector(31 downto 0); + signal rxchariscomma_float_i : std_logic_vector(1 downto 0); + signal rxcharisk_float_i : std_logic_vector(1 downto 0); + signal rxdisperr_float_i : std_logic_vector(1 downto 0); + signal rxnotintable_float_i : std_logic_vector(1 downto 0); + signal rxrundisp_float_i : std_logic_vector(1 downto 0); + + + -- TX Datapath signals + signal txdata_i : std_logic_vector(31 downto 0); + signal txkerr_float_i : std_logic_vector(1 downto 0); + signal txrundisp_float_i : std_logic_vector(1 downto 0); + signal rxdatavalid_float_i : std_logic; + +--******************************** Main Body of Code*************************** + +begin + + --------------------------- Static signal Assignments --------------------- + + tied_to_ground_i <= '0'; + tied_to_ground_vec_i(63 downto 0) <= (others => '0'); + tied_to_vcc_i <= '1'; + + ------------------- GT Datapath byte mapping ----------------- + RXDATA_OUT <= rxdata_i(15 downto 0); + + txdata_i <= (tied_to_ground_vec_i(15 downto 0) & TXDATA_IN); + + + + ----------------------------- GTPE2 Instance -------------------------- + + gtpe2_i : GTPE2_CHANNEL + generic map + ( + + --_______________________ Simulation-Only Attributes ___________________ + + SIM_RECEIVER_DETECT_PASS => ("TRUE"), + SIM_RESET_SPEEDUP => (GT_SIM_GTRESET_SPEEDUP), + SIM_TX_EIDLE_DRIVE_LEVEL => ("X"), + SIM_VERSION => ("2.0"), + + + ------------------RX Byte and Word Alignment Attributes--------------- + ALIGN_COMMA_DOUBLE => ("FALSE"), + ALIGN_COMMA_ENABLE => ("0001111111"), + ALIGN_COMMA_WORD => (2), + ALIGN_MCOMMA_DET => ("TRUE"), + ALIGN_MCOMMA_VALUE => ("1010000011"), + ALIGN_PCOMMA_DET => ("TRUE"), + ALIGN_PCOMMA_VALUE => ("0101111100"), + SHOW_REALIGN_COMMA => ("FALSE"), + RXSLIDE_AUTO_WAIT => (7), + RXSLIDE_MODE => ("PCS"), + RX_SIG_VALID_DLY => (10), + + ------------------RX 8B/10B Decoder Attributes--------------- + RX_DISPERR_SEQ_MATCH => ("TRUE"), + DEC_MCOMMA_DETECT => ("TRUE"), + DEC_PCOMMA_DETECT => ("TRUE"), + DEC_VALID_COMMA_ONLY => ("TRUE"), + + ------------------------RX Clock Correction Attributes---------------------- + CBCC_DATA_SOURCE_SEL => ("DECODED"), + CLK_COR_SEQ_2_USE => ("FALSE"), + CLK_COR_KEEP_IDLE => ("FALSE"), + CLK_COR_MAX_LAT => (10), + CLK_COR_MIN_LAT => (8), + CLK_COR_PRECEDENCE => ("TRUE"), + CLK_COR_REPEAT_WAIT => (0), + CLK_COR_SEQ_LEN => (1), + CLK_COR_SEQ_1_ENABLE => ("1111"), + CLK_COR_SEQ_1_1 => ("0100000000"), + CLK_COR_SEQ_1_2 => ("0000000000"), + CLK_COR_SEQ_1_3 => ("0000000000"), + CLK_COR_SEQ_1_4 => ("0000000000"), + CLK_CORRECT_USE => ("FALSE"), + CLK_COR_SEQ_2_ENABLE => ("1111"), + CLK_COR_SEQ_2_1 => ("0100000000"), + CLK_COR_SEQ_2_2 => ("0000000000"), + CLK_COR_SEQ_2_3 => ("0000000000"), + CLK_COR_SEQ_2_4 => ("0000000000"), + + ------------------------RX Channel Bonding Attributes---------------------- + CHAN_BOND_KEEP_ALIGN => ("FALSE"), + CHAN_BOND_MAX_SKEW => (1), + CHAN_BOND_SEQ_LEN => (1), + CHAN_BOND_SEQ_1_1 => ("0000000000"), + CHAN_BOND_SEQ_1_2 => ("0000000000"), + CHAN_BOND_SEQ_1_3 => ("0000000000"), + CHAN_BOND_SEQ_1_4 => ("0000000000"), + CHAN_BOND_SEQ_1_ENABLE => ("1111"), + CHAN_BOND_SEQ_2_1 => ("0000000000"), + CHAN_BOND_SEQ_2_2 => ("0000000000"), + CHAN_BOND_SEQ_2_3 => ("0000000000"), + CHAN_BOND_SEQ_2_4 => ("0000000000"), + CHAN_BOND_SEQ_2_ENABLE => ("1111"), + CHAN_BOND_SEQ_2_USE => ("FALSE"), + FTS_DESKEW_SEQ_ENABLE => ("1111"), + FTS_LANE_DESKEW_CFG => ("1111"), + FTS_LANE_DESKEW_EN => ("FALSE"), + + ---------------------------RX Margin Analysis Attributes---------------------------- + ES_CONTROL => ("000000"), + ES_ERRDET_EN => ("FALSE"), + ES_EYE_SCAN_EN => ("FALSE"), + ES_HORZ_OFFSET => (x"010"), + ES_PMA_CFG => ("0000000000"), + ES_PRESCALE => ("00000"), + ES_QUALIFIER => (x"00000000000000000000"), + ES_QUAL_MASK => (x"00000000000000000000"), + ES_SDATA_MASK => (x"00000000000000000000"), + ES_VERT_OFFSET => ("000000000"), + + -------------------------FPGA RX Interface Attributes------------------------- + RX_DATA_WIDTH => (20), + + ---------------------------PMA Attributes---------------------------- + OUTREFCLK_SEL_INV => ("11"), + PMA_RSV => (x"00000333"), + PMA_RSV2 => (x"00002040"), + PMA_RSV3 => ("00"), + PMA_RSV4 => ("0000"), + RX_BIAS_CFG => ("0000111100110011"), + DMONITOR_CFG => (x"000A00"), + RX_CM_SEL => ("01"), + RX_CM_TRIM => ("0000"), + RX_DEBUG_CFG => ("00000000000000"), + RX_OS_CFG => ("0000010000000"), + TERM_RCAL_CFG => ("100001000010000"), + TERM_RCAL_OVRD => ("000"), + TST_RSV => (x"00000000"), + RX_CLK25_DIV => (5), + TX_CLK25_DIV => (5), + UCODEER_CLR => ('0'), + + ---------------------------PCI Express Attributes---------------------------- + PCS_PCIE_EN => ("FALSE"), + + ---------------------------PCS Attributes---------------------------- + PCS_RSVD_ATTR => (x"000000000000"), + + -------------RX Buffer Attributes------------ + RXBUF_ADDR_MODE => ("FAST"), + RXBUF_EIDLE_HI_CNT => ("1000"), + RXBUF_EIDLE_LO_CNT => ("0000"), + RXBUF_EN => ("TRUE"), + RX_BUFFER_CFG => ("000000"), + RXBUF_RESET_ON_CB_CHANGE => ("TRUE"), + RXBUF_RESET_ON_COMMAALIGN => ("FALSE"), + RXBUF_RESET_ON_EIDLE => ("FALSE"), + RXBUF_RESET_ON_RATE_CHANGE => ("TRUE"), + RXBUFRESET_TIME => ("00001"), + RXBUF_THRESH_OVFLW => (61), + RXBUF_THRESH_OVRD => ("FALSE"), + RXBUF_THRESH_UNDFLW => (4), + RXDLY_CFG => (x"001F"), + RXDLY_LCFG => (x"030"), + RXDLY_TAP_CFG => (x"0000"), + RXPH_CFG => (x"C00002"), + RXPHDLY_CFG => (x"084020"), + RXPH_MONITOR_SEL => ("00000"), + RX_XCLK_SEL => ("RXREC"), + RX_DDI_SEL => ("000000"), + RX_DEFER_RESET_BUF_EN => ("TRUE"), + + -----------------------CDR Attributes------------------------- + + --For Display Port, HBR/RBR- set RXCDR_CFG=72'h0380008bff40200008 + + --For Display Port, HBR2 - set RXCDR_CFG=72'h038c008bff20200010 + + --For SATA Gen1 GTX- set RXCDR_CFG=72'h03_8000_8BFF_4010_0008 + + --For SATA Gen2 GTX- set RXCDR_CFG=72'h03_8800_8BFF_4020_0008 + + --For SATA Gen3 GTX- set RXCDR_CFG=72'h03_8000_8BFF_1020_0010 + + --For SATA Gen3 GTP- set RXCDR_CFG=83'h0_0000_87FE_2060_2444_1010 + + --For SATA Gen2 GTP- set RXCDR_CFG=83'h0_0000_47FE_2060_2448_1010 + + --For SATA Gen1 GTP- set RXCDR_CFG=83'h0_0000_47FE_1060_2448_1010 + RXCDR_CFG => (x"0000107FE106001041010"), + RXCDR_FR_RESET_ON_EIDLE => ('0'), + RXCDR_HOLD_DURING_EIDLE => ('0'), + RXCDR_PH_RESET_ON_EIDLE => ('0'), + RXCDR_LOCK_CFG => ("001001"), + + -------------------RX Initialization and Reset Attributes------------------- + RXCDRFREQRESET_TIME => ("00001"), + RXCDRPHRESET_TIME => ("00001"), + RXISCANRESET_TIME => ("00001"), + RXPCSRESET_TIME => ("00001"), + RXPMARESET_TIME => ("00011"), + + -------------------RX OOB Signaling Attributes------------------- + RXOOB_CFG => ("0000110"), + + -------------------------RX Gearbox Attributes--------------------------- + RXGEARBOX_EN => ("FALSE"), + GEARBOX_MODE => ("000"), + + -------------------------PRBS Detection Attribute----------------------- + RXPRBS_ERR_LOOPBACK => ('0'), + + -------------Power-Down Attributes---------- + PD_TRANS_TIME_FROM_P2 => (x"03c"), + PD_TRANS_TIME_NONE_P2 => (x"3c"), + PD_TRANS_TIME_TO_P2 => (x"64"), + + -------------RX OOB Signaling Attributes---------- + SAS_MAX_COM => (64), + SAS_MIN_COM => (36), + SATA_BURST_SEQ_LEN => ("0101"), + SATA_BURST_VAL => ("100"), + SATA_EIDLE_VAL => ("100"), + SATA_MAX_BURST => (8), + SATA_MAX_INIT => (21), + SATA_MAX_WAKE => (7), + SATA_MIN_BURST => (4), + SATA_MIN_INIT => (12), + SATA_MIN_WAKE => (4), + + -------------RX Fabric Clock Output Control Attributes---------- + TRANS_TIME_RATE => (x"0E"), + + --------------TX Buffer Attributes---------------- + TXBUF_EN => ("TRUE"), + TXBUF_RESET_ON_RATE_CHANGE => ("TRUE"), + TXDLY_CFG => (x"001F"), + TXDLY_LCFG => (x"030"), + TXDLY_TAP_CFG => (x"0000"), + TXPH_CFG => (x"0780"), + TXPHDLY_CFG => (x"084020"), + TXPH_MONITOR_SEL => ("00000"), + TX_XCLK_SEL => ("TXOUT"), + + -------------------------FPGA TX Interface Attributes------------------------- + TX_DATA_WIDTH => (20), + + -------------------------TX Configurable Driver Attributes------------------------- + TX_DEEMPH0 => ("000000"), + TX_DEEMPH1 => ("000000"), + TX_EIDLE_ASSERT_DELAY => ("110"), + TX_EIDLE_DEASSERT_DELAY => ("100"), + TX_LOOPBACK_DRIVE_HIZ => ("FALSE"), + TX_MAINCURSOR_SEL => ('0'), + TX_DRIVE_MODE => ("DIRECT"), + TX_MARGIN_FULL_0 => ("1001110"), + TX_MARGIN_FULL_1 => ("1001001"), + TX_MARGIN_FULL_2 => ("1000101"), + TX_MARGIN_FULL_3 => ("1000010"), + TX_MARGIN_FULL_4 => ("1000000"), + TX_MARGIN_LOW_0 => ("1000110"), + TX_MARGIN_LOW_1 => ("1000100"), + TX_MARGIN_LOW_2 => ("1000010"), + TX_MARGIN_LOW_3 => ("1000000"), + TX_MARGIN_LOW_4 => ("1000000"), + + -------------------------TX Gearbox Attributes-------------------------- + TXGEARBOX_EN => ("FALSE"), + + -------------------------TX Initialization and Reset Attributes-------------------------- + TXPCSRESET_TIME => ("00001"), + TXPMARESET_TIME => ("00001"), + + -------------------------TX Receiver Detection Attributes-------------------------- + TX_RXDETECT_CFG => (x"1832"), + TX_RXDETECT_REF => ("100"), + + ------------------ JTAG Attributes --------------- + ACJTAG_DEBUG_MODE => ('0'), + ACJTAG_MODE => ('0'), + ACJTAG_RESET => ('0'), + + ------------------ CDR Attributes --------------- + CFOK_CFG => (x"49000040E80"), + CFOK_CFG2 => ("0100000"), + CFOK_CFG3 => ("0100000"), + CFOK_CFG4 => ('0'), + CFOK_CFG5 => (x"0"), + CFOK_CFG6 => ("0000"), + RXOSCALRESET_TIME => ("00011"), + RXOSCALRESET_TIMEOUT => ("00000"), + + ------------------ PMA Attributes --------------- + CLK_COMMON_SWING => ('0'), + RX_CLKMUX_EN => ('1'), + TX_CLKMUX_EN => ('1'), + ES_CLK_PHASE_SEL => ('0'), + USE_PCS_CLK_PHASE_SEL => ('0'), + PMA_RSV6 => ('0'), + PMA_RSV7 => ('0'), + + ------------------ TX Configuration Driver Attributes --------------- + TX_PREDRIVER_MODE => ('0'), + PMA_RSV5 => ('0'), + SATA_PLL_CFG => ("VCO_3000MHZ"), + + ------------------ RX Fabric Clock Output Control Attributes --------------- + RXOUT_DIV => (4), + + ------------------ TX Fabric Clock Output Control Attributes --------------- + TXOUT_DIV => (4), + + ------------------ RX Phase Interpolator Attributes--------------- + RXPI_CFG0 => ("000"), + RXPI_CFG1 => ('1'), + RXPI_CFG2 => ('1'), + + --------------RX Equalizer Attributes------------- + ADAPT_CFG0 => (x"00000"), + RXLPMRESET_TIME => ("0001111"), + RXLPM_BIAS_STARTUP_DISABLE => ('0'), + RXLPM_CFG => ("0110"), + RXLPM_CFG1 => ('0'), + RXLPM_CM_CFG => ('0'), + RXLPM_GC_CFG => ("111100010"), + RXLPM_GC_CFG2 => ("001"), + RXLPM_HF_CFG => ("00001111110000"), + RXLPM_HF_CFG2 => ("01010"), + RXLPM_HF_CFG3 => ("0000"), + RXLPM_HOLD_DURING_EIDLE => ('0'), + RXLPM_INCM_CFG => ('0'), + RXLPM_IPCM_CFG => ('1'), + RXLPM_LF_CFG => ("000000001111110000"), + RXLPM_LF_CFG2 => ("01010"), + RXLPM_OSINT_CFG => ("100"), + + ------------------ TX Phase Interpolator PPM Controller Attributes--------------- + TXPI_CFG0 => ("00"), + TXPI_CFG1 => ("00"), + TXPI_CFG2 => ("00"), + TXPI_CFG3 => ('0'), + TXPI_CFG4 => ('0'), + TXPI_CFG5 => ("000"), + TXPI_GREY_SEL => ('0'), + TXPI_INVSTROBE_SEL => ('0'), + TXPI_PPMCLK_SEL => ("TXUSRCLK2"), + TXPI_PPM_CFG => (x"00"), + TXPI_SYNFREQ_PPM => ("001"), + + ------------------ LOOPBACK Attributes--------------- + LOOPBACK_CFG => ('0'), + PMA_LOOPBACK_CFG => ('0'), + + ------------------RX OOB Signalling Attributes--------------- + RXOOB_CLK_CFG => ("PMA"), + + ------------------TX OOB Signalling Attributes--------------- + TXOOB_CFG => ('0'), + + ------------------RX Buffer Attributes--------------- + RXSYNC_MULTILANE => ('0'), + RXSYNC_OVRD => ('0'), + RXSYNC_SKIP_DA => ('0'), + + ------------------TX Buffer Attributes--------------- + TXSYNC_MULTILANE => (TXSYNC_MULTILANE_IN), + TXSYNC_OVRD => (TXSYNC_OVRD_IN), + TXSYNC_SKIP_DA => ('0') + + + ) + port map + ( + --------------------------------- CPLL Ports ------------------------------- + GTRSVD => "0000000000000000", + PCSRSVDIN => "0000000000000000", + TSTIN => "11111111111111111111", + ---------------------------- Channel - DRP Ports -------------------------- + DRPADDR => drpaddr_i, + DRPCLK => DRPCLK_IN, + DRPDI => drpdi_i, + DRPDO => drpdo_i, + DRPEN => drpen_i, + DRPRDY => drprdy_i, + DRPWE => drpwe_i, + ------------------------------- Clocking Ports ----------------------------- + RXSYSCLKSEL => "11", + TXSYSCLKSEL => "11", + ----------------- FPGA TX Interface Datapath Configuration ---------------- + TX8B10BEN => tied_to_vcc_i, + ------------------------ GTPE2_CHANNEL Clocking Ports ---------------------- + PLL0CLK => PLL0CLK_IN, + PLL0REFCLK => PLL0REFCLK_IN, + PLL1CLK => PLL1CLK_IN, + PLL1REFCLK => PLL1REFCLK_IN, + ------------------------------- Loopback Ports ----------------------------- + LOOPBACK => LOOPBACK_IN, + ----------------------------- PCI Express Ports ---------------------------- + PHYSTATUS => open, + RXRATE => tied_to_ground_vec_i(2 downto 0), + RXVALID => open, + ----------------------------- PMA Reserved Ports --------------------------- + PMARSVDIN3 => '0', + PMARSVDIN4 => '0', + ------------------------------ Power-Down Ports ---------------------------- + RXPD => "00", + TXPD => "00", + -------------------------- RX 8B/10B Decoder Ports ------------------------- + SETERRSTATUS => tied_to_ground_i, + --------------------- RX Initialization and Reset Ports -------------------- + EYESCANRESET => tied_to_ground_i, + RXUSERRDY => RXUSERRDY_IN, + -------------------------- RX Margin Analysis Ports ------------------------ + EYESCANDATAERROR => EYESCANDATAERROR_OUT, + EYESCANMODE => tied_to_ground_i, + EYESCANTRIGGER => tied_to_ground_i, + ------------------------------- Receive Ports ------------------------------ + CLKRSVD0 => tied_to_ground_i, + CLKRSVD1 => tied_to_ground_i, + DMONFIFORESET => tied_to_ground_i, + DMONITORCLK => tied_to_ground_i, + RXPMARESETDONE => rxpmaresetdone_t, + SIGVALIDCLK => tied_to_ground_i, + ------------------------- Receive Ports - CDR Ports ------------------------ + RXCDRFREQRESET => tied_to_ground_i, + RXCDRHOLD => tied_to_ground_i, + RXCDRLOCK => open, + RXCDROVRDEN => tied_to_ground_i, + RXCDRRESET => tied_to_ground_i, + RXCDRRESETRSV => tied_to_ground_i, + RXOSCALRESET => tied_to_ground_i, + RXOSINTCFG => "0010", + RXOSINTDONE => open, + RXOSINTHOLD => tied_to_ground_i, + RXOSINTOVRDEN => tied_to_ground_i, + RXOSINTPD => tied_to_ground_i, + RXOSINTSTARTED => open, + RXOSINTSTROBE => tied_to_ground_i, + RXOSINTSTROBESTARTED => open, + RXOSINTTESTOVRDEN => tied_to_ground_i, + ------------------- Receive Ports - Clock Correction Ports ----------------- + RXCLKCORCNT => open, + ---------- Receive Ports - FPGA RX Interface Datapath Configuration -------- + RX8B10BEN => tied_to_vcc_i, + ------------------ Receive Ports - FPGA RX Interface Ports ----------------- + RXDATA => rxdata_i, + RXUSRCLK => RXUSRCLK_IN, + RXUSRCLK2 => RXUSRCLK2_IN, + ------------------- Receive Ports - Pattern Checker Ports ------------------ + RXPRBSERR => open, + RXPRBSSEL => tied_to_ground_vec_i(2 downto 0), + ------------------- Receive Ports - Pattern Checker ports ------------------ + RXPRBSCNTRESET => tied_to_ground_i, + ------------------ Receive Ports - RX 8B/10B Decoder Ports ----------------- + RXCHARISCOMMA(3 downto 2) => rxchariscomma_float_i, + RXCHARISCOMMA(1 downto 0) => RXCHARISCOMMA_OUT, + RXCHARISK(3 downto 2) => rxcharisk_float_i, + RXCHARISK(1 downto 0) => RXCHARISK_OUT, + RXDISPERR(3 downto 2) => rxdisperr_float_i, + RXDISPERR(1 downto 0) => RXDISPERR_OUT, + RXNOTINTABLE(3 downto 2) => rxnotintable_float_i, + RXNOTINTABLE(1 downto 0) => RXNOTINTABLE_OUT, + ------------------------ Receive Ports - RX AFE Ports ---------------------- + GTPRXN => GTPRXN_IN, + GTPRXP => GTPRXP_IN, + PMARSVDIN2 => '0', + PMARSVDOUT0 => open, + PMARSVDOUT1 => open, + ------------------- Receive Ports - RX Buffer Bypass Ports ----------------- + RXBUFRESET => tied_to_ground_i, + RXBUFSTATUS => open, + RXDDIEN => tied_to_ground_i, + RXDLYBYPASS => tied_to_vcc_i, + RXDLYEN => tied_to_ground_i, + RXDLYOVRDEN => tied_to_ground_i, + RXDLYSRESET => tied_to_ground_i, + RXDLYSRESETDONE => open, + RXPHALIGN => tied_to_ground_i, + RXPHALIGNDONE => open, + RXPHALIGNEN => tied_to_ground_i, + RXPHDLYPD => tied_to_ground_i, + RXPHDLYRESET => tied_to_ground_i, + RXPHMONITOR => open, + RXPHOVRDEN => tied_to_ground_i, + RXPHSLIPMONITOR => open, + RXSTATUS => open, + RXSYNCALLIN => tied_to_ground_i, + RXSYNCDONE => open, + RXSYNCIN => tied_to_ground_i, + RXSYNCMODE => tied_to_ground_i, + RXSYNCOUT => open, + -------------- Receive Ports - RX Byte and Word Alignment Ports ------------ + RXBYTEISALIGNED => RXBYTEISALIGNED_OUT, + RXBYTEREALIGN => open, + RXCOMMADET => RXCOMMADET_OUT, + RXCOMMADETEN => tied_to_vcc_i, + RXMCOMMAALIGNEN => tied_to_ground_i, + RXPCOMMAALIGNEN => tied_to_ground_i, + RXSLIDE => RXSLIDE_IN, + ------------------ Receive Ports - RX Channel Bonding Ports ---------------- + RXCHANBONDSEQ => open, + RXCHBONDEN => tied_to_ground_i, + RXCHBONDI => "0000", + RXCHBONDLEVEL => tied_to_ground_vec_i(2 downto 0), + RXCHBONDMASTER => tied_to_ground_i, + RXCHBONDO => open, + RXCHBONDSLAVE => tied_to_ground_i, + ----------------- Receive Ports - RX Channel Bonding Ports ---------------- + RXCHANISALIGNED => open, + RXCHANREALIGN => open, + ------------ Receive Ports - RX Decision Feedback Equalizer(DFE) ----------- + DMONITOROUT => open, + RXADAPTSELTEST => tied_to_ground_vec_i(13 downto 0), + RXDFEXYDEN => tied_to_ground_i, + RXOSINTEN => '1', + RXOSINTID0 => tied_to_ground_vec_i(3 downto 0), + RXOSINTNTRLEN => tied_to_ground_i, + RXOSINTSTROBEDONE => open, + ------- Receive Ports - RX Driver,OOB signalling,Coupling and Eq.,CDR ------ + RXLPMLFOVRDEN => tied_to_ground_i, + RXLPMOSINTNTRLEN => tied_to_ground_i, + -------------------- Receive Ports - RX Equailizer Ports ------------------- + RXLPMHFHOLD => rxlpmhfhold_in, + RXLPMHFOVRDEN => tied_to_ground_i, + RXLPMLFHOLD => rxlpmlfhold_in, + --------------------- Receive Ports - RX Equalizer Ports ------------------- + RXOSHOLD => tied_to_ground_i, + RXOSOVRDEN => tied_to_ground_i, + ------------ Receive Ports - RX Fabric ClocK Output Control Ports ---------- + RXRATEDONE => open, + ----------- Receive Ports - RX Fabric Clock Output Control Ports ---------- + RXRATEMODE => '0', + --------------- Receive Ports - RX Fabric Output Control Ports ------------- + RXOUTCLK => RXOUTCLK_OUT, + RXOUTCLKFABRIC => open, + RXOUTCLKPCS => open, + RXOUTCLKSEL => "010", + ---------------------- Receive Ports - RX Gearbox Ports -------------------- + RXDATAVALID => open, + RXHEADER => open, + RXHEADERVALID => open, + RXSTARTOFSEQ => open, + --------------------- Receive Ports - RX Gearbox Ports -------------------- + RXGEARBOXSLIP => tied_to_ground_i, + ------------- Receive Ports - RX Initialization and Reset Ports ------------ + GTRXRESET => gtrxreset_out, + RXLPMRESET => tied_to_ground_i, + RXOOBRESET => tied_to_ground_i, + RXPCSRESET => tied_to_ground_i, + RXPMARESET => tied_to_ground_i, + ------------------- Receive Ports - RX OOB Signaling ports ----------------- + RXCOMSASDET => open, + RXCOMWAKEDET => open, + ------------------ Receive Ports - RX OOB Signaling ports ----------------- + RXCOMINITDET => open, + ------------------ Receive Ports - RX OOB signalling Ports ----------------- + RXELECIDLE => open, + RXELECIDLEMODE => "11", + ----------------- Receive Ports - RX Polarity Control Ports ---------------- + RXPOLARITY => tied_to_ground_i, + -------------- Receive Ports -RX Initialization and Reset Ports ------------ + RXRESETDONE => RXRESETDONE_OUT, + --------------------------- TX Buffer Bypass Ports ------------------------- + TXPHDLYTSTCLK => tied_to_ground_i, + ------------------------ TX Configurable Driver Ports ---------------------- + TXPOSTCURSOR => "00000", + TXPOSTCURSORINV => tied_to_ground_i, + TXPRECURSOR => tied_to_ground_vec_i(4 downto 0), + TXPRECURSORINV => tied_to_ground_i, + -------------------- TX Fabric Clock Output Control Ports ------------------ + TXRATEMODE => tied_to_ground_i, + --------------------- TX Initialization and Reset Ports -------------------- + CFGRESET => tied_to_ground_i, + GTTXRESET => GTTXRESET_IN, + PCSRSVDOUT => open, + TXUSERRDY => TXUSERRDY_IN, + ----------------- TX Phase Interpolator PPM Controller Ports --------------- + TXPIPPMEN => tied_to_ground_i, + TXPIPPMOVRDEN => tied_to_ground_i, + TXPIPPMPD => tied_to_ground_i, + TXPIPPMSEL => tied_to_vcc_i, + TXPIPPMSTEPSIZE => tied_to_ground_vec_i(4 downto 0), + ---------------------- Transceiver Reset Mode Operation -------------------- + GTRESETSEL => tied_to_ground_i, + RESETOVRD => tied_to_ground_i, + ------------------------------- Transmit Ports ----------------------------- + TXPMARESETDONE => open, + ----------------- Transmit Ports - Configurable Driver Ports --------------- + PMARSVDIN0 => '0', + PMARSVDIN1 => '0', + ------------------ Transmit Ports - FPGA TX Interface Ports ---------------- + TXDATA => txdata_i, + TXUSRCLK => TXUSRCLK_IN, + TXUSRCLK2 => TXUSRCLK2_IN, + --------------------- Transmit Ports - PCI Express Ports ------------------- + TXELECIDLE => tied_to_ground_i, + TXMARGIN => tied_to_ground_vec_i(2 downto 0), + TXRATE => tied_to_ground_vec_i(2 downto 0), + TXSWING => tied_to_ground_i, + ------------------ Transmit Ports - Pattern Generator Ports ---------------- + TXPRBSFORCEERR => tied_to_ground_i, + ------------------ Transmit Ports - TX 8B/10B Encoder Ports ---------------- + TX8B10BBYPASS => tied_to_ground_vec_i(3 downto 0), + TXCHARDISPMODE => tied_to_ground_vec_i(3 downto 0), + TXCHARDISPVAL => tied_to_ground_vec_i(3 downto 0), + TXCHARISK(3 downto 2) => tied_to_ground_vec_i(1 downto 0), + TXCHARISK(1 downto 0) => TXCHARISK_IN, + ------------------ Transmit Ports - TX Buffer Bypass Ports ----------------- + TXDLYBYPASS => tied_to_vcc_i, + TXDLYEN => tied_to_ground_i, + TXDLYHOLD => tied_to_ground_i, + TXDLYOVRDEN => tied_to_ground_i, + TXDLYSRESET => tied_to_ground_i, + TXDLYSRESETDONE => open, + TXDLYUPDOWN => tied_to_ground_i, + TXPHALIGN => tied_to_ground_i, + TXPHALIGNDONE => open, + TXPHALIGNEN => tied_to_ground_i, + TXPHDLYPD => tied_to_ground_i, + TXPHDLYRESET => tied_to_ground_i, + TXPHINIT => tied_to_ground_i, + TXPHINITDONE => open, + TXPHOVRDEN => tied_to_ground_i, + ---------------------- Transmit Ports - TX Buffer Ports -------------------- + TXBUFSTATUS => open, + ------------ Transmit Ports - TX Buffer and Phase Alignment Ports ---------- + TXSYNCALLIN => tied_to_ground_i, + TXSYNCDONE => open, + TXSYNCIN => tied_to_ground_i, + TXSYNCMODE => tied_to_ground_i, + TXSYNCOUT => open, + --------------- Transmit Ports - TX Configurable Driver Ports -------------- + GTPTXN => GTPTXN_OUT, + GTPTXP => GTPTXP_OUT, + TXBUFDIFFCTRL => "100", + TXDEEMPH => tied_to_ground_i, + TXDIFFCTRL => "1000", + TXDIFFPD => tied_to_ground_i, + TXINHIBIT => tied_to_ground_i, + TXMAINCURSOR => "0000000", + TXPISOPD => tied_to_ground_i, + ----------- Transmit Ports - TX Fabric Clock Output Control Ports ---------- + TXOUTCLK => TXOUTCLK_OUT, + TXOUTCLKFABRIC => TXOUTCLKFABRIC_OUT, + TXOUTCLKPCS => TXOUTCLKPCS_OUT, + TXOUTCLKSEL => "010", + TXRATEDONE => open, + --------------------- Transmit Ports - TX Gearbox Ports -------------------- + TXGEARBOXREADY => open, + TXHEADER => tied_to_ground_vec_i(2 downto 0), + TXSEQUENCE => tied_to_ground_vec_i(6 downto 0), + TXSTARTSEQ => tied_to_ground_i, + ------------- Transmit Ports - TX Initialization and Reset Ports ----------- + TXPCSRESET => tied_to_ground_i, + TXPMARESET => tied_to_ground_i, + TXRESETDONE => TXRESETDONE_OUT, + ------------------ Transmit Ports - TX OOB signalling Ports ---------------- + TXCOMFINISH => open, + TXCOMINIT => tied_to_ground_i, + TXCOMSAS => tied_to_ground_i, + TXCOMWAKE => tied_to_ground_i, + TXPDELECIDLEMODE => tied_to_ground_i, + ----------------- Transmit Ports - TX Polarity Control Ports --------------- + TXPOLARITY => tied_to_ground_i, + --------------- Transmit Ports - TX Receiver Detection Ports -------------- + TXDETECTRX => tied_to_ground_i, + ------------------ Transmit Ports - pattern Generator Ports ---------------- + TXPRBSSEL => TXPRBSSEL_IN + + ); + + ------------------------- Soft Fix for Production Silicon---------------------- + gtrxreset_seq_i : whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq + port map + ( + RST => RST_IN, + GTRXRESET_IN => GTRXRESET_IN, + RXPMARESETDONE => rxpmaresetdone_t, + GTRXRESET_OUT => gtrxreset_out, + DRP_OP_DONE => drp_op_done, + DRPCLK => DRPCLK_IN, + DRPEN => drpen_rst_t, + DRPADDR => drpaddr_rst_t, + DRPWE => drpwe_rst_t, + DRPDO => drpdo_rst_t, + DRPDI => drpdi_rst_t, + DRPRDY => drprdy_rst_t + ); + + + drpen_i <= drpen_rst_t when drp_op_done ='0' else + drpen_pma_t when drp_pma_busy = '1' else + drpen_rate_t when drp_rate_busy ='1' else DRPEN_IN; + + + drpaddr_i <= drpaddr_rst_t when drp_op_done ='0' else + drpaddr_pma_t when drp_pma_busy = '1' else + drpaddr_rate_t when drp_rate_busy ='1' else DRPADDR_IN; + + + drpwe_i <= drpwe_rst_t when drp_op_done ='0' else + drpwe_pma_t when drp_pma_busy = '1' else + drpwe_rate_t when drp_rate_busy ='1' else DRPWE_IN; + + + + DRPDO_OUT <= drpdo_i when (drp_op_done='1' or drp_pma_busy='0' or drp_rate_busy='0') else x"0000"; + + drpdo_rst_t <= drpdo_i; + + drpdo_pma_t <= drpdo_i; + + drpdo_rate_t <= drpdo_i; + + + drpdi_i <= drpdi_rst_t when drp_op_done ='0' else + drpdi_pma_t when drp_pma_busy = '1' else + drpdi_rate_t when drp_rate_busy ='1' else DRPDI_IN; + + + DRPRDY_OUT <= drprdy_i when (drp_op_done='1' or drp_pma_busy='0' or drp_rate_busy='0') else '0'; + + drprdy_rst_t <= drprdy_i; + + drprdy_pma_t <= drprdy_i; + + drprdy_rate_t <= drprdy_i; + + + drp_pma_busy <= '0'; + drp_rate_busy <= '0'; + + process (DRPCLK_IN) + begin + if(rising_edge(DRPCLK_IN)) then + if(drp_op_done = '0' or drp_rate_busy='1') then + drp_busy_i1 <= '1'; + else + drp_busy_i1 <= '0'; + end if; + end if; + end process; + + process (DRPCLK_IN) + begin + if(rising_edge(DRPCLK_IN)) then + if(drp_op_done = '0' or drp_pma_busy='1') then + drp_busy_i2 <= '1'; + else + drp_busy_i2 <= '0'; + end if; + end if; + end process; + + DRP_BUSY_OUT <= drp_busy_i1 or drp_busy_i2; + + + + + end RTL; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq.vhd new file mode 100644 index 000000000..5fc534d53 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq.vhd @@ -0,0 +1,342 @@ +------------------------------------------------------------------------------/ +-- ____ ____ +-- / /\/ / +-- /___/ \ / Vendor: Xilinx +-- \ \ \/ Version : 3.6 +-- \ \ Application : 7 Series FPGAs Transceivers Wizard +-- / / Filename : whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq.vhd +-- /___/ /\ +-- \ \ / \ +-- \___\/\___\ +-- +-- +-- Module whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq +-- Generated by Xilinx 7 Series FPGAs Transceivers Wizard +-- +-- +-- (c) Copyright 2010-2012 Xilinx, Inc. All rights reserved. +-- +-- This file contains confidential and proprietary information +-- of Xilinx, Inc. and is protected under U.S. and +-- international copyright and other intellectual property +-- laws. +-- +-- DISCLAIMER +-- This disclaimer is not a license and does not grant any +-- rights to the materials distributed herewith. Except as +-- otherwise provided in a valid license issued to you by +-- Xilinx, and to the maximum extent permitted by applicable +-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +-- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES +-- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +-- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +-- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +-- (2) Xilinx shall not be liable (whether in contract or tort, +-- including negligence, or under any other theory of +-- liability) for any loss or damage of any kind or nature +-- related to, arising under or in connection with these +-- materials, including for any direct, or any indirect, +-- special, incidental, or consequential loss or damage +-- (including loss of data, profits, goodwill, or any type of +-- loss or damage suffered as a result of any action brought +-- by a third party) even if such damage or loss was +-- reasonably foreseeable or Xilinx had been advised of the +-- possibility of the same. +-- +-- CRITICAL APPLICATIONS +-- Xilinx products are not designed or intended to be fail- +-- safe, or for use in any application requiring fail-safe +-- performance, such as life-support or safety devices or +-- systems, Class III medical devices, nuclear facilities, +-- applications related to the deployment of airbags, or any +-- other applications that could lead to death, personal +-- injury, or severe property or environmental damage +-- (individually and collectively, "Critical +-- Applications"). Customer assumes the sole risk and +-- liability of any use of Xilinx products in Critical +-- Applications, subject only to applicable laws and +-- regulations governing limitations on product liability. +-- +-- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +-- PART OF THIS FILE AT ALL TIMES. + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.gencores_pkg.all; + +ENTITY whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq IS + port ( + RST : IN std_logic; --Please add a synchroniser if it is not generated in DRPCLK domain. + GTRXRESET_IN : IN std_logic; --Please add a synchroniser if it is not generated in DRPCLK domain. + RXPMARESETDONE: IN std_logic; + GTRXRESET_OUT : OUT std_logic; + + DRPCLK : IN std_logic; + DRPADDR : OUT std_logic_vector(8 downto 0); + DRPDO : IN std_logic_vector(15 downto 0); + DRPDI : OUT std_logic_vector(15 downto 0); + DRPRDY : IN std_logic; + DRPEN : OUT std_logic; + DRPWE : OUT std_logic; + DRP_OP_DONE : OUT std_logic +); +END whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq; + +ARCHITECTURE Behavioral of whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq is + + +-- component whiterabbit_gtpe2_channel_wrapper_sync_block +-- generic ( +-- INITIALISE : bit_vector(5 downto 0) := "000000" +-- ); +-- port ( +-- clk : in std_logic; +-- data_in : in std_logic; +-- data_out : out std_logic +-- ); +-- end component; + + constant DLY : time := 1 ns; + type state_type is (idle, + drp_rd, + wait_rd_data, + wr_16, + wait_wr_done1, + wait_pmareset, + wr_20, + wait_wr_done2); + + signal state : state_type := idle; + signal next_state : state_type := idle; + signal gtrxreset_s : std_logic; + signal gtrxreset_ss : std_logic; + signal rxpmaresetdone_ss : std_logic; + signal rxpmaresetdone_sss : std_logic; + signal rd_data : std_logic_vector(15 downto 0); + signal next_rd_data : std_logic_vector(15 downto 0); + signal original_rd_data : std_logic_vector(15 downto 0); + signal pmarstdone_fall_edge:std_logic; + signal gtrxreset_i :std_logic; + signal flag :std_logic := '0'; + signal gtrxreset_o :std_logic; + signal drpen_o :std_logic; + signal drpwe_o :std_logic; + signal drpaddr_o :std_logic_vector(8 downto 0); + signal drpdi_o :std_logic_vector(15 downto 0); + signal drp_op_done_o :std_logic; + signal rst_n :std_logic; +BEGIN + +-- sync0_RXPMARESETDONE : whiterabbit_gtpe2_channel_wrapper_sync_block +-- port map +-- ( +-- clk => DRPCLK, +-- data_in => RXPMARESETDONE, +-- data_out => rxpmaresetdone_ss +-- ); + + rst_n <= not RST; + + sync0_RXPMARESETDONE : gc_sync_ffs + port map + ( + clk_i => DRPCLK, + rst_n_i => rst_n, + data_i => RXPMARESETDONE, + synced_o => rxpmaresetdone_ss, + npulse_o => open, + ppulse_o => open + ); + +--output assignment + GTRXRESET_OUT <= gtrxreset_o; + DRPEN <= drpen_o; + DRPWE <= drpwe_o; + DRPADDR <= drpaddr_o; + DRPDI <= drpdi_o; + DRP_OP_DONE <= drp_op_done_o; + + PROCESS (DRPCLK,RST) + BEGIN + IF (RST = '1') THEN + state <= idle after DLY; + gtrxreset_s <= '0' after DLY; + gtrxreset_ss <= '0' after DLY; + rxpmaresetdone_sss <= '0' after DLY; + rd_data <= x"0000" after DLY; + gtrxreset_o <= '0' after DLY; + ELSIF (DRPCLK'event and DRPCLK='1') THEN + state <= next_state after DLY; + gtrxreset_s <= GTRXRESET_IN after DLY; + gtrxreset_ss <= gtrxreset_s after DLY; + rxpmaresetdone_sss <= rxpmaresetdone_ss after DLY; + rd_data <= next_rd_data after DLY; + gtrxreset_o <= gtrxreset_i after DLY; + END IF; + END PROCESS; + + PROCESS (DRPCLK,GTRXRESET_IN) + BEGIN + IF (GTRXRESET_IN = '1') THEN + drp_op_done_o <= '0' after DLY; + + ELSIF (DRPCLK'event and DRPCLK='1') THEN + IF (state = wait_wr_done2 and DRPRDY = '1') THEN + drp_op_done_o <= '1' after DLY; + ELSE + drp_op_done_o <= drp_op_done_o after DLY; + END IF; + END IF; + END PROCESS; + + pmarstdone_fall_edge <= (not rxpmaresetdone_ss) and (rxpmaresetdone_sss); + + PROCESS (gtrxreset_ss,DRPRDY,state,pmarstdone_fall_edge) + BEGIN + CASE state IS + + WHEN idle => + IF (gtrxreset_ss='1') THEN + next_state <= drp_rd; + ELSE + next_state <= idle; + END IF; + + WHEN drp_rd => + next_state<= wait_rd_data; + + WHEN wait_rd_data => + IF (DRPRDY='1')THEN + next_state <= wr_16; + ELSE + next_state <= wait_rd_data; + END IF; + + WHEN wr_16 => + next_state <= wait_wr_done1; + + WHEN wait_wr_done1 => + IF (DRPRDY='1') THEN + next_state <= wait_pmareset; + ELSE + next_state <= wait_wr_done1; + END IF; + + WHEN wait_pmareset => + IF (pmarstdone_fall_edge='1') THEN + next_state <= wr_20; + ELSE + next_state <= wait_pmareset; + END IF; + + WHEN wr_20 => + next_state <= wait_wr_done2; + + WHEN wait_wr_done2 => + IF (DRPRDY='1') THEN + next_state <= idle; + ELSE + next_state <= wait_wr_done2; + END IF; + + WHEN others=> + next_state <= idle; + + END CASE; + END PROCESS; + +-- drives DRP interface and GTRXRESET_OUT + PROCESS(DRPRDY,state,rd_data,DRPDO,gtrxreset_ss,flag,original_rd_data) + BEGIN +-- assert gtrxreset_out until wr to 16-bit is complete +-- RX_DATA_WIDTH is located at addr x"0011", [13 downto 11] +-- encoding is this : /16 = x "2", /20 = x"3", /32 = x"4", /40 = x"5" + gtrxreset_i <= '0'; + drpaddr_o <= '0'& x"11"; -- 000010001 + drpen_o <= '0'; + drpwe_o <= '0'; + drpdi_o <= x"0000"; + next_rd_data <= rd_data; + + CASE state IS + + --do nothing to DRP or reset + WHEN idle => null; + + --assert reset and issue rd + WHEN drp_rd => + gtrxreset_i <= '1'; + drpen_o <= '1'; + drpwe_o <= '0'; + + --assert reset and wait to load rd data + WHEN wait_rd_data => + gtrxreset_i <= '1'; + IF (DRPRDY='1' and flag = '0') THEN + next_rd_data <= DRPDO; + ELSIF (DRPRDY='1' and flag = '1') THEN + next_rd_data <= original_rd_data; + ELSE + next_rd_data <= rd_data; + END IF; + + --assert reset and write to 16-bit mode + WHEN wr_16=> + gtrxreset_i<= '1'; + drpen_o <= '1'; + drpwe_o <= '1'; + -- Addr "00001001" [11] = '0' puts width mode in /16 or /32 + drpdi_o <= rd_data(15 downto 12) & '0' & rd_data(10 downto 0); + + --keep asserting reset until write to 16-bit mode is complete + WHEN wait_wr_done1=> + gtrxreset_i <= '1'; + + --deassert reset and no DRP access until 2nd pmareset + WHEN wait_pmareset => null; + IF (gtrxreset_ss='1') THEN + gtrxreset_i <= '1'; + ELSE + gtrxreset_i <= '0'; + END IF; + + --write to 20-bit mode + WHEN wr_20 => + drpen_o <='1'; + drpwe_o <= '1'; + drpdi_o <= rd_data(15 downto 0); --restore user setting per prev read + + --wait to complete write to 20-bit mode + WHEN wait_wr_done2 => + + + WHEN others => null; + + END CASE; + END PROCESS; + + process (DRPCLK) + begin + if (DRPCLK'event and DRPCLK='1') then + if( state = wr_16 or state = wait_pmareset or state = wr_20 or state = wait_wr_done1) then + flag <= '1'; + elsif(state = wait_wr_done2) then + flag <= '0'; + end if; + end if; + end process; + + process (DRPCLK) + begin + if (DRPCLK'event and DRPCLK='1') then + if( state = wait_rd_data and DRPRDY ='1' and flag = '0') then + original_rd_data <= DRPDO; + end if; + end if; + end process; + +END Behavioral; + + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/wr_gtp_phy_family7.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/wr_gtp_phy_family7.vhd new file mode 100644 index 000000000..a075865d9 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/wr_gtp_phy_family7.vhd @@ -0,0 +1,521 @@ +------------------------------------------------------------------------------- +-- Title : Deterministic Xilinx GTP wrapper - artix-7 top module +-- Project : White Rabbit Switch +------------------------------------------------------------------------------- +-- File : wr_gtp_phy_family7.vhd +-- Author : Peter Jansweijer, Rick Lohlefink, Tomasz Wlostowski +-- Company : Nikhef, CERN BE-CO-HT +-- Created : 2016-05-19 +-- Last update: 2016-05-19 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Dual channel wrapper for Xilinx Artix-7 GTP adapted for +-- deterministic delays at 1.25 Gbps. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2009-2011 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2016-05-19 0.1 PeterJ Initial release based on "wr_gtx_phy_kintex7.vhd" +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.gencores_pkg.all; + +library unisim; +use unisim.vcomponents.all; + +library work; + +use work.disparity_gen_pkg.all; + +entity wr_gtp_phy_family7 is + generic ( + -- set to non-zero value to speed up the simulation by reducing some delays + g_simulation : integer := 0 + ); + port ( + -- Dedicated reference 125 MHz clock for the GTP transceiver + clk_gtp_i : in std_logic; + + -- TX path, synchronous to tx_out_clk_o (62.5 MHz): + tx_out_clk_o : out std_logic; + tx_locked_o : out std_logic; + + -- data input (8 bits, not 8b10b-encoded) + tx_data_i : in std_logic_vector(15 downto 0) := (others => '0'); + + -- 1 when tx_data_i contains a control code, 0 when it's a data byte + tx_k_i : in std_logic_vector(1 downto 0) := (others => '0'); + + -- disparity of the currently transmitted 8b10b code (1 = plus, 0 = minus). + -- Necessary for the PCS to generate proper frame termination sequences. + -- Generated for the 2nd byte (LSB) of tx_data_i. + tx_disparity_o : out std_logic; + + -- Encoding error indication (1 = error, 0 = no error) + tx_enc_err_o : out std_logic; + + -- RX path, synchronous to ch0_rx_rbclk_o. + + -- RX recovered clock + rx_rbclk_o : out std_logic; + + -- 8b10b-decoded data output. The data output must be kept invalid before + -- the transceiver is locked on the incoming signal to prevent the EP from + -- detecting a false carrier. + rx_data_o : out std_logic_vector(15 downto 0); + + -- 1 when the byte on rx_data_o is a control code + rx_k_o : out std_logic_vector(1 downto 0); + + -- encoding error indication + rx_enc_err_o : out std_logic; + + -- RX bitslide indication, indicating the delay of the RX path of the + -- transceiver (in UIs). Must be valid when ch0_rx_data_o is valid. + rx_bitslide_o : out std_logic_vector(4 downto 0); + + -- reset input, active hi + rst_i : in std_logic := '0'; + loopen_i : in std_logic_vector(2 downto 0) := (others => '0'); + tx_prbs_sel_i : in std_logic_vector(2 downto 0) := (others => '0'); + + pad_rxn_i : in std_logic := '0'; + pad_rxp_i : in std_logic := '0'; + + pad_txn_o : out std_logic; + pad_txp_o : out std_logic; + + rdy_o : out std_logic + ); +end entity wr_gtp_phy_family7; + +-------------------------------------------------------------------------------- +-- Object : Architecture work.wr_gtp_phy_family7.structure +-- Last modified : Mon Nov 23 12:54:18 2015. +-------------------------------------------------------------------------------- + +architecture structure of wr_gtp_phy_family7 is + constant REQ_DELAY : integer := 500; -- unit = ns + constant CLK_PER : integer := 8; -- unit = ns + constant INITIAL_WAIT_CYCLES : integer := REQ_DELAY / CLK_PER; -- Required 500 ns divided by RefClk period + constant TOTAL_DELAY : integer := INITIAL_WAIT_CYCLES + 10; -- Add 10 clock cycles as delay to be sure + + constant c_rxcdrlock_max : integer := 3; + constant c_reset_cnt_max : integer := 64; -- Reset pulse width 64 * 8 = 512 ns + + type state_type is (init, count, count_done, wait_reset); + signal state : state_type; + + signal rst_synced : std_logic; + signal rst_int : std_logic; + signal rx_rec_clk : std_logic; + signal rx_rec_clk_bufin : std_logic; + + attribute buffer_type : string; + attribute buffer_type of rx_rec_clk_bufin : signal is "bufg"; + + signal tx_out_clk : std_logic; + signal tx_out_clk_bufin : std_logic; + + --attribute buffer_type of tx_out_clk_bufin : signal is "bufg"; + + signal rx_lost_lock : std_logic; + signal ready_for_reset : std_logic := '0'; + signal serdes_ready : std_logic := '0'; + signal rx_slide : std_logic := '0'; + signal rx_rst_done : std_logic; + signal tx_rst_done : std_logic; + signal rx_comma_det : std_logic; + signal rx_byte_is_aligned : std_logic; + signal forced_rx_reset : std_logic; + signal rx_synced : std_logic; + signal rst_done : std_logic; + signal rst_done_n : std_logic; + signal pll_locked_i : std_logic; + signal pll_locked_n_i : std_logic; + signal rx_reset : std_logic; + signal rx_k_int : std_logic_vector(1 downto 0); + signal rx_data_int : std_logic_vector(15 downto 0); + signal rx_disp_err : std_logic_vector(1 downto 0); + signal rx_code_err : std_logic_vector(1 downto 0); + signal cur_disp : t_8b10b_disparity; + signal tx_is_k_swapped : std_logic_vector(1 downto 0); + signal tx_data_swapped : std_logic_vector(15 downto 0); + + component whiterabbit_gtpe2_channel_wrapper is + generic + ( + -- Simulation attributes + EXAMPLE_SIMULATION : integer := 0; -- Set to 1 for simulation + WRAPPER_SIM_GTRESET_SPEEDUP : string := "FALSE" -- Set to "true" to speed up sim reset + ); + port + ( + --_________________________________________________________________________ + --____________________________CHANNEL PORTS________________________________ + GT0_DRP_BUSY_OUT : out std_logic; + ---------------------------- Channel - DRP Ports -------------------------- + GT0_DRPADDR_IN : in std_logic_vector(8 downto 0); + GT0_DRPCLK_IN : in std_logic; + GT0_DRPDI_IN : in std_logic_vector(15 downto 0); + GT0_DRPDO_OUT : out std_logic_vector(15 downto 0); + GT0_DRPEN_IN : in std_logic; + GT0_DRPRDY_OUT : out std_logic; + GT0_DRPWE_IN : in std_logic; + ------------------------------- Loopback Ports ----------------------------- + GT0_LOOPBACK_IN : in std_logic_vector(2 downto 0); + --------------------- RX Initialization and Reset Ports -------------------- + GT0_RXUSERRDY_IN : in std_logic; + -------------------------- RX Margin Analysis Ports ------------------------ + GT0_EYESCANDATAERROR_OUT : out std_logic; + ------------------ Receive Ports - FPGA RX Interface Ports ----------------- + GT0_RXDATA_OUT : out std_logic_vector(15 downto 0); + GT0_RXUSRCLK_IN : in std_logic; + GT0_RXUSRCLK2_IN : in std_logic; + ------------------ Receive Ports - RX 8B/10B Decoder Ports ----------------- + GT0_RXCHARISCOMMA_OUT : out std_logic_vector(1 downto 0); + GT0_RXCHARISK_OUT : out std_logic_vector(1 downto 0); + GT0_RXDISPERR_OUT : out std_logic_vector(1 downto 0); + GT0_RXNOTINTABLE_OUT : out std_logic_vector(1 downto 0); + ------------------------ Receive Ports - RX AFE Ports ---------------------- + GT0_GTPRXN_IN : in std_logic; + GT0_GTPRXP_IN : in std_logic; + -------------- Receive Ports - RX Byte and Word Alignment Ports ------------ + GT0_RXBYTEISALIGNED_OUT : out std_logic; + GT0_RXCOMMADET_OUT : out std_logic; + GT0_RXSLIDE_IN : in std_logic; + --------------------- Receive Ports - RX Equilizer Ports ------------------- + GT0_RXLPMHFHOLD_IN : in std_logic; + GT0_RXLPMLFHOLD_IN : in std_logic; + --------------- Receive Ports - RX Fabric Output Control Ports ------------- + GT0_RXOUTCLK_OUT : out std_logic; + ------------- Receive Ports - RX Initialization and Reset Ports ------------ + GT0_GTRXRESET_IN : in std_logic; + -------------- Receive Ports -RX Initialization and Reset Ports ------------ + GT0_RXRESETDONE_OUT : out std_logic; + --------------------- TX Initialization and Reset Ports -------------------- + GT0_GTTXRESET_IN : in std_logic; + GT0_TXUSERRDY_IN : in std_logic; + ------------------ Transmit Ports - FPGA TX Interface Ports ---------------- + GT0_TXDATA_IN : in std_logic_vector(15 downto 0); + GT0_TXUSRCLK_IN : in std_logic; + GT0_TXUSRCLK2_IN : in std_logic; + ------------------ Transmit Ports - TX 8B/10B Encoder Ports ---------------- + GT0_TXCHARISK_IN : in std_logic_vector(1 downto 0); + --------------- Transmit Ports - TX Configurable Driver Ports -------------- + GT0_GTPTXN_OUT : out std_logic; + GT0_GTPTXP_OUT : out std_logic; + ----------- Transmit Ports - TX Fabric Clock Output Control Ports ---------- + GT0_TXOUTCLK_OUT : out std_logic; + GT0_TXOUTCLKFABRIC_OUT : out std_logic; + GT0_TXOUTCLKPCS_OUT : out std_logic; + ------------- Transmit Ports - TX Initialization and Reset Ports ----------- + GT0_TXRESETDONE_OUT : out std_logic; + ------------------ Transmit Ports - pattern Generator Ports ---------------- + GT0_TXPRBSSEL_IN : in std_logic_vector(2 downto 0); + + + --____________________________COMMON PORTS________________________________ + ----------------- Common Block - GTPE2_COMMON Clocking Ports --------------- + GT0_GTREFCLK0_IN : in std_logic; + -------------------------- Common Block - PLL Ports ------------------------ + GT0_PLL1LOCK_OUT : out std_logic; + GT0_PLL1LOCKDETCLK_IN : in std_logic; + GT0_PLL1REFCLKLOST_OUT : out std_logic; + GT0_PLL1RESET_IN : in std_logic + + + ); + end component whiterabbit_gtpe2_channel_wrapper; + + component gtp_bitslide is + generic ( + g_simulation : integer; + g_target : string := "artix7" + ); + port ( + gtp_rst_i : in std_logic; + gtp_rx_clk_i : in std_logic; + gtp_rx_comma_det_i : in std_logic; + gtp_rx_byte_is_aligned_i : in std_logic; + serdes_ready_i : in std_logic; + gtp_rx_slide_o : out std_logic; + gtp_rx_cdr_rst_o : out std_logic; + bitslide_o : out std_logic_vector(4 downto 0); + synced_o : out std_logic + ); + end component; + + component BUFG + port ( + I : in std_ulogic; + O : out std_ulogic); + end component BUFG; + + function f_to_bool(x : integer) return string is + begin + if(x /= 0) then + return "TRUE"; + else + return "FALSE"; + end if; + end f_to_bool; + +begin + + U_EdgeDet_rst_i : gc_sync_ffs port map ( + clk_i => clk_gtp_i, + rst_n_i => '1', + data_i => rst_i, + ppulse_o => rst_synced); + + p_reset_pulse : process(clk_gtp_i, rst_synced) + variable reset_cnt : integer range 0 to c_reset_cnt_max; + begin + if(rst_synced = '1') then + reset_cnt := 0; + rst_int <= '1'; + elsif rising_edge(clk_gtp_i) then + if reset_cnt /= c_reset_cnt_max then + reset_cnt := reset_cnt + 1; + rst_int <= '1'; + else + rst_int <= '0'; + end if; + end if; + end process; + + -- ug482 "GTP Transceiver TX/RX Reset in Response to Completion of Configuration" + -- 1. Wait a minimum of 500 ns after configuration is complete + process(clk_gtp_i, rst_int) is + variable reset_counter : integer range 0 to TOTAL_DELAY := 0; + begin + if rst_int = '1' then + state <= init; + elsif rising_edge(clk_gtp_i) then + case state is + when init => + reset_counter := 0; + state <= count; + when count => + if reset_counter = TOTAL_DELAY then + reset_counter := 0; + state <= count_done; + else + reset_counter := reset_counter + 1; + state <= count; + end if; + when count_done => + state <= wait_reset; + when wait_reset => + state <= wait_reset; + end case; + end if; + end process; + + ready_for_reset <= '1' when state = count_done else '0'; + + -- 7-Series GTP RXCDRLOCK is reserved (ug482 Table 4.11) and can not be used for detection of proper RX lock. + -- Instead use rx_code_err (i.e. RXNOTINTABLE) to check integrity of the received characters. + process(rx_rec_clk, rst_int) is + begin + if rst_int = '1' then + rx_lost_lock <= '1'; + elsif rising_edge(rx_rec_clk) then + if rx_synced = '1' then + if rx_code_err > "00" then + rx_lost_lock <= '1'; + else + rx_lost_lock <= '0'; + end if; + else + rx_lost_lock <= '0'; + end if; + end if; + end process; + + tx_enc_err_o <= '0'; + + U_BUF_TxOutClk: BUFG + port map( + I => tx_out_clk_bufin, + O => tx_out_clk); + + tx_out_clk_o <= tx_out_clk; + tx_locked_o <= pll_locked_i; + + U_BUF_RxRecClk: BUFG + port map( + I => rx_rec_clk_bufin, + O => rx_rec_clk); + + rx_rbclk_o <= rx_rec_clk; + + tx_is_k_swapped <= tx_k_i(0) & tx_k_i(1); + tx_data_swapped <= tx_data_i(7 downto 0) & tx_data_i(15 downto 8); + + U_GTP_INST : whiterabbit_gtpe2_channel_wrapper + generic map + ( + -- Simulation attributes + EXAMPLE_SIMULATION => g_simulation, + WRAPPER_SIM_GTRESET_SPEEDUP => f_to_bool(g_simulation) + ) + port map + ( + --_________________________________________________________________________ + --_________________________________________________________________________ + --____________________________CHANNEL PORTS________________________________ + GT0_DRP_BUSY_OUT => open, + ---------------------------- Channel - DRP Ports -------------------------- + GT0_DRPADDR_IN => (others => '0'), + GT0_DRPCLK_IN => clk_gtp_i, + GT0_DRPDI_IN => (others => '0'), + GT0_DRPDO_OUT => open, + GT0_DRPEN_IN => '0', + GT0_DRPRDY_OUT => open, + GT0_DRPWE_IN => '0', + ------------------------------- Loopback Ports ----------------------------- + GT0_LOOPBACK_IN => loopen_i, + --------------------- RX Initialization and Reset Ports -------------------- + GT0_RXUSERRDY_IN => pll_locked_i, + -------------------------- RX Margin Analysis Ports ------------------------ + GT0_EYESCANDATAERROR_OUT => open, + ------------------ Receive Ports - FPGA RX Interface Ports ----------------- + GT0_RXDATA_OUT => rx_data_int, + GT0_RXUSRCLK_IN => rx_rec_clk, + GT0_RXUSRCLK2_IN => rx_rec_clk, + ------------------ Receive Ports - RX 8B/10B Decoder Ports ----------------- + GT0_RXCHARISCOMMA_OUT => open, + GT0_RXCHARISK_OUT => rx_k_int, + GT0_RXDISPERR_OUT => rx_disp_err, + GT0_RXNOTINTABLE_OUT => rx_code_err, + ------------------------ Receive Ports - RX AFE Ports ---------------------- + GT0_GTPRXN_IN => pad_rxn_i, + GT0_GTPRXP_IN => pad_rxp_i, + -------------- Receive Ports - RX Byte and Word Alignment Ports ------------ + GT0_RXBYTEISALIGNED_OUT => rx_byte_is_aligned, + GT0_RXCOMMADET_OUT => rx_comma_det, + GT0_RXSLIDE_IN => rx_slide, + --------------------- Receive Ports - RX Equilizer Ports ------------------- + GT0_RXLPMHFHOLD_IN => '0', + GT0_RXLPMLFHOLD_IN => '0', + --------------- Receive Ports - RX Fabric Output Control Ports ------------- + GT0_RXOUTCLK_OUT => rx_rec_clk_bufin, + ------------- Receive Ports - RX Initialization and Reset Ports ------------ + GT0_GTRXRESET_IN => rx_reset, + -------------- Receive Ports -RX Initialization and Reset Ports ------------ + GT0_RXRESETDONE_OUT => rx_rst_done, + --------------------- TX Initialization and Reset Ports -------------------- + GT0_GTTXRESET_IN => pll_locked_n_i, + GT0_TXUSERRDY_IN => pll_locked_i, + ------------------ Transmit Ports - FPGA TX Interface Ports ---------------- + GT0_TXDATA_IN => tx_data_swapped, + GT0_TXUSRCLK_IN => tx_out_clk, + GT0_TXUSRCLK2_IN => tx_out_clk, + ------------------ Transmit Ports - TX 8B/10B Encoder Ports ---------------- + GT0_TXCHARISK_IN => tx_is_k_swapped, + --------------- Transmit Ports - TX Configurable Driver Ports -------------- + GT0_GTPTXN_OUT => pad_txn_o, + GT0_GTPTXP_OUT => pad_txp_o, + ----------- Transmit Ports - TX Fabric Clock Output Control Ports ---------- + GT0_TXOUTCLK_OUT => tx_out_clk_bufin, + GT0_TXOUTCLKFABRIC_OUT => open, + GT0_TXOUTCLKPCS_OUT => open, + ------------- Transmit Ports - TX Initialization and Reset Ports ----------- + GT0_TXRESETDONE_OUT => tx_rst_done, + ------------------ Transmit Ports - pattern Generator Ports ---------------- + GT0_TXPRBSSEL_IN => tx_prbs_sel_i, + + --____________________________COMMON PORTS________________________________ + ----------------- Common Block - GTPE2_COMMON Clocking Ports --------------- + GT0_GTREFCLK0_IN => clk_gtp_i, + -------------------------- Common Block - PLL Ports ------------------------ + GT0_PLL1LOCK_OUT => pll_locked_i, + GT0_PLL1LOCKDETCLK_IN => '0', + GT0_PLL1REFCLKLOST_OUT => open, + GT0_PLL1RESET_IN => ready_for_reset + ); + + U_Bitslide : gtp_bitslide + generic map ( + g_simulation => g_simulation, + g_target => ("artix7") + ) + port map ( + gtp_rst_i => rst_done_n, + gtp_rx_clk_i => rx_rec_clk, + gtp_rx_comma_det_i => rx_comma_det, + gtp_rx_byte_is_aligned_i => rx_byte_is_aligned, + serdes_ready_i => serdes_ready, + gtp_rx_slide_o => rx_slide, + gtp_rx_cdr_rst_o => forced_rx_reset, + bitslide_o => rx_bitslide_o, + synced_o => rx_synced + ); + + pll_locked_n_i <= not pll_locked_i; + serdes_ready <= not rx_lost_lock and pll_locked_i and tx_rst_done and rx_rst_done; + rst_done <= tx_rst_done and rx_rst_done; + rst_done_n <= not rst_done; + rx_reset <= pll_locked_n_i or forced_rx_reset; + rdy_o <= serdes_ready; + + p_gen_rx_outputs : process(rx_rec_clk, rst_done_n) + begin + if(rst_done_n = '1') then + rx_data_o <= (others => '0'); + rx_k_o <= (others => '0'); + rx_enc_err_o <= '0'; + elsif rising_edge(rx_rec_clk) then + if(serdes_ready = '1' and rx_synced = '1') then + rx_data_o <= rx_data_int(7 downto 0) & rx_data_int(15 downto 8); + rx_k_o <= rx_k_int(0) & rx_k_int(1); + rx_enc_err_o <= rx_disp_err(0) or rx_disp_err(1) or rx_code_err(0) or rx_code_err(1); + else + rx_data_o <= (others => '1'); + rx_k_o <= (others => '1'); + rx_enc_err_o <= '1'; + end if; + end if; + end process; + + p_gen_tx_disparity : process(tx_out_clk, rst_done_n) + begin + if rising_edge(tx_out_clk) then + if rst_done_n = '1' then + cur_disp <= RD_MINUS; + else + cur_disp <= f_next_8b10b_disparity16(cur_disp, tx_k_i, tx_data_i); + end if; + end if; + end process; + + tx_disparity_o <= to_std_logic(cur_disp); +end architecture structure ; -- of wr_gtp_phy_family7 + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtx/whiterabbit_gtxe2_channel_wrapper_gt.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtx/whiterabbit_gtxe2_channel_wrapper_gt.vhd new file mode 100644 index 000000000..dcf8eb32d --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtx/whiterabbit_gtxe2_channel_wrapper_gt.vhd @@ -0,0 +1,803 @@ +------------------------------------------------------------------------------- +-- ____ ____ +-- / /\/ / +-- /___/ \ / Vendor: Xilinx +-- \ \ \/ Version : 2.5 +-- \ \ Application : 7 Series FPGAs Transceivers Wizard +-- / / Filename : whiterabbit_gtxe2_channel_wrapper_gt.vhd +-- /___/ /\ +-- \ \ / \ +-- \___\/\___\ +-- +-- +-- Module whiterabbit_gtxe2_channel_wrapper_GT (a GT Wrapper) +-- Generated by Xilinx 7 Series FPGAs Transceivers Wizard +-- +-- +-- (c) Copyright 2010-2012 Xilinx, Inc. All rights reserved. +-- +-- This file contains confidential and proprietary information +-- of Xilinx, Inc. and is protected under U.S. and +-- international copyright and other intellectual property +-- laws. +-- +-- DISCLAIMER +-- This disclaimer is not a license and does not grant any +-- rights to the materials distributed herewith. Except as +-- otherwise provided in a valid license issued to you by +-- Xilinx, and to the maximum extent permitted by applicable +-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +-- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES +-- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +-- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +-- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +-- (2) Xilinx shall not be liable (whether in contract or tort, +-- including negligence, or under any other theory of +-- liability) for any loss or damage of any kind or nature +-- related to, arising under or in connection with these +-- materials, including for any direct, or any indirect, +-- special, incidental, or consequential loss or damage +-- (including loss of data, profits, goodwill, or any type of +-- loss or damage suffered as a result of any action brought +-- by a third party) even if such damage or loss was +-- reasonably foreseeable or Xilinx had been advised of the +-- possibility of the same. +-- +-- CRITICAL APPLICATIONS +-- Xilinx products are not designed or intended to be fail- +-- safe, or for use in any application requiring fail-safe +-- performance, such as life-support or safety devices or +-- systems, Class III medical devices, nuclear facilities, +-- applications related to the deployment of airbags, or any +-- other applications that could lead to death, personal +-- injury, or severe property or environmental damage +-- (individually and collectively, "Critical +-- Applications"). Customer assumes the sole risk and +-- liability of any use of Xilinx products in Critical +-- Applications, subject only to applicable laws and +-- regulations governing limitations on product liability. +-- +-- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +-- PART OF THIS FILE AT ALL TIMES. + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library UNISIM; +use UNISIM.VCOMPONENTS.ALL; + +--***************************** Entity Declaration **************************** + +entity whiterabbit_gtxe2_channel_wrapper_GT is +generic +( + -- Simulation attributes + GT_SIM_GTRESET_SPEEDUP : string := "FALSE"; -- Set to "true" to speed up sim reset + RX_DFE_KL_CFG2_IN : bit_vector := X"3010D90C"; + PMA_RSV_IN : bit_vector := x"00018480"; + PCS_RSVD_ATTR_IN : bit_vector := X"000000000000" +); +port +( + --------------------------------- CPLL Ports ------------------------------- + CPLLFBCLKLOST_OUT : out std_logic; + CPLLLOCK_OUT : out std_logic; + CPLLLOCKDETCLK_IN : in std_logic; + CPLLREFCLKLOST_OUT : out std_logic; + CPLLRESET_IN : in std_logic; + -------------------------- Channel - Clocking Ports ------------------------ + GTREFCLK0_IN : in std_logic; + ---------------------------- Channel - DRP Ports -------------------------- + DRPADDR_IN : in std_logic_vector(8 downto 0); + DRPCLK_IN : in std_logic; + DRPDI_IN : in std_logic_vector(15 downto 0); + DRPDO_OUT : out std_logic_vector(15 downto 0); + DRPEN_IN : in std_logic; + DRPRDY_OUT : out std_logic; + DRPWE_IN : in std_logic; + ------------------------------- Clocking Ports ----------------------------- + QPLLCLK_IN : in std_logic; + QPLLREFCLK_IN : in std_logic; + ------------------------------- Loopback Ports ----------------------------- + LOOPBACK_IN : in std_logic_vector(2 downto 0); + --------------------- RX Initialization and Reset Ports -------------------- + RXUSERRDY_IN : in std_logic; + -------------------------- RX Margin Analysis Ports ------------------------ + EYESCANDATAERROR_OUT : out std_logic; + ------------------------- Receive Ports - CDR Ports ------------------------ + RXCDRLOCK_OUT : out std_logic; + RXCDRRESET_IN : in std_logic; + ------------------ Receive Ports - FPGA RX Interface Ports ----------------- + RXUSRCLK_IN : in std_logic; + RXUSRCLK2_IN : in std_logic; + ------------------ Receive Ports - FPGA RX interface Ports ----------------- + RXDATA_OUT : out std_logic_vector(15 downto 0); + ------------------ Receive Ports - RX 8B/10B Decoder Ports ----------------- + RXDISPERR_OUT : out std_logic_vector(1 downto 0); + RXNOTINTABLE_OUT : out std_logic_vector(1 downto 0); + --------------------------- Receive Ports - RX AFE ------------------------- + GTXRXP_IN : in std_logic; + ------------------------ Receive Ports - RX AFE Ports ---------------------- + GTXRXN_IN : in std_logic; + -------------- Receive Ports - RX Byte and Word Alignment Ports ------------ + RXBYTEISALIGNED_OUT : out std_logic; + RXCOMMADET_OUT : out std_logic; + --------------------- Receive Ports - RX Equilizer Ports ------------------- + RXLPMHFHOLD_IN : in std_logic; + RXLPMLFHOLD_IN : in std_logic; + --------------- Receive Ports - RX Fabric Output Control Ports ------------- + RXOUTCLK_OUT : out std_logic; + ------------- Receive Ports - RX Initialization and Reset Ports ------------ + GTRXRESET_IN : in std_logic; + RXPMARESET_IN : in std_logic; + ---------------------- Receive Ports - RX gearbox ports -------------------- + RXSLIDE_IN : in std_logic; + ------------------- Receive Ports - RX8B/10B Decoder Ports ----------------- + RXCHARISK_OUT : out std_logic_vector(1 downto 0); + -------------- Receive Ports -RX Initialization and Reset Ports ------------ + RXRESETDONE_OUT : out std_logic; + --------------------- TX Initialization and Reset Ports -------------------- + GTTXRESET_IN : in std_logic; + TXUSERRDY_IN : in std_logic; + ------------------ Transmit Ports - FPGA TX Interface Ports ---------------- + TXUSRCLK_IN : in std_logic; + TXUSRCLK2_IN : in std_logic; + ------------------ Transmit Ports - TX Data Path interface ----------------- + TXDATA_IN : in std_logic_vector(15 downto 0); + ---------------- Transmit Ports - TX Driver and OOB signaling -------------- + GTXTXN_OUT : out std_logic; + GTXTXP_OUT : out std_logic; + ----------- Transmit Ports - TX Fabric Clock Output Control Ports ---------- + TXOUTCLK_OUT : out std_logic; + TXOUTCLKFABRIC_OUT : out std_logic; + TXOUTCLKPCS_OUT : out std_logic; + --------------------- Transmit Ports - TX Gearbox Ports -------------------- + TXCHARISK_IN : in std_logic_vector(1 downto 0); + ------------- Transmit Ports - TX Initialization and Reset Ports ----------- + TXRESETDONE_OUT : out std_logic; + ------------------ Transmit Ports - pattern Generator Ports ---------------- + TXPRBSSEL_IN : in std_logic_vector(2 downto 0) + +); + + +end whiterabbit_gtxe2_channel_wrapper_GT; + +architecture RTL of whiterabbit_gtxe2_channel_wrapper_GT is + +--**************************** Signal Declarations **************************** + + -- ground and tied_to_vcc_i signals + signal tied_to_ground_i : std_logic; + signal tied_to_ground_vec_i : std_logic_vector(63 downto 0); + signal tied_to_vcc_i : std_logic; + + + + -- RX Datapath signals + signal rxdata_i : std_logic_vector(63 downto 0); + signal rxchariscomma_float_i : std_logic_vector(5 downto 0); + signal rxcharisk_float_i : std_logic_vector(5 downto 0); + signal rxdisperr_float_i : std_logic_vector(5 downto 0); + signal rxnotintable_float_i : std_logic_vector(5 downto 0); + signal rxrundisp_float_i : std_logic_vector(5 downto 0); + + + + -- TX Datapath signals + signal txdata_i : std_logic_vector(63 downto 0); + signal txkerr_float_i : std_logic_vector(5 downto 0); + signal txrundisp_float_i : std_logic_vector(5 downto 0); + + +--******************************** Main Body of Code*************************** + +begin + + --------------------------- Static signal Assignments --------------------- + + tied_to_ground_i <= '0'; + tied_to_ground_vec_i(63 downto 0) <= (others => '0'); + tied_to_vcc_i <= '1'; + + ------------------- GT Datapath byte mapping ----------------- + + RXDATA_OUT <= rxdata_i(15 downto 0); + + txdata_i <= (tied_to_ground_vec_i(47 downto 0) & TXDATA_IN); + + + + ----------------------------- GTXE2 Instance -------------------------- + + gtxe2_i :GTXE2_CHANNEL + generic map + ( + + --_______________________ Simulation-Only Attributes ___________________ + + SIM_RECEIVER_DETECT_PASS => ("TRUE"), + SIM_RESET_SPEEDUP => (GT_SIM_GTRESET_SPEEDUP), + SIM_TX_EIDLE_DRIVE_LEVEL => ("X"), + SIM_CPLLREFCLK_SEL => ("001"), + SIM_VERSION => ("4.0"), + + + ------------------RX Byte and Word Alignment Attributes--------------- + ALIGN_COMMA_DOUBLE => ("FALSE"), + ALIGN_COMMA_ENABLE => ("0001111111"), + ALIGN_COMMA_WORD => (2), + ALIGN_MCOMMA_DET => ("TRUE"), + ALIGN_MCOMMA_VALUE => ("1010000011"), + ALIGN_PCOMMA_DET => ("TRUE"), + ALIGN_PCOMMA_VALUE => ("0101111100"), + SHOW_REALIGN_COMMA => ("FALSE"), + RXSLIDE_AUTO_WAIT => (7), + RXSLIDE_MODE => ("PCS"), + RX_SIG_VALID_DLY => (10), + + ------------------RX 8B/10B Decoder Attributes--------------- + RX_DISPERR_SEQ_MATCH => ("TRUE"), + DEC_MCOMMA_DETECT => ("TRUE"), + DEC_PCOMMA_DETECT => ("TRUE"), + DEC_VALID_COMMA_ONLY => ("TRUE"), + + ------------------------RX Clock Correction Attributes---------------------- + CBCC_DATA_SOURCE_SEL => ("DECODED"), + CLK_COR_SEQ_2_USE => ("FALSE"), + CLK_COR_KEEP_IDLE => ("FALSE"), + CLK_COR_MAX_LAT => (10), + CLK_COR_MIN_LAT => (8), + CLK_COR_PRECEDENCE => ("TRUE"), + CLK_COR_REPEAT_WAIT => (0), + CLK_COR_SEQ_LEN => (1), + CLK_COR_SEQ_1_ENABLE => ("1111"), + CLK_COR_SEQ_1_1 => ("0000000000"), + CLK_COR_SEQ_1_2 => ("0000000000"), + CLK_COR_SEQ_1_3 => ("0000000000"), + CLK_COR_SEQ_1_4 => ("0000000000"), + CLK_CORRECT_USE => ("FALSE"), + CLK_COR_SEQ_2_ENABLE => ("1111"), + CLK_COR_SEQ_2_1 => ("0000000000"), + CLK_COR_SEQ_2_2 => ("0000000000"), + CLK_COR_SEQ_2_3 => ("0000000000"), + CLK_COR_SEQ_2_4 => ("0000000000"), + + ------------------------RX Channel Bonding Attributes---------------------- + CHAN_BOND_KEEP_ALIGN => ("FALSE"), + CHAN_BOND_MAX_SKEW => (1), + CHAN_BOND_SEQ_LEN => (1), + CHAN_BOND_SEQ_1_1 => ("0000000000"), + CHAN_BOND_SEQ_1_2 => ("0000000000"), + CHAN_BOND_SEQ_1_3 => ("0000000000"), + CHAN_BOND_SEQ_1_4 => ("0000000000"), + CHAN_BOND_SEQ_1_ENABLE => ("1111"), + CHAN_BOND_SEQ_2_1 => ("0000000000"), + CHAN_BOND_SEQ_2_2 => ("0000000000"), + CHAN_BOND_SEQ_2_3 => ("0000000000"), + CHAN_BOND_SEQ_2_4 => ("0000000000"), + CHAN_BOND_SEQ_2_ENABLE => ("1111"), + CHAN_BOND_SEQ_2_USE => ("FALSE"), + FTS_DESKEW_SEQ_ENABLE => ("1111"), + FTS_LANE_DESKEW_CFG => ("1111"), + FTS_LANE_DESKEW_EN => ("FALSE"), + + ---------------------------RX Margin Analysis Attributes---------------------------- + ES_CONTROL => ("000000"), + ES_ERRDET_EN => ("FALSE"), + ES_EYE_SCAN_EN => ("TRUE"), + ES_HORZ_OFFSET => (x"000"), + ES_PMA_CFG => ("0000000000"), + ES_PRESCALE => ("00000"), + ES_QUALIFIER => (x"00000000000000000000"), + ES_QUAL_MASK => (x"00000000000000000000"), + ES_SDATA_MASK => (x"00000000000000000000"), + ES_VERT_OFFSET => ("000000000"), + + -------------------------FPGA RX Interface Attributes------------------------- + RX_DATA_WIDTH => (20), + + ---------------------------PMA Attributes---------------------------- + OUTREFCLK_SEL_INV => ("11"), + PMA_RSV => (PMA_RSV_IN), + PMA_RSV2 => (x"2040"), + PMA_RSV3 => ("00"), + PMA_RSV4 => (x"00000000"), + RX_BIAS_CFG => ("000000000100"), + DMONITOR_CFG => (x"000A00"), + RX_CM_SEL => ("00"), + RX_CM_TRIM => ("000"), + RX_DEBUG_CFG => ("000000000000"), + RX_OS_CFG => ("0000010000000"), + TERM_RCAL_CFG => ("10000"), + TERM_RCAL_OVRD => ('0'), + TST_RSV => (x"00000000"), + RX_CLK25_DIV => (5), + TX_CLK25_DIV => (5), + UCODEER_CLR => ('0'), + + ---------------------------PCI Express Attributes---------------------------- + PCS_PCIE_EN => ("FALSE"), + + ---------------------------PCS Attributes---------------------------- + PCS_RSVD_ATTR => (PCS_RSVD_ATTR_IN), + + -------------RX Buffer Attributes------------ + RXBUF_ADDR_MODE => ("FAST"), + RXBUF_EIDLE_HI_CNT => ("1000"), + RXBUF_EIDLE_LO_CNT => ("0000"), + RXBUF_EN => ("TRUE"), + RX_BUFFER_CFG => ("000000"), + RXBUF_RESET_ON_CB_CHANGE => ("TRUE"), + RXBUF_RESET_ON_COMMAALIGN => ("FALSE"), + RXBUF_RESET_ON_EIDLE => ("FALSE"), + RXBUF_RESET_ON_RATE_CHANGE => ("TRUE"), + RXBUFRESET_TIME => ("00001"), + RXBUF_THRESH_OVFLW => (61), + RXBUF_THRESH_OVRD => ("FALSE"), + RXBUF_THRESH_UNDFLW => (4), + RXDLY_CFG => (x"001F"), + RXDLY_LCFG => (x"030"), + RXDLY_TAP_CFG => (x"0000"), + RXPH_CFG => (x"000000"), + RXPHDLY_CFG => (x"084020"), + RXPH_MONITOR_SEL => ("00000"), + RX_XCLK_SEL => ("RXREC"), + RX_DDI_SEL => ("000000"), + RX_DEFER_RESET_BUF_EN => ("TRUE"), + + -----------------------CDR Attributes------------------------- + + --For GTX only: Display Port, HBR/RBR- set RXCDR_CFG=72'h0380008bff40200002 + + --For GTX only: Display Port, HBR2 - set RXCDR_CFG=72'h03000023ff10200020 + RXCDR_CFG => (x"03000023ff10100020"), + RXCDR_FR_RESET_ON_EIDLE => ('0'), + RXCDR_HOLD_DURING_EIDLE => ('0'), + RXCDR_PH_RESET_ON_EIDLE => ('0'), + RXCDR_LOCK_CFG => ("010101"), + + -------------------RX Initialization and Reset Attributes------------------- + RXCDRFREQRESET_TIME => ("00001"), + RXCDRPHRESET_TIME => ("00001"), + RXISCANRESET_TIME => ("00001"), + RXPCSRESET_TIME => ("00001"), + RXPMARESET_TIME => ("00011"), + + -------------------RX OOB Signaling Attributes------------------- + RXOOB_CFG => ("0000110"), + + -------------------------RX Gearbox Attributes--------------------------- + RXGEARBOX_EN => ("FALSE"), + GEARBOX_MODE => ("000"), + + -------------------------PRBS Detection Attribute----------------------- + RXPRBS_ERR_LOOPBACK => ('0'), + + -------------Power-Down Attributes---------- + PD_TRANS_TIME_FROM_P2 => (x"03c"), + PD_TRANS_TIME_NONE_P2 => (x"3c"), + PD_TRANS_TIME_TO_P2 => (x"64"), + + -------------RX OOB Signaling Attributes---------- + SAS_MAX_COM => (64), + SAS_MIN_COM => (36), + SATA_BURST_SEQ_LEN => ("1111"), + SATA_BURST_VAL => ("100"), + SATA_EIDLE_VAL => ("100"), + SATA_MAX_BURST => (8), + SATA_MAX_INIT => (21), + SATA_MAX_WAKE => (7), + SATA_MIN_BURST => (4), + SATA_MIN_INIT => (12), + SATA_MIN_WAKE => (4), + + -------------RX Fabric Clock Output Control Attributes---------- + TRANS_TIME_RATE => (x"0E"), + + --------------TX Buffer Attributes---------------- + TXBUF_EN => ("TRUE"), + TXBUF_RESET_ON_RATE_CHANGE => ("TRUE"), + TXDLY_CFG => (x"001F"), + TXDLY_LCFG => (x"030"), + TXDLY_TAP_CFG => (x"0000"), + TXPH_CFG => (x"0780"), + TXPHDLY_CFG => (x"084020"), + TXPH_MONITOR_SEL => ("00000"), + TX_XCLK_SEL => ("TXOUT"), + + -------------------------FPGA TX Interface Attributes------------------------- + TX_DATA_WIDTH => (20), + + -------------------------TX Configurable Driver Attributes------------------------- + TX_DEEMPH0 => ("00000"), + TX_DEEMPH1 => ("00000"), + TX_EIDLE_ASSERT_DELAY => ("110"), + TX_EIDLE_DEASSERT_DELAY => ("100"), + TX_LOOPBACK_DRIVE_HIZ => ("FALSE"), + TX_MAINCURSOR_SEL => ('0'), + TX_DRIVE_MODE => ("DIRECT"), + TX_MARGIN_FULL_0 => ("1001110"), + TX_MARGIN_FULL_1 => ("1001001"), + TX_MARGIN_FULL_2 => ("1000101"), + TX_MARGIN_FULL_3 => ("1000010"), + TX_MARGIN_FULL_4 => ("1000000"), + TX_MARGIN_LOW_0 => ("1000110"), + TX_MARGIN_LOW_1 => ("1000100"), + TX_MARGIN_LOW_2 => ("1000010"), + TX_MARGIN_LOW_3 => ("1000000"), + TX_MARGIN_LOW_4 => ("1000000"), + + -------------------------TX Gearbox Attributes-------------------------- + TXGEARBOX_EN => ("FALSE"), + + -------------------------TX Initialization and Reset Attributes-------------------------- + TXPCSRESET_TIME => ("00001"), + TXPMARESET_TIME => ("00001"), + + -------------------------TX Receiver Detection Attributes-------------------------- + TX_RXDETECT_CFG => (x"1832"), + TX_RXDETECT_REF => ("100"), + + ----------------------------CPLL Attributes---------------------------- + CPLL_CFG => (x"BC07DC"), + CPLL_FBDIV => (4), + CPLL_FBDIV_45 => (5), + CPLL_INIT_CFG => (x"00001E"), + CPLL_LOCK_CFG => (x"01E8"), + CPLL_REFCLK_DIV => (1), + RXOUT_DIV => (4), + TXOUT_DIV => (4), + SATA_CPLL_CFG => ("VCO_3000MHZ"), + + --------------RX Initialization and Reset Attributes------------- + RXDFELPMRESET_TIME => ("0001111"), + + --------------RX Equalizer Attributes------------- + RXLPM_HF_CFG => ("00000011110000"), + RXLPM_LF_CFG => ("00000011110000"), + RX_DFE_GAIN_CFG => (x"020FEA"), + RX_DFE_H2_CFG => ("000000000000"), + RX_DFE_H3_CFG => ("000001000000"), + RX_DFE_H4_CFG => ("00011110000"), + RX_DFE_H5_CFG => ("00011100000"), + RX_DFE_KL_CFG => ("0000011111110"), + RX_DFE_LPM_CFG => (x"0904"), + RX_DFE_LPM_HOLD_DURING_EIDLE => ('0'), + RX_DFE_UT_CFG => ("10001111000000000"), + RX_DFE_VP_CFG => ("00011111100000011"), + + -------------------------Power-Down Attributes------------------------- + RX_CLKMUX_PD => ('1'), + TX_CLKMUX_PD => ('1'), + + -------------------------FPGA RX Interface Attribute------------------------- + RX_INT_DATAWIDTH => (0), + + -------------------------FPGA TX Interface Attribute------------------------- + TX_INT_DATAWIDTH => (0), + + ------------------TX Configurable Driver Attributes--------------- + TX_QPI_STATUS_EN => ('0'), + + -------------------------RX Equalizer Attributes-------------------------- + RX_DFE_KL_CFG2 => (RX_DFE_KL_CFG2_IN), + RX_DFE_XYD_CFG => ("0000000000000"), + + -------------------------TX Configurable Driver Attributes-------------------------- + TX_PREDRIVER_MODE => ('0') + + + ) + port map + ( + --------------------------------- CPLL Ports ------------------------------- + CPLLFBCLKLOST => CPLLFBCLKLOST_OUT, + CPLLLOCK => CPLLLOCK_OUT, + CPLLLOCKDETCLK => CPLLLOCKDETCLK_IN, + CPLLLOCKEN => tied_to_vcc_i, + CPLLPD => tied_to_ground_i, + CPLLREFCLKLOST => CPLLREFCLKLOST_OUT, + CPLLREFCLKSEL => "001", + CPLLRESET => CPLLRESET_IN, + GTRSVD => "0000000000000000", + PCSRSVDIN => "0000000000000000", + PCSRSVDIN2 => "00000", + PMARSVDIN => "00000", + PMARSVDIN2 => "00000", + TSTIN => "11111111111111111111", + TSTOUT => open, + ---------------------------------- Channel --------------------------------- + CLKRSVD => "0000", + -------------------------- Channel - Clocking Ports ------------------------ + GTGREFCLK => tied_to_ground_i, + GTNORTHREFCLK0 => tied_to_ground_i, + GTNORTHREFCLK1 => tied_to_ground_i, + GTREFCLK0 => GTREFCLK0_IN, + GTREFCLK1 => tied_to_ground_i, + GTSOUTHREFCLK0 => tied_to_ground_i, + GTSOUTHREFCLK1 => tied_to_ground_i, + ---------------------------- Channel - DRP Ports -------------------------- + DRPADDR => DRPADDR_IN, + DRPCLK => DRPCLK_IN, + DRPDI => DRPDI_IN, + DRPDO => DRPDO_OUT, + DRPEN => DRPEN_IN, + DRPRDY => DRPRDY_OUT, + DRPWE => DRPWE_IN, + ------------------------------- Clocking Ports ----------------------------- + GTREFCLKMONITOR => open, + QPLLCLK => QPLLCLK_IN, + QPLLREFCLK => QPLLREFCLK_IN, + RXSYSCLKSEL => "00", + TXSYSCLKSEL => "00", + --------------------------- Digital Monitor Ports -------------------------- + DMONITOROUT => open, + ----------------- FPGA TX Interface Datapath Configuration ---------------- + TX8B10BEN => tied_to_vcc_i, + ------------------------------- Loopback Ports ----------------------------- + LOOPBACK => LOOPBACK_IN, + ----------------------------- PCI Express Ports ---------------------------- + PHYSTATUS => open, + RXRATE => tied_to_ground_vec_i(2 downto 0), + RXVALID => open, + ------------------------------ Power-Down Ports ---------------------------- + RXPD => "00", + TXPD => "00", + -------------------------- RX 8B/10B Decoder Ports ------------------------- + SETERRSTATUS => tied_to_ground_i, + --------------------- RX Initialization and Reset Ports -------------------- + EYESCANRESET => tied_to_ground_i, + RXUSERRDY => RXUSERRDY_IN, + -------------------------- RX Margin Analysis Ports ------------------------ + EYESCANDATAERROR => EYESCANDATAERROR_OUT, + EYESCANMODE => tied_to_ground_i, + EYESCANTRIGGER => tied_to_ground_i, + ------------------------- Receive Ports - CDR Ports ------------------------ + RXCDRFREQRESET => tied_to_ground_i, + RXCDRHOLD => tied_to_ground_i, + RXCDRLOCK => RXCDRLOCK_OUT, + RXCDROVRDEN => tied_to_ground_i, +-- RXCDRRESET => tied_to_ground_i, + RXCDRRESET => RXCDRRESET_IN, + RXCDRRESETRSV => tied_to_ground_i, + ------------------- Receive Ports - Clock Correction Ports ----------------- + RXCLKCORCNT => open, + ---------- Receive Ports - FPGA RX Interface Datapath Configuration -------- + RX8B10BEN => tied_to_vcc_i, + ------------------ Receive Ports - FPGA RX Interface Ports ----------------- + RXUSRCLK => RXUSRCLK_IN, + RXUSRCLK2 => RXUSRCLK2_IN, + ------------------ Receive Ports - FPGA RX interface Ports ----------------- + RXDATA => rxdata_i, + ------------------- Receive Ports - Pattern Checker Ports ------------------ + RXPRBSERR => open, + RXPRBSSEL => tied_to_ground_vec_i(2 downto 0), + ------------------- Receive Ports - Pattern Checker ports ------------------ + RXPRBSCNTRESET => tied_to_ground_i, + -------------------- Receive Ports - RX Equalizer Ports ------------------- + RXDFEXYDEN => tied_to_ground_i, + RXDFEXYDHOLD => tied_to_ground_i, + RXDFEXYDOVRDEN => tied_to_ground_i, + ------------------ Receive Ports - RX 8B/10B Decoder Ports ----------------- + RXDISPERR(7 downto 2) => rxdisperr_float_i, + RXDISPERR(1 downto 0) => RXDISPERR_OUT, + RXNOTINTABLE(7 downto 2) => rxnotintable_float_i, + RXNOTINTABLE(1 downto 0) => RXNOTINTABLE_OUT, + --------------------------- Receive Ports - RX AFE ------------------------- + GTXRXP => GTXRXP_IN, + ------------------------ Receive Ports - RX AFE Ports ---------------------- + GTXRXN => GTXRXN_IN, + ------------------- Receive Ports - RX Buffer Bypass Ports ----------------- + RXBUFRESET => tied_to_ground_i, + RXBUFSTATUS => open, + RXDDIEN => tied_to_ground_i, + RXDLYBYPASS => tied_to_vcc_i, + RXDLYEN => tied_to_ground_i, + RXDLYOVRDEN => tied_to_ground_i, + RXDLYSRESET => tied_to_ground_i, + RXDLYSRESETDONE => open, + RXPHALIGN => tied_to_ground_i, + RXPHALIGNDONE => open, + RXPHALIGNEN => tied_to_ground_i, + RXPHDLYPD => tied_to_ground_i, + RXPHDLYRESET => tied_to_ground_i, + RXPHMONITOR => open, + RXPHOVRDEN => tied_to_ground_i, + RXPHSLIPMONITOR => open, + RXSTATUS => open, + -------------- Receive Ports - RX Byte and Word Alignment Ports ------------ + RXBYTEISALIGNED => RXBYTEISALIGNED_OUT, + RXBYTEREALIGN => open, + RXCOMMADET => RXCOMMADET_OUT, + RXCOMMADETEN => tied_to_vcc_i, + RXMCOMMAALIGNEN => tied_to_ground_i, + RXPCOMMAALIGNEN => tied_to_ground_i, + ------------------ Receive Ports - RX Channel Bonding Ports ---------------- + RXCHANBONDSEQ => open, + RXCHBONDEN => tied_to_ground_i, + RXCHBONDLEVEL => tied_to_ground_vec_i(2 downto 0), + RXCHBONDMASTER => tied_to_ground_i, + RXCHBONDO => open, + RXCHBONDSLAVE => tied_to_ground_i, + ----------------- Receive Ports - RX Channel Bonding Ports ---------------- + RXCHANISALIGNED => open, + RXCHANREALIGN => open, + --------------------- Receive Ports - RX Equalizer Ports ------------------- + RXDFEAGCHOLD => tied_to_ground_i, + RXDFEAGCOVRDEN => tied_to_ground_i, + RXDFECM1EN => tied_to_ground_i, + RXDFELFHOLD => tied_to_ground_i, + RXDFELFOVRDEN => tied_to_ground_i, + RXDFELPMRESET => tied_to_ground_i, + RXDFETAP2HOLD => tied_to_ground_i, + RXDFETAP2OVRDEN => tied_to_ground_i, + RXDFETAP3HOLD => tied_to_ground_i, + RXDFETAP3OVRDEN => tied_to_ground_i, + RXDFETAP4HOLD => tied_to_ground_i, + RXDFETAP4OVRDEN => tied_to_ground_i, + RXDFETAP5HOLD => tied_to_ground_i, + RXDFETAP5OVRDEN => tied_to_ground_i, + RXDFEUTHOLD => tied_to_ground_i, + RXDFEUTOVRDEN => tied_to_ground_i, + RXDFEVPHOLD => tied_to_ground_i, + RXDFEVPOVRDEN => tied_to_ground_i, + RXDFEVSEN => tied_to_ground_i, + RXLPMLFKLOVRDEN => tied_to_ground_i, + RXMONITOROUT => open, + RXMONITORSEL => "00", + RXOSHOLD => tied_to_ground_i, + RXOSOVRDEN => tied_to_ground_i, + --------------------- Receive Ports - RX Equilizer Ports ------------------- + RXLPMHFHOLD => RXLPMHFHOLD_IN, + RXLPMHFOVRDEN => tied_to_ground_i, + RXLPMLFHOLD => RXLPMLFHOLD_IN, + ------------ Receive Ports - RX Fabric ClocK Output Control Ports ---------- + RXRATEDONE => open, + --------------- Receive Ports - RX Fabric Output Control Ports ------------- + RXOUTCLK => RXOUTCLK_OUT, + RXOUTCLKFABRIC => open, + RXOUTCLKPCS => open, + RXOUTCLKSEL => "010", + ---------------------- Receive Ports - RX Gearbox Ports -------------------- + RXDATAVALID => open, + RXHEADER => open, + RXHEADERVALID => open, + RXSTARTOFSEQ => open, + --------------------- Receive Ports - RX Gearbox Ports -------------------- + RXGEARBOXSLIP => tied_to_ground_i, + ------------- Receive Ports - RX Initialization and Reset Ports ------------ + GTRXRESET => GTRXRESET_IN, + RXOOBRESET => tied_to_ground_i, + RXPCSRESET => tied_to_ground_i, + RXPMARESET => RXPMARESET_IN, + ------------------ Receive Ports - RX Margin Analysis ports ---------------- + RXLPMEN => tied_to_vcc_i, + ------------------- Receive Ports - RX OOB Signaling ports ----------------- + RXCOMSASDET => open, + RXCOMWAKEDET => open, + ------------------ Receive Ports - RX OOB Signaling ports ----------------- + RXCOMINITDET => open, + ------------------ Receive Ports - RX OOB signalling Ports ----------------- + RXELECIDLE => open, + RXELECIDLEMODE => "11", + ----------------- Receive Ports - RX Polarity Control Ports ---------------- + RXPOLARITY => tied_to_ground_i, + ---------------------- Receive Ports - RX gearbox ports -------------------- + RXSLIDE => RXSLIDE_IN, + ------------------- Receive Ports - RX8B/10B Decoder Ports ----------------- + RXCHARISCOMMA => open, + RXCHARISK(7 downto 2) => rxcharisk_float_i, + RXCHARISK(1 downto 0) => RXCHARISK_OUT, + ------------------ Receive Ports - Rx Channel Bonding Ports ---------------- + RXCHBONDI => "00000", + -------------- Receive Ports -RX Initialization and Reset Ports ------------ + RXRESETDONE => RXRESETDONE_OUT, + -------------------------------- Rx AFE Ports ------------------------------ + RXQPIEN => tied_to_ground_i, + RXQPISENN => open, + RXQPISENP => open, + --------------------------- TX Buffer Bypass Ports ------------------------- + TXPHDLYTSTCLK => tied_to_ground_i, + ------------------------ TX Configurable Driver Ports ---------------------- + TXPOSTCURSOR => "00000", + TXPOSTCURSORINV => tied_to_ground_i, + TXPRECURSOR => tied_to_ground_vec_i(4 downto 0), + TXPRECURSORINV => tied_to_ground_i, + TXQPIBIASEN => tied_to_ground_i, + TXQPISTRONGPDOWN => tied_to_ground_i, + TXQPIWEAKPUP => tied_to_ground_i, + --------------------- TX Initialization and Reset Ports -------------------- + CFGRESET => tied_to_ground_i, + GTTXRESET => GTTXRESET_IN, + PCSRSVDOUT => open, + TXUSERRDY => TXUSERRDY_IN, + ---------------------- Transceiver Reset Mode Operation -------------------- + GTRESETSEL => tied_to_ground_i, + RESETOVRD => tied_to_ground_i, + ---------------- Transmit Ports - 8b10b Encoder Control Ports -------------- + TXCHARDISPMODE => tied_to_ground_vec_i(7 downto 0), + TXCHARDISPVAL => tied_to_ground_vec_i(7 downto 0), + ------------------ Transmit Ports - FPGA TX Interface Ports ---------------- + TXUSRCLK => TXUSRCLK_IN, + TXUSRCLK2 => TXUSRCLK2_IN, + --------------------- Transmit Ports - PCI Express Ports ------------------- + TXELECIDLE => tied_to_ground_i, + TXMARGIN => tied_to_ground_vec_i(2 downto 0), + TXRATE => tied_to_ground_vec_i(2 downto 0), + TXSWING => tied_to_ground_i, + ------------------ Transmit Ports - Pattern Generator Ports ---------------- + TXPRBSFORCEERR => tied_to_ground_i, + ------------------ Transmit Ports - TX Buffer Bypass Ports ----------------- + TXDLYBYPASS => tied_to_vcc_i, + TXDLYEN => tied_to_ground_i, + TXDLYHOLD => tied_to_ground_i, + TXDLYOVRDEN => tied_to_ground_i, + TXDLYSRESET => tied_to_ground_i, + TXDLYSRESETDONE => open, + TXDLYUPDOWN => tied_to_ground_i, + TXPHALIGN => tied_to_ground_i, + TXPHALIGNDONE => open, + TXPHALIGNEN => tied_to_ground_i, + TXPHDLYPD => tied_to_ground_i, + TXPHDLYRESET => tied_to_ground_i, + TXPHINIT => tied_to_ground_i, + TXPHINITDONE => open, + TXPHOVRDEN => tied_to_ground_i, + ---------------------- Transmit Ports - TX Buffer Ports -------------------- + TXBUFSTATUS => open, + --------------- Transmit Ports - TX Configurable Driver Ports -------------- + TXBUFDIFFCTRL => "100", + TXDEEMPH => tied_to_ground_i, + TXDIFFCTRL => "1000", + TXDIFFPD => tied_to_ground_i, + TXINHIBIT => tied_to_ground_i, + TXMAINCURSOR => "0000000", + TXPISOPD => tied_to_ground_i, + ------------------ Transmit Ports - TX Data Path interface ----------------- + TXDATA => txdata_i, + ---------------- Transmit Ports - TX Driver and OOB signaling -------------- + GTXTXN => GTXTXN_OUT, + GTXTXP => GTXTXP_OUT, + ----------- Transmit Ports - TX Fabric Clock Output Control Ports ---------- + TXOUTCLK => TXOUTCLK_OUT, + TXOUTCLKFABRIC => TXOUTCLKFABRIC_OUT, + TXOUTCLKPCS => TXOUTCLKPCS_OUT, + TXOUTCLKSEL => "010", + TXRATEDONE => open, + --------------------- Transmit Ports - TX Gearbox Ports -------------------- + TXCHARISK(7 downto 2) => tied_to_ground_vec_i(5 downto 0), + TXCHARISK(1 downto 0) => TXCHARISK_IN, + TXGEARBOXREADY => open, + TXHEADER => tied_to_ground_vec_i(2 downto 0), + TXSEQUENCE => tied_to_ground_vec_i(6 downto 0), + TXSTARTSEQ => tied_to_ground_i, + ------------- Transmit Ports - TX Initialization and Reset Ports ----------- + TXPCSRESET => tied_to_ground_i, + TXPMARESET => tied_to_ground_i, + TXRESETDONE => TXRESETDONE_OUT, + ------------------ Transmit Ports - TX OOB signalling Ports ---------------- + TXCOMFINISH => open, + TXCOMINIT => tied_to_ground_i, + TXCOMSAS => tied_to_ground_i, + TXCOMWAKE => tied_to_ground_i, + TXPDELECIDLEMODE => tied_to_ground_i, + ----------------- Transmit Ports - TX Polarity Control Ports --------------- + TXPOLARITY => tied_to_ground_i, + --------------- Transmit Ports - TX Receiver Detection Ports -------------- + TXDETECTRX => tied_to_ground_i, + ------------------ Transmit Ports - TX8b/10b Encoder Ports ----------------- + TX8B10BBYPASS => tied_to_ground_vec_i(7 downto 0), + ------------------ Transmit Ports - pattern Generator Ports ---------------- + TXPRBSSEL => TXPRBSSEL_IN, + ----------------------- Tx Configurable Driver Ports ---------------------- + TXQPISENN => open, + TXQPISENP => open + + ); + + end RTL; + + + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtx/wr_gtx_phy_family7.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtx/wr_gtx_phy_family7.vhd new file mode 100644 index 000000000..bc1249fa1 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtx/wr_gtx_phy_family7.vhd @@ -0,0 +1,505 @@ +------------------------------------------------------------------------------- +-- Title : Deterministic Xilinx GTX wrapper - kintex-7 top module +-- Project : White Rabbit Switch +------------------------------------------------------------------------------- +-- File : wr_gtx_phy_family7.vhd +-- Author : Peter Jansweijer, Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2013-04-08 +-- Last update: 2013-04-08 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Dual channel wrapper for Xilinx Kintex-7 GTX adapted for +-- deterministic delays at 1.25 Gbps. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2010 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2013-04-08 0.1 PeterJ Initial release based on "wr_gtx_phy_virtex6.vhd" +-- 2013-08-19 0.2 PeterJ Implemented a small delay before a rx_cdr_lock is propgated +-- 2014-02_19 0.3 Peterj Added tx_locked_o to indicate that the cpll reached the lock status +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.gencores_pkg.all; + +library unisim; +use unisim.vcomponents.all; + +library work; +--use work.gencores_pkg.all; +use work.disparity_gen_pkg.all; + +entity wr_gtx_phy_family7 is + + generic ( + -- set to non-zero value to speed up the simulation by reducing some delays + g_simulation : integer := 0 + ); + + port ( + -- Dedicated reference 125 MHz clock for the GTX transceiver + clk_gtx_i : in std_logic; + + -- TX path, synchronous to tx_out_clk_o (62.5 MHz): + tx_out_clk_o : out std_logic; + tx_locked_o : out std_logic; + + -- data input (8 bits, not 8b10b-encoded) + tx_data_i : in std_logic_vector(15 downto 0); + + -- 1 when tx_data_i contains a control code, 0 when it's a data byte + tx_k_i : in std_logic_vector(1 downto 0); + + -- disparity of the currently transmitted 8b10b code (1 = plus, 0 = minus). + -- Necessary for the PCS to generate proper frame termination sequences. + -- Generated for the 2nd byte (LSB) of tx_data_i. + tx_disparity_o : out std_logic; + + -- Encoding error indication (1 = error, 0 = no error) + tx_enc_err_o : out std_logic; + + -- RX path, synchronous to ch0_rx_rbclk_o. + + -- RX recovered clock + rx_rbclk_o : out std_logic; + + -- 8b10b-decoded data output. The data output must be kept invalid before + -- the transceiver is locked on the incoming signal to prevent the EP from + -- detecting a false carrier. + rx_data_o : out std_logic_vector(15 downto 0); + + -- 1 when the byte on rx_data_o is a control code + rx_k_o : out std_logic_vector(1 downto 0); + + -- encoding error indication + rx_enc_err_o : out std_logic; + + -- RX bitslide indication, indicating the delay of the RX path of the + -- transceiver (in UIs). Must be valid when ch0_rx_data_o is valid. + rx_bitslide_o : out std_logic_vector(4 downto 0); + + -- reset input, active hi + rst_i : in std_logic; + loopen_i : in std_logic_vector(2 downto 0); + tx_prbs_sel_i : in std_logic_vector(2 downto 0); + pad_txn_o : out std_logic; + pad_txp_o : out std_logic; + + pad_rxn_i : in std_logic := '0'; + pad_rxp_i : in std_logic := '0'; + + rdy_o : out std_logic); +end wr_gtx_phy_family7; + +architecture rtl of wr_gtx_phy_family7 is + + component WHITERABBIT_GTXE2_CHANNEL_WRAPPER_GT is + generic + ( + -- Simulation attributes + GT_SIM_GTRESET_SPEEDUP : string := "TRUE"; -- Set to "TRUE" to speed up sim reset (Need Capital Letters!) + RX_DFE_KL_CFG2_IN : bit_vector := X"3010D90C"; + PMA_RSV_IN : bit_vector := X"00018480"; + PCS_RSVD_ATTR_IN : bit_vector := X"000000000000" + ); + port + ( + --------------------------------- CPLL Ports ------------------------------- + CPLLFBCLKLOST_OUT : out std_logic; + CPLLLOCK_OUT : out std_logic; + CPLLLOCKDETCLK_IN : in std_logic; + CPLLREFCLKLOST_OUT : out std_logic; + CPLLRESET_IN : in std_logic; + -------------------------- Channel - Clocking Ports ------------------------ + GTREFCLK0_IN : in std_logic; + ---------------------------- Channel - DRP Ports -------------------------- + DRPADDR_IN : in std_logic_vector(8 downto 0); + DRPCLK_IN : in std_logic; + DRPDI_IN : in std_logic_vector(15 downto 0); + DRPDO_OUT : out std_logic_vector(15 downto 0); + DRPEN_IN : in std_logic; + DRPRDY_OUT : out std_logic; + DRPWE_IN : in std_logic; + ------------------------------- Clocking Ports ----------------------------- + QPLLCLK_IN : in std_logic; + QPLLREFCLK_IN : in std_logic; + ------------------------------- Loopback Ports ----------------------------- + LOOPBACK_IN : in std_logic_vector(2 downto 0); + --------------------- RX Initialization and Reset Ports -------------------- + RXUSERRDY_IN : in std_logic; + -------------------------- RX Margin Analysis Ports ------------------------ + EYESCANDATAERROR_OUT : out std_logic; + ------------------------- Receive Ports - CDR Ports ------------------------ + RXCDRLOCK_OUT : out std_logic; + RXCDRRESET_IN : in std_logic; + ------------------ Receive Ports - FPGA RX Interface Ports ----------------- + RXUSRCLK_IN : in std_logic; + RXUSRCLK2_IN : in std_logic; + ------------------ Receive Ports - FPGA RX interface Ports ----------------- + RXDATA_OUT : out std_logic_vector(15 downto 0); + ------------------ Receive Ports - RX 8B/10B Decoder Ports ----------------- + RXDISPERR_OUT : out std_logic_vector(1 downto 0); + RXNOTINTABLE_OUT : out std_logic_vector(1 downto 0); + --------------------------- Receive Ports - RX AFE ------------------------- + GTXRXP_IN : in std_logic; + ------------------------ Receive Ports - RX AFE Ports ---------------------- + GTXRXN_IN : in std_logic; + -------------- Receive Ports - RX Byte and Word Alignment Ports ------------ + RXBYTEISALIGNED_OUT : out std_logic; + RXCOMMADET_OUT : out std_logic; + --------------------- Receive Ports - RX Equilizer Ports ------------------- + RXLPMHFHOLD_IN : in std_logic; + RXLPMLFHOLD_IN : in std_logic; + --------------- Receive Ports - RX Fabric Output Control Ports ------------- + RXOUTCLK_OUT : out std_logic; + ------------- Receive Ports - RX Initialization and Reset Ports ------------ + GTRXRESET_IN : in std_logic; + RXPMARESET_IN : in std_logic; + ---------------------- Receive Ports - RX gearbox ports -------------------- + RXSLIDE_IN : in std_logic; + ------------------- Receive Ports - RX8B/10B Decoder Ports ----------------- + RXCHARISK_OUT : out std_logic_vector(1 downto 0); + -------------- Receive Ports -RX Initialization and Reset Ports ------------ + RXRESETDONE_OUT : out std_logic; + --------------------- TX Initialization and Reset Ports -------------------- + GTTXRESET_IN : in std_logic; + TXUSERRDY_IN : in std_logic; + ------------------ Transmit Ports - FPGA TX Interface Ports ---------------- + TXUSRCLK_IN : in std_logic; + TXUSRCLK2_IN : in std_logic; + ------------------ Transmit Ports - TX Data Path interface ----------------- + TXDATA_IN : in std_logic_vector(15 downto 0); + ---------------- Transmit Ports - TX Driver and OOB signaling -------------- + GTXTXN_OUT : out std_logic; + GTXTXP_OUT : out std_logic; + ----------- Transmit Ports - TX Fabric Clock Output Control Ports ---------- + TXOUTCLK_OUT : out std_logic; + TXOUTCLKFABRIC_OUT : out std_logic; + TXOUTCLKPCS_OUT : out std_logic; + --------------------- Transmit Ports - TX Gearbox Ports -------------------- + TXCHARISK_IN : in std_logic_vector(1 downto 0); + ------------- Transmit Ports - TX Initialization and Reset Ports ----------- + TXRESETDONE_OUT : out std_logic; + ------------------ Transmit Ports - pattern Generator Ports ---------------- + TXPRBSSEL_IN : in std_logic_vector(2 downto 0) + ); + end component WHITERABBIT_GTXE2_CHANNEL_WRAPPER_GT; + + component BUFG + port ( + O : out std_ulogic; + I : in std_ulogic); + end component; + + component gtp_bitslide + generic ( + g_simulation : integer; + g_target : string := "virtex6"); + port ( + gtp_rst_i : in std_logic; + gtp_rx_clk_i : in std_logic; + gtp_rx_comma_det_i : in std_logic; + gtp_rx_byte_is_aligned_i : in std_logic; + serdes_ready_i : in std_logic; + gtp_rx_slide_o : out std_logic; + gtp_rx_cdr_rst_o : out std_logic; + bitslide_o : out std_logic_vector(4 downto 0); + synced_o : out std_logic); + end component; + + constant c_rxcdrlock_max : integer := 3; + constant c_reset_cnt_max : integer := 64; -- Reset pulse width 64 * 8 = 512 ns + + signal rst_synced : std_logic; + signal rst_int : std_logic; +-- signal trig0, trig1, trig2, trig3 : std_logic_vector(31 downto 0); + + signal rx_rec_clk_bufin : std_logic; + signal rx_rec_clk : std_logic; + signal tx_out_clk_bufin : std_logic; + signal tx_out_clk : std_logic; + signal rx_cdr_lock : std_logic; + signal rx_cdr_lock_filtered : std_logic; + + signal tx_rst_done, rx_rst_done : std_logic; + signal txpll_lockdet, rxpll_lockdet : std_logic; + signal pll_lockdet : std_logic; + signal cpll_lockdet : std_logic; + signal gtreset : std_logic; + + signal rx_comma_det : std_logic; + signal rx_byte_is_aligned : std_logic; + + signal everything_ready : std_logic; + signal rx_slide : std_logic; + signal rx_cdr_rst : std_logic; + signal rx_synced : std_logic; + signal rst_done : std_logic; + signal rst_done_n : std_logic; + + signal rx_k_int : std_logic_vector(1 downto 0); + signal rx_data_int : std_logic_vector(15 downto 0); + + signal rx_disp_err, rx_code_err : std_logic_vector(1 downto 0); + + signal tx_is_k_swapped : std_logic_vector(1 downto 0); + signal tx_data_swapped : std_logic_vector(15 downto 0); + + signal cur_disp : t_8b10b_disparity; + +begin -- rtl + + -- There is a hen and egg problem with the reset in wr_core. Some reset signals are + -- synchronized by rx_rbclk_o but this signal is de-asserted by the same reset. + -- Therefore the rst_i is made edge sensitive and an internal reset pulse is generated for the PHY. + -- After this reset pulse signal rx_rbclk_o starts clocking again and the (still asserted) system + -- wide reset signal can by synchronized with this clock. + + -- Note that the rst_i originates from the clk_sys domain. Synchronisation is not needed + -- when the clk_sys is phase locked with clk_gtx_i (which is usually the case) but is a safety + -- measure. Add a false path for U_EdgeDet_rst_i_reg_sync0 to the timing constraints. + U_EdgeDet_rst_i : gc_sync_ffs port map ( + clk_i => clk_gtx_i, + rst_n_i => '1', + data_i => rst_i, + ppulse_o => rst_synced); + + p_reset_pulse : process(clk_gtx_i, rst_synced) + variable reset_cnt : integer range 0 to c_reset_cnt_max; + begin + if(rst_synced = '1') then + reset_cnt := 0; + rst_int <= '1'; + elsif rising_edge(clk_gtx_i) then + if reset_cnt /= c_reset_cnt_max then + reset_cnt := reset_cnt + 1; + rst_int <= '1'; + else + rst_int <= '0'; + end if; + end if; + end process; + + tx_enc_err_o <= '0'; + + U_BUF_TxOutClk : BUFG + port map ( + I => tx_out_clk_bufin, + O => tx_out_clk); + + tx_out_clk_o <= tx_out_clk; + tx_locked_o <= cpll_lockdet; + + U_BUF_RxRecClk : BUFG + port map ( + I => rx_rec_clk_bufin, + O => rx_rec_clk); + + rx_rbclk_o <= rx_rec_clk; + + tx_is_k_swapped <= tx_k_i(0) & tx_k_i(1); + tx_data_swapped <= tx_data_i(7 downto 0) & tx_data_i(15 downto 8); + +U_GTX_INST : WHITERABBIT_GTXE2_CHANNEL_WRAPPER_GT + generic map + ( + -- Simulation attributes + GT_SIM_GTRESET_SPEEDUP => "TRUE" -- Set to "true" to speed up sim reset + ) + port map + ( + --------------------------------- CPLL Ports ------------------------------- + CPLLFBCLKLOST_OUT => open, + CPLLLOCK_OUT => cpll_lockdet, + CPLLLOCKDETCLK_IN => '0', + CPLLREFCLKLOST_OUT => open, + CPLLRESET_IN => rst_int, + -------------------------- Channel - Clocking Ports ------------------------ + GTREFCLK0_IN => clk_gtx_i, + ---------------------------- Channel - DRP Ports -------------------------- + DRPADDR_IN => (Others => '0'), + DRPCLK_IN => '0', + DRPDI_IN => (Others => '0'), + DRPDO_OUT => open, + DRPEN_IN => '0', + DRPRDY_OUT => open, + DRPWE_IN => '0', + ------------------------------- Clocking Ports ----------------------------- + QPLLCLK_IN => '0', + QPLLREFCLK_IN => '0', + ------------------------------- Loopback Ports ----------------------------- + LOOPBACK_IN => loopen_i, + --------------------- RX Initialization and Reset Ports -------------------- +-- RXUSERRDY_IN => rx_cdr_lock, + RXUSERRDY_IN => rx_cdr_lock_filtered, + -------------------------- RX Margin Analysis Ports ------------------------ + EYESCANDATAERROR_OUT => open, + ------------------------- Receive Ports - CDR Ports ------------------------ + RXCDRLOCK_OUT => rx_cdr_lock, + RXCDRRESET_IN => rx_cdr_rst, -- this port cannot be generated by the CoreGen GUI, it cannot be turnes "on" : in std_logic; + ------------------ Receive Ports - FPGA RX Interface Ports ----------------- + RXUSRCLK_IN => rx_rec_clk, + RXUSRCLK2_IN => rx_rec_clk, + ------------------ Receive Ports - FPGA RX interface Ports ----------------- + RXDATA_OUT => rx_data_int, + ------------------ Receive Ports - RX 8B/10B Decoder Ports ----------------- + RXDISPERR_OUT => rx_disp_err, + RXNOTINTABLE_OUT => rx_code_err, + --------------------------- Receive Ports - RX AFE ------------------------- + GTXRXP_IN => pad_rxp_i, + ------------------------ Receive Ports - RX AFE Ports ---------------------- + GTXRXN_IN => pad_rxn_i, + -------------- Receive Ports - RX Byte and Word Alignment Ports ------------ + RXBYTEISALIGNED_OUT => rx_byte_is_aligned, + RXCOMMADET_OUT => rx_comma_det, + --------------------- Receive Ports - RX Equilizer Ports ------------------- + RXLPMHFHOLD_IN => '0', -- this port is always generated by the CoreGen GUI and cannot be turned "off" + RXLPMLFHOLD_IN => '0', -- this port is always generated by the CoreGen GUI and cannot be turned "off" + --------------- Receive Ports - RX Fabric Output Control Ports ------------- + RXOUTCLK_OUT => rx_rec_clk_bufin, + ------------- Receive Ports - RX Initialization and Reset Ports ------------ + GTRXRESET_IN => gtreset, + RXPMARESET_IN => '0', + ---------------------- Receive Ports - RX gearbox ports -------------------- + RXSLIDE_IN => rx_slide, + ------------------- Receive Ports - RX8B/10B Decoder Ports ----------------- + RXCHARISK_OUT => rx_k_int, + -------------- Receive Ports -RX Initialization and Reset Ports ------------ + RXRESETDONE_OUT => rx_rst_done, + --------------------- TX Initialization and Reset Ports -------------------- + GTTXRESET_IN => gtreset, + TXUSERRDY_IN => cpll_lockdet, + ------------------ Transmit Ports - FPGA TX Interface Ports ---------------- + TXUSRCLK_IN => tx_out_clk, + TXUSRCLK2_IN => tx_out_clk, + ------------------ Transmit Ports - TX Data Path interface ----------------- + TXDATA_IN => tx_data_swapped, +-- TXDATA_IN => tx_data_i, + ---------------- Transmit Ports - TX Driver and OOB signaling -------------- + GTXTXN_OUT => pad_txn_o, + GTXTXP_OUT => pad_txp_o, + ----------- Transmit Ports - TX Fabric Clock Output Control Ports ---------- + TXOUTCLK_OUT => tx_out_clk_bufin, + TXOUTCLKFABRIC_OUT => open, + TXOUTCLKPCS_OUT => open, + --------------------- Transmit Ports - TX Gearbox Ports -------------------- + TXCHARISK_IN => tx_is_k_swapped, +-- TXCHARISK_IN => tx_k_i, + ------------- Transmit Ports - TX Initialization and Reset Ports ----------- + TXRESETDONE_OUT => tx_rst_done, + ------------------ Transmit Ports - pattern Generator Ports ---------------- + TXPRBSSEL_IN => tx_prbs_sel_i + ); + + U_Bitslide : gtp_bitslide + generic map ( + g_simulation => g_simulation, + g_target => "kintex7") + port map ( + gtp_rst_i => rst_done_n, + gtp_rx_clk_i => rx_rec_clk, + gtp_rx_comma_det_i => rx_comma_det, + gtp_rx_byte_is_aligned_i => rx_byte_is_aligned, + serdes_ready_i => everything_ready, + gtp_rx_slide_o => rx_slide, + gtp_rx_cdr_rst_o => rx_cdr_rst, + bitslide_o => rx_bitslide_o, + synced_o => rx_synced); + + txpll_lockdet <= cpll_lockdet; +-- rxpll_lockdet <= rx_cdr_lock; + rxpll_lockdet <= rx_cdr_lock_filtered; + gtreset <= not cpll_lockdet; + rst_done <= rx_rst_done and tx_rst_done; + rst_done_n <= not rst_done; + pll_lockdet <= txpll_lockdet and rxpll_lockdet; + everything_ready <= rst_done and pll_lockdet; + rdy_o <= everything_ready; + +-- trig2(3) <= rx_rst_done; +-- trig2(4) <= tx_rst_done; +-- trig2(5) <= txpll_lockdet; +-- trig2(6) <= rxpll_lockdet; +-- trig2(7) <= '1'; + + -- 2013 August 19: Peterj + -- The family 7 GTX seem to have an artifact in rx_cdr_lock. For no reason lock may be lost for a clock cycle + -- There is not much information on the web but examples of "Series-7 Integrated Block for PCI Express" (pipe_user.v) + -- show that Xilinx itself implements a small delay before an rx_cdr_lock is propagated. + p_rx_cdr_lock_filter : process(rx_rec_clk, rst_int) + variable rxcdrlock_cnt : integer range 0 to c_rxcdrlock_max; + begin + if(rst_int = '1') then + rxcdrlock_cnt := 0; + rx_cdr_lock_filtered <= '0'; + elsif rising_edge(rx_rec_clk) then + if rx_cdr_lock = '0' then + if rxcdrlock_cnt /= c_rxcdrlock_max then + rxcdrlock_cnt := rxcdrlock_cnt + 1; + else + rx_cdr_lock_filtered <= '0'; + end if; + else + rxcdrlock_cnt := 0; + rx_cdr_lock_filtered <= '1'; + end if; + end if; + end process; + + p_gen_rx_outputs : process(rx_rec_clk, rst_done_n) + begin + if(rst_done_n = '1') then + rx_data_o <= (others => '0'); + rx_k_o <= (others => '0'); + rx_enc_err_o <= '0'; + elsif rising_edge(rx_rec_clk) then + if(everything_ready = '1' and rx_synced = '1') then + rx_data_o <= rx_data_int(7 downto 0) & rx_data_int(15 downto 8); + rx_k_o <= rx_k_int(0) & rx_k_int(1); + rx_enc_err_o <= rx_disp_err(0) or rx_disp_err(1) or rx_code_err(0) or rx_code_err(1); + else + rx_data_o <= (others => '1'); + rx_k_o <= (others => '1'); + rx_enc_err_o <= '1'; + end if; + end if; + end process; + + p_gen_tx_disparity : process(tx_out_clk, rst_done_n) + begin + if rising_edge(tx_out_clk) then + if rst_done_n = '1' then + cur_disp <= RD_MINUS; + else + cur_disp <= f_next_8b10b_disparity16(cur_disp, tx_k_i, tx_data_i); + end if; + end if; + end process; + + tx_disparity_o <= to_std_logic(cur_disp); +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/gtp_bitslide.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/gtp_bitslide.vhd new file mode 100644 index 000000000..07ca69aa5 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/gtp_bitslide.vhd @@ -0,0 +1,230 @@ +------------------------------------------------------------------------------- +-- Title : Deterministic Xilinx GTP wrapper - bitslide state machine +-- Project : White Rabbit Switch +------------------------------------------------------------------------------- +-- File : gtp_bitslide.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2010-11-18 +-- Last update: 2013-12-20 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Module implements a manual bitslide alignment state machine and +-- provides the obtained bitslide value to the MAC. +------------------------------------------------------------------------------- +-- +-- Original EASE design (c) 2010 NIKHEF / Peter Jansweijer and Henk Peek +-- VHDL port (c) 2010 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2010-11-18 0.4 twlostow Ported EASE design to VHDL +-- 2011-02-07 0.5 twlostow Verified on Spartan6 GTP +-- 2011-09-12 0.6 twlostow Virtex6 port +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity gtp_bitslide is + + generic ( +-- set to non-zero value to enable some simulation speedups (reduce delays) + g_simulation : integer; + g_target : string := "spartan6"); + + port ( + gtp_rst_i : in std_logic; + +-- GTP + gtp_rx_clk_i : in std_logic; + +-- '1' indicates that the GTP has detected a comma in the incoming serial stream + gtp_rx_comma_det_i : in std_logic; + + + gtp_rx_byte_is_aligned_i : in std_logic; + +-- GTP ready flag (PLL locked and RX signal present) + serdes_ready_i : in std_logic; + +-- GTP manual bitslip control line + gtp_rx_slide_o : out std_logic; + +-- GTP CDR reset, asserted when the link is lost to set the bitslide to a known +-- value + gtp_rx_cdr_rst_o : out std_logic; + +-- Current bitslide, in UIs + bitslide_o : out std_logic_vector(4 downto 0); + +-- '1' when the bitsliding has been completed and the link is up + synced_o : out std_logic + ); + +end gtp_bitslide; + + +architecture behavioral of gtp_bitslide is + + + + function f_eval_sync_detect_threshold + return integer is + begin + if(g_simulation /= 0) then + return 256; + else + return 4000000; + end if; + end f_eval_sync_detect_threshold; + + function f_eval_pause_tics return integer is + begin + if(g_target = "spartan6") then + return 31; + else + return 63; + end if; + end f_eval_pause_tics; + + function f_max_bts return integer is + begin + if(g_target = "spartan6") then + return 10; + else + return 20; + end if; + end f_max_bts; + + constant c_pause_tics : integer := f_eval_pause_tics; + constant c_sync_detect_threshold : integer := f_eval_sync_detect_threshold; + constant c_max_bts : integer := f_max_bts; + + + type t_bitslide_fsm_state is (S_SYNC_LOST, S_STABILIZE, S_SLIDE, S_PAUSE, S_GOT_SYNC, S_RESET_CDR); + signal cur_slide : unsigned(4 downto 0); + signal state : t_bitslide_fsm_state; + signal counter : unsigned(23 downto 0); + + signal commas_missed : unsigned(4 downto 0); + +begin -- behavioral + + p_do_slide : process(gtp_rx_clk_i, gtp_rst_i) + begin + if gtp_rst_i = '1' then + state <= S_SYNC_LOST; + gtp_rx_slide_o <= '0'; + counter <= (others => '0'); + synced_o <= '0'; + gtp_rx_cdr_rst_o <= '0'; + elsif rising_edge(gtp_rx_clk_i) then + + if(serdes_ready_i = '0') then + state <= S_SYNC_LOST; + end if; + + case state is + +-- State: synchronization lost. Waits until a comma pattern is detected + when S_SYNC_LOST => + cur_slide <= (others => '0'); + counter <= (others => '0'); + gtp_rx_slide_o <= '0'; + synced_o <= '0'; + gtp_rx_cdr_rst_o <= '0'; + commas_missed <= (others => '0'); + + if(gtp_rx_comma_det_i = '1') then + state <= S_STABILIZE; + end if; + +-- State: stabilize: + + when S_STABILIZE => + + + if(gtp_rx_comma_det_i = '1') then + counter <= counter + 1; + commas_missed <= (others => '0'); + else + + commas_missed <= commas_missed + 1; + if(commas_missed(3) = '1') then + state <= S_SYNC_LOST; + end if; + end if; + + if(counter = to_unsigned(c_sync_detect_threshold, counter'length)) then + counter <= (others => '0'); + state <= S_PAUSE; + end if; + + if(serdes_ready_i = '0') then + state <= S_SYNC_LOST; + end if; + + when S_SLIDE => + if (cur_slide < c_max_bts-1) then + cur_slide <= cur_slide + 1; + else + cur_slide <= (others=>'0'); + end if; + gtp_rx_slide_o <= '1'; + counter <= (others => '0'); + + state <= S_PAUSE; + + if(serdes_ready_i = '0') then + state <= S_SYNC_LOST; + end if; + + when S_PAUSE => + counter <= counter + 1; + gtp_rx_slide_o <= '0'; + + if(counter = to_unsigned(c_pause_tics, counter'length)) then + + if(gtp_rx_byte_is_aligned_i = '0') then + state <= S_SLIDE; + else + state <= S_GOT_SYNC; + end if; + end if; + + when S_GOT_SYNC => + gtp_rx_slide_o <= '0'; + bitslide_o <= std_logic_vector(cur_slide(4 downto 0)); + synced_o <= '1'; + if(gtp_rx_byte_is_aligned_i = '0' or serdes_ready_i = '0') then + gtp_rx_cdr_rst_o <= '1'; + state <= S_SYNC_LOST; + end if; + when others => null; + end case; + end if; + end process; + + + +end behavioral; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/gtp_phase_align.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/gtp_phase_align.vhd new file mode 100644 index 000000000..a95ecdd22 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/gtp_phase_align.vhd @@ -0,0 +1,137 @@ +------------------------------------------------------------------------------ +-- Title : Deterministic Xilinx GTP wrapper - TX phase alignment +-- Project : White Rabbit Switch +------------------------------------------------------------------------------- +-- File : gtp_phase_align.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2010-11-18 +-- Last update: 2011-09-12 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: TX phase alignment state machine, as recommended by Xilinx. +------------------------------------------------------------------------------- +-- +-- Original EASE design (c) 2010 NIKHEF / Peter Jansweijer and Henk Peek +-- VHDL port (c) 2010 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2010-11-18 0.4 twlostow Ported EASE design to VHDL +-- 2011-02-07 0.5 twlostow Verified on Spartan6 GTP +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity gtp_phase_align is + generic + (g_simulation : integer); + + port ( + gtp_rst_i : in std_logic; + gtp_tx_clk_i : in std_logic; + + gtp_tx_en_pma_phase_align_o : out std_logic; + gtp_tx_pma_set_phase_o : out std_logic; + + align_en_i : in std_logic; + align_done_o : out std_logic + ); + +end gtp_phase_align; + +architecture behavioral of gtp_phase_align is + + constant c_wait_en_phase_align : integer := 32; + constant c_wait_set_phase_align : integer := 512; + constant c_phase_align_duration : integer := 8192; + + + type t_align_state is (S_ALIGN_IDLE, S_ALIGN_PAUSE, S_ALIGN_WAIT, S_ALIGN_SET_PHASE, S_ALIGN_DONE); + + signal counter : unsigned(13 downto 0); + signal state : t_align_state; + + +begin -- behavioral + + p_align : process(gtp_tx_clk_i, gtp_rst_i) + begin + if rising_edge(gtp_tx_clk_i) then + if gtp_rst_i = '1' then + gtp_tx_en_pma_phase_align_o <= '0'; + gtp_tx_pma_set_phase_o <= '0'; + counter <= (others => '0'); + align_done_o <= '0'; + state <= S_ALIGN_IDLE; + else + if(align_en_i = '0') then + state <= S_ALIGN_IDLE; + else + + case (state) is + when S_ALIGN_IDLE => + gtp_tx_en_pma_phase_align_o <= '0'; + gtp_tx_pma_set_phase_o <= '0'; + counter <= (others => '0'); + align_done_o <= '0'; + + if(align_en_i = '1') then + state <= S_ALIGN_PAUSE; + end if; + + when S_ALIGN_PAUSE => + counter <= counter + 1; + if(counter = to_unsigned(c_wait_en_phase_align, counter'length)) then + state <= S_ALIGN_WAIT; + end if; + + when S_ALIGN_WAIT => + gtp_tx_en_pma_phase_align_o <= '1'; + counter <= counter + 1; + if(counter = to_unsigned(c_wait_en_phase_align + c_wait_set_phase_align, counter'length)) then + state <= S_ALIGN_SET_PHASE; + end if; + + when S_ALIGN_SET_PHASE => + counter <= counter +1; + gtp_tx_pma_set_phase_o <= '1'; + + if(counter = to_unsigned(c_wait_en_phase_align + c_wait_set_phase_align + c_phase_align_duration, counter'length)) then + state <= S_ALIGN_DONE; + end if; + + when S_ALIGN_DONE => + gtp_tx_pma_set_phase_o <= '0'; + counter <= (others => '0'); + align_done_o <= '1'; + when others => null; + end case; + end if; + end if; + end if; + end process; + + +end behavioral; + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/whiterabbitgtp_wrapper_tile_spartan6.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/whiterabbitgtp_wrapper_tile_spartan6.vhd new file mode 100644 index 000000000..9a97d3d91 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/whiterabbitgtp_wrapper_tile_spartan6.vhd @@ -0,0 +1,712 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library UNISIM; +use UNISIM.VCOMPONENTS.all; + +--***************************** Entity Declaration **************************** + +entity WHITERABBITGTP_WRAPPER_TILE_SPARTAN6 is + generic + ( + TILE_SIM_GTPRESET_SPEEDUP : integer := 0; -- Set to 1 to speed up sim reset + TILE_CLK25_DIVIDER_0 : integer := 4; + TILE_CLK25_DIVIDER_1 : integer := 4; + TILE_PLL_DIVSEL_FB_0 : integer := 5; + TILE_PLL_DIVSEL_FB_1 : integer := 5; + TILE_PLL_DIVSEL_REF_0 : integer := 2; + TILE_PLL_DIVSEL_REF_1 : integer := 2; + TILE_PLL_SOURCE_0 : string := "PLL0"; + TILE_PLL_SOURCE_1 : string := "PLL1" + ); + port + ( + ------------------------ Loopback and Powerdown Ports ---------------------- + LOOPBACK0_IN : in std_logic_vector(2 downto 0); + LOOPBACK1_IN : in std_logic_vector(2 downto 0); + REFCLKOUT0_OUT : out std_logic; + REFCLKOUT1_OUT : out std_logic; + --------------------------------- PLL Ports -------------------------------- + CLK00_IN : in std_logic; + CLK01_IN : in std_logic; + CLK10_IN : in std_logic; + CLK11_IN : in std_logic; + GTPRESET0_IN : in std_logic; + GTPRESET1_IN : in std_logic; + PLLLKDET0_OUT : out std_logic; + PLLLKDET1_OUT : out std_logic; + RESETDONE0_OUT : out std_logic; + RESETDONE1_OUT : out std_logic; + ----------------------- Receive Ports - 8b10b Decoder ---------------------- + RXCHARISK0_OUT : out std_logic; + RXCHARISK1_OUT : out std_logic; + RXDISPERR0_OUT : out std_logic; + RXDISPERR1_OUT : out std_logic; + RXNOTINTABLE0_OUT : out std_logic; + RXNOTINTABLE1_OUT : out std_logic; + --------------- Receive Ports - Comma Detection and Alignment -------------- + RXBYTEISALIGNED0_OUT : out std_logic; + RXBYTEISALIGNED1_OUT : out std_logic; + RXCOMMADET0_OUT : out std_logic; + RXCOMMADET1_OUT : out std_logic; + RXSLIDE0_IN : in std_logic; + RXSLIDE1_IN : in std_logic; + ------------------- Receive Ports - RX Data Path interface ----------------- + RXDATA0_OUT : out std_logic_vector(7 downto 0); + RXDATA1_OUT : out std_logic_vector(7 downto 0); + RXUSRCLK0_IN : in std_logic; + RXUSRCLK1_IN : in std_logic; + RXUSRCLK20_IN : in std_logic; + RXUSRCLK21_IN : in std_logic; + ------- Receive Ports - RX Driver,OOB signalling,Coupling and Eq.,CDR ------ + RXCDRRESET0_IN : in std_logic; + RXCDRRESET1_IN : in std_logic; + RXN0_IN : in std_logic; + RXN1_IN : in std_logic; + RXP0_IN : in std_logic; + RXP1_IN : in std_logic; + ---------------------------- TX/RX Datapath Ports -------------------------- + GTPCLKFBEAST_OUT : out std_logic_vector(1 downto 0); + GTPCLKFBWEST_OUT : out std_logic_vector(1 downto 0); + GTPCLKOUT0_OUT : out std_logic_vector(1 downto 0); + GTPCLKOUT1_OUT : out std_logic_vector(1 downto 0); + ------------------- Transmit Ports - 8b10b Encoder Control ----------------- + TXCHARISK0_IN : in std_logic; + TXCHARISK1_IN : in std_logic; + + TXCHARDISPMODE0_IN: in std_logic; + TXCHARDISPMODE1_IN: in std_logic; + + TXCHARDISPVAL0_IN: in std_logic; + TXCHARDISPVAL1_IN: in std_logic; + + TXRUNDISP0_OUT : out std_logic_vector(3 downto 0); + TXRUNDISP1_OUT : out std_logic_vector(3 downto 0); + + --------------- Transmit Ports - TX Buffer and Phase Alignment ------------- + TXENPMAPHASEALIGN0_IN : in std_logic; + TXENPMAPHASEALIGN1_IN : in std_logic; + TXPMASETPHASE0_IN : in std_logic; + TXPMASETPHASE1_IN : in std_logic; + ------------------ Transmit Ports - TX Data Path interface ----------------- + TXDATA0_IN : in std_logic_vector(7 downto 0); + TXDATA1_IN : in std_logic_vector(7 downto 0); + TXUSRCLK0_IN : in std_logic; + TXUSRCLK1_IN : in std_logic; + TXUSRCLK20_IN : in std_logic; + TXUSRCLK21_IN : in std_logic; + --------------- Transmit Ports - TX Driver and OOB signalling -------------- + TXN0_OUT : out std_logic; + TXN1_OUT : out std_logic; + TXP0_OUT : out std_logic; + TXP1_OUT : out std_logic; + --------------- Transmit Ports - PRBS Generator ---------------------------- + TXENPRBSTST0_IN : in std_logic_vector(2 downto 0); + TXENPRBSTST1_IN : in std_logic_vector(2 downto 0) + + ); + + +end WHITERABBITGTP_WRAPPER_TILE_SPARTAN6; + +architecture RTL of WHITERABBITGTP_WRAPPER_TILE_SPARTAN6 is + +--**************************** Signal Declarations **************************** + + -- ground and tied_to_vcc_i signals + signal tied_to_ground_i : std_logic; + signal tied_to_ground_vec_i : std_logic_vector(63 downto 0); + signal tied_to_vcc_i : std_logic; + signal tied_to_vcc_vec_i : std_logic_vector(63 downto 0); + + + + -- RX Datapath signals + signal rxdata0_i : std_logic_vector(31 downto 0); + signal rxchariscomma0_float_i : std_logic_vector(2 downto 0); + signal rxcharisk0_float_i : std_logic_vector(2 downto 0); + signal rxdisperr0_float_i : std_logic_vector(2 downto 0); + signal rxnotintable0_float_i : std_logic_vector(2 downto 0); + signal rxrundisp0_float_i : std_logic_vector(2 downto 0); + + + -- TX Datapath signals + signal txdata0_i : std_logic_vector(31 downto 0); + signal txkerr0_float_i : std_logic_vector(2 downto 0); + signal txrundisp0_float_i : std_logic_vector(2 downto 0); + + + -- RX Datapath signals + signal rxdata1_i : std_logic_vector(31 downto 0); + signal rxchariscomma1_float_i : std_logic_vector(2 downto 0); + signal rxcharisk1_float_i : std_logic_vector(2 downto 0); + signal rxdisperr1_float_i : std_logic_vector(2 downto 0); + signal rxnotintable1_float_i : std_logic_vector(2 downto 0); + signal rxrundisp1_float_i : std_logic_vector(2 downto 0); + + + -- TX Datapath signals + signal txdata1_i : std_logic_vector(31 downto 0); + signal txkerr1_float_i : std_logic_vector(2 downto 0); + signal txrundisp1_float_i : std_logic_vector(2 downto 0); + +--******************************** Main Body of Code*************************** + +begin + + --------------------------- Static signal Assignments --------------------- + + tied_to_ground_i <= '0'; + tied_to_ground_vec_i(63 downto 0) <= (others => '0'); + tied_to_vcc_i <= '1'; + tied_to_vcc_vec_i(63 downto 0) <= (others => '1'); + + ------------------- GTP Datapath byte mapping ----------------- + + RXDATA0_OUT <= rxdata0_i(7 downto 0); + + txdata0_i <= (tied_to_ground_vec_i(23 downto 0) & TXDATA0_IN); + + RXDATA1_OUT <= rxdata1_i(7 downto 0); + + txdata1_i <= (tied_to_ground_vec_i(23 downto 0) & TXDATA1_IN); + + + + ----------------------------- GTPA1_DUAL Instance -------------------------- + + gtpa1_dual_i : GTPA1_DUAL + generic map + ( + + --_______________________ Simulation-Only Attributes ___________________ + + SIM_RECEIVER_DETECT_PASS => (true), + SIM_TX_ELEC_IDLE_LEVEL => ("X"), + SIM_VERSION => ("2.0"), + SIM_REFCLK0_SOURCE => ("000"), + SIM_REFCLK1_SOURCE => ("000"), + SIM_GTPRESET_SPEEDUP => (TILE_SIM_GTPRESET_SPEEDUP), + CLK25_DIVIDER_0 => (TILE_CLK25_DIVIDER_0), + CLK25_DIVIDER_1 => (TILE_CLK25_DIVIDER_1), + PLL_DIVSEL_FB_0 => (TILE_PLL_DIVSEL_FB_0), + PLL_DIVSEL_FB_1 => (TILE_PLL_DIVSEL_FB_1), + PLL_DIVSEL_REF_0 => (TILE_PLL_DIVSEL_REF_0), + PLL_DIVSEL_REF_1 => (TILE_PLL_DIVSEL_REF_1), + + + --PLL Attributes + CLKINDC_B_0 => (true), + CLKRCV_TRST_0 => (true), + OOB_CLK_DIVIDER_0 => (4), + PLL_COM_CFG_0 => (x"21680a"), + PLL_CP_CFG_0 => (x"00"), + PLL_RXDIVSEL_OUT_0 => (2), + PLL_SATA_0 => (false), + PLL_SOURCE_0 => (TILE_PLL_SOURCE_0), + PLL_TXDIVSEL_OUT_0 => (2), + PLLLKDET_CFG_0 => ("111"), + + -- + CLKINDC_B_1 => (true), + CLKRCV_TRST_1 => (true), + OOB_CLK_DIVIDER_1 => (4), + PLL_COM_CFG_1 => (x"21680a"), + PLL_CP_CFG_1 => (x"00"), + PLL_RXDIVSEL_OUT_1 => (2), + PLL_SATA_1 => (false), + PLL_SOURCE_1 => (TILE_PLL_SOURCE_1), + PLL_TXDIVSEL_OUT_1 => (2), + PLLLKDET_CFG_1 => ("111"), + PMA_COM_CFG_EAST => (x"000008000"), + PMA_COM_CFG_WEST => (x"000008000"), + TST_ATTR_0 => (x"00000000"), + TST_ATTR_1 => (x"00000000"), + + --TX Interface Attributes + CLK_OUT_GTP_SEL_0 => ("REFCLKPLL0"), + TX_TDCC_CFG_0 => ("00"), + CLK_OUT_GTP_SEL_1 => ("REFCLKPLL1"), + TX_TDCC_CFG_1 => ("00"), + + --TX Buffer and Phase Alignment Attributes + PMA_TX_CFG_0 => (x"80082"), + TX_BUFFER_USE_0 => (false), + TX_XCLK_SEL_0 => ("TXUSR"), + TXRX_INVERT_0 => ("111"), + PMA_TX_CFG_1 => (x"80082"), + TX_BUFFER_USE_1 => (false), + TX_XCLK_SEL_1 => ("TXUSR"), + TXRX_INVERT_1 => ("111"), + + --TX Driver and OOB signalling Attributes + CM_TRIM_0 => ("00"), + TX_IDLE_DELAY_0 => ("011"), + CM_TRIM_1 => ("00"), + TX_IDLE_DELAY_1 => ("011"), + + --TX PIPE/SATA Attributes + COM_BURST_VAL_0 => ("1111"), + COM_BURST_VAL_1 => ("1111"), + + --RX Driver,OOB signalling,Coupling and Eq,CDR Attributes + AC_CAP_DIS_0 => (true), + OOBDETECT_THRESHOLD_0 => ("110"), + PMA_CDR_SCAN_0 => (x"6404040"), + PMA_RX_CFG_0 => (x"05ce048"), + PMA_RXSYNC_CFG_0 => (x"00"), + RCV_TERM_GND_0 => (false), + RCV_TERM_VTTRX_0 => (false), + RXEQ_CFG_0 => ("01111011"), + TERMINATION_CTRL_0 => ("10100"), + TERMINATION_OVRD_0 => (false), + TX_DETECT_RX_CFG_0 => (x"1832"), + AC_CAP_DIS_1 => (true), + OOBDETECT_THRESHOLD_1 => ("110"), + PMA_CDR_SCAN_1 => (x"6404040"), + PMA_RX_CFG_1 => (x"05ce048"), + PMA_RXSYNC_CFG_1 => (x"00"), + RCV_TERM_GND_1 => (false), + RCV_TERM_VTTRX_1 => (false), + RXEQ_CFG_1 => ("01111011"), + TERMINATION_CTRL_1 => ("10100"), + TERMINATION_OVRD_1 => (false), + TX_DETECT_RX_CFG_1 => (x"1832"), + + --PRBS Detection Attributes + RXPRBSERR_LOOPBACK_0 => ('0'), + RXPRBSERR_LOOPBACK_1 => ('0'), + + --Comma Detection and Alignment Attributes + ALIGN_COMMA_WORD_0 => (1), + COMMA_10B_ENABLE_0 => ("1111111111"), + DEC_MCOMMA_DETECT_0 => (false), + DEC_PCOMMA_DETECT_0 => (false), + DEC_VALID_COMMA_ONLY_0 => (true), + MCOMMA_10B_VALUE_0 => ("1010000011"), + MCOMMA_DETECT_0 => (true), + PCOMMA_10B_VALUE_0 => ("0101111100"), + PCOMMA_DETECT_0 => (true), + RX_SLIDE_MODE_0 => ("PCS"), + ALIGN_COMMA_WORD_1 => (1), + COMMA_10B_ENABLE_1 => ("1111111111"), + DEC_MCOMMA_DETECT_1 => (false), + DEC_PCOMMA_DETECT_1 => (false), + DEC_VALID_COMMA_ONLY_1 => (true), + MCOMMA_10B_VALUE_1 => ("1010000011"), + MCOMMA_DETECT_1 => (true), + PCOMMA_10B_VALUE_1 => ("0101111100"), + PCOMMA_DETECT_1 => (true), + RX_SLIDE_MODE_1 => ("PCS"), + + --RX Loss-of-sync State Machine Attributes + RX_LOS_INVALID_INCR_0 => (8), + RX_LOS_THRESHOLD_0 => (128), + RX_LOSS_OF_SYNC_FSM_0 => (false), + RX_LOS_INVALID_INCR_1 => (8), + RX_LOS_THRESHOLD_1 => (128), + RX_LOSS_OF_SYNC_FSM_1 => (false), + + --RX Elastic Buffer and Phase alignment Attributes + RX_BUFFER_USE_0 => (true), + RX_EN_IDLE_RESET_BUF_0 => (true), + RX_IDLE_HI_CNT_0 => ("1000"), + RX_IDLE_LO_CNT_0 => ("0000"), + RX_XCLK_SEL_0 => ("RXREC"), + RX_BUFFER_USE_1 => (true), + RX_EN_IDLE_RESET_BUF_1 => (true), + RX_IDLE_HI_CNT_1 => ("1000"), + RX_IDLE_LO_CNT_1 => ("0000"), + RX_XCLK_SEL_1 => ("RXREC"), + + --Clock Correction Attributes + CLK_COR_ADJ_LEN_0 => (1), + CLK_COR_DET_LEN_0 => (1), + CLK_COR_INSERT_IDLE_FLAG_0 => (false), + CLK_COR_KEEP_IDLE_0 => (false), + CLK_COR_MAX_LAT_0 => (18), + CLK_COR_MIN_LAT_0 => (16), + CLK_COR_PRECEDENCE_0 => (true), + CLK_COR_REPEAT_WAIT_0 => (0), + CLK_COR_SEQ_1_1_0 => ("0100000000"), + CLK_COR_SEQ_1_2_0 => ("0000000000"), + CLK_COR_SEQ_1_3_0 => ("0000000000"), + CLK_COR_SEQ_1_4_0 => ("0000000000"), + CLK_COR_SEQ_1_ENABLE_0 => ("0000"), + CLK_COR_SEQ_2_1_0 => ("0100000000"), + CLK_COR_SEQ_2_2_0 => ("0000000000"), + CLK_COR_SEQ_2_3_0 => ("0000000000"), + CLK_COR_SEQ_2_4_0 => ("0000000000"), + CLK_COR_SEQ_2_ENABLE_0 => ("0000"), + CLK_COR_SEQ_2_USE_0 => (false), + CLK_CORRECT_USE_0 => (false), + RX_DECODE_SEQ_MATCH_0 => (true), + CLK_COR_ADJ_LEN_1 => (1), + CLK_COR_DET_LEN_1 => (1), + CLK_COR_INSERT_IDLE_FLAG_1 => (false), + CLK_COR_KEEP_IDLE_1 => (false), + CLK_COR_MAX_LAT_1 => (18), + CLK_COR_MIN_LAT_1 => (16), + CLK_COR_PRECEDENCE_1 => (true), + CLK_COR_REPEAT_WAIT_1 => (0), + CLK_COR_SEQ_1_1_1 => ("0100000000"), + CLK_COR_SEQ_1_2_1 => ("0000000000"), + CLK_COR_SEQ_1_3_1 => ("0000000000"), + CLK_COR_SEQ_1_4_1 => ("0000000000"), + CLK_COR_SEQ_1_ENABLE_1 => ("0000"), + CLK_COR_SEQ_2_1_1 => ("0100000000"), + CLK_COR_SEQ_2_2_1 => ("0000000000"), + CLK_COR_SEQ_2_3_1 => ("0000000000"), + CLK_COR_SEQ_2_4_1 => ("0000000000"), + CLK_COR_SEQ_2_ENABLE_1 => ("0000"), + CLK_COR_SEQ_2_USE_1 => (false), + CLK_CORRECT_USE_1 => (false), + RX_DECODE_SEQ_MATCH_1 => (true), + + --Channel Bonding Attributes + CHAN_BOND_1_MAX_SKEW_0 => (1), + CHAN_BOND_2_MAX_SKEW_0 => (1), + CHAN_BOND_KEEP_ALIGN_0 => (false), + CHAN_BOND_SEQ_1_1_0 => ("0000000000"), + CHAN_BOND_SEQ_1_2_0 => ("0000000000"), + CHAN_BOND_SEQ_1_3_0 => ("0000000000"), + CHAN_BOND_SEQ_1_4_0 => ("0000000000"), + CHAN_BOND_SEQ_1_ENABLE_0 => ("0000"), + CHAN_BOND_SEQ_2_1_0 => ("0000000000"), + CHAN_BOND_SEQ_2_2_0 => ("0000000000"), + CHAN_BOND_SEQ_2_3_0 => ("0000000000"), + CHAN_BOND_SEQ_2_4_0 => ("0000000000"), + CHAN_BOND_SEQ_2_ENABLE_0 => ("0000"), + CHAN_BOND_SEQ_2_USE_0 => (false), + CHAN_BOND_SEQ_LEN_0 => (1), + RX_EN_MODE_RESET_BUF_0 => (true), + CHAN_BOND_1_MAX_SKEW_1 => (1), + CHAN_BOND_2_MAX_SKEW_1 => (1), + CHAN_BOND_KEEP_ALIGN_1 => (false), + CHAN_BOND_SEQ_1_1_1 => ("0000000000"), + CHAN_BOND_SEQ_1_2_1 => ("0000000000"), + CHAN_BOND_SEQ_1_3_1 => ("0000000000"), + CHAN_BOND_SEQ_1_4_1 => ("0000000000"), + CHAN_BOND_SEQ_1_ENABLE_1 => ("0000"), + CHAN_BOND_SEQ_2_1_1 => ("0000000000"), + CHAN_BOND_SEQ_2_2_1 => ("0000000000"), + CHAN_BOND_SEQ_2_3_1 => ("0000000000"), + CHAN_BOND_SEQ_2_4_1 => ("0000000000"), + CHAN_BOND_SEQ_2_ENABLE_1 => ("0000"), + CHAN_BOND_SEQ_2_USE_1 => (false), + CHAN_BOND_SEQ_LEN_1 => (1), + RX_EN_MODE_RESET_BUF_1 => (true), + + --RX PCI Express Attributes + CB2_INH_CC_PERIOD_0 => (8), + CDR_PH_ADJ_TIME_0 => ("01010"), + PCI_EXPRESS_MODE_0 => (false), + RX_EN_IDLE_HOLD_CDR_0 => (false), + RX_EN_IDLE_RESET_FR_0 => (true), + RX_EN_IDLE_RESET_PH_0 => (true), + RX_STATUS_FMT_0 => ("PCIE"), + TRANS_TIME_FROM_P2_0 => (x"03c"), + TRANS_TIME_NON_P2_0 => (x"19"), + TRANS_TIME_TO_P2_0 => (x"064"), + CB2_INH_CC_PERIOD_1 => (8), + CDR_PH_ADJ_TIME_1 => ("01010"), + PCI_EXPRESS_MODE_1 => (false), + RX_EN_IDLE_HOLD_CDR_1 => (false), + RX_EN_IDLE_RESET_FR_1 => (true), + RX_EN_IDLE_RESET_PH_1 => (true), + RX_STATUS_FMT_1 => ("PCIE"), + TRANS_TIME_FROM_P2_1 => (x"03c"), + TRANS_TIME_NON_P2_1 => (x"19"), + TRANS_TIME_TO_P2_1 => (x"064"), + + --RX SATA Attributes + SATA_BURST_VAL_0 => ("100"), + SATA_IDLE_VAL_0 => ("100"), + SATA_MAX_BURST_0 => (9), + SATA_MAX_INIT_0 => (27), + SATA_MAX_WAKE_0 => (9), + SATA_MIN_BURST_0 => (5), + SATA_MIN_INIT_0 => (15), + SATA_MIN_WAKE_0 => (5), + SATA_BURST_VAL_1 => ("100"), + SATA_IDLE_VAL_1 => ("100"), + SATA_MAX_BURST_1 => (9), + SATA_MAX_INIT_1 => (27), + SATA_MAX_WAKE_1 => (9), + SATA_MIN_BURST_1 => (5), + SATA_MIN_INIT_1 => (15), + SATA_MIN_WAKE_1 => (5) + + + ) + port map + ( + ------------------------ Loopback and Powerdown Ports ---------------------- + LOOPBACK0 => LOOPBACK0_IN, + LOOPBACK1 => LOOPBACK1_IN, + RXPOWERDOWN0 => tied_to_ground_vec_i(1 downto 0), + RXPOWERDOWN1 => tied_to_ground_vec_i(1 downto 0), + TXPOWERDOWN0 => tied_to_ground_vec_i(1 downto 0), + TXPOWERDOWN1 => tied_to_ground_vec_i(1 downto 0), + --------------------------------- PLL Ports -------------------------------- + CLK00 => CLK00_IN, + CLK01 => CLK01_IN, + CLK10 => CLK10_IN, + CLK11 => CLK11_IN, + CLKINEAST0 => tied_to_ground_i, + CLKINEAST1 => tied_to_ground_i, + CLKINWEST0 => tied_to_ground_i, + CLKINWEST1 => tied_to_ground_i, + GCLK00 => tied_to_ground_i, + GCLK01 => tied_to_ground_i, + GCLK10 => tied_to_ground_i, + GCLK11 => tied_to_ground_i, + GTPRESET0 => GTPRESET0_IN, + GTPRESET1 => GTPRESET1_IN, + GTPTEST0 => "00010000", + GTPTEST1 => "00010000", + INTDATAWIDTH0 => tied_to_vcc_i, + INTDATAWIDTH1 => tied_to_vcc_i, + PLLCLK00 => tied_to_ground_i, + PLLCLK01 => tied_to_ground_i, + PLLCLK10 => tied_to_ground_i, + PLLCLK11 => tied_to_ground_i, + PLLLKDET0 => PLLLKDET0_OUT, + PLLLKDET1 => PLLLKDET1_OUT, + PLLLKDETEN0 => tied_to_vcc_i, + PLLLKDETEN1 => tied_to_vcc_i, + PLLPOWERDOWN0 => tied_to_ground_i, + PLLPOWERDOWN1 => tied_to_ground_i, + REFCLKOUT0 => REFCLKOUT0_OUT, + REFCLKOUT1 => REFCLKOUT1_OUT, + REFCLKPLL0 => open, + REFCLKPLL1 => open, + REFCLKPWRDNB0 => tied_to_vcc_i, + REFCLKPWRDNB1 => tied_to_vcc_i, + REFSELDYPLL0 => tied_to_ground_vec_i(2 downto 0), + REFSELDYPLL1 => tied_to_ground_vec_i(2 downto 0), + RESETDONE0 => RESETDONE0_OUT, + RESETDONE1 => RESETDONE1_OUT, + TSTCLK0 => tied_to_ground_i, + TSTCLK1 => tied_to_ground_i, + TSTIN0 => tied_to_ground_vec_i(11 downto 0), + TSTIN1 => tied_to_ground_vec_i(11 downto 0), + TSTOUT0 => open, + TSTOUT1 => open, + ----------------------- Receive Ports - 8b10b Decoder ---------------------- + RXCHARISCOMMA0 => open, + RXCHARISCOMMA1 => open, + RXCHARISK0(3 downto 1) => rxcharisk0_float_i, + RXCHARISK0(0) => RXCHARISK0_OUT, + RXCHARISK1(3 downto 1) => rxcharisk1_float_i, + RXCHARISK1(0) => RXCHARISK1_OUT, + RXDEC8B10BUSE0 => tied_to_vcc_i, + RXDEC8B10BUSE1 => tied_to_vcc_i, + RXDISPERR0(3 downto 1) => rxdisperr0_float_i, + RXDISPERR0(0) => RXDISPERR0_OUT, + RXDISPERR1(3 downto 1) => rxdisperr1_float_i, + RXDISPERR1(0) => RXDISPERR1_OUT, + RXNOTINTABLE0(3 downto 1) => rxnotintable0_float_i, + RXNOTINTABLE0(0) => RXNOTINTABLE0_OUT, + RXNOTINTABLE1(3 downto 1) => rxnotintable1_float_i, + RXNOTINTABLE1(0) => RXNOTINTABLE1_OUT, + RXRUNDISP0 => open, + RXRUNDISP1 => open, + USRCODEERR0 => tied_to_ground_i, + USRCODEERR1 => tied_to_ground_i, + ---------------------- Receive Ports - Channel Bonding --------------------- + RXCHANBONDSEQ0 => open, + RXCHANBONDSEQ1 => open, + RXCHANISALIGNED0 => open, + RXCHANISALIGNED1 => open, + RXCHANREALIGN0 => open, + RXCHANREALIGN1 => open, + RXCHBONDI => tied_to_ground_vec_i(2 downto 0), + RXCHBONDMASTER0 => tied_to_ground_i, + RXCHBONDMASTER1 => tied_to_ground_i, + RXCHBONDO => open, + RXCHBONDSLAVE0 => tied_to_ground_i, + RXCHBONDSLAVE1 => tied_to_ground_i, + RXENCHANSYNC0 => tied_to_ground_i, + RXENCHANSYNC1 => tied_to_ground_i, + ---------------------- Receive Ports - Clock Correction -------------------- + RXCLKCORCNT0 => open, + RXCLKCORCNT1 => open, + --------------- Receive Ports - Comma Detection and Alignment -------------- + RXBYTEISALIGNED0 => RXBYTEISALIGNED0_OUT, + RXBYTEISALIGNED1 => RXBYTEISALIGNED1_OUT, + RXBYTEREALIGN0 => open, + RXBYTEREALIGN1 => open, + RXCOMMADET0 => RXCOMMADET0_OUT, + RXCOMMADET1 => RXCOMMADET1_OUT, + RXCOMMADETUSE0 => tied_to_vcc_i, + RXCOMMADETUSE1 => tied_to_vcc_i, + RXENMCOMMAALIGN0 => tied_to_ground_i, + RXENMCOMMAALIGN1 => tied_to_ground_i, + RXENPCOMMAALIGN0 => tied_to_ground_i, + RXENPCOMMAALIGN1 => tied_to_ground_i, + RXSLIDE0 => RXSLIDE0_IN, + RXSLIDE1 => RXSLIDE1_IN, + ----------------------- Receive Ports - PRBS Detection --------------------- + PRBSCNTRESET0 => tied_to_ground_i, + PRBSCNTRESET1 => tied_to_ground_i, + RXENPRBSTST0 => tied_to_ground_vec_i(2 downto 0), + RXENPRBSTST1 => tied_to_ground_vec_i(2 downto 0), + RXPRBSERR0 => open, + RXPRBSERR1 => open, + ------------------- Receive Ports - RX Data Path interface ----------------- + RXDATA0 => rxdata0_i, + RXDATA1 => rxdata1_i, + RXDATAWIDTH0 => "00", + RXDATAWIDTH1 => "00", + RXRECCLK0 => open, + RXRECCLK1 => open, + RXRESET0 => tied_to_ground_i, + RXRESET1 => tied_to_ground_i, + RXUSRCLK0 => RXUSRCLK0_IN, + RXUSRCLK1 => RXUSRCLK1_IN, + RXUSRCLK20 => RXUSRCLK20_IN, + RXUSRCLK21 => RXUSRCLK21_IN, + ------- Receive Ports - RX Driver,OOB signalling,Coupling and Eq.,CDR ------ + GATERXELECIDLE0 => tied_to_ground_i, + GATERXELECIDLE1 => tied_to_ground_i, + IGNORESIGDET0 => tied_to_ground_i, + IGNORESIGDET1 => tied_to_ground_i, + RCALINEAST => tied_to_ground_vec_i(4 downto 0), + RCALINWEST => tied_to_ground_vec_i(4 downto 0), + RCALOUTEAST => open, + RCALOUTWEST => open, + RXCDRRESET0 => RXCDRRESET0_IN, + RXCDRRESET1 => RXCDRRESET1_IN, + RXELECIDLE0 => open, + RXELECIDLE1 => open, + RXEQMIX0 => "00", + RXEQMIX1 => "00", + RXN0 => RXN0_IN, + RXN1 => RXN1_IN, + RXP0 => RXP0_IN, + RXP1 => RXP1_IN, + ----------- Receive Ports - RX Elastic Buffer and Phase Alignment ---------- + RXBUFRESET0 => tied_to_ground_i, + RXBUFRESET1 => tied_to_ground_i, + RXBUFSTATUS0 => open, + RXBUFSTATUS1 => open, + RXENPMAPHASEALIGN0 => tied_to_ground_i, + RXENPMAPHASEALIGN1 => tied_to_ground_i, + RXPMASETPHASE0 => tied_to_ground_i, + RXPMASETPHASE1 => tied_to_ground_i, + RXSTATUS0 => open, + RXSTATUS1 => open, + --------------- Receive Ports - RX Loss-of-sync State Machine -------------- + RXLOSSOFSYNC0 => open, + RXLOSSOFSYNC1 => open, + -------------- Receive Ports - RX Pipe Control for PCI Express ------------- + PHYSTATUS0 => open, + PHYSTATUS1 => open, + RXVALID0 => open, + RXVALID1 => open, + -------------------- Receive Ports - RX Polarity Control ------------------- + RXPOLARITY0 => tied_to_ground_i, + RXPOLARITY1 => tied_to_ground_i, + ------------- Shared Ports - Dynamic Reconfiguration Port (DRP) ------------ + DADDR => tied_to_ground_vec_i(7 downto 0), + DCLK => tied_to_ground_i, + DEN => tied_to_ground_i, + DI => tied_to_ground_vec_i(15 downto 0), + DRDY => open, + DRPDO => open, + DWE => tied_to_ground_i, + ---------------------------- TX/RX Datapath Ports -------------------------- + GTPCLKFBEAST => GTPCLKFBEAST_OUT, + GTPCLKFBSEL0EAST => "10", + GTPCLKFBSEL0WEST => "00", + GTPCLKFBSEL1EAST => "11", + GTPCLKFBSEL1WEST => "01", + GTPCLKFBWEST => GTPCLKFBWEST_OUT, + GTPCLKOUT0 => GTPCLKOUT0_OUT, + GTPCLKOUT1 => GTPCLKOUT1_OUT, + ------------------- Transmit Ports - 8b10b Encoder Control ----------------- + TXBYPASS8B10B0 => tied_to_ground_vec_i(3 downto 0), + TXBYPASS8B10B1 => tied_to_ground_vec_i(3 downto 0), + + TXCHARDISPMODE0(0) => TXCHARDISPMODE0_IN, + TXCHARDISPMODE0(3 downto 1) => tied_to_ground_vec_i(2 downto 0), + + TXCHARDISPMODE1(0) => TXCHARDISPMODE1_IN, + TXCHARDISPMODE1(3 downto 1) => tied_to_ground_vec_i(2 downto 0), + + TXCHARDISPVAL0(0) => TXCHARDISPVAL0_IN, + TXCHARDISPVAL0(3 downto 1) => tied_to_ground_vec_i(2 downto 0), + + TXCHARDISPVAL1(0) => TXCHARDISPVAL1_IN, + TXCHARDISPVAL1(3 downto 1) => tied_to_ground_vec_i(2 downto 0), + + TXCHARISK0(3 downto 1) => tied_to_ground_vec_i(2 downto 0), + TXCHARISK0(0) => TXCHARISK0_IN, + TXCHARISK1(3 downto 1) => tied_to_ground_vec_i(2 downto 0), + TXCHARISK1(0) => TXCHARISK1_IN, + TXENC8B10BUSE0 => tied_to_vcc_i, + TXENC8B10BUSE1 => tied_to_vcc_i, + TXKERR0 => open, + TXKERR1 => open, + TXRUNDISP0 => TXRUNDISP0_OUT, + TXRUNDISP1 => TXRUNDISP1_OUT, + --------------- Transmit Ports - TX Buffer and Phase Alignment ------------- + TXBUFSTATUS0 => open, + TXBUFSTATUS1 => open, + TXENPMAPHASEALIGN0 => TXENPMAPHASEALIGN0_IN, + TXENPMAPHASEALIGN1 => TXENPMAPHASEALIGN1_IN, + TXPMASETPHASE0 => TXPMASETPHASE0_IN, + TXPMASETPHASE1 => TXPMASETPHASE1_IN, + ------------------ Transmit Ports - TX Data Path interface ----------------- + TXDATA0 => txdata0_i, + TXDATA1 => txdata1_i, + TXDATAWIDTH0 => "00", + TXDATAWIDTH1 => "00", + TXOUTCLK0 => open, + TXOUTCLK1 => open, + TXRESET0 => tied_to_ground_i, + TXRESET1 => tied_to_ground_i, + TXUSRCLK0 => TXUSRCLK0_IN, + TXUSRCLK1 => TXUSRCLK1_IN, + TXUSRCLK20 => TXUSRCLK20_IN, + TXUSRCLK21 => TXUSRCLK21_IN, + --------------- Transmit Ports - TX Driver and OOB signalling -------------- + TXBUFDIFFCTRL0 => "101", + TXBUFDIFFCTRL1 => "101", + TXDIFFCTRL0 => "0110", + TXDIFFCTRL1 => "0110", + TXINHIBIT0 => tied_to_ground_i, + TXINHIBIT1 => tied_to_ground_i, + TXN0 => TXN0_OUT, + TXN1 => TXN1_OUT, + TXP0 => TXP0_OUT, + TXP1 => TXP1_OUT, + TXPREEMPHASIS0 => "000", + TXPREEMPHASIS1 => "000", + --------------------- Transmit Ports - TX PRBS Generator ------------------- + TXENPRBSTST0 => TXENPRBSTST0_IN, + TXENPRBSTST1 => TXENPRBSTST1_IN, + TXPRBSFORCEERR0 => tied_to_ground_i, + TXPRBSFORCEERR1 => tied_to_ground_i, + -------------------- Transmit Ports - TX Polarity Control ------------------ + TXPOLARITY0 => tied_to_ground_i, + TXPOLARITY1 => tied_to_ground_i, + ----------------- Transmit Ports - TX Ports for PCI Express ---------------- + TXDETECTRX0 => tied_to_ground_i, + TXDETECTRX1 => tied_to_ground_i, + TXELECIDLE0 => tied_to_ground_i, + TXELECIDLE1 => tied_to_ground_i, + TXPDOWNASYNCH0 => tied_to_ground_i, + TXPDOWNASYNCH1 => tied_to_ground_i, + --------------------- Transmit Ports - TX Ports for SATA ------------------- + TXCOMSTART0 => tied_to_ground_i, + TXCOMSTART1 => tied_to_ground_i, + TXCOMTYPE0 => tied_to_ground_i, + TXCOMTYPE1 => tied_to_ground_i + + ); + +end RTL; + + diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/wr_gtp_phy_spartan6.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/wr_gtp_phy_spartan6.vhd new file mode 100644 index 000000000..ca7480834 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/wr_gtp_phy_spartan6.vhd @@ -0,0 +1,816 @@ +------------------------------------------------------------------------------- +-- Title : Deterministic Xilinx GTP wrapper - Spartan-6 top module +-- Project : White Rabbit Switch +------------------------------------------------------------------------------- +-- File : wr_gtp_phy_spartan6.vhd +-- Author : Tomasz Wlostowski +-- Company : CERN BE-CO-HT +-- Created : 2010-11-18 +-- Last update: 2017-05-24 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: Dual channel wrapper for Xilinx Spartan-6 GTP adapted for +-- deterministic delays at 1.25 Gbps. +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2010 CERN +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version. +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details. +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +-- +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2010-11-18 0.4 twlostow Initial release +-- 2011-02-07 0.5 twlostow Verified on Spartan6 GTP (single channel only) +-- 2011-05-15 0.6 twlostow Added reference clock output +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library unisim; +use unisim.vcomponents.all; + +library work; +use work.gencores_pkg.all; +use work.disparity_gen_pkg.all; + +entity wr_gtp_phy_spartan6 is + + generic ( + -- set to non-zero value to speed up the simulation by reducing some delays + g_simulation : integer := 1; + g_force_disparity : integer := 0; + g_enable_ch0 : integer := 1; + g_enable_ch1 : integer := 1 + ); + + port ( + -- Port 0 + + -- dedicated GTP clock input + gtp_clk_i : in std_logic; + + -- TX path, synchronous to ch0_ref_clk_i + ch0_ref_clk_i : in std_logic; + + -- data input (8 bits, not 8b10b-encoded) + ch0_tx_data_i : in std_logic_vector(7 downto 0); + + -- 1 when tx_data_i contains a control code, 0 when it's a data byte + ch0_tx_k_i : in std_logic; + + -- disparity of the currently transmitted 8b10b code (1 = plus, 0 = minus). + -- Necessary for the PCS to generate proper frame termination sequences. + ch0_tx_disparity_o : out std_logic; + + -- Encoding error indication (1 = error, 0 = no error) + ch0_tx_enc_err_o : out std_logic; + + -- RX path, synchronous to ch0_rx_rbclk_o. + + -- RX recovered clock + ch0_rx_rbclk_o : out std_logic; + + -- 8b10b-decoded data output. The data output must be kept invalid before + -- the transceiver is locked on the incoming signal to prevent the EP from + -- detecting a false carrier. + ch0_rx_data_o : out std_logic_vector(7 downto 0); + + -- 1 when the byte on rx_data_o is a control code + ch0_rx_k_o : out std_logic; + + -- encoding error indication + ch0_rx_enc_err_o : out std_logic; + + -- RX bitslide indication, indicating the delay of the RX path of the + -- transceiver (in UIs). Must be valid when ch0_rx_data_o is valid. + ch0_rx_bitslide_o : out std_logic_vector(3 downto 0); + + -- reset input, active hi + ch0_rst_i : in std_logic; + + -- local loopback enable (Tx->Rx), active hi + ch0_loopen_i : in std_logic; + ch0_loopen_vec_i : in std_logic_vector(2 downto 0) := (others=>'0'); + + -- PRBS select (see Xilinx UG386 Table 3-15; "000" = Standard operation, pattern generator off) + ch0_tx_prbs_sel_i : in std_logic_vector(2 downto 0) := (others=>'0'); + + -- gtp0 ready: locked & aligned + ch0_rdy_o : out std_logic; + +-- Port 1 + ch1_ref_clk_i : in std_logic; + + ch1_tx_data_i : in std_logic_vector(7 downto 0) := "00000000"; + ch1_tx_k_i : in std_logic := '0'; + ch1_tx_disparity_o : out std_logic; + ch1_tx_enc_err_o : out std_logic; + + ch1_rx_data_o : out std_logic_vector(7 downto 0); + ch1_rx_rbclk_o : out std_logic; + ch1_rx_k_o : out std_logic; + ch1_rx_enc_err_o : out std_logic; + ch1_rx_bitslide_o : out std_logic_vector(3 downto 0); + + ch1_rst_i : in std_logic := '0'; + ch1_loopen_i : in std_logic := '0'; + ch1_loopen_vec_i : in std_logic_vector(2 downto 0) := (others=>'0'); + ch1_tx_prbs_sel_i: in std_logic_vector(2 downto 0) := (others=>'0'); + ch1_rdy_o : out std_logic; + +-- Serial I/O + + pad_txn0_o : out std_logic; + pad_txp0_o : out std_logic; + + pad_rxn0_i : in std_logic := '0'; + pad_rxp0_i : in std_logic := '0'; + + pad_txn1_o : out std_logic; + pad_txp1_o : out std_logic; + + pad_rxn1_i : in std_logic := '0'; + pad_rxp1_i : in std_logic := '0' + ); + + +end wr_gtp_phy_spartan6; + +architecture rtl of wr_gtp_phy_spartan6 is + + component WHITERABBITGTP_WRAPPER_TILE_SPARTAN6 + generic ( + TILE_SIM_GTPRESET_SPEEDUP : integer; + TILE_CLK25_DIVIDER_0 : integer; + TILE_CLK25_DIVIDER_1 : integer; + TILE_PLL_DIVSEL_FB_0 : integer; + TILE_PLL_DIVSEL_FB_1 : integer; + TILE_PLL_DIVSEL_REF_0 : integer; + TILE_PLL_DIVSEL_REF_1 : integer; + TILE_PLL_SOURCE_0 : string; + TILE_PLL_SOURCE_1 : string); + port ( + LOOPBACK0_IN : in std_logic_vector(2 downto 0); + LOOPBACK1_IN : in std_logic_vector(2 downto 0); + REFCLKOUT0_OUT : out std_logic; + REFCLKOUT1_OUT : out std_logic; + CLK00_IN : in std_logic; + CLK01_IN : in std_logic; + CLK10_IN : in std_logic; + CLK11_IN : in std_logic; + GTPRESET0_IN : in std_logic; + GTPRESET1_IN : in std_logic; + PLLLKDET0_OUT : out std_logic; + PLLLKDET1_OUT : out std_logic; + RESETDONE0_OUT : out std_logic; + RESETDONE1_OUT : out std_logic; + RXCHARISK0_OUT : out std_logic; + RXCHARISK1_OUT : out std_logic; + RXDISPERR0_OUT : out std_logic; + RXDISPERR1_OUT : out std_logic; + RXNOTINTABLE0_OUT : out std_logic; + RXNOTINTABLE1_OUT : out std_logic; + RXBYTEISALIGNED0_OUT : out std_logic; + RXBYTEISALIGNED1_OUT : out std_logic; + RXCOMMADET0_OUT : out std_logic; + RXCOMMADET1_OUT : out std_logic; + RXSLIDE0_IN : in std_logic; + RXSLIDE1_IN : in std_logic; + RXDATA0_OUT : out std_logic_vector(7 downto 0); + RXDATA1_OUT : out std_logic_vector(7 downto 0); + RXUSRCLK0_IN : in std_logic; + RXUSRCLK1_IN : in std_logic; + RXUSRCLK20_IN : in std_logic; + RXUSRCLK21_IN : in std_logic; + RXCDRRESET0_IN : in std_logic; + RXCDRRESET1_IN : in std_logic; + RXN0_IN : in std_logic; + RXN1_IN : in std_logic; + RXP0_IN : in std_logic; + RXP1_IN : in std_logic; + GTPCLKFBEAST_OUT : out std_logic_vector(1 downto 0); + GTPCLKFBWEST_OUT : out std_logic_vector(1 downto 0); + GTPCLKOUT0_OUT : out std_logic_vector(1 downto 0); + GTPCLKOUT1_OUT : out std_logic_vector(1 downto 0); + TXCHARISK0_IN : in std_logic; + TXCHARISK1_IN : in std_logic; + TXCHARDISPMODE0_IN : in std_logic; + TXCHARDISPMODE1_IN : in std_logic; + TXCHARDISPVAL0_IN : in std_logic; + TXCHARDISPVAL1_IN : in std_logic; + TXRUNDISP0_OUT : out std_logic_vector(3 downto 0); + TXRUNDISP1_OUT : out std_logic_vector(3 downto 0); + TXENPMAPHASEALIGN0_IN : in std_logic; + TXENPMAPHASEALIGN1_IN : in std_logic; + TXPMASETPHASE0_IN : in std_logic; + TXPMASETPHASE1_IN : in std_logic; + TXDATA0_IN : in std_logic_vector(7 downto 0); + TXDATA1_IN : in std_logic_vector(7 downto 0); + TXUSRCLK0_IN : in std_logic; + TXUSRCLK1_IN : in std_logic; + TXUSRCLK20_IN : in std_logic; + TXUSRCLK21_IN : in std_logic; + TXN0_OUT : out std_logic; + TXN1_OUT : out std_logic; + TXP0_OUT : out std_logic; + TXP1_OUT : out std_logic; + TXENPRBSTST0_IN : in std_logic_vector(2 downto 0); + TXENPRBSTST1_IN : in std_logic_vector(2 downto 0)); + end component; + + component gtp_phase_align + generic( + g_simulation : integer); + port ( + gtp_rst_i : in std_logic; + gtp_tx_clk_i : in std_logic; + gtp_tx_en_pma_phase_align_o : out std_logic; + gtp_tx_pma_set_phase_o : out std_logic; + align_en_i : in std_logic; + align_done_o : out std_logic); + end component; + + component gtp_bitslide + generic( + g_simulation : integer; + g_target : string := "spartan6"); + port ( + gtp_rst_i : in std_logic; + gtp_rx_clk_i : in std_logic; + gtp_rx_comma_det_i : in std_logic; + gtp_rx_byte_is_aligned_i : in std_logic; + serdes_ready_i : in std_logic; + gtp_rx_slide_o : out std_logic; + gtp_rx_cdr_rst_o : out std_logic; + bitslide_o : out std_logic_vector(4 downto 0); + synced_o : out std_logic); + end component; + + signal ch0_gtp_reset : std_logic; + signal ch0_gtp_loopback : std_logic_vector(2 downto 0) := "000"; + signal ch0_gtp_reset_done : std_logic; + signal ch0_gtp_pll_lockdet : std_logic; + signal ch0_tx_pma_set_phase : std_logic := '0'; + + signal ch0_tx_rundisp_vec : std_logic_vector(3 downto 0); + + signal ch0_tx_en_pma_phase_align : std_logic := '0'; + + signal ch0_rx_data_int : std_logic_vector(7 downto 0); + signal ch0_rx_k_int : std_logic; + signal ch0_rx_disperr, ch0_rx_invcode : std_logic; + + signal ch0_rx_byte_is_aligned : std_logic; + signal ch0_rx_comma_det : std_logic; + signal ch0_rx_cdr_rst : std_logic := '0'; + signal ch0_rx_rec_clk_pad : std_logic; + signal ch0_rx_rec_clk : std_logic; + signal ch0_rx_data : std_logic_vector(7 downto 0); + signal ch0_rx_k : std_logic; + signal ch0_rx_enc_err : std_logic; + signal ch0_rx_divclk : std_logic; + signal ch0_rx_slide : std_logic := '0'; + + signal ch0_gtp_locked : std_logic; + signal ch0_align_done : std_logic; + signal ch0_rx_synced : std_logic; + + signal ch0_gtp_clkout_int : std_logic_vector(1 downto 0); + signal ch0_rx_enable_output, ch0_rx_enable_output_synced : std_logic; + + + signal ch1_gtp_reset : std_logic; + signal ch1_gtp_loopback : std_logic_vector(2 downto 0) := "000"; + signal ch1_gtp_reset_done : std_logic; + signal ch1_gtp_pll_lockdet : std_logic; + signal ch1_tx_pma_set_phase : std_logic := '0'; + + signal ch1_tx_rundisp_vec : std_logic_vector(3 downto 0); + + signal ch1_tx_en_pma_phase_align : std_logic := '0'; + + signal ch1_rx_data_int : std_logic_vector(7 downto 0); + signal ch1_rx_k_int : std_logic; + signal ch1_rx_disperr, ch1_rx_invcode : std_logic; + + signal ch1_rx_byte_is_aligned : std_logic; + signal ch1_rx_comma_det : std_logic; + signal ch1_rx_cdr_rst : std_logic := '0'; + signal ch1_rx_rec_clk_pad : std_logic; + signal ch1_rx_rec_clk : std_logic; + signal ch1_rx_data : std_logic_vector(7 downto 0); + signal ch1_rx_k : std_logic; + signal ch1_rx_enc_err : std_logic; + + signal ch1_rx_divclk : std_logic; + signal ch1_rx_slide : std_logic := '0'; + + signal ch1_gtp_locked : std_logic; + signal ch1_align_done : std_logic; + signal ch1_rx_synced : std_logic; + + signal ch1_gtp_clkout_int : std_logic_vector(1 downto 0); + signal ch1_rx_enable_output, ch1_rx_enable_output_synced : std_logic; + + signal ch0_rst_synced : std_logic; + signal ch0_rst_d0 : std_logic; + signal ch0_reset_counter : unsigned(9 downto 0); + + signal ch1_rst_synced : std_logic; + signal ch1_rst_d0 : std_logic; + signal ch1_reset_counter : unsigned(9 downto 0); + + signal ch0_rx_bitslide_int : std_logic_vector(4 downto 0); + signal ch1_rx_bitslide_int : std_logic_vector(4 downto 0); + + signal ch0_ref_clk_in : std_logic_vector(1 downto 0); + signal ch1_ref_clk_in : std_logic_vector(1 downto 0); + + + signal ch0_disparity_set : std_logic; + signal ch1_disparity_set : std_logic; + + signal ch0_tx_chardispmode : std_logic; + signal ch1_tx_chardispmode : std_logic; + + signal ch0_tx_chardispval : std_logic; + signal ch1_tx_chardispval : std_logic; + + + + component enc_8b10b + port ( + clk_i : in std_logic; + rst_n_i : in std_logic; + ctrl_i : in std_logic; + in_8b_i : in std_logic_vector(7 downto 0); + err_o : out std_logic; + dispar_o : out std_logic; + out_10b_o : out std_logic_vector(9 downto 0)); + end component; + + signal ch0_rst_n : std_logic; + signal ch1_rst_n : std_logic; + + signal ch0_cur_disp : t_8b10b_disparity; + signal ch0_disp_pipe : std_logic_vector(1 downto 0); + signal ch1_cur_disp : t_8b10b_disparity; + signal ch1_disp_pipe : std_logic_vector(1 downto 0); + +begin -- rtl + ------------------------------------------------------------------------------- + -- Channel 0 logic + ------------------------------------------------------------------------------- + + gen_with_channel0 : if(g_enable_ch0 /= 0) generate + ch0_rst_n <= not ch0_gtp_reset; + ch0_tx_disparity_o <= ch0_disp_pipe(0); + + ch0_gtp_reset <= ch0_rst_synced or std_logic(not ch0_reset_counter(ch0_reset_counter'left)); + ch0_rx_rec_clk_pad <= ch0_gtp_clkout_int(1); + ch0_ref_clk_in(0) <= gtp_clk_i; + ch0_ref_clk_in(1) <= '0'; + -- Near-end PMA loopback or loopback selected with ch1_loopen_vec_i + ch0_gtp_loopback <= "010" when(ch0_loopen_i = '1') else + ch0_loopen_vec_i; + + gen_disp_ch0 : process(ch0_ref_clk_i) + begin + if rising_edge(ch0_ref_clk_i) then + if(ch0_tx_chardispmode = '1' or ch0_rst_n = '0') then + if(g_force_disparity = 0) then + ch0_cur_disp <= RD_MINUS; + else + ch0_cur_disp <= RD_PLUS; + end if; + ch0_disp_pipe <= (others => '0'); + else + ch0_cur_disp <= f_next_8b10b_disparity8(ch0_cur_disp, ch0_tx_k_i, ch0_tx_data_i); + ch0_disp_pipe(0) <= to_std_logic(ch0_cur_disp); + ch0_disp_pipe(1) <= ch0_disp_pipe(0); + end if; + end if; + end process; + + + p_gen_reset_ch0 : process(ch0_ref_clk_i) + begin + if rising_edge(ch0_ref_clk_i) then + + ch0_rst_d0 <= ch0_rst_i; + ch0_rst_synced <= ch0_rst_d0; + + if(ch0_rst_synced = '1') then + ch0_reset_counter <= (others => '0'); + else + if(ch0_reset_counter(ch0_reset_counter'left) = '0') then + ch0_reset_counter <= ch0_reset_counter + 1; + end if; + end if; + end if; + end process; + + + U_Rbclk_buf_ch0 : BUFIO2 + port map ( + DIVCLK => ch0_rx_divclk, + IOCLK => open, + SERDESSTROBE => open, + I => ch0_rx_rec_clk_pad); + + U_Rbclk_bufg_ch0 : BUFG + port map ( + I => ch0_rx_divclk, + O => ch0_rx_rec_clk + ); + + ch0_gtp_locked <= ch0_gtp_pll_lockdet and ch0_gtp_reset_done; + ch0_tx_enc_err_o <= '0'; + + U_align_ch0 : gtp_phase_align + generic map ( + g_simulation => g_simulation) + port map ( + gtp_rst_i => ch0_gtp_reset, + gtp_tx_clk_i => ch0_ref_clk_i, + gtp_tx_en_pma_phase_align_o => ch0_tx_en_pma_phase_align, + gtp_tx_pma_set_phase_o => ch0_tx_pma_set_phase, + align_en_i => ch0_gtp_locked, + align_done_o => ch0_align_done); + + U_bitslide_ch0 : gtp_bitslide + generic map ( + g_simulation => g_simulation) + port map ( + gtp_rst_i => ch0_gtp_reset, + gtp_rx_clk_i => ch0_rx_rec_clk, + gtp_rx_comma_det_i => ch0_rx_comma_det, + gtp_rx_byte_is_aligned_i => ch0_rx_byte_is_aligned, + serdes_ready_i => ch0_gtp_locked, + gtp_rx_slide_o => ch0_rx_slide, + gtp_rx_cdr_rst_o => ch0_rx_cdr_rst, + bitslide_o => ch0_rx_bitslide_int, + synced_o => ch0_rx_synced); + + ch0_rx_bitslide_o <= ch0_rx_bitslide_int(3 downto 0); + ch0_rx_enable_output <= ch0_rx_synced and ch0_align_done; + + U_sync_oen_ch0 : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => ch0_rx_rec_clk, + rst_n_i => '1', + data_i => ch0_rx_enable_output, + synced_o => ch0_rx_enable_output_synced, + npulse_o => open, + ppulse_o => open); + + p_force_proper_disparity_ch0 : process(ch0_ref_clk_i, ch0_gtp_reset) + begin + if (ch0_gtp_reset = '1') then + ch0_disparity_set <= '0'; + ch0_tx_chardispval <= '0'; + ch0_tx_chardispmode <= '0'; + elsif rising_edge(ch0_ref_clk_i) then + if(ch0_disparity_set = '0' and ch0_tx_k_i = '1' and ch0_tx_data_i = x"bc" and ch0_align_done = '1') then + ch0_disparity_set <= '1'; + if(g_force_disparity = 0) then + ch0_tx_chardispval <= '0'; + else + ch0_tx_chardispval <= '1'; + end if; + ch0_tx_chardispmode <= '1'; + else + ch0_tx_chardispmode <= '0'; + ch0_tx_chardispval <= '0'; + end if; + end if; + end process; + + p_gen_output_ch0 : process(ch0_rx_rec_clk, ch0_gtp_reset) + begin + if(ch0_gtp_reset = '1') then + ch0_rx_data <= (others => '0'); + ch0_rx_k <= '0'; + ch0_rx_enc_err <= '0'; + + elsif rising_edge(ch0_rx_rec_clk) then + if(ch0_rx_enable_output_synced = '0') then +-- make sure the output data is invalid when the link is down and that it will +-- trigger the sync loss detection + ch0_rx_data <= (others => '0'); + ch0_rx_k <= '1'; + ch0_rx_enc_err <= '1'; + else + ch0_rx_data <= ch0_rx_data_int; + ch0_rx_k <= ch0_rx_k_int; + ch0_rx_enc_err <= ch0_rx_disperr or ch0_rx_invcode; + end if; + end if; + end process; + + +-- drive the recovered clock output + ch0_rx_rbclk_o <= ch0_rx_rec_clk; + -- drive ch0 ready indicator as well + ch0_rdy_o <= ch0_rx_enable_output_synced; + -- Note that the above clock assignment takes one delta delay in a simulator. + -- In order to keep clock and data signals aligned, re-assign rx_data, rx_k + -- and rx_enc_err (also adding one delta delay). This is purely necessary for + -- proper simulation only. + ch0_rx_data_o <= ch0_rx_data; + ch0_rx_k_o <= ch0_rx_k; + ch0_rx_enc_err_o <= ch0_rx_enc_err; + end generate gen_with_channel0; + + ------------------------------------------------------------------------------- + -- Channel 1 logic + ------------------------------------------------------------------------------- + + gen_with_channel1 : if(g_enable_ch1 /= 0) generate + + ch1_rst_n <= not ch1_gtp_reset; + ch1_tx_disparity_o <= ch1_disp_pipe(1); + + ch1_gtp_reset <= ch1_rst_synced or std_logic(not ch1_reset_counter(ch1_reset_counter'left)); + ch1_rx_rec_clk_pad <= ch1_gtp_clkout_int(1); + ch1_ref_clk_in(0) <= gtp_clk_i; + ch1_ref_clk_in(1) <= '0'; + -- Near-end PMA loopback or loopback selected with ch1_loopen_vec_i + ch1_gtp_loopback <= "010" when(ch1_loopen_i = '1') else + ch1_loopen_vec_i; + + gen_disp_ch1 : process(ch1_ref_clk_i) + begin + if rising_edge(ch1_ref_clk_i) then + if(ch1_tx_chardispmode = '1' or ch1_rst_n = '0') then + if(g_force_disparity = 0) then + ch1_cur_disp <= RD_MINUS; + else + ch1_cur_disp <= RD_PLUS; + end if; + ch1_disp_pipe <= (others => '0'); + else + ch1_cur_disp <= f_next_8b10b_disparity8(ch1_cur_disp, ch1_tx_k_i, ch1_tx_data_i); + ch1_disp_pipe(0) <= to_std_logic(ch1_cur_disp); + ch1_disp_pipe(1) <= ch1_disp_pipe(0); + end if; + end if; + end process; + + p_gen_reset_ch1 : process(ch1_ref_clk_i) + begin + if rising_edge(ch1_ref_clk_i) then + + ch1_rst_d0 <= ch1_rst_i; + ch1_rst_synced <= ch1_rst_d0; + + if(ch1_rst_synced = '1') then + ch1_reset_counter <= (others => '0'); + else + if(ch1_reset_counter(ch1_reset_counter'left) = '0') then + ch1_reset_counter <= ch1_reset_counter + 1; + end if; + end if; + end if; + end process; + + U_Rbclk_buf_ch1 : BUFIO2 + port map ( + DIVCLK => ch1_rx_divclk, + IOCLK => open, + SERDESSTROBE => open, + I => ch1_rx_rec_clk_pad); + + U_Rbclk_bufg_ch1 : BUFG + port map ( + I => ch1_rx_divclk, + O => ch1_rx_rec_clk + ); + + ch1_gtp_locked <= ch1_gtp_pll_lockdet and ch1_gtp_reset_done; + ch1_tx_enc_err_o <= '0'; + + U_align_ch1 : gtp_phase_align + generic map ( + g_simulation => g_simulation) + port map ( + gtp_rst_i => ch1_gtp_reset, + gtp_tx_clk_i => ch1_ref_clk_i, + gtp_tx_en_pma_phase_align_o => ch1_tx_en_pma_phase_align, + gtp_tx_pma_set_phase_o => ch1_tx_pma_set_phase, + align_en_i => ch1_gtp_locked, + align_done_o => ch1_align_done); + + U_bitslide_ch1 : gtp_bitslide + generic map ( + g_simulation => g_simulation) + port map ( + gtp_rst_i => ch1_gtp_reset, + gtp_rx_clk_i => ch1_rx_rec_clk, + gtp_rx_comma_det_i => ch1_rx_comma_det, + gtp_rx_byte_is_aligned_i => ch1_rx_byte_is_aligned, + serdes_ready_i => ch1_gtp_locked, + gtp_rx_slide_o => ch1_rx_slide, + gtp_rx_cdr_rst_o => ch1_rx_cdr_rst, + bitslide_o => ch1_rx_bitslide_int, + synced_o => ch1_rx_synced); + + ch1_rx_bitslide_o <= ch1_rx_bitslide_int(3 downto 0); + ch1_rx_enable_output <= ch1_rx_synced and ch1_align_done; + + U_sync_oen_ch1 : gc_sync_ffs + generic map ( + g_sync_edge => "positive") + port map ( + clk_i => ch1_rx_rec_clk, + rst_n_i => '1', + data_i => ch1_rx_enable_output, + synced_o => ch1_rx_enable_output_synced, + npulse_o => open, + ppulse_o => open); + + p_force_proper_disparity_ch1 : process(ch1_ref_clk_i, ch1_gtp_reset) + begin + if (ch1_gtp_reset = '1') then + ch1_disparity_set <= '0'; + ch1_tx_chardispval <= '0'; + ch1_tx_chardispmode <= '0'; + + elsif rising_edge(ch1_ref_clk_i) then + if(ch1_disparity_set = '0' and ch1_tx_k_i = '1' and ch1_tx_data_i = x"bc" and ch1_align_done = '1') then + ch1_disparity_set <= '1'; + if(g_force_disparity = 0) then + ch1_tx_chardispval <= '0'; + else + ch1_tx_chardispval <= '1'; + end if; + ch1_tx_chardispmode <= '1'; + else + ch1_tx_chardispmode <= '0'; + ch1_tx_chardispval <= '0'; + end if; + end if; + end process; + + p_gen_output_ch1 : process(ch1_rx_rec_clk, ch1_rst_i) + begin + if(ch1_rst_i = '1') then + ch1_rx_data <= (others => '0'); + ch1_rx_k <= '0'; + ch1_rx_enc_err <= '0'; + + elsif rising_edge(ch1_rx_rec_clk) then + if(ch1_rx_enable_output_synced = '0') then +-- make sure the output data is invalid when the link is down and that it will +-- trigger the sync loss detection + ch1_rx_data <= (others => '0'); + ch1_rx_k <= '1'; + ch1_rx_enc_err <= '1'; + else + ch1_rx_data <= ch1_rx_data_int; + ch1_rx_k <= ch1_rx_k_int; + ch1_rx_enc_err <= ch1_rx_disperr or ch1_rx_invcode; + end if; + end if; + end process; + + ch1_rx_rbclk_o <= ch1_rx_rec_clk; + ch1_rdy_o <= ch1_rx_enable_output_synced; + -- Note that the above clock assignment takes one delta delay in a simulator. + -- In order to keep clock and data signals aligned, re-assign rx_data, rx_k + -- and rx_enc_err (also adding one delta delay). This is purely necessary for + -- proper simulation only. + ch1_rx_data_o <= ch1_rx_data; + ch1_rx_k_o <= ch1_rx_k; + ch1_rx_enc_err_o <= ch1_rx_enc_err; + end generate gen_with_channel1; + + U_GTP_TILE_INST : WHITERABBITGTP_WRAPPER_TILE_SPARTAN6 + generic map + ( + TILE_SIM_GTPRESET_SPEEDUP => g_simulation, -- Set to 1 to speed up sim reset + TILE_CLK25_DIVIDER_0 => 5, + TILE_CLK25_DIVIDER_1 => 5, + TILE_PLL_DIVSEL_FB_0 => 2, + TILE_PLL_DIVSEL_FB_1 => 2, + TILE_PLL_DIVSEL_REF_0 => 1, + TILE_PLL_DIVSEL_REF_1 => 1, + + -- + TILE_PLL_SOURCE_0 => "PLL0", + TILE_PLL_SOURCE_1 => "PLL1" + ) + port map + ( + ------------------------ Loopback and Powerdown Ports ---------------------- + LOOPBACK0_IN => ch0_gtp_loopback, + LOOPBACK1_IN => ch1_gtp_loopback, + --------------------------------- PLL Ports -------------------------------- + + REFCLKOUT0_OUT => open, + REFCLKOUT1_OUT => open, + CLK00_IN => ch0_ref_clk_in(0), + CLK01_IN => ch1_ref_clk_in(0), + CLK10_IN => ch0_ref_clk_in(1), + CLK11_IN => ch1_ref_clk_in(1), + GTPRESET0_IN => ch0_gtp_reset, + GTPRESET1_IN => ch1_gtp_reset, + PLLLKDET0_OUT => ch0_gtp_pll_lockdet, + PLLLKDET1_OUT => ch1_gtp_pll_lockdet, + RESETDONE0_OUT => ch0_gtp_reset_done, + RESETDONE1_OUT => ch1_gtp_reset_done, + + ----------------------- Receive Ports - 8b10b Decoder ---------------------- + RXCHARISK0_OUT => ch0_rx_k_int, + RXCHARISK1_OUT => ch1_rx_k_int, + RXDISPERR0_OUT => ch0_rx_disperr, + RXDISPERR1_OUT => ch1_rx_disperr, + RXNOTINTABLE0_OUT => ch0_rx_invcode, + RXNOTINTABLE1_OUT => ch1_rx_invcode, + + --------------- Receive Ports - Comma Detection and Alignment -------------- + RXBYTEISALIGNED0_OUT => ch0_rx_byte_is_aligned, + RXBYTEISALIGNED1_OUT => ch1_rx_byte_is_aligned, + RXCOMMADET0_OUT => ch0_rx_comma_det, + RXCOMMADET1_OUT => ch1_rx_comma_det, + RXSLIDE0_IN => ch0_rx_slide, + RXSLIDE1_IN => ch1_rx_slide, + + ------------------- Receive Ports - RX Data Path interface ----------------- + RXDATA0_OUT => ch0_rx_data_int, + RXDATA1_OUT => ch1_rx_data_int, + RXUSRCLK0_IN => ch0_rx_rec_clk, + RXUSRCLK1_IN => ch1_rx_rec_clk, + RXUSRCLK20_IN => ch0_rx_rec_clk, + RXUSRCLK21_IN => ch1_rx_rec_clk, + + ------- Receive Ports - RX Driver,OOB signalling,Coupling and Eq.,CDR ------ + RXCDRRESET0_IN => ch0_rx_cdr_rst, + RXCDRRESET1_IN => ch1_rx_cdr_rst, + RXN0_IN => pad_rxn0_i, + RXN1_IN => pad_rxn1_i, + RXP0_IN => pad_rxp0_i, + RXP1_IN => pad_rxp1_i, + + ---------------------------- TX/RX Datapath Ports -------------------------- + GTPCLKFBEAST_OUT => open, + GTPCLKFBWEST_OUT => open, + GTPCLKOUT0_OUT => ch0_gtp_clkout_int, + GTPCLKOUT1_OUT => ch1_gtp_clkout_int, + ------------------- Transmit Ports - 8b10b Encoder Control ----------------- + TXCHARISK0_IN => ch0_tx_k_i, + TXCHARISK1_IN => ch1_tx_k_i, + TXRUNDISP0_OUT => ch0_tx_rundisp_vec, + TXRUNDISP1_OUT => ch1_tx_rundisp_vec, + + TXCHARDISPMODE0_IN => ch0_tx_chardispmode, + TXCHARDISPMODE1_IN => ch1_tx_chardispmode, + TXCHARDISPVAL0_IN => ch0_tx_chardispval, + TXCHARDISPVAL1_IN => ch1_tx_chardispval, + + --------------- Transmit Ports - TX Buffer and Phase Alignment ------------- + TXENPMAPHASEALIGN0_IN => ch0_tx_en_pma_phase_align, + TXENPMAPHASEALIGN1_IN => ch1_tx_en_pma_phase_align, + TXPMASETPHASE0_IN => ch0_tx_pma_set_phase, + TXPMASETPHASE1_IN => ch1_tx_pma_set_phase, + ------------------ Transmit Ports - TX Data Path interface ----------------- + TXDATA0_IN => ch0_tx_data_i, + TXDATA1_IN => ch1_tx_data_i, + TXUSRCLK0_IN => ch0_ref_clk_i, + TXUSRCLK1_IN => ch1_ref_clk_i, + TXUSRCLK20_IN => ch0_ref_clk_i, + TXUSRCLK21_IN => ch1_ref_clk_i, + --------------- Transmit Ports - TX Driver and OOB signalling -------------- + TXN0_OUT => pad_txn0_o, + TXN1_OUT => pad_txn1_o, + TXP0_OUT => pad_txp0_o, + TXP1_OUT => pad_txp1_o, + --------------- Transmit Ports - TX PRBS Generator ------------------------- + TXENPRBSTST0_IN => ch0_tx_prbs_sel_i, + TXENPRBSTST1_IN => ch1_tx_prbs_sel_i + + ); + + +end rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_xilinx_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_xilinx_pkg.vhd new file mode 100644 index 000000000..5f9f76415 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_xilinx_pkg.vhd @@ -0,0 +1,192 @@ +------------------------------------------------------------------------------- +-- Title : Platform-dependent components needed for WR PTP Core on Xilinx +-- Project : WR PTP Core +-- URL : http://www.ohwr.org/projects/wr-cores/wiki/Wrpc_core +------------------------------------------------------------------------------- +-- File : wr_xilinx_pkg.vhd +-- Author : Maciej Lipinski, Grzegorz Daniluk, Dimitrios Lampridis +-- Company : CERN +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2016-2017 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +library work; +use work.endpoint_pkg.all; + +package wr_xilinx_pkg is + + component xwrc_platform_xilinx is + generic ( + g_fpga_family : string := "spartan6"; + g_with_external_clock_input : boolean := FALSE; + g_use_default_plls : boolean := TRUE; + g_gtp_enable_ch0 : integer := 0; + g_gtp_enable_ch1 : integer := 1; + g_simulation : integer := 0; + g_use_ibufgds : boolean := false); + port ( + areset_n_i : in std_logic := '1'; + clk_10m_ext_i : in std_logic := '0'; + clk_125m_gtp_p_i : in std_logic; + clk_125m_gtp_n_i : in std_logic; + clk_20m_vcxo_i : in std_logic := '0'; + clk_125m_pllref_i : in std_logic := '0'; + clk_125m_dmtd_i : in std_logic := '0'; + clk_62m5_dmtd_i : in std_logic := '0'; + clk_dmtd_locked_i : in std_logic := '1'; + clk_62m5_sys_i : in std_logic := '0'; + clk_sys_locked_i : in std_logic := '1'; + clk_125m_ref_i : in std_logic := '0'; + clk_ref_locked_i : in std_logic := '1'; + clk_125m_ext_i : in std_logic := '0'; + clk_ext_locked_i : in std_logic := '1'; + clk_ext_stopped_i : in std_logic := '0'; + clk_ext_rst_o : out std_logic; + sfp_txn_o : out std_logic; + sfp_txp_o : out std_logic; + sfp_rxn_i : in std_logic; + sfp_rxp_i : in std_logic; + sfp_tx_fault_i : in std_logic := '0'; + sfp_los_i : in std_logic := '0'; + sfp_tx_disable_o : out std_logic; + clk_62m5_sys_o : out std_logic; + clk_125m_ref_o : out std_logic; + clk_ref_locked_o : out std_logic; + clk_62m5_dmtd_o : out std_logic; + pll_locked_o : out std_logic; + clk_10m_ext_o : out std_logic; + phy8_o : out t_phy_8bits_to_wrc; + phy8_i : in t_phy_8bits_from_wrc := c_dummy_phy8_from_wrc; + phy16_o : out t_phy_16bits_to_wrc; + phy16_i : in t_phy_16bits_from_wrc := c_dummy_phy16_from_wrc; + ext_ref_mul_o : out std_logic; + ext_ref_mul_locked_o : out std_logic; + ext_ref_mul_stopped_o : out std_logic; + ext_ref_rst_i : in std_logic := '0'); + end component xwrc_platform_xilinx; + + component wr_gtp_phy_spartan6 + generic ( + g_enable_ch0 : integer := 1; + g_enable_ch1 : integer := 1; + g_simulation : integer := 0); + port ( + gtp_clk_i : in std_logic; + ch0_ref_clk_i : in std_logic := '0'; + ch0_tx_data_i : in std_logic_vector(7 downto 0) := "00000000"; + ch0_tx_k_i : in std_logic := '0'; + ch0_tx_disparity_o : out std_logic; + ch0_tx_enc_err_o : out std_logic; + ch0_rx_rbclk_o : out std_logic; + ch0_rx_data_o : out std_logic_vector(7 downto 0); + ch0_rx_k_o : out std_logic; + ch0_rx_enc_err_o : out std_logic; + ch0_rx_bitslide_o : out std_logic_vector(3 downto 0); + ch0_rst_i : in std_logic := '0'; + ch0_loopen_i : in std_logic := '0'; + ch0_loopen_vec_i : in std_logic_vector(2 downto 0) := (others => '0'); + ch0_tx_prbs_sel_i : in std_logic_vector(2 downto 0) := (others => '0'); + ch0_rdy_o : out std_logic; + ch1_ref_clk_i : in std_logic; + ch1_tx_data_i : in std_logic_vector(7 downto 0) := "00000000"; + ch1_tx_k_i : in std_logic := '0'; + ch1_tx_disparity_o : out std_logic; + ch1_tx_enc_err_o : out std_logic; + ch1_rx_data_o : out std_logic_vector(7 downto 0); + ch1_rx_rbclk_o : out std_logic; + ch1_rx_k_o : out std_logic; + ch1_rx_enc_err_o : out std_logic; + ch1_rx_bitslide_o : out std_logic_vector(3 downto 0); + ch1_rst_i : in std_logic := '0'; + ch1_loopen_i : in std_logic := '0'; + ch1_loopen_vec_i : in std_logic_vector(2 downto 0) := (others => '0'); + ch1_tx_prbs_sel_i : in std_logic_vector(2 downto 0) := (others => '0'); + ch1_rdy_o : out std_logic; + pad_txn0_o : out std_logic; + pad_txp0_o : out std_logic; + pad_rxn0_i : in std_logic := '0'; + pad_rxp0_i : in std_logic := '0'; + pad_txn1_o : out std_logic; + pad_txp1_o : out std_logic; + pad_rxn1_i : in std_logic := '0'; + pad_rxp1_i : in std_logic := '0'); + end component; + + component wr_gtx_phy_family7 is + generic ( + -- set to non-zero value to speed up the simulation by reducing some delays + g_simulation : integer := 0); + port ( + clk_gtx_i : in std_logic; + tx_out_clk_o : out std_logic; + tx_locked_o : out std_logic; + tx_data_i : in std_logic_vector(15 downto 0); + tx_k_i : in std_logic_vector(1 downto 0); + tx_disparity_o : out std_logic; + tx_enc_err_o : out std_logic; + rx_rbclk_o : out std_logic; + rx_data_o : out std_logic_vector(15 downto 0); + rx_k_o : out std_logic_vector(1 downto 0); + rx_enc_err_o : out std_logic; + rx_bitslide_o : out std_logic_vector(4 downto 0); + rst_i : in std_logic; + loopen_i : in std_logic_vector(2 downto 0); + tx_prbs_sel_i : in std_logic_vector(2 downto 0); + pad_txn_o : out std_logic; + pad_txp_o : out std_logic; + pad_rxn_i : in std_logic := '0'; + pad_rxp_i : in std_logic := '0'; + rdy_o : out std_logic); + end component; + + component wr_gtp_phy_family7 is + generic ( + -- set to non-zero value to speed up the simulation by reducing some delays + g_simulation : integer := 0); + port ( + clk_gtp_i : in std_logic; + tx_out_clk_o : out std_logic; + tx_locked_o : out std_logic; + tx_data_i : in std_logic_vector(15 downto 0); + tx_k_i : in std_logic_vector(1 downto 0); + tx_disparity_o : out std_logic; + tx_enc_err_o : out std_logic; + rx_rbclk_o : out std_logic; + rx_data_o : out std_logic_vector(15 downto 0); + rx_k_o : out std_logic_vector(1 downto 0); + rx_enc_err_o : out std_logic; + rx_bitslide_o : out std_logic_vector(4 downto 0); + rst_i : in std_logic; + loopen_i : in std_logic_vector(2 downto 0); + tx_prbs_sel_i : in std_logic_vector(2 downto 0); + pad_txn_o : out std_logic; + pad_txp_o : out std_logic; + pad_rxn_i : in std_logic := '0'; + pad_rxp_i : in std_logic := '0'; + rdy_o : out std_logic); + end component; + +end wr_xilinx_pkg; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/xwrc_platform_xilinx.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/xwrc_platform_xilinx.vhd new file mode 100644 index 000000000..c36d7c3c1 --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/xwrc_platform_xilinx.vhd @@ -0,0 +1,1095 @@ +------------------------------------------------------------------------------- +-- Title : Platform-dependent components needed for WR PTP Core on Xilinx +-- Project : WR PTP Core +-- URL : http://www.ohwr.org/projects/wr-cores/wiki/Wrpc_core +------------------------------------------------------------------------------- +-- File : wrc_platform_xilinx.vhd +-- Author : Maciej Lipinski, Grzegorz Daniluk, Dimitrios Lampridis +-- Company : CERN +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: +-- This module instantiates platform-specific modules that are needed by the +-- WR PTP Core (WRPC) to interface hardware on Xilinx FPGA. In particular it +-- contains: +-- * PHY +-- * PLLs +-- * buffers +-- +------------------------------------------------------------------------------- +-- +-- Copyright (c) 2016-2017 CERN / BE-CO-HT +-- +-- This source file is free software; you can redistribute it +-- and/or modify it under the terms of the GNU Lesser General +-- Public License as published by the Free Software Foundation; +-- either version 2.1 of the License, or (at your option) any +-- later version +-- +-- This source is distributed in the hope that it will be +-- useful, but WITHOUT ANY WARRANTY; without even the implied +-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +-- PURPOSE. See the GNU Lesser General Public License for more +-- details +-- +-- You should have received a copy of the GNU Lesser General +-- Public License along with this source; if not, download it +-- from http://www.gnu.org/licenses/lgpl-2.1.html +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +library work; +use work.endpoint_pkg.all; +use work.gencores_pkg.all; +use work.wr_xilinx_pkg.all; + +library unisim; +use unisim.vcomponents.all; + +entity xwrc_platform_xilinx is + generic + ( + -- Define the family/model of Xilinx FPGA + -- (supported: for now only spartan6) + g_fpga_family : string := "spartan6"; + -- Select whether to include external ref clock input + g_with_external_clock_input : boolean := FALSE; + -- Set to FALSE if you want to instantiate your own PLLs + g_use_default_plls : boolean := TRUE; + -- Select GTP channel to use (only one can be active) + g_gtp_enable_ch0 : integer := 0; + g_gtp_enable_ch1 : integer := 1; + -- Set to TRUE will speed up some initialization processes + g_simulation : integer := 0; + g_use_ibufgds : boolean := false + ); + port ( + --------------------------------------------------------------------------- + -- Asynchronous reset (active low) + --------------------------------------------------------------------------- + areset_n_i : in std_logic; + --------------------------------------------------------------------------- + -- 10MHz ext ref clock input (g_with_external_clock_input = TRUE) + --------------------------------------------------------------------------- + clk_10m_ext_i : in std_logic := '0'; + --------------------------------------------------------------------------- + -- 125 MHz GTP/GTX reference + -- If g_use_ibufgds=false then connect buffered clock to clk_125m_gtp_p_i + --------------------------------------------------------------------------- + clk_125m_gtp_p_i : in std_logic; + clk_125m_gtp_n_i : in std_logic; + --------------------------------------------------------------------------- + -- Clock inputs for default PLLs (g_use_default_plls = TRUE) + --------------------------------------------------------------------------- + -- 20MHz VCXO clock + clk_20m_vcxo_i : in std_logic := '0'; + -- 125.000 MHz PLL reference + clk_125m_pllref_i : in std_logic := '0'; + -- 124.992 MHz DMTD reference (CLBv3 reference design) + clk_125m_dmtd_i : in std_logic := '0'; + --------------------------------------------------------------------------- + -- Clock inputs from custom PLLs (g_use_default_plls = FALSE) + --------------------------------------------------------------------------- + -- 62.5MHz DMTD offset clock and lock status + clk_62m5_dmtd_i : in std_logic := '0'; + clk_dmtd_locked_i : in std_logic := '1'; + -- 62.5MHz Main system clock and lock status + clk_62m5_sys_i : in std_logic := '0'; + clk_sys_locked_i : in std_logic := '1'; + -- 125MHz Reference clock + clk_125m_ref_i : in std_logic := '0'; + clk_ref_locked_i : in std_logic := '1'; + -- 125MHz derived from 10MHz external reference and lock status + -- (when g_with_external_clock_input = TRUE) + clk_125m_ext_i : in std_logic := '0'; + clk_ext_locked_i : in std_logic := '1'; + clk_ext_stopped_i : in std_logic := '0'; + clk_ext_rst_o : out std_logic; + --------------------------------------------------------------------------- + -- SFP + --------------------------------------------------------------------------- + sfp_txn_o : out std_logic; + sfp_txp_o : out std_logic; + sfp_rxn_i : in std_logic; + sfp_rxp_i : in std_logic; + sfp_tx_fault_i : in std_logic := '0'; + sfp_los_i : in std_logic := '0'; + sfp_tx_disable_o : out std_logic; + --------------------------------------------------------------------------- + --Interface to WR PTP Core (WRPC) + --------------------------------------------------------------------------- + -- PLL outputs + clk_62m5_sys_o : out std_logic; + clk_125m_ref_o : out std_logic; + clk_ref_locked_o : out std_logic; + clk_62m5_dmtd_o : out std_logic; + pll_locked_o : out std_logic; + clk_10m_ext_o : out std_logic; + -- PHY + phy8_o : out t_phy_8bits_to_wrc; + phy8_i : in t_phy_8bits_from_wrc := c_dummy_phy8_from_wrc; + phy16_o : out t_phy_16bits_to_wrc; + phy16_i : in t_phy_16bits_from_wrc := c_dummy_phy16_from_wrc; + -- External reference + ext_ref_mul_o : out std_logic; + ext_ref_mul_locked_o : out std_logic; + ext_ref_mul_stopped_o : out std_logic; + ext_ref_rst_i : in std_logic := '0' + ); + +end entity xwrc_platform_xilinx; + +architecture rtl of xwrc_platform_xilinx is + + ----------------------------------------------------------------------------- + -- Signals declaration + ----------------------------------------------------------------------------- + + signal pll_arst : std_logic := '0'; + signal clk_125m_pllref_buf : std_logic; + +begin -- architecture rtl + + ----------------------------------------------------------------------------- + -- Check for unsupported features and/or misconfiguration + ----------------------------------------------------------------------------- + gen_unknown_fpga : if (g_fpga_family /= "spartan6" and g_fpga_family /= "kintex7" and g_fpga_family /= "artix7") generate + assert FALSE + report "Xilinx FPGA family [" & g_fpga_family & "] is not supported" + severity ERROR; + end generate gen_unknown_fpga; + + gen_single_gtp_channel : if (g_gtp_enable_ch0 /= 0 and g_gtp_enable_ch1 /= 0) + generate + assert FALSE + report "Cannot enable both GTP channels simultaneously" + severity ERROR; + end generate gen_single_gtp_channel; + + ----------------------------------------------------------------------------- + -- Clock PLLs + ----------------------------------------------------------------------------- + + -- active high async reset for PLLs + pll_arst <= not areset_n_i; + + gen_default_plls : if (g_use_default_plls = TRUE) generate + + -- Default PLL setup consists of two PLLs. + -- One takes a 125MHz clock signal as input and produces the + -- 62.5MHz WR PTP core main system clock. + -- The other PLL takes a 20MHz clock signal as input and produces the + -- 62.5MHz DMTD clock. + -- + -- A third PLL is instantiated if also g_with_external_clock_input = TRUE. + -- In that case, a 10MHz external reference is multiplied to generate a + -- 125MHz reference clock + gen_spartan6_default_plls : if (g_fpga_family = "spartan6") generate + + signal clk_sys : std_logic; + signal clk_sys_out : std_logic; + signal clk_sys_fb : std_logic; + signal pll_sys_locked : std_logic; + signal clk_dmtd : std_logic; + signal clk_dmtd_fb : std_logic; + signal pll_dmtd_locked : std_logic; + signal clk_20m_vcxo_buf : std_logic; + + begin --gen_spartan6_default_plls + + -- System PLL + cmp_sys_clk_pll : PLL_BASE + generic map ( + BANDWIDTH => "OPTIMIZED", + CLK_FEEDBACK => "CLKFBOUT", + COMPENSATION => "INTERNAL", + DIVCLK_DIVIDE => 1, + CLKFBOUT_MULT => 8, + CLKFBOUT_PHASE => 0.000, + CLKOUT0_DIVIDE => 16, + CLKOUT0_PHASE => 0.000, + CLKOUT0_DUTY_CYCLE => 0.500, + CLKIN_PERIOD => 8.0, + REF_JITTER => 0.016) + port map ( + CLKFBOUT => clk_sys_fb, + CLKOUT0 => clk_sys, + LOCKED => pll_sys_locked, + RST => pll_arst, + CLKFBIN => clk_sys_fb, + CLKIN => clk_125m_pllref_buf); + + -- System PLL input clock buffer + cmp_clk_sys_buf_i : BUFG + port map ( + O => clk_125m_pllref_buf, + I => clk_125m_pllref_i); + + -- System PLL output clock buffer + cmp_clk_sys_buf_o : BUFG + port map ( + O => clk_sys_out, + I => clk_sys); + + clk_62m5_sys_o <= clk_sys_out; + clk_125m_ref_o <= clk_125m_pllref_buf; + pll_locked_o <= pll_sys_locked and pll_dmtd_locked; + clk_ref_locked_o <= '1'; + + -- DMTD PLL + cmp_dmtd_clk_pll : PLL_BASE + generic map ( + BANDWIDTH => "OPTIMIZED", + CLK_FEEDBACK => "CLKFBOUT", + COMPENSATION => "INTERNAL", + DIVCLK_DIVIDE => 1, + CLKFBOUT_MULT => 50, + CLKFBOUT_PHASE => 0.000, + CLKOUT0_DIVIDE => 16, + CLKOUT0_PHASE => 0.000, + CLKOUT0_DUTY_CYCLE => 0.500, + CLKIN_PERIOD => 50.0, + REF_JITTER => 0.016) + port map ( + CLKFBOUT => clk_dmtd_fb, + CLKOUT0 => clk_dmtd, + LOCKED => pll_dmtd_locked, + RST => pll_arst, + CLKFBIN => clk_dmtd_fb, + CLKIN => clk_20m_vcxo_buf); + + -- DMTD PLL input clock buffer + cmp_clk_dmtd_buf_i : BUFG + port map ( + O => clk_20m_vcxo_buf, + I => clk_20m_vcxo_i); + + -- DMTD PLL output clock buffer + cmp_clk_dmtd_buf_o : BUFG + port map ( + O => clk_62m5_dmtd_o, + I => clk_dmtd); + + + gen_spartan6_ext_ref_pll : if (g_with_external_clock_input = TRUE) generate + + signal clk_ext_fbi : std_logic; + signal clk_ext_fbo : std_logic; + signal clk_ext_buf : std_logic; + signal clk_ext : std_logic; + signal clk_ext_stat : std_logic_vector(7 downto 0); + signal pll_ext_rst : std_logic; + + begin --gen_spartan6_ext_ref_pll + + -- External reference DCM + cmp_ext_ref_pll : DCM_SP + generic map + (CLKDV_DIVIDE => 2.000, + CLKFX_DIVIDE => 2, + CLKFX_MULTIPLY => 25, + CLKIN_DIVIDE_BY_2 => FALSE, + CLKIN_PERIOD => 100.0, + CLKOUT_PHASE_SHIFT => "NONE", + CLK_FEEDBACK => "1X", + DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", + PHASE_SHIFT => 0, + STARTUP_WAIT => FALSE) + port map + -- Input clock + (CLKIN => clk_ext_buf, + CLKFB => clk_ext_fbi, + -- Output clocks + CLK0 => clk_ext_fbo, + CLKFX => clk_ext, + -- Ports for dynamic phase shift + PSCLK => '0', + PSEN => '0', + PSINCDEC => '0', + PSDONE => open, + -- Other control and status signals + LOCKED => ext_ref_mul_locked_o, + STATUS => clk_ext_stat, + RST => pll_ext_rst, + -- Unused pin, tie low + DSSEN => '0'); + + ext_ref_mul_stopped_o <= clk_ext_stat(1); + + -- External reference input buffer + cmp_clk_ext_buf_i : BUFG + port map + (O => clk_ext_buf, + I => clk_10m_ext_i); + + clk_10m_ext_o <= clk_ext_buf; + + -- External reference feedback buffer + cmp_clk_ext_buf_fb : BUFG + port map + (O => clk_ext_fbi, + I => clk_ext_fbo); + + -- External reference output buffer + cmp_clk_ext_buf_o : BUFG + port map + (O => ext_ref_mul_o, + I => clk_ext); + + cmp_extend_ext_reset : gc_extend_pulse + generic map ( + g_width => 1000) + port map ( + clk_i => clk_sys_out, + rst_n_i => pll_sys_locked, + pulse_i => ext_ref_rst_i, + extended_o => pll_ext_rst); + + end generate gen_spartan6_ext_ref_pll; + + end generate gen_spartan6_default_plls; + + --------------------------------------------------------------------------- + -- Kintex7 PLLs + --------------------------------------------------------------------------- + gen_kintex7_default_plls : if (g_fpga_family = "kintex7") generate + + signal clk_sys : std_logic; + signal clk_sys_out : std_logic; + signal clk_sys_fb : std_logic; + signal pll_sys_locked : std_logic; + signal clk_dmtd : std_logic; + signal clk_dmtd_fb : std_logic; + signal pll_dmtd_locked : std_logic; + signal clk_20m_vcxo_buf : std_logic; + + begin + -- System PLL (125 MHz -> 62.5 MHz) + cmp_sys_clk_pll : MMCME2_ADV + generic map ( + BANDWIDTH => "OPTIMIZED", + CLKOUT4_CASCADE => false, + COMPENSATION => "ZHOLD", + STARTUP_WAIT => false, + DIVCLK_DIVIDE => 1, + CLKFBOUT_MULT_F => 8.000, -- 125 MHz x 8. + CLKFBOUT_PHASE => 0.000, + CLKFBOUT_USE_FINE_PS => false, + + CLKOUT0_DIVIDE_F => 16.000, -- 62.5 MHz sys clock + CLKOUT0_PHASE => 0.000, + CLKOUT0_DUTY_CYCLE => 0.500, + CLKOUT0_USE_FINE_PS => false, + + CLKIN1_PERIOD => 8.000, -- 8 ns means 125 MHz + REF_JITTER1 => 0.010) + port map ( + -- Output clocks + CLKFBOUT => clk_sys_fb, + CLKOUT0 => clk_sys, + -- Input clock control + CLKFBIN => clk_sys_fb, + CLKIN1 => clk_125m_pllref_buf, + CLKIN2 => '0', + -- Tied to always select the primary input clock + CLKINSEL => '1', + -- Ports for dynamic reconfiguration + DADDR => (others => '0'), + DCLK => '0', + DEN => '0', + DI => (others => '0'), + DO => open, + DRDY => open, + DWE => '0', + -- Ports for dynamic phase shift + PSCLK => '0', + PSEN => '0', + PSINCDEC => '0', + PSDONE => open, + -- Other control and status signals + LOCKED => pll_sys_locked, + CLKINSTOPPED => open, + CLKFBSTOPPED => open, + PWRDWN => '0', + RST => pll_arst); + + -- System PLL output clock buffer + cmp_clk_sys_buf_o : BUFG + port map ( + I => clk_sys, + O => clk_sys_out); + + clk_62m5_sys_o <= clk_sys_out; + pll_locked_o <= pll_dmtd_locked and pll_sys_locked; + + -- DMTD PLL (20 MHz -> ~62,5 MHz) + cmp_dmtd_clk_pll : MMCME2_ADV + generic map ( + BANDWIDTH => "OPTIMIZED", + CLKOUT4_CASCADE => false, + COMPENSATION => "ZHOLD", + STARTUP_WAIT => false, + DIVCLK_DIVIDE => 1, + CLKFBOUT_MULT_F => 50.000, -- 20 MHz -> 1 GHz + CLKFBOUT_PHASE => 0.000, + CLKFBOUT_USE_FINE_PS => false, + CLKOUT0_DIVIDE_F => 16.000, -- 1GHz/16 -> 62.5 MHz + CLKOUT0_PHASE => 0.000, + CLKOUT0_DUTY_CYCLE => 0.500, + CLKOUT0_USE_FINE_PS => false, + CLKOUT1_DIVIDE => 16, -- 1GHz/16 -> 62.5 MHz + CLKOUT1_PHASE => 0.000, + CLKOUT1_DUTY_CYCLE => 0.500, + CLKOUT1_USE_FINE_PS => false, + CLKIN1_PERIOD => 50.000, -- 50ns for 20 MHz + REF_JITTER1 => 0.010) + port map ( + -- Output clocks + CLKFBOUT => clk_dmtd_fb, + CLKOUT0 => clk_dmtd, + -- Input clock control + CLKFBIN => clk_dmtd_fb, + CLKIN1 => clk_20m_vcxo_buf, + CLKIN2 => '0', + -- Tied to always select the primary input clock + CLKINSEL => '1', + -- Ports for dynamic reconfiguration + DADDR => (others => '0'), + DCLK => '0', + DEN => '0', + DI => (others => '0'), + DO => open, + DRDY => open, + DWE => '0', + -- Ports for dynamic phase shift + PSCLK => '0', + PSEN => '0', + PSINCDEC => '0', + PSDONE => open, + -- Other control and status signals + LOCKED => pll_dmtd_locked, + CLKINSTOPPED => open, + CLKFBSTOPPED => open, + PWRDWN => '0', + RST => pll_arst); + + -- DMTD PLL input clock buffer + cmp_clk_dmtd_buf_i : BUFG + port map ( + O => clk_20m_vcxo_buf, + I => clk_20m_vcxo_i); + + -- DMTD PLL output clock buffer + cmp_clk_dmtd_buf_o : BUFG + port map ( + O => clk_62m5_dmtd_o, + I => clk_dmtd); + + -- External 10MHz reference PLL for Kintex7 + gen_kintex7_ext_ref_pll : if (g_with_external_clock_input = TRUE) generate + + signal clk_ext_fbi : std_logic; + signal clk_ext_fbo : std_logic; + signal clk_ext_buf : std_logic; + signal clk_ext_mul : std_logic; + signal pll_ext_rst : std_logic; + + begin + mmcm_adv_inst : MMCME2_ADV + generic map ( + BANDWIDTH => "OPTIMIZED", + CLKOUT4_CASCADE => FALSE, + COMPENSATION => "ZHOLD", + STARTUP_WAIT => FALSE, + DIVCLK_DIVIDE => 1, + CLKFBOUT_MULT_F => 62.500, + CLKFBOUT_PHASE => 0.000, + CLKFBOUT_USE_FINE_PS => FALSE, + CLKOUT0_DIVIDE_F => 10.000, + CLKOUT0_PHASE => 0.000, + CLKOUT0_DUTY_CYCLE => 0.500, + CLKOUT0_USE_FINE_PS => FALSE, + CLKIN1_PERIOD => 100.000, + REF_JITTER1 => 0.005) + port map ( + -- Output clocks + CLKFBOUT => clk_ext_fbo, + CLKOUT0 => clk_ext_mul, + -- Input clock control + CLKFBIN => clk_ext_fbi, + CLKIN1 => clk_ext_buf, + CLKIN2 => '0', + -- Tied to always select the primary input clock + CLKINSEL => '1', + -- Ports for dynamic reconfiguration + DADDR => (others => '0'), + DCLK => '0', + DEN => '0', + DI => (others => '0'), + DO => open, + DRDY => open, + DWE => '0', + -- Ports for dynamic phase shift + PSCLK => '0', + PSEN => '0', + PSINCDEC => '0', + PSDONE => open, -- Other control and status signals + LOCKED => ext_ref_mul_locked_o, + CLKINSTOPPED => ext_ref_mul_stopped_o, + CLKFBSTOPPED => open, + PWRDWN => '0', + RST => pll_ext_rst); + + -- External reference input buffer + cmp_clk_ext_buf_i : BUFG + port map ( + O => clk_ext_buf, + I => clk_10m_ext_i); + + clk_10m_ext_o <= clk_ext_buf; + + -- External reference feedback buffer + cmp_clk_ext_buf_fb : BUFG + port map ( + O => clk_ext_fbi, + I => clk_ext_fbo); + + -- External reference output buffer + cmp_clk_ext_buf_o : BUFG + port map ( + O => ext_ref_mul_o, + I => clk_ext_mul); + + cmp_extend_ext_reset : gc_extend_pulse + generic map ( + g_width => 1000) + port map ( + clk_i => clk_sys_out, + rst_n_i => pll_sys_locked, + pulse_i => ext_ref_rst_i, + extended_o => pll_ext_rst); + + end generate gen_kintex7_ext_ref_pll; + + end generate gen_kintex7_default_plls; + + --------------------------------------------------------------------------- + -- Artix7 PLLs + --------------------------------------------------------------------------- + gen_artix7_default_plls : if (g_fpga_family = "artix7") generate + + signal clk_sys : std_logic; + signal clk_sys_out : std_logic; + signal clk_sys_fb : std_logic; + signal pll_sys_locked : std_logic; + signal clk_dmtd : std_logic := '0'; -- initialize for simulation +-- signal clk_dmtd_fb : std_logic; +-- signal pll_dmtd_locked : std_logic; +-- signal clk_20m_vcxo_buf : std_logic; + + begin + -- System PLL (125 MHz -> 62.5 MHz) + cmp_sys_clk_pll : MMCME2_ADV + generic map ( + BANDWIDTH => "OPTIMIZED", + CLKOUT4_CASCADE => false, + COMPENSATION => "ZHOLD", + STARTUP_WAIT => false, + DIVCLK_DIVIDE => 1, + CLKFBOUT_MULT_F => 8.000, -- 125 MHz x 8. + CLKFBOUT_PHASE => 0.000, + CLKFBOUT_USE_FINE_PS => false, + + CLKOUT0_DIVIDE_F => 16.000, -- 62.5 MHz sys clock + CLKOUT0_PHASE => 0.000, + CLKOUT0_DUTY_CYCLE => 0.500, + CLKOUT0_USE_FINE_PS => false, + + CLKIN1_PERIOD => 8.000, -- 8 ns means 125 MHz + REF_JITTER1 => 0.010) + port map ( + -- Output clocks + CLKFBOUT => clk_sys_fb, + CLKOUT0 => clk_sys, + -- Input clock control + CLKFBIN => clk_sys_fb, + CLKIN1 => clk_125m_pllref_buf, + CLKIN2 => '0', + -- Tied to always select the primary input clock + CLKINSEL => '1', + -- Ports for dynamic reconfiguration + DADDR => (others => '0'), + DCLK => '0', + DEN => '0', + DI => (others => '0'), + DO => open, + DRDY => open, + DWE => '0', + -- Ports for dynamic phase shift + PSCLK => '0', + PSEN => '0', + PSINCDEC => '0', + PSDONE => open, + -- Other control and status signals + LOCKED => pll_sys_locked, + CLKINSTOPPED => open, + CLKFBSTOPPED => open, + PWRDWN => '0', + RST => pll_arst); + + -- System PLL output clock buffer + cmp_clk_sys_buf_o : BUFG + port map ( + I => clk_sys, + O => clk_sys_out); + + clk_62m5_sys_o <= clk_sys_out; +-- pll_locked_o <= pll_dmtd_locked and pll_sys_locked; + pll_locked_o <= pll_sys_locked; + +-- -- DMTD PLL (20 MHz -> ~62,5 MHz) +-- cmp_dmtd_clk_pll : MMCME2_ADV +-- generic map ( +-- BANDWIDTH => "OPTIMIZED", +-- CLKOUT4_CASCADE => false, +-- COMPENSATION => "ZHOLD", +-- STARTUP_WAIT => false, +-- DIVCLK_DIVIDE => 1, +-- CLKFBOUT_MULT_F => 50.000, -- 20 MHz -> 1 GHz +-- CLKFBOUT_PHASE => 0.000, +-- CLKFBOUT_USE_FINE_PS => false, +-- CLKOUT0_DIVIDE_F => 16.000, -- 1GHz/16 -> 62.5 MHz +-- CLKOUT0_PHASE => 0.000, +-- CLKOUT0_DUTY_CYCLE => 0.500, +-- CLKOUT0_USE_FINE_PS => false, +-- CLKOUT1_DIVIDE => 16, -- 1GHz/16 -> 62.5 MHz +-- CLKOUT1_PHASE => 0.000, +-- CLKOUT1_DUTY_CYCLE => 0.500, +-- CLKOUT1_USE_FINE_PS => false, +-- CLKIN1_PERIOD => 50.000, -- 50ns for 20 MHz +-- REF_JITTER1 => 0.010) +-- port map ( +-- -- Output clocks +-- CLKFBOUT => clk_dmtd_fb, +-- CLKOUT0 => clk_dmtd, +-- -- Input clock control +-- CLKFBIN => clk_dmtd_fb, +-- CLKIN1 => clk_20m_vcxo_buf, +-- CLKIN2 => '0', +-- -- Tied to always select the primary input clock +-- CLKINSEL => '1', +-- -- Ports for dynamic reconfiguration +-- DADDR => (others => '0'), +-- DCLK => '0', +-- DEN => '0', +-- DI => (others => '0'), +-- DO => open, +-- DRDY => open, +-- DWE => '0', +-- -- Ports for dynamic phase shift +-- PSCLK => '0', +-- PSEN => '0', +-- PSINCDEC => '0', +-- PSDONE => open, +-- -- Other control and status signals +-- LOCKED => pll_dmtd_locked, +-- CLKINSTOPPED => open, +-- CLKFBSTOPPED => open, +-- PWRDWN => '0', +-- RST => pll_arst); +-- +-- -- DMTD PLL input clock buffer +-- cmp_clk_dmtd_buf_i : BUFG +-- port map ( +-- O => clk_20m_vcxo_buf, +-- I => clk_20m_vcxo_i); +-- + + -- DMTD Div2 (124.9920 MHz -> 62,496 MHz) + process(clk_125m_dmtd_i) + begin + if rising_edge(clk_125m_dmtd_i) then + clk_dmtd <= not clk_dmtd; + end if; + end process; + + -- DMTD PLL output clock buffer + cmp_clk_dmtd_buf_o : BUFG + port map ( + O => clk_62m5_dmtd_o, + I => clk_dmtd); + + -- External 10MHz reference PLL for Artix7 + gen_artix7_ext_ref_pll : if (g_with_external_clock_input = TRUE) generate + + signal clk_ext_fbi : std_logic; + signal clk_ext_fbo : std_logic; + signal clk_ext_buf : std_logic; + signal clk_ext_mul : std_logic; + signal pll_ext_rst : std_logic; + + begin + mmcm_adv_inst : MMCME2_ADV + generic map ( + BANDWIDTH => "OPTIMIZED", + CLKOUT4_CASCADE => FALSE, + COMPENSATION => "ZHOLD", + STARTUP_WAIT => FALSE, + DIVCLK_DIVIDE => 1, + CLKFBOUT_MULT_F => 62.500, + CLKFBOUT_PHASE => 0.000, + CLKFBOUT_USE_FINE_PS => FALSE, + CLKOUT0_DIVIDE_F => 10.000, + CLKOUT0_PHASE => 0.000, + CLKOUT0_DUTY_CYCLE => 0.500, + CLKOUT0_USE_FINE_PS => FALSE, + CLKIN1_PERIOD => 100.000, + REF_JITTER1 => 0.005) + port map ( + -- Output clocks + CLKFBOUT => clk_ext_fbo, + CLKOUT0 => clk_ext_mul, + -- Input clock control + CLKFBIN => clk_ext_fbi, + CLKIN1 => clk_ext_buf, + CLKIN2 => '0', + -- Tied to always select the primary input clock + CLKINSEL => '1', + -- Ports for dynamic reconfiguration + DADDR => (others => '0'), + DCLK => '0', + DEN => '0', + DI => (others => '0'), + DO => open, + DRDY => open, + DWE => '0', + -- Ports for dynamic phase shift + PSCLK => '0', + PSEN => '0', + PSINCDEC => '0', + PSDONE => open, -- Other control and status signals + LOCKED => ext_ref_mul_locked_o, + CLKINSTOPPED => ext_ref_mul_stopped_o, + CLKFBSTOPPED => open, + PWRDWN => '0', + RST => pll_ext_rst); + + -- External reference input buffer + cmp_clk_ext_buf_i : BUFG + port map ( + O => clk_ext_buf, + I => clk_10m_ext_i); + + clk_10m_ext_o <= clk_ext_buf; + + -- External reference feedback buffer + cmp_clk_ext_buf_fb : BUFG + port map ( + O => clk_ext_fbi, + I => clk_ext_fbo); + + -- External reference output buffer + cmp_clk_ext_buf_o : BUFG + port map ( + O => ext_ref_mul_o, + I => clk_ext_mul); + + cmp_extend_ext_reset : gc_extend_pulse + generic map ( + g_width => 1000) + port map ( + clk_i => clk_sys_out, + rst_n_i => pll_sys_locked, + pulse_i => ext_ref_rst_i, + extended_o => pll_ext_rst); + + end generate gen_artix7_ext_ref_pll; + + end generate gen_artix7_default_plls; + --------------------------------------------------------------------------- + + gen_no_ext_ref_pll : if (g_with_external_clock_input = FALSE) generate + clk_10m_ext_o <= '0'; + ext_ref_mul_o <= '0'; + ext_ref_mul_locked_o <= '1'; + ext_ref_mul_stopped_o <= '1'; + end generate gen_no_ext_ref_pll; + + end generate gen_default_plls; + + -- If external PLLs are used, just copy clock inputs to outputs + gen_custom_plls : if (g_use_default_plls = FALSE) generate + + clk_62m5_sys_o <= clk_62m5_sys_i; + clk_62m5_dmtd_o <= clk_62m5_dmtd_i; + clk_125m_ref_o <= clk_125m_ref_i; + + pll_locked_o <= clk_sys_locked_i and clk_dmtd_locked_i; + clk_ref_locked_o <= clk_ref_locked_i; + + ext_ref_mul_o <= clk_125m_ext_i; + ext_ref_mul_locked_o <= clk_ext_locked_i; + ext_ref_mul_stopped_o <= clk_ext_stopped_i; + + end generate gen_custom_plls; + + -- always pass ext reference reset input to output, even when not used + clk_ext_rst_o <= ext_ref_rst_i; + + ----------------------------------------------------------------------------- + -- Transceiver PHY + ----------------------------------------------------------------------------- + + gen_phy_spartan6 : if(g_fpga_family = "spartan6") generate + + signal clk_125m_gtp_buf : std_logic; + + signal ch0_phy8_out, ch1_phy8_out : t_phy_8bits_to_wrc; + + signal ch0_sfp_txn, ch0_sfp_txp : std_logic; + signal ch1_sfp_txn, ch1_sfp_txp : std_logic; + signal ch0_sfp_rxn, ch0_sfp_rxp : std_logic; + signal ch1_sfp_rxn, ch1_sfp_rxp : std_logic; + + begin + + cmp_ibufgds_gtp : IBUFGDS + generic map ( + DIFF_TERM => TRUE, + IBUF_LOW_PWR => TRUE, + IOSTANDARD => "DEFAULT") + port map ( + O => clk_125m_gtp_buf, + I => clk_125m_gtp_p_i, + IB => clk_125m_gtp_n_i); + + + cmp_gtp : wr_gtp_phy_spartan6 + generic map ( + g_simulation => g_simulation, + g_enable_ch0 => g_gtp_enable_ch0, + g_enable_ch1 => g_gtp_enable_ch1) + port map ( + gtp_clk_i => clk_125m_gtp_buf, + ch0_ref_clk_i => clk_125m_pllref_buf, + ch0_tx_data_i => phy8_i.tx_data, + ch0_tx_k_i => phy8_i.tx_k(0), + ch0_tx_disparity_o => ch0_phy8_out.tx_disparity, + ch0_tx_enc_err_o => ch0_phy8_out.tx_enc_err, + ch0_rx_data_o => ch0_phy8_out.rx_data, + ch0_rx_rbclk_o => ch0_phy8_out.rx_clk, + ch0_rx_k_o => ch0_phy8_out.rx_k(0), + ch0_rx_enc_err_o => ch0_phy8_out.rx_enc_err, + ch0_rx_bitslide_o => ch0_phy8_out.rx_bitslide, + ch0_rst_i => phy8_i.rst, + ch0_loopen_i => phy8_i.loopen, + ch0_loopen_vec_i => phy8_i.loopen_vec, + ch0_tx_prbs_sel_i => phy8_i.tx_prbs_sel, + ch0_rdy_o => ch0_phy8_out.rdy, + ch1_ref_clk_i => clk_125m_pllref_buf, + ch1_tx_data_i => phy8_i.tx_data, + ch1_tx_k_i => phy8_i.tx_k(0), + ch1_tx_disparity_o => ch1_phy8_out.tx_disparity, + ch1_tx_enc_err_o => ch1_phy8_out.tx_enc_err, + ch1_rx_data_o => ch1_phy8_out.rx_data, + ch1_rx_rbclk_o => ch1_phy8_out.rx_clk, + ch1_rx_k_o => ch1_phy8_out.rx_k(0), + ch1_rx_enc_err_o => ch1_phy8_out.rx_enc_err, + ch1_rx_bitslide_o => ch1_phy8_out.rx_bitslide, + ch1_rst_i => phy8_i.rst, + ch1_loopen_i => phy8_i.loopen, + ch1_loopen_vec_i => phy8_i.loopen_vec, + ch1_tx_prbs_sel_i => phy8_i.tx_prbs_sel, + ch1_rdy_o => ch1_phy8_out.rdy, + pad_txn0_o => ch0_sfp_txn, + pad_txp0_o => ch0_sfp_txp, + pad_rxn0_i => ch0_sfp_rxn, + pad_rxp0_i => ch0_sfp_rxp, + pad_txn1_o => ch1_sfp_txn, + pad_txp1_o => ch1_sfp_txp, + pad_rxn1_i => ch1_sfp_rxn, + pad_rxp1_i => ch1_sfp_rxp + ); + + gen_gtp_ch0 : if (g_gtp_enable_ch0 = 1) generate + ch0_phy8_out.ref_clk <= clk_125m_pllref_buf; + ch0_phy8_out.sfp_tx_fault <= sfp_tx_fault_i; + ch0_phy8_out.sfp_los <= sfp_los_i; + phy8_o <= ch0_phy8_out; + sfp_txp_o <= ch0_sfp_txp; + sfp_txn_o <= ch0_sfp_txn; + ch0_sfp_rxp <= sfp_rxp_i; + ch0_sfp_rxn <= sfp_rxn_i; + end generate gen_gtp_ch0; + + gen_gtp_ch1 : if (g_gtp_enable_ch1 = 1) generate + ch1_phy8_out.ref_clk <= clk_125m_pllref_buf; + ch1_phy8_out.sfp_tx_fault <= sfp_tx_fault_i; + ch1_phy8_out.sfp_los <= sfp_los_i; + phy8_o <= ch1_phy8_out; + sfp_txp_o <= ch1_sfp_txp; + sfp_txn_o <= ch1_sfp_txn; + ch1_sfp_rxp <= sfp_rxp_i; + ch1_sfp_rxn <= sfp_rxn_i; + end generate gen_gtp_ch1; + + sfp_tx_disable_o <= phy8_i.sfp_tx_disable; + + phy16_o <= c_dummy_phy16_to_wrc; + + end generate gen_phy_spartan6; + + --------------------------------------------------------------------------- + -- Kintex7 PHY + --------------------------------------------------------------------------- + + gen_phy_kintex7 : if (g_fpga_family = "kintex7") generate + + signal clk_ref : std_logic; + signal clk_125m_gtx_buf : std_logic; + signal clk_ref_locked : std_logic; + + begin + + gen_ibufgds: if (g_use_ibufgds=true) generate + begin + -- Dedicated GTX clock. + cmp_gtp_dedicated_clk : IBUFDS_GTE2 + generic map( + CLKCM_CFG => true, + CLKRCV_TRST => true, + CLKSWING_CFG => "11") + port map ( + O => clk_125m_gtx_buf, + ODIV2 => open, + CEB => '0', + I => clk_125m_gtp_p_i, + IB => clk_125m_gtp_n_i); + end generate gen_ibufgds; + + gen_no_ibufgds: if (g_use_ibufgds=false) generate + begin + clk_125m_gtx_buf <= clk_125m_gtp_p_i; + end generate gen_no_ibufgds; + + + -- System PLL input clock buffer + cmp_clk_sys_buf_i : BUFG + port map ( + I => clk_125m_gtx_buf, + O => clk_125m_pllref_buf); + + cmp_gtx: wr_gtx_phy_family7 + generic map( + g_simulation => g_simulation) + port map( + clk_gtx_i => clk_125m_gtx_buf, + tx_out_clk_o => clk_ref, + tx_data_i => phy16_i.tx_data, + tx_k_i => phy16_i.tx_k, + tx_disparity_o => phy16_o.tx_disparity, + tx_enc_err_o => phy16_o.tx_enc_err, + rx_rbclk_o => phy16_o.rx_clk, + rx_data_o => phy16_o.rx_data, + rx_k_o => phy16_o.rx_k, + rx_enc_err_o => phy16_o.rx_enc_err, + rx_bitslide_o => phy16_o.rx_bitslide, + rst_i => phy16_i.rst, + loopen_i => phy16_i.loopen_vec, + tx_prbs_sel_i => phy16_i.tx_prbs_sel, + rdy_o => phy16_o.rdy, + + pad_txn_o => sfp_txn_o, + pad_txp_o => sfp_txp_o, + pad_rxn_i => sfp_rxn_i, + pad_rxp_i => sfp_rxp_i, + + tx_locked_o => clk_ref_locked); + + clk_125m_ref_o <= clk_ref; + clk_ref_locked_o <= clk_ref_locked; + phy16_o.ref_clk <= clk_ref; + phy16_o.sfp_tx_fault <= sfp_tx_fault_i; + phy16_o.sfp_los <= sfp_los_i; + sfp_tx_disable_o <= phy16_i.sfp_tx_disable; + + phy8_o <= c_dummy_phy8_to_wrc; + + end generate gen_phy_kintex7; + + --------------------------------------------------------------------------- + -- Artix7 PHY + --------------------------------------------------------------------------- + + gen_phy_artix7 : if (g_fpga_family = "artix7") generate + + signal clk_ref : std_logic; + signal clk_125m_gtp_buf : std_logic; + signal clk_ref_locked : std_logic; + + begin + + -- Dedicated GTP clock. + cmp_gtp_dedicated_clk : IBUFDS_GTE2 + generic map( + CLKCM_CFG => true, + CLKRCV_TRST => true, + CLKSWING_CFG => "11") + port map ( + O => clk_125m_gtp_buf, + ODIV2 => open, + CEB => '0', + I => clk_125m_gtp_p_i, + IB => clk_125m_gtp_n_i); + + -- System PLL input clock buffer + cmp_clk_sys_buf_i : BUFG + port map ( + I => clk_125m_gtp_buf, + O => clk_125m_pllref_buf); + + cmp_gtp: wr_gtp_phy_family7 + generic map( + g_simulation => g_simulation) + port map( + clk_gtp_i => clk_125m_gtp_buf, + tx_out_clk_o => clk_ref, + tx_data_i => phy16_i.tx_data, + tx_k_i => phy16_i.tx_k, + tx_disparity_o => phy16_o.tx_disparity, + tx_enc_err_o => phy16_o.tx_enc_err, + rx_rbclk_o => phy16_o.rx_clk, + rx_data_o => phy16_o.rx_data, + rx_k_o => phy16_o.rx_k, + rx_enc_err_o => phy16_o.rx_enc_err, + rx_bitslide_o => phy16_o.rx_bitslide, + rst_i => phy16_i.rst, + loopen_i => phy16_i.loopen_vec, + tx_prbs_sel_i => phy16_i.tx_prbs_sel, + rdy_o => phy16_o.rdy, + + pad_txn_o => sfp_txn_o, + pad_txp_o => sfp_txp_o, + pad_rxn_i => sfp_rxn_i, + pad_rxp_i => sfp_rxp_i, + + tx_locked_o => clk_ref_locked); + + clk_125m_ref_o <= clk_ref; + clk_ref_locked_o <= clk_ref_locked; + phy16_o.ref_clk <= clk_ref; + phy16_o.sfp_tx_fault <= sfp_tx_fault_i; + phy16_o.sfp_los <= sfp_los_i; + sfp_tx_disable_o <= phy16_i.sfp_tx_disable; + + phy8_o <= c_dummy_phy8_to_wrc; + + end generate gen_phy_artix7; + + --------------------------------------------------------------------------- + +end architecture rtl; diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/source.txt b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/source.txt new file mode 100644 index 000000000..52c657abc --- /dev/null +++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/source.txt @@ -0,0 +1,2 @@ +This directory is a subset of the following tag: +https://www.ohwr.org/projects/wr-cores/repository?utf8=%E2%9C%93&rev=wrpc-v4.2&branch=master&tag=wrpc-v4.2 -- cgit v1.2.3